'use strict';
game.import('mode',function(lib,game,ui,get,ai,_status){
	return {
		name:'single',
		changbanCharacter:[
			"key_rei","key_yoshino","key_noda","key_nagisa",
			"re_caocao","re_caozhang","re_diaochan","re_ganning","re_gongsunzan","re_guojia","re_huangyueying","re_lidian","re_lvbu",
			"re_simayi","sunquan","re_xiahoudun","re_xushu","yuanshu","xf_yiji","re_zhangfei","re_zhangliao","re_xuzhu",
			"re_zhaoyun","re_zhouyu","re_zhugeliang","ol_xiahouyuan","re_huangzhong","re_weiyan","dianwei","te_yanwen","re_pangde",
			"re_zhurong","re_sunjian","jiaxu","dengai","re_jiangwei","re_sunben","wangji","wangping","guanqiujian","chendao","ol_yujin",
			"re_caozhi","xin_masu","re_lingtong","xusheng","re_gaoshun","xunyou","guanzhang","madai","handang","caochong",
			"re_guohuai","guanping","liufeng","re_zhuran","xin_liru","hanhaoshihuan","guyong","zhuhuan","caoxiu","liuchen","re_zhangyi",
			"re_quancong","sunxiu","sundeng","guohuanghou","re_jikang","xuezong","qinmi","lvdai","re_zhangliang","lingcao",
			"sunru","zhuling","sp_caoren","fanchou","fuwan","sp_ganning","guanyinping","guosi","heqi","sp_jiangwei","litong",
			"re_panfeng","sp_pangde","xf_sufei","xf_tangzi","xiahouba","xujing","yuejin","sp_zhangfei","zhangji","zhangyì","dongcheng",
		],
		singlePile:[
			['spade',5,'sha'],
			['spade',7,'sha'],
			['spade',8,'sha'],
			['spade',10,'sha'],
			['heart',10,'sha'],
			['heart',11,'sha'],
			['club',4,'sha'],
			['club',5,'sha'],
			['club',6,'sha'],
			['club',8,'sha'],
			['club',9,'sha'],
			['club',10,'sha'],
			['club',11,'sha'],
			['diamond',6,'sha'],
			['diamond',9,'sha'],
			['diamond',11,'sha'],
			['heart',2,'shan'],
			['heart',5,'shan'],
			['diamond',2,'shan'],
			['diamond',3,'shan'],
			['diamond',7,'shan'],
			['diamond',8,'shan'],
			['diamond',10,'shan'],
			['diamond',11,'shan'],
			['heart',3,'tao'],
			['heart',4,'tao'],
			['heart',9,'tao'],
			['diamond',12,'tao'],
			['club',12,'bingliang'],
			['spade',3,'guohe'],
			['diamond',12,'guohe'],
			['club',3,'guohe'],
			['club',1,'juedou'],
			['spade',1,'juedou'],
			['heart',6,'lebu'],
			['spade',1,'nanman'],
			['club',7,'shuiyanqijunx'],
			['spade',4,'shunshou'],
			['spade',11,'shunshou'],
			['diamond',4,'shunshou'],
			['heart',1,'wanjian'],
			['heart',5,'wuxie'],
			['club',5,'wuxie'],
			['heart',7,'wuzhong'],
			['heart',8,'wuzhong'],
			['diamond',5,'guanshi'],
			['spade',9,'hanbing'],
			['spade',6,'qinggang'],
			['spade',12,'zhangba'],
			['diamond',1,'zhuge'],
			['spade',2,'bagua'],
			['club',2,'renwang'],
		],
		characterSingle:{
			caocao:['male','wei',4,['jianxiong'],['zhu']],
			simayi:['male','wei',3,['fankui','guicai']],
			xiahoudun:['male','wei',4,['ganglie']],
			zhangliao:['male','wei',4,['retuxi']],
			xuzhu:['male','wei',4,['luoyi','xiechan']],
			guojia:['male','wei',3,['tiandu','yiji']],
			zhenji:['female','wei',3,['luoshen','sgqingguo']],
			liubei:['male','shu',4,['sgrenwang'],['zhu']],
			guanyu:['male','shu',4,['wusheng','huwei']],
			zhangfei:['male','shu',4,['paoxiao']],
			zhugeliang:['male','shu',3,['guanxing','kongcheng']],
			zhaoyun:['male','shu',4,['longdan']],
			machao:['male','shu',4,['xiaoxi','tieji']],
			huangyueying:['female','shu',3,['jizhi','cangji']],
			sunquan:['male','wu',4,['sgzhiheng'],['zhu']],
			ganning:['male','wu',4,['qixi']],
			lvmeng:['male','wu',4,['shenju','botu']],
			huanggai:['male','wu',4,['kurou']],
			zhouyu:['male','wu',3,['yingzi','fanjian']],
			daqiao:['female','wu',3,['guose','wanrong']],
			luxun:['male','wu',3,['qianxun','lianying']],
			sunshangxiang:['female','wu',3,['xiaoji','yinli']],
			//huatuo:['male','qun',3,['qingnang','jijiu']],
			lvbu:['male','qun',4,['wushuang']],
			diaochan:['female','qun',3,['pianyi','biyue']],
			
			xiahouyuan:['male','wei',4,['shensu','suzi']],
			old_caoren:['male','wei',4,['jushou']],
			huangzhong:['male','shu',4,['liegong']],
			weiyan:['male','shu',4,['sgkuanggu']],
			xiaoqiao:['female','wu',3,['tianxiang','hongyan']],
			old_zhoutai:['male','wu',4,['gzbuqu']],
			zhangjiao:['male','qun',3,['leiji','guidao'],['zhu']],

			dianwei:['male','wei',4,['qiangxi']],
			yanwen:['male','qun',4,['shuangxiong']],
			pangde:['male','qun',4,['xiaoxi','mengjin']],

			menghuo:['male','shu',4,['manyi','zaiqi']],
			zhurong:['female','shu',4,['manyi','lieren']],
			xuhuang:['male','wei',4,['sgduanliang']],
			sunjian:['male','wu',4,['gzyinghun']],

			jiangwei:['male','shu',4,['tiaoxin']],
			
			hejin:['male','qun',4,['mouzhu','yanhuo']],
			hansui:['male','qun',4,['xiaoxi','niluan']],
			niujin:['male','wei',4,['cuorui','liewei']],
			
			jin_zhangchunhua:['female','jin',3,['huishi','qingleng']],
			jin_simayi:['male','jin',3,['smyyingshi','xiongzhi','quanbian']],
			jin_wangyuanji:['female','jin',3,['yanxi']],
			jin_simazhao:['male','jin',3,['choufa','zhaoran']],
			jin_xiahouhui:['female','jin',3,['jyishi','shiduo']],
			jin_simashi:['male','jin','3/4',['yimie','tairan']],
			zhanghuyuechen:['male','jin',4,['xijue']],
			duyu:['male','jin',4,['sanchen','zhaotao']],
		},
		startBefore:function(){
			
		},
		onreinit:function(){
			_status.mode=_status.connectMode?lib.configOL.single_mode:get.config('single_mode');
			if(_status.mode!='normal') return;
			for(var i in lib.characterSingle){
				lib.character[i]=lib.characterSingle[i];
				if(!lib.character[i][4]){
					lib.character[i][4]=[];
				}
			}
			for(var j in lib.singleTranslate) lib.translate[j]=lib.singleTranslate[j];
		},
		start:function(){
			"step 0"
			var playback=localStorage.getItem(lib.configprefix+'playback');
			if(playback){
				ui.create.me();
				ui.arena.style.display='none';
				ui.system.style.display='none';
				_status.playback=playback;
				localStorage.removeItem(lib.configprefix+'playback');
				var store=lib.db.transaction(['video'],'readwrite').objectStore('video');
				store.get(parseInt(playback)).onsuccess=function(e){
					if(e.target.result){
						game.playVideoContent(e.target.result.video);
					}
					else{
						alert('播放失败:找不到录像');
						game.reload();
					}
				}
				event.finish();
			}
			else if(!_status.connectMode){
				game.prepareArena(2);
			}
			"step 1"
			if(_status.connectMode){
				game.waitForPlayer(function(){
						lib.configOL.number=2;
				});
			}
			"step 2"
			_status.mode=_status.connectMode?lib.configOL.single_mode:get.config('single_mode');
			if(_status.mode=='normal'){
				lib.card.list=lib.singlePile.slice(0);
				game.fixedPile=true;
				game.broadcastAll(function(singleTranslate,characterSingle,jin){
					_status.mode='normal';
					for(var j in singleTranslate) lib.translate[j]=singleTranslate[j];
					_status.characterlist=[];
					for(var i in characterSingle){
						if(!jin&&characterSingle[i][1]=='jin') continue;
						lib.character[i]=characterSingle[i];
						if(!lib.character[i][4]){
							lib.character[i][4]=[];
						}
						_status.characterlist.push(i);
					}
				},lib.singleTranslate,lib.characterSingle,_status.connectMode?lib.configOL.enable_jin:get.config('enable_jin'));
			}
			else if(_status.mode=='changban'){
				_status.characterlist=[];
				for(var i=0;i<lib.changbanCharacter.length;i++){
					var name=lib.changbanCharacter[i];
					if(lib.character[name]&&!lib.filter.characterDisabled(name)) _status.characterlist.push(name);
				}
				game.broadcastAll(function(){
					_status.mode='changban';
					lib.translate.bingliang_info='目标角色判定阶段进行判定:若判定结果不为梅花,则跳过该角色的摸牌阶段。';
					lib.translate.zhuge_info='锁定技,出牌阶段,你使用杀的次数上限+3';
				});
				for(var i=0;i<lib.card.list.length;i++){
					var card=lib.card.list[i];
					if(card[2]=='muniu'||card[2]=='shandian'||card[2]=='tengjia'&&card[0]=='club'||
					card[2]=='wuxie'&&card[0]=='diamond'&&card[1]==12) lib.card.list.splice(i--,1);
				}
			}
			if(_status.connectMode){
				lib.configOL.number=2;
				game.randomMapOL();
			}
			else{
				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 3"
			if(ui.coin){
				_status.coinCoeff=get.coinCoeff([game.me.name]);
			}
			
			game.syncState();
			event.trigger('gameStart');
			
			var players=get.players(lib.sort.position);
			var info=[];
			for(var i=0;i<players.length;i++){
				info.push({
					name:players[i].name1,
					name2:players[i].name2,
					identity:players[i].identity
				});
			}
			_status.videoInited=true;
			game.addVideo('init',null,info);

			game.gameDraw(game.zhu,function(player){
				if(_status.mode=='dianjiang') return 4;
				if(_status.mode=='normal') return player==game.zhu?3:4;
				if(_status.mode=='changban') return player==game.fan?5:4;
				if(player.hasSkill('cuorui')){
					player.logSkill('cuorui');
					return 2+_status.characterChoice[player.identity].length;
				}
				return player.maxHp;
			});
			game.phaseLoop(game.zhu);
		},
		game:{
			canReplaceViewpoint:()=>true,
			addRecord:function(bool){
				if(typeof bool=='boolean'){
					var mode=_status.mode;
					var data=lib.config.gameRecord.single.data;
					if(!get.is.object(data[mode])) data[mode]={};
					var data2=data[mode]
					var identity=game.me.identity;
					if(!data2[identity]){
						data2[identity]=[0,0];
					}
					if(bool){
						data2[identity][0]++;
					}
					else{
						data2[identity][1]++;
					}
					var list=['zhu','fan'];
					var str='';
					for(var j in data){
						str+=get.translation(j+2)+':<br>';
						for(var i=0;i<list.length;i++){
							if(data[j][list[i]]){
								str+=lib.translate[list[i]+'2']+':'+data[j][list[i]][0]+'胜'+' '+data[j][list[i]][1]+'负<br>';
							}
						}
					}
					lib.config.gameRecord.single.str=str;
					game.saveConfig('gameRecord',lib.config.gameRecord);
				}
			},
			getState:function(){
				var state={};
				for(var i in lib.playerOL){
					var player=lib.playerOL[i];
					state[i]={identity:player.identity};
				}
				return state;
			},
			updateState:function(state){
				for(var i in state){
					var player=lib.playerOL[i];
					if(player){
						player.identity=state[i].identity;
					}
				}
			},
			getRoomInfo:function(uiintro){
				if(lib.configOL.single_mode=='normal') uiintro.add('<div class="text chat">晋势力武将:'+(lib.configOL.enable_jin?'开启':'关闭'));
				if(lib.configOL.bannedcards.length){
					uiintro.add('<div class="text chat">禁用卡牌:'+get.translation(lib.configOL.bannedcards));
				}
				uiintro.style.paddingBottom='8px';
			},
			getVideoName:function(){
				var str=get.translation(game.me.name);
				if(game.me.name2){
					str+='/'+get.translation(game.me.name2);
				}
				var name=[
					str,
					get.translation(_status.mode+2)+' - '+lib.translate[game.me.identity+'2']
				];
				return name;
			},
			showIdentity:function(){},
			checkResult:function(){
				game.over((game.me._trueMe||game.me).isAlive());
			},
			checkOnlineResult:function(player){
				return player.isAlive();
			},
			chooseCharacterDianjiang:function(){
				var next=game.createEvent('chooseCharacter');
				next.showConfig=true;
				next.setContent(function(){
					"step 0"
					ui.arena.classList.add('choose-character');
					lib.init.onfree();
					"step 1"
					game.me.chooseControl('先手','后手').prompt='请选择自己的行动顺序';
					"step 2"
					var map=result.control=='先手'?['zhu','fan']:['fan','zhu'];
					game.me.identity=map[0];
					game.me.next.identity=map[1];
					game.me.showIdentity();
					game.me.next.showIdentity();
					"step 3"
					event.flipassign=true;
					event.videoId=lib.status.videoId++;
					var list=[];
					for(var i in lib.character){
						if(lib.filter.characterDisabled(i)) continue;
						list.push(i);
					}
					_status.characterlist=list;
					var filter=function(name){
						return !_status.characterlist.contains(name);
					};
					var dialog=ui.create.characterDialog('heightset',filter).open();
					dialog.videoId=event.videoId;
						
					game.me.chooseButton(true).set('ai',function(button){
						return Math.random();
					}).set('dialog',event.videoId);
					"step 4"
					game.me.init(result.links[0]);
					_status.characterlist.remove(result.links[0]);
					game.addRecentCharacter(result.links[0]);
					game.me.chooseButton(true).set('ai',function(button){
						return Math.random();
					}).set('dialog',event.videoId);
					"step 5"
					game.broadcastAll('closeDialog',event.videoId);
					game.me.next.init(result.links[0]);
					_status.characterlist.remove(result.links[0]);
					game.addRecentCharacter(result.links[0]);
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);
				});
			},
			chooseCharacter:function(){
				if(_status.mode=='dianjiang'){
					game.chooseCharacterDianjiang();
					return;
				}
				var next=game.createEvent('chooseCharacter');
				next.showConfig=true;
				next.setContent(function(){
					"step 0"
					ui.arena.classList.add('choose-character');
					var num=[0,1].randomGet();
					game.players[num].identity='zhu';
					game.players[1-num].identity='fan';
					game.broadcastAll(function(p,t){
						p.enemy=t;t.enemy=p;
					},game.players[0],game.players[1]);
					for(var i=0;i<game.players.length;i++){
						game.players[i].showIdentity();
					}
					"step 1"
					_status.characterChoice={
						zhu:_status.characterlist.randomRemove(3),
						fan:_status.characterlist.randomRemove(3),
						all:_status.characterlist.randomRemove(6),
					};
					event.videoIdx=lib.status.videoId++;
					game.broadcastAll(function(id,list){
						var dialog=ui.create.dialog('选择武将',[list.all,'character'],'起始武将',[list[game.me.identity],'character']);
						dialog.videoId=id;
					},event.videoIdx,_status.characterChoice);
					"step 2"
					var next=game.fan.chooseButton(true,1);
					next.filterButton=function(button){
						return _status.event.canChoose.contains(button.link);
					};
					next.set('onfree',true);
					next.dialog=event.videoIdx;
					next.canChoose=_status.characterChoice.all;
					next.ai=function(){return Math.random()};
					"step 3"
					_status.characterChoice.fan.addArray(result.links);
					_status.characterChoice.all.removeArray(result.links);
					game.broadcastAll(function(link,choosing,first,id){
						var dialog=get.idDialog(id);
						if(dialog){
							if(choosing==game.me){
								choosing='你';
							}
							else{
								choosing='对手';
							}
							dialog.content.firstChild.innerHTML=choosing+'选择了'+get.translation(link);
							for(var i=0;i<dialog.buttons.length;i++){
								if(link.contains(dialog.buttons[i].link)){
									if(first){
										dialog.buttons[i].classList.add('selectedx');
									}
									else{
										dialog.buttons[i].classList.add('glow');
									}
								}
							}
						}
					},result.links,game.fan,true,event.videoIdx);
					var next=game.zhu.chooseButton(true,2);
					next.filterButton=function(button){
						return _status.event.canChoose.contains(button.link);
					};
					next.dialog=event.videoIdx;
					next.canChoose=_status.characterChoice.all;
					next.ai=function(){return Math.random()};
					"step 4"
					_status.characterChoice.zhu.addArray(result.links);
					_status.characterChoice.all.removeArray(result.links);
					game.broadcastAll(function(link,choosing,first,id){
						var dialog=get.idDialog(id);
						if(dialog){
							if(choosing==game.me){
								choosing='你';
							}
							else{
								choosing='对手';
							}
							dialog.content.firstChild.innerHTML=choosing+'选择了'+get.translation(link);
							for(var i=0;i<dialog.buttons.length;i++){
								if(link.contains(dialog.buttons[i].link)){
									if(first){
										dialog.buttons[i].classList.add('selectedx');
									}
									else{
										dialog.buttons[i].classList.add('glow');
									}
								}
							}
						}
					},result.links,game.zhu,false,event.videoIdx);
					var next=game.fan.chooseButton(true,2);
					next.filterButton=function(button){
						return _status.event.canChoose.contains(button.link);
					};
					next.dialog=event.videoIdx;
					next.canChoose=_status.characterChoice.all;
					next.ai=function(){return Math.random()};
					"step 5"
					_status.characterChoice.fan.addArray(result.links);
					_status.characterChoice.all.removeArray(result.links);
					game.broadcastAll(function(link,choosing,first,id){
						var dialog=get.idDialog(id);
						if(dialog){
							if(choosing==game.me){
								choosing='你';
							}
							else{
								choosing='对手';
							}
							dialog.content.firstChild.innerHTML=choosing+'选择了'+get.translation(link);
							for(var i=0;i<dialog.buttons.length;i++){
								if(link.contains(dialog.buttons[i].link)){
									if(first){
										dialog.buttons[i].classList.add('selectedx');
									}
									else{
										dialog.buttons[i].classList.add('glow');
									}
								}
							}
						}
					},result.links,game.fan,true,event.videoIdx);
					var next=game.zhu.chooseButton(true);
					next.filterButton=function(button){
						return _status.event.canChoose.contains(button.link);
					};
					next.dialog=event.videoIdx;
					next.canChoose=_status.characterChoice.all;
					next.ai=function(){return Math.random()};
					"step 6"
					_status.characterChoice.zhu.addArray(result.links);
					_status.characterChoice.all.removeArray(result.links);
					game.broadcastAll(function(link,choosing,first,id){
						var dialog=get.idDialog(id);
						if(dialog){
							if(choosing==game.me){
								choosing='你';
							}
							else{
								choosing='对手';
							}
							dialog.content.firstChild.innerHTML=choosing+'选择了'+get.translation(link);
							for(var i=0;i<dialog.buttons.length;i++){
								if(link.contains(dialog.buttons[i].link)){
									if(first){
										dialog.buttons[i].classList.add('selectedx');
									}
									else{
										dialog.buttons[i].classList.add('glow');
									}
								}
							}
						}
					},result.links,game.zhu,false,event.videoIdx);
					"step 7"
					game.broadcastAll('closeDialog',event.videoIdx);
					"step 8"
					game.me.chooseButton(true,['请选择出场武将',[_status.characterChoice[game.me.identity],'character']],_status.mode=='changban'?2:1);
					"step 9"
					game.me.init(result.links[0],_status.mode=='changban'?result.links[1]:null);
					_status.characterChoice[game.me.identity].removeArray(result.links);
					var list=_status.characterChoice[game.me.enemy.identity].randomRemove(_status.mode=='changban'?2:1);
					game.me.enemy.init(list[0],list[1]);
					"step 10"
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);
				});
			},
			chooseCharacterDianjiangOL:function(){
				var next=game.createEvent('chooseCharacter');
				next.showConfig=true;
				next.setContent(function(){
					"step 0"
					var map=Math.random()<0.5?['zhu','fan']:['fan','zhu'];
					game.me.identity=map[0];
					game.me.next.identity=map[1];
					game.me.showIdentity();
					game.me.next.showIdentity();
					"step 1"
					//event.flipassign=true;
					event.videoId=lib.status.videoId++;
					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(lib.character[j]) libCharacter[j]=pack[j];
						}
					}
					for(i in libCharacter){
						if(lib.filter.characterDisabled(i,libCharacter)) continue;
						list.push(i);
					}
					game.broadcastAll(function(list,id){
						_status.characterlist=list;
						var filter=function(name){
							return !_status.characterlist.contains(name);
						};
						var dialog=ui.create.characterDialog('heightset',filter).open();
						dialog.videoId=id;
						ui.arena.classList.add('choose-character');
					},list,event.videoId);
					game.zhu.chooseButton(true).set('ai',function(button){
						return Math.random();
					}).set('dialog',event.videoId);
					"step 2"
					game.broadcastAll(function(player,character,id){
						player.init(character);
						_status.characterlist.remove(character);
						if(player==game.me) game.addRecentCharacter(character);
					},game.zhu,result.links[0]);
					game.fan.chooseButton(true).set('ai',function(button){
						return Math.random();
					}).set('dialog',event.videoId);
					"step 3"
					game.broadcastAll('closeDialog',event.videoId);
					game.broadcastAll(function(player,character,id){
						var dialog=get.idDialog(id);
						if(dialog){
							dialog.close();
						}
						player.init(character);
						_status.characterlist.remove(character);
						if(player==game.me) game.addRecentCharacter(character);
						setTimeout(function(){
							ui.arena.classList.remove('choose-character');
						},500);
					},game.fan,result.links[0],event.videoId);
				});
			},
			chooseCharacterOL:function(){
				if(_status.mode=='dianjiang'){
					game.chooseCharacterDianjiangOL();
					return;
				}
				var next=game.createEvent('chooseCharacter');
				next.setContent(function(){
					"step 0"
					ui.arena.classList.add('choose-character');
					var num=[0,1].randomGet();
					game.players[num].identity='zhu';
					game.players[1-num].identity='fan';
					game.broadcastAll(function(p,t){
						p.enemy=t;t.enemy=p;
					},game.players[0],game.players[1]);
					for(var i=0;i<game.players.length;i++){
						game.players[i].showIdentity();
					}
					"step 1"
					_status.characterChoice={
						zhu:_status.characterlist.randomRemove(3),
						fan:_status.characterlist.randomRemove(3),
						all:_status.characterlist.randomRemove(6),
					};
					event.videoIdx=lib.status.videoId++;
					game.broadcastAll(function(id,list){
						var dialog=ui.create.dialog(game.me.identity=='fan'?'选择武将':'请等待对手选择武将',[list.all,'character'],'起始武将',[list[game.me.identity],'character']);
						dialog.videoId=id;
					},event.videoIdx,_status.characterChoice);
					"step 2"
					var next=game.fan.chooseButton(true,1);
					next.set('filterButton',function(button){
						return _status.event.canChoose.contains(button.link);
					});
					next.set('dialog',event.videoIdx);
					next.set('canChoose',_status.characterChoice.all);
					next.ai=function(){return Math.random()};
					"step 3"
					_status.characterChoice.fan.addArray(result.links);
					_status.characterChoice.all.removeArray(result.links);
					game.broadcastAll(function(link,choosing,first,id){
						var dialog=get.idDialog(id);
						if(dialog){
							if(choosing==game.me){
								choosing='你';
							}
							else{
								choosing='对手';
							}
							dialog.content.firstChild.innerHTML=choosing+'选择了'+get.translation(link);
							for(var i=0;i<dialog.buttons.length;i++){
								if(link.contains(dialog.buttons[i].link)){
									if(first){
										dialog.buttons[i].classList.add('selectedx');
									}
									else{
										dialog.buttons[i].classList.add('glow');
									}
								}
							}
						}
					},result.links,game.fan,true,event.videoIdx);
					var next=game.zhu.chooseButton(true,2);
					next.set('filterButton',function(button){
						return _status.event.canChoose.contains(button.link);
					});
					next.set('dialog',event.videoIdx);
					next.set('canChoose',_status.characterChoice.all);
					next.ai=function(){return Math.random()};
					"step 4"
					_status.characterChoice.zhu.addArray(result.links);
					_status.characterChoice.all.removeArray(result.links);
					game.broadcastAll(function(link,choosing,first,id){
						var dialog=get.idDialog(id);
						if(dialog){
							if(choosing==game.me){
								choosing='你';
							}
							else{
								choosing='对手';
							}
							dialog.content.firstChild.innerHTML=choosing+'选择了'+get.translation(link);
							for(var i=0;i<dialog.buttons.length;i++){
								if(link.contains(dialog.buttons[i].link)){
									if(first){
										dialog.buttons[i].classList.add('selectedx');
									}
									else{
										dialog.buttons[i].classList.add('glow');
									}
								}
							}
						}
					},result.links,game.zhu,false,event.videoIdx);
					var next=game.fan.chooseButton(true,2);
					next.set('filterButton',function(button){
						return _status.event.canChoose.contains(button.link);
					});
					next.set('dialog',event.videoIdx);
					next.set('canChoose',_status.characterChoice.all);
					next.ai=function(){return Math.random()};
					"step 5"
					_status.characterChoice.fan.addArray(result.links);
					_status.characterChoice.all.removeArray(result.links);
					game.broadcastAll(function(link,choosing,first,id){
						var dialog=get.idDialog(id);
						if(dialog){
							if(choosing==game.me){
								choosing='你';
							}
							else{
								choosing='对手';
							}
							dialog.content.firstChild.innerHTML=choosing+'选择了'+get.translation(link);
							for(var i=0;i<dialog.buttons.length;i++){
								if(link.contains(dialog.buttons[i].link)){
									if(first){
										dialog.buttons[i].classList.add('selectedx');
									}
									else{
										dialog.buttons[i].classList.add('glow');
									}
								}
							}
						}
					},result.links,game.fan,true,event.videoIdx);
					var next=game.zhu.chooseButton(true);
					next.set('filterButton',function(button){
						return _status.event.canChoose.contains(button.link);
					});
					next.set('dialog',event.videoIdx);
					next.set('canChoose',_status.characterChoice.all);
					next.ai=function(){return Math.random()};
					"step 6"
					_status.characterChoice.zhu.addArray(result.links);
					_status.characterChoice.all.removeArray(result.links);
					game.broadcastAll(function(link,choosing,first,id){
						var dialog=get.idDialog(id);
						if(dialog){
							if(choosing==game.me){
								choosing='你';
							}
							else{
								choosing='对手';
							}
							dialog.content.firstChild.innerHTML=choosing+'选择了'+get.translation(link);
							for(var i=0;i<dialog.buttons.length;i++){
								if(link.contains(dialog.buttons[i].link)){
									if(first){
										dialog.buttons[i].classList.add('selectedx');
									}
									else{
										dialog.buttons[i].classList.add('glow');
									}
								}
							}
						}
					},result.links,game.zhu,false,event.videoIdx);
					"step 7"
					game.broadcastAll('closeDialog',event.videoIdx);
					"step 8"
					var num=_status.mode=='changban'?2:1;
					var list=[
					[game.zhu,num,true,['选择出场角色',[_status.characterChoice.zhu,'character']]],
					[game.fan,num,true,['选择出场角色',[_status.characterChoice.fan,'character']]]
					];
					game.me.chooseButtonOL(list,function(player,result){
						if(game.online||player==game.me) player.init(result.links[0],result.links[1]);
					});
					"step 9"
					for(var i in result){
						var current=lib.playerOL[i];
						if(result[i]=='ai'){
							result[i]=_status.characterChoice[current.identity].randomGets(_status.mode=='changban'?2:1);
						}
						else{
							result[i]=result[i].links;
						}
						_status.characterChoice[current.identity].removeArray(result[i]);
						if(!current.name){
							current.init(result[i][0],result[i][1]);
						}
					}
					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);
				});
			},
		},
		element:{
			player:{
				dieAfter:function(){
					if(_status.mode!='normal'||_status.characterChoice[this.identity].length<=3) game.checkResult();
				},
				dieAfter2:function(){
					if(_status.mode!='normal') return;
					var next=game.createEvent('replacePlayerSingle',false,_status.event.getParent());
					next.player=this;
					next.forceDie=true;
					next.setContent(function(){
						"step 0"
						game.delay();
						"step 1"
						player.chooseButton(true,['请选择一名出场武将',[_status.characterChoice[player.identity].slice(0),'character']]).set('forceDie',true);
						"step 2"
						var source=player;
						var name=result.links[0];
					var color=source.node.identity.dataset.color;

					game.broadcastAll(function(source,name,color){
						source.revive(null,false);
						source.uninit();
						source.init(name);
						source.node.identity.dataset.color=color;
					},source,name,color);
					game.log(source,'出场');

					var num=_status.mode == 'normal' ? 4 : source.maxHp;
					if(player.hasSkill('cuorui')){
					player.logSkill('cuorui');
					num=2+_status.characterChoice[player.identity].length;
				}
					source.draw(num);
					var evt=event.getParent('dying');
					if(evt&&evt.parent) evt.parent.untrigger(false,source);
					game.addVideo('reinit',source,[name,color]);
					game.triggerEnter(source);
					_status.characterChoice[player.identity].remove(name);
					});
				},
				logAi:function(targets,card){},
				showIdentity:function(){
					game.broadcastAll(function(player,identity){
						player.identity=identity;
						game[identity]=player;
						player.side=identity=='zhu';
						player.node.identity.classList.remove('guessing');
						player.identityShown=true;
						player.ai.shown=1;
						player.setIdentity();
						if(player.identity=='zhu'){
							player.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;
						}
					},this,this.identity);
				}
			}
		},
		get:{
			attitude:function(from,to){
				if(from.identity==to.identity) return 10;
				return -10;
			},
		},
		skill:{
			manyi:{
				audio:2,
				trigger:{target:'useCardToBefore'},
				forced:true,
				filter:function(event,player){
					return event.card.name=='nanman';
				},
				content:function(){
					trigger.cancel();
				},
				ai:{
					effect:{
						target:function(card){
							if(card.name=='nanman') return 'zerotarget';
						},
					},
				},
				group:'manyi2',
			},
			manyi2:{
				trigger:{
					player:'enterGame',
					global:'gameDrawAfter',
				},
				direct:true,
				content:function(){
					player.chooseUseTarget('nanman',get.prompt('manyi'),'视为使用一张【南蛮入侵】').logSkill='manyi';
				},
			},
			wanrong:{
				audio:2,
				trigger:{target:'useCardToTargeted'},
				frequent:true,
				filter:function(event,player){
					return event.card.name=='sha';
				},
				content:function(){
					player.draw();
				},
			},
			sgzhiheng:{
				audio:'zhiheng',
				inherit:'zhiheng',
				selectCard:[1,2],
				prompt:'弃置至多两张牌并摸等量的牌',
			},
			xiechan:{
				audio:2,
				limited:true,
				enable:'phaseUse',
				skillAnimation:true,
				animationColor:'water',
				filterTarget:function(card,player,target){
					return target!=player&&player.canCompare(target);
				},
				content:function(){
					'step 0'
					player.awakenSkill('xiechan');
					player.chooseToCompare(target);
					'step 1'
					if(result.bool) player.useCard({name:'juedou'},target,'noai');
					else target.useCard({name:'juedou'},player,'noai');
				},
				ai:{
					order:1,
					result:{
						target:function(player,target){
							if(player.countCards('h',function(card){
								return get.value(card)<=5&&get.number(card)>=12;
							})&&get.effect(target,{name:'juedou'},player,player)>0) return -1;
							return 0;
						},
					},
				},
			},
			huwei:{
				audio:2,
				trigger:{
					player:'enterGame',
					global:'gameDrawAfter',
				},
				direct:true,
				content:function(){
					player.chooseUseTarget('shuiyanqijunx',get.prompt('huwei'),'视为使用一张【水淹七军】').logSkill='huwei';
				},
			},
			sgkuanggu:{
				audio:'kuanggu',
				trigger:{source:'damageSource'},
				frequent:true,
				filter:function(event,player){
					return player.isDamaged();
				},
				content:function(){
					'step 0'
					player.judge(function(result){
						return get.color(result)=='black'?2:-2;
					});
					'step 1'
					if(result.bool==true) player.recover();
				},
			},
			suzi:{
				inherit:'xingshang',
			},
			cangji:{
				trigger:{player:'die'},
				filter:function(event,player){
					return player.countCards('e')>0;
				},
				forceDie:true,
				skillAnimation:true,
				animationColor:'orange',
				content:function(){
					var cards=player.getCards('e');
					player.cangji_yozuru=cards;
					player.lose(cards,ui.special);
					player.addSkill('cangji_yozuru');
				},
				subSkill:{
					yozuru:{
						sub:true,
						charlotte:true,
						superCharlotte:true,
						trigger:{player:'enterGame'},
						forced:true,
						popup:false,
						//onremove:true,
						content:function(){
							var cards=player.cangji_yozuru.slice(0);
							for(var i=0;i<cards.length;i++){
								player.equip(cards[i]);
							}
							player.removeSkill('cangji_yozuru');
							delete player.cangji_yozuru;
						},
					},
				},
			},
			sgrenwang:{
				audio:2,
				trigger:{target:'useCardToTargeted'},
				direct:true,
				filter:function(event,player){
					return event.player!=player&&event.player.isPhaseUsing()&&(event.card.name=='sha'||get.type(event.card)=='trick');
				},
				content:function(){
					if(!player.hasSkill('sgrenwang_one')) player.addTempSkill('sgrenwang_one','phaseUseEnd');
					else if(trigger.player.countDiscardableCards(player,'he')){
						player.discardPlayerCard(trigger.player,'he',get.prompt('sgrenwang')).logSkill=['sgrenwang',trigger.player];
					}
				},
			},
			sgrenwang_one:{},
			sgduanliang:{
				group:'sgduanliang_gdm',
				audio:'duanliang1',
				enable:'chooseToUse',
				filterCard:function(card){
					if(get.type(card)!='basic'&&get.type(card)!='equip') return false;
					return get.color(card)=='black';
				},
				filter:function(event,player){
					return player.hasSkill('sgduanliang_sss')&&player.countCards('he',{type:['basic','equip'],color:'black'})
				},
				position:'he',
				viewAs:{name:'bingliang'},
				prompt:'将一黑色的基本牌或装备牌当兵粮寸断使用',
				check:function(card){return 6-get.value(card)},
				ai:{
					order:9
				},
				subSkill:{
					gdm:{
						trigger:{player:'useCardToPlayered'},
						forced:true,
						silent:true,
						popup:false,
						content:function(){
							if(trigger.target!=player) player.addTempSkill('sgduanliang_sss');
						},
					},
					sss:{},
				},
			},
			sgqingguo:{
				audio:'qingguo',
				enable:['chooseToRespond','chooseToUse'],
				filterCard:true,
				viewAs:{name:'shan'},
				viewAsFilter:function(player){
					if(!player.countCards('e')) return false;
				},
				prompt:'将一张装备区中的牌当闪使用或打出',
				position:'e',
				check:function(){return 1},
				ai:{
					order:0.5,
					respondShan:true,
					skillTagFilter:function(player){
						if(!player.countCards('e')) return false;
					},
					effect:{
						target:function(card,player,target,current){
							if(target.countCards('e')&&get.tag(card,'respondShan')&&current<0) return 0.6
						}
					}
				}
			},
			pianyi:{
				audio:2,
				trigger:{player:'enterGame'},
				forced:true,
				filter:function(event,player){
					return event.getParent('phase').player==player.enemy;
				},
				content:function(){
					var evt=_status.event.getParent('phase');
					if(evt){
						game.log(player,'结束了',evt.player,'的回合');
						game.resetSkills();
						_status.event=evt;
						_status.event.finish();
						_status.event.untrigger(true);
					}
				},
			},
			yinli:{
				audio:2,
				trigger:{global:'loseEnd'},
				filter:function(event,player){
					if(event.player==player||event.player!=_status.currentPhase||event.getParent().name=='useCard') return false;
					for(var i=0;i<event.cards.length;i++){
						if(get.type(event.cards[i])=='equip'&&get.position(event.cards[i])=='d') return true;
					}
					return false;
				},
				frequent:true,
				content:function(){
					var list=[];
					for(var i=0;i<trigger.cards.length;i++){
						if(get.type(trigger.cards[i])=='equip'&&get.position(trigger.cards[i])=='d') list.push(trigger.cards[i]);
					}
					if(list.length) player.gain(list,'gain2');
				},
			},
			shenju:{
				audio:2,
				mod:{
					maxHandcard:function(player,num){
						if(player.enemy&&player.enemy.hp) return num+player.enemy.hp;
					}
				},
			},
			
			_changeHandcard:{
				trigger:{global:'gameDrawAfter'},
				silent:true,
				popup:false,
				filter:function(event,player){
					return _status.mode=='changban'&&player.maxHp<=3;
				},
				content:function(){
					'step 0'
					player.chooseBool('是否更换手牌?').ai=function(){
						var hs=player.getCards('h');
						return get.value(hs,'raw')<6*hs;
					};
					'step 1'
					if(result.bool){
						var hs=player.getCards('h');
						player.lose(hs,ui.special);
						event.hs=hs;
					}
					else event.finish();
					'step 2'
					var hs=event.hs;
					player.draw(hs.length,'nodelay');
					for(var i=0;i<hs.length;i++){
						hs[i].fix();
						ui.cardPile.insertBefore(hs[i],ui.cardPile.childNodes[get.rand(ui.cardPile.childElementCount)]);
					}
				},
			},
		},
		singleTranslate:{
			xiahouyuan:'夏侯渊',
			huangzhong:'黄忠',
			weiyan:'魏延',
			xiaoqiao:'小乔',
			xuhuang:'徐晃',
			pangde:'庞德',
			zhangjiao:'张角',
			old_caoren:'曹仁',
			old_zhoutai:'周泰',
			shuiyanqijunx_info:'出牌阶段,对一名其他角色使用。目标角色选择一项:1、弃置装备区里的所有牌;2、受到你造成的1点伤害。',
			guohe_info:'出牌阶段,对有牌的一名其他角色使用。你选择一项:①弃置其装备区里的一张牌。②观看其手牌并弃置其中的一张。',
			shunshou_info:'出牌阶段,对距离为1且有牌的一名其他角色使用。你获得其的一张牌。',
		},
		translate:{
			zhu:"先",
			fan:"后",
			zhu2:"先手",
			fan2:"后手",
			normal2:'新1v1',
			changban2:'血战长坂坡',
			dianjiang2:'点将单挑',
			
			manyi:'蛮裔',
			manyi_info:'锁定技,【南蛮入侵】对你无效。当你登场时,你可以视为使用一张【南蛮入侵】。',
			wanrong:'婉容',
			wanrong_info:'当你成为【杀】的目标后,你可以摸一张牌。',
			sgzhiheng:'制衡',
			sgzhiheng_info:'出牌阶段限一次,你可以弃置至多两张牌,然后摸等量的牌。',
			xiechan:'挟缠',
			xiechan_info:'限定技,出牌阶段,你可以和对手拼点。若你赢/没赢,你/其视为对其/你使用一张【决斗】。',
			huwei:'虎威',
			huwei_info:'当你登场时,你可以视为使用一张【水淹七军】。',
			sgkuanggu:'狂骨',
			sgkuanggu_info:'当你造成伤害后,若你已受伤,你可以进行判定:若结果为黑色,你回复1点体力。',
			suzi:'肃资',
			cangji:'藏机',
			cangji_info:'当你死亡时,你可以将装备区内的所有牌移动到游戏外。若如此做,你的下一名角色登场时,你将这些牌置入你的装备区。',
			sgrenwang:'仁望',
			sgrenwang_info:'当你于一名其他角色的出牌阶段内成为该角色使用的【杀】或普通锦囊牌的目标后,若此牌不是其本阶段内对你使用的第一张【杀】或普通锦囊牌,则你可以弃置该角色的一张牌。',
			sgduanliang:'断粮',
			sgduanliang_info:'出牌阶段,若你本回合内使用牌指定过其他角色为目标,则你可以将一张黑色基本牌或装备牌当做【兵粮寸断】使用。',
			sgqingguo:'倾国',
			sgqingguo_info:'你可以将一张装备区内的牌当做【闪】使用或打出。',
			pianyi:'翩仪',
			pianyi_info:'锁定技,当你于对手的回合内登场时,你结束此回合。',
			yinli:'姻礼',
			yinli_info:'其他角色的装备牌于其回合内进入弃牌堆后,你可以获得之。',
			shenju:'慎拒',
			shenju_info:'锁定技,你的手牌上限+X(X为你对手的体力值)。',
		},
		help:{
		'血战长坂':'<div style="margin:10px">游戏规则</div><ul style="margin-top:0"><li>选将阶段<br>双方在游戏开始时由系统随机分配身份。分配到先手身份的玩家优先出牌,分配到后手身份的玩家优先选将。<br>双方各自随机获得3名暗置武将,同时从将池中随机选出6名明置武将,由后手玩家开始,按照一次1张-2张-2张-1张的顺序,轮流选择获得明置武将。之后双方各从自己的6名武将中选择2名分别作为主将和副将进行游戏。<li>胜利条件<br>对方死亡。'+
			'<li>双将规则<br>双将主将决定角色的性别和势力,体力上限为主副将体力上限的平均值,向下取整。体力上限为3的角色可在游戏开始后更换一次起始手牌。<li>牌堆<br>牌堆中移除【木牛流马】【闪电】,♣花色的【藤甲】和【无懈可击 ♦️Q】️</ul>',
		}
	};
});