'use strict';
game.import('mode',function(lib,game,ui,get,ai,_status){
	return {
		name:'doudizhu',
		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(3);
			}
			"step 1"
			event.replacePile=function(){
				var map={
					shuiyanqijunx:'shuiyanqijuny',
					bingliang:'binglinchengxia',
					fangtian:'toushiche',
					wutiesuolian:'toushiche',
				};
				for(var i=0;i<lib.card.list.length;i++){
					var name=lib.card.list[i][2];
					if(map[name]){
						lib.card.list[i][2]=map[name];
						lib.card.list[i][4]=null;
						lib.card.list[i]._replaced=true;
					}
					else if(name=='lebu'){
						switch(lib.card.list[i][0]){
							case 'spade': lib.card.list[i][2]='shuiyanqijuny';break;
							case 'club': lib.card.list[i][2]='luojingxiashi';break;
							default: lib.card.list[i][2]='baiyidujiang';break;
						}
						lib.card.list[i]._replaced=true;
					}
				}
			}
			_status.mode=get.config('doudizhu_mode');
			if(_status.connectMode){
				_status.mode=lib.configOL.doudizhu_mode;
				game.waitForPlayer(function(){
						lib.configOL.number=3;
				});
			}
			else if(_status.mode=='binglin'){
				event.replacePile();
			}
			else if(_status.mode=='online'){
				lib.card.list=lib.online_cardPile.slice(0);
				lib.inpile.addArray(['nanman','wanjian','taoyuan','wugu']);
				game.fixedPile=true;
			}
			"step 2"
			if(_status.connectMode){
				if(_status.mode=='online'){
					lib.card.list=lib.online_cardPile.slice(0);
					lib.inpile.addArray(['nanman','wanjian','taoyuan','wugu']);
					game.fixedPile=true;
				}
				else if(_status.mode=='binglin') event.replacePile();
				if(lib.configOL.number<3){
					lib.configOL.number=3;
				}
				game.randomMapOL();
			}
			else{
				for(var i=0;i<game.players.length;i++){
					game.players[i].getId();
				}
				game.chooseCharacter();
			}
			"step 3"
			if(ui.coin){
				_status.coinCoeff=get.coinCoeff([game.me.name]);
			}
			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);
			switch(_status.mode){
				case 'online':
					game.addGlobalSkill('online_juzhong');
					game.addGlobalSkill('online_zhadan_button');
					game.addGlobalSkill('online_zhadan');
					game.addGlobalSkill('online_aozhan');
					game.addGlobalSkill('online_gongshoujintui');
					break;
				case 'binglin':
					game.addGlobalSkill('binglin_bingjin');
					break;
				default:
					game.zhu.addSkill('feiyang');
					game.zhu.addSkill('bahu');
			}
			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);
			if(_status.mode=='kaihei') game.addGlobalSkill('kaihei');

			var next=game.gameDraw(game.zhu||_status.firstAct||game.me);
			if(_status.mode=='online'){
				game.zhu.$equip(game.createCard('diqi','club',13));
				next.num=function(player){
					var num=4;
					if(player==game.zhu){
						if(lib.character[player.name1]&&get.infoHp(lib.character[player.name1][2])>3) num++;
						if(lib.character[player.name2]&&get.infoHp(lib.character[player.name2][2])>3) num++;
					}
					return num;
				};
			}
			else if(_status.mode=='binglin'){
				next.num=function(player){
					return (player==game.zhu?5:4);
				};
			}
			if(_status.mode!='online'&&_status.connectMode&&lib.configOL.change_card) game.replaceHandcards(game.players.slice(0));
			game.phaseLoop(game.zhu||_status.firstAct||game.me);
			game.zhu.showGiveup();
		},
		game:{
			recommendDizhu:[
				're_guojia','re_huanggai','re_lvbu','re_guanyu','re_sunquan','re_xusheng','re_wuyi','re_sunben',
				'xuyou','zhangchunhua','caochong','zhangsong','zhongyao','wangyi',
				'caochun','maliang','sp_diaochan','quyi','sp_zhaoyun','shamoke',
				'lijue','liuzan','wenyang','shen_lvmeng','shen_ganning',
				'jiakui','wangyuanji','lingcao','miheng',
				'sp_key_yuri','key_hinata','key_rin','key_kyousuke',
				'ns_chendao','jiakui','haozhao',
			],
			addRecord:function(bool){
				if(typeof bool=='boolean'){
					var data=lib.config.gameRecord.doudizhu.data;
					var identity=game.me.identity;
					if(!data[identity]){
						data[identity]=[0,0];
					}
					if(bool){
						data[identity][0]++;
					}
					else{
						data[identity][1]++;
					}
					var list=['zhu','fan'];
					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.doudizhu.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;
					}
				}
			},
			updateRoundNumber:function(){
				if(_status.mode=='online'){
					game.broadcastAll(function(num1,num2,top,bonusNum){
						if(ui.cardPileNumber){
							var str=num1+'轮 公共牌堆: '+num2;
							if(game.me&&game.me.storage.doudizhu_cardPile&&game.me.storage.doudizhu_cardPile.length) str+=(' 个人牌堆: '+game.me.storage.doudizhu_cardPile.length);
							if(bonusNum) str+=('<br>本场叫价: '+bonusNum*100);
							ui.cardPileNumber.innerHTML=str;
						}
						_status.pileTop=top;
					},game.roundNumber,ui.cardPile.childNodes.length,ui.cardPile.firstChild,game.bonusNum);
					return;
				}
				game.broadcastAll(function(num1,num2,top){
					if(ui.cardPileNumber) ui.cardPileNumber.innerHTML=num1+'轮 剩余牌: '+num2;
					_status.pileTop=top;
				},game.roundNumber,ui.cardPile.childNodes.length,ui.cardPile.firstChild);
			},
			getRoomInfo:function(uiintro){
				uiintro.add('<div class="text chat">双将模式:'+(lib.configOL.double_character?'开启':'关闭'));
				// 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){
					uiintro.add('<div class="text chat">禁用武将:'+get.translation(lib.configOL.banned));
				}
				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 namex;
				switch(_status.mode){
					case 'normal':namex='休闲斗地主';break;
					case 'kaihei':namex='开黑斗地主';break;
					case 'huanle':namex='欢乐斗地主';break;
					case 'binglin':namex='兵临城下';break;
					case 'online':namex='智斗三国';break;
				}
				var name=[
					str,
					namex+' - '+lib.translate[game.me.identity+'2']
				];
				return name;
			},
			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].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(game.zhu.isAlive()){
					if(_status.mode!='online'&&(_status.mode!='binglin'||game.roundNumber<3)&&game.players.length>1) return;
					if(me==game.zhu){
						game.over(true);
					}
					else{
						game.over(false);
					}
				}
				else {
					if(me==game.zhu){
						game.over(false);
					}
					else{
						game.over(true);
					}
				}
			},
			checkOnlineResult:function(player){
				if(game.zhu.isAlive()){
					return player.identity=='zhu';
				}
				else return player.identity=='fan';
			},
			chooseCharacterZhidou:function(){
				var next=game.createEvent('chooseCharacter',false);
				next.setContent(function(){
					"step 0"
					game.no_continue_game=true;
					lib.init.onfree();
					"step 1"
					ui.arena.classList.add('choose-character');
					var i;
					var groups=[];
					event.list=[];
					event.map={};
					var chara=(get.config('character_online')||lib.characterOnline);
					for(i in chara){
						var list=chara[i];
						for(var j=0;j<list.length;j++){
							if(!lib.character[list[j]]||(i=='key'&&lib.filter.characterDisabled(list[j]))) list.splice(j--,1);
						}
						if(list.length>=3){
							groups.push(i);
							event.list.addArray(list);
						}
					}
					event.list.randomSort();
					_status.characterlist=event.list.slice(0);
					event.controls=['不叫地主','一倍','两倍','三倍'];
					for(var player of game.players){
						var id=player.playerid;
						player._group=groups.randomRemove(1)[0];
						event.map[id]=chara[player._group].randomGets(4);
						player.storage.doudizhu_cardPile=get.cards(20).sort(function(a,b){
							if(a.name!=b.name) return lib.sort.card(a.name,b.name);
							else if(a.suit!=b.suit) return lib.suit.indexOf(a)-lib.suit.indexOf(b);
							else return a.number-b.number;
						});
					}
					event.dialog=ui.create.dialog('你的选将框与底牌',[event.map[game.me.playerid],'character'],game.me.storage.doudizhu_cardPile);
					event.start=game.players.randomGet();
					event.current=event.start;
					game.delay(7);
					"step 2"
					event.current.classList.add('glow_phase');
					if(event.current==game.me) event.dialog.content.firstChild.innerHTML='是否叫地主?';
					else{
						event.dialog.content.firstChild.innerHTML='请等待其他玩家叫地主';
						game.delay(2);
					}
					event.current.chooseControl(event.controls).set('ai',function(){
						return _status.event.getParent().controls.randomGet();
					});
					"step 3"
					event.current.classList.remove('glow_phase');
					event.current._control=result.control;
					event.current.chat(result.control);
					if(result.control=='三倍'){
						game.bonusNum=3;
						game.zhu=event.current;
						return;
					}
					else if(result.control!='不叫地主'){
						event.controls.splice(1,event.controls.indexOf(result.control));
						event.tempDizhu=event.current;
						if(result.control=='二倍') game.bonusNum=2;
					}
					event.current=event.current.next;
					if(event.current==event.start&&(event.start==event.tempDizhu||event.start._control=='不叫地主')){
						game.zhu=event.tempDizhu||event.start.previous;
					}
					else if(event.current==event.start.next&&event.current._control){
						game.zhu=event.tempDizhu;
					}
					else event.goto(2);
					if(event.current==event.start.previous&&!event.tempDizhu) event.controls.remove('不叫地主');
					"step 4"
					game.updateRoundNumber();
					for(var player of game.players){
						player.identity=player==game.zhu?'zhu':'fan';
						player.showIdentity();
					}
					event.dialog.content.firstChild.innerHTML='请选择'+get.cnNumber(game.me==game.zhu?2:1)+'张武将牌';
					game.me.chooseButton(event.dialog,true,game.me==game.zhu?2:1).set('filterButton',function(button){
						return typeof button.link=='string';
					});
					"step 5"
					game.me.init(result.links[0],result.links[1]);
					for(var player of game.players){
						if(player!=game.me){
							if(player==game.zhu){
								var list=event.map[player.playerid].randomGets(2);
								player.init(list[0],list[1]);
							}
							else player.init(event.map[player.playerid].randomGet());
						}
						player.markSkill('doudizhu_cardPile');
					}
					game.zhu.hp=4;
					game.zhu.maxHp=4;
					game.zhu.update();
					for(var i=0;i<game.players.length;i++){
						_status.characterlist.remove(game.players[i].name1);
						_status.characterlist.remove(game.players[i].name2);
					}
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);
				});
			},
			chooseCharacterBinglin:function(){
				var next=game.createEvent('chooseCharacter',false);
				next.setContent(function(){
					"step 0"
					game.no_continue_game=true;
					lib.init.onfree();
					"step 1"
					ui.arena.classList.add('choose-character');
					game.zhuSkill='zhuSkill_'+['xiangyang','jiangling','fancheng'].randomGet();
					var i;
					event.list=[];
					event.map={};
					for(i in lib.character){
						if(lib.filter.characterDisabled(i)) continue;
						event.list.push(i);
					}
					event.list.randomSort();
					_status.characterlist=event.list.slice(0);
					for(var player of game.players){
						event.map[player.playerid]=event.list.randomRemove(4);
					}
					event.controls=['不叫地主','一倍','两倍','三倍'];
					event.dialog=ui.create.dialog('本局城池:'+get.translation(game.zhuSkill),[event.map[game.me.playerid],'character']);
					event.start=game.players.randomGet();
					event.current=event.start;
					game.delay(8);
					"step 2"
					event.current.classList.add('glow_phase');
					if(event.current==game.me) event.dialog.content.firstChild.innerHTML='是否叫地主?';
					else{
						event.dialog.content.firstChild.innerHTML='请等待其他玩家叫地主';
						game.delay(2);
					}
					event.current.chooseControl(event.controls).set('ai',function(){
						return _status.event.getParent().controls.randomGet();
					});
					"step 3"
					event.current.classList.remove('glow_phase');
					event.current._control=result.control;
					event.current.chat(result.control);
					if(result.control=='三倍'){
						game.bonusNum=3;
						game.zhu=event.current;
						return;
					}
					else if(result.control!='不叫地主'){
						event.controls.splice(1,event.controls.indexOf(result.control));
						event.tempDizhu=event.current;
						if(result.control=='二倍') game.bonusNum=2;
					}
					event.current=event.current.next;
					if(event.current==event.start){
						game.zhu=event.tempDizhu||event.start.previous;
					}
					else event.goto(2);
					if(event.current==event.start.previous&&!event.tempDizhu) event.controls.remove('不叫地主');
					"step 4"
					for(var player of game.players){
						player.identity=player==game.zhu?'zhu':'fan';
						player.showIdentity();
					}
					event.dialog.close();
					event.map[game.zhu.playerid].addArray(event.list.randomRemove(3));
					"step 5"
					var list=['请选择你的武将',[event.map[game.me.playerid],'character']];
					if(game.me.identity=='fan'){
						var friend=game.findPlayer(function(current){
							return current!=game.me&&current.identity=='fan';
						});
						list.push('<div class="text center">队友的选将框</div>');
						list.push([event.map[friend.playerid],'character']);
					}
					game.me.chooseButton(list,true).set('list',event.map[game.me.playerid]).set('filterButton',function(button){
						return _status.event.list.contains(button.link);
					});
					"step 6"
					game.me.init(result.links[0]);
					for(var player of game.players){
						if(player!=game.me) player.init(event.map[player.playerid].randomGet());
						if(player==game.zhu){
							player.addSkill(game.zhuSkill);
						}
						else player.addSkill('binglin_neihong');
					}
					game.zhu.hp++;
					game.zhu.maxHp++;
					game.zhu.update();
					for(var i=0;i<game.players.length;i++){
						_status.characterlist.remove(game.players[i].name1);
						_status.characterlist.remove(game.players[i].name2);
					}
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);
				});
			},
			chooseCharacterHuanle:function(){
				var next=game.createEvent('chooseCharacter',false);
				next.setContent(function(){
					"step 0"
					ui.arena.classList.add('choose-character');
					game.no_continue_game=true;
					var i;
					event.list=[];
					event.list2=[];
					var list4=[];
					if(!event.map) event.map={};
					for(i in lib.characterReplace){
						var ix=lib.characterReplace[i];
						for(var j=0;j<ix.length;j++){
							if(lib.filter.characterDisabled(ix[j])) ix.splice(j--,1);
						}
						if(ix.length){
							var name=ix.randomGet();
							event.list.push(name);
							if(game.recommendDizhu.contains(name)) event.list2.push(name);
							list4.addArray(ix);
						}
					}
					for(i in lib.character){
						if(list4.contains(i)||lib.filter.characterDisabled(i)) continue;
						event.list.push(i);
						if(game.recommendDizhu.contains(i)) event.list2.push(i);
					}
					event.list.randomSort();
					_status.characterlist=event.list.slice(0);
					event.controls=['不叫','叫地主'];
					for(var player of game.players){
						var id=player.playerid;
						if(!event.map[id]) event.map[id]=[];
						event.map[id].addArray(event.list2.randomRemove(1));
						event.list.removeArray(event.map[id]);
						event.map[id].addArray(event.list.randomRemove(4-event.map[id].length));
						event.list2.removeArray(event.map[id]);
					}
					event.dialog=ui.create.dialog('你的选将框',[event.map[game.me.playerid],'character']);
					event.start=game.players.randomGet();
					event.current=event.start;
					lib.init.onfree();
					game.delay(2.5);
					"step 1"
					event.current.chooseControl(event.controls).set('ai',function(){
						return Math.random()>0.5?'不叫':'叫地主';
					});
					if(event.current==game.me){
						event.dialog.content.childNodes[0].innerHTML='是否抢地主?';
					}
					"step 2"
					event.current.chat(result.control);
					if(result.control=='叫地主'||event.current==event.start.next){
						game.zhu=result.control=='叫地主'?event.current:event.current.next;
						for(var player of game.players){
							player.identity=player==game.zhu?'zhu':'fan';
							player.showIdentity();
						}
						event.dialog.close();
						event.map[game.zhu.playerid].addArray(event.list.randomRemove(3));
					}
					else{
						event.current=event.current.next;
						event.goto(1);
						game.delay(1.5);
					}
					"step 3"
					game.me.chooseButton(['请选择你的武将',[event.map[game.me.playerid],'character']],true);
					"step 4"
					game.me.init(result.links[0]);
					for(var player of game.players){
						if(player!=game.me) player.init(event.map[player.playerid].randomGet());
					}
					game.zhu.hp++;
					game.zhu.maxHp++;
					game.zhu.update();
					for(var i=0;i<game.players.length;i++){
						_status.characterlist.remove(game.players[i].name1);
						_status.characterlist.remove(game.players[i].name2);
					}
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);
				});
			},
			
			chooseCharacterKaihei:function(){
				var next=game.createEvent('chooseCharacter',false);
				next.setContent(function(){
					"step 0"
					ui.arena.classList.add('choose-character');
					game.no_continue_game=true;
					var i;
					var identityList=['zhu','fan','fan'];
					game.saveConfig('continue_name');
					event.list=[];
					var list4=[];
					identityList.randomSort();
					for(i=0;i<game.players.length;i++){
						game.players[i].identity=identityList[i];
						game.players[i].showIdentity();
						if(identityList[i]=='zhu'){
							game.zhu=game.players[i];
						}
					}

					if(!game.zhu) game.zhu=game.me;
					else{
						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');
					}
					
					for(i in lib.characterReplace){
						var ix=lib.characterReplace[i];
						for(var j=0;j<ix.length;j++){
							if(lib.filter.characterDisabled(ix[j])) ix.splice(j--,1);
						}
						if(ix.length){
							event.list.push(ix.randomGet());
							list4.addArray(ix);
						}
					}
					for(i in lib.character){
						if(list4.contains(i)||lib.filter.characterDisabled(i)) continue;
						event.list.push(i);
					}
					event.list.randomSort();
					_status.characterlist=event.list.slice(0);
					for(var player of game.players){
						player._characterChoice=event.list.randomRemove(player.identity=='zhu'?5:3);
						if(player.identity=='fan') player._friend=(player.next.identity=='fan'?player.next:player.previous);
					}
					var createDialog=['选择武将'];
					createDialog.push([game.me._characterChoice,'character']);
					if(game.me._friend){
						createDialog.push('队友的武将');
						createDialog.push([game.me._friend._characterChoice,'character']);
					}
					game.me.chooseButton(createDialog,true).set('onfree',true).set('filterButton',function(button){
						return _status.event.player._characterChoice.contains(button.link);
					});
					"step 1"
					game.me.init(result.links[0]);
					for(var i=0;i<game.players.length;i++){
						if(game.players[i]!=game.me) game.players[i].init(game.players[i]._characterChoice.randomGet());
						_status.characterlist.remove(game.players[i].name1);
						_status.characterlist.remove(game.players[i].name2);
						if(game.players[i]==game.zhu){
							game.players[i].hp++;
							game.players[i].maxHp++;
							game.players[i].update();
						}
					}
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);

				});
			},
			chooseCharacter:function(){
				if(_status.mode=='kaihei'){
					game.chooseCharacterKaihei();
					return;
				}
				if(_status.mode=='huanle'){
					game.chooseCharacterHuanle();
					return;
				}
				if(_status.mode=='online'){
					game.chooseCharacterZhidou();
					return;
				}
				if(_status.mode=='binglin'){
					game.chooseCharacterBinglin();
					return;
				}
				var next=game.createEvent('chooseCharacter',false);
				next.showConfig=true;
				next.addPlayer=function(player){
					var list=lib.config.mode_config.identity.identity[game.players.length-3].slice(0);
					var list2=lib.config.mode_config.identity.identity[game.players.length-2].slice(0);
					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){
					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==game.zhu){
						player.hp++;
						player.maxHp++;
						player.update();
					}
					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);
					}
					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 list4=[];
					var identityList=['zhu','fan','fan'];
					var chosen=lib.config.continue_name||[];
					game.saveConfig('continue_name');
					event.chosen=chosen;

					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=['random','zhu','fan'];
						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.name){
									if(link!='random'){
										_status.event.parent.fixedseat=get.distance(game.me,game.zhu,'absolute');
									}
									game.zhu.uninit();
									delete game.zhu.isZhu;
									delete game.zhu.identityShown;
								}
								var current=this.parentNode.querySelector('.bluebg');
								if(current){
									current.classList.remove('bluebg');
								}
								current=seats.querySelector('.bluebg');
								if(current){
									current.classList.remove('bluebg');
								}
								if(link=='random'){
									link=['zhu','fan'].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);
								_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.animate('start');
									node.remove();
									game.uncheck();
									game.check();
									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(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=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(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(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(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='zhu';
							if(zhuIdentity!=event.identity){
								identityList.remove(zhuIdentity);
								identityList.splice(event.fixedseat,0,zhuIdentity);
							}
							delete event.fixedseat;
						}
						delete event.identity;
					}
					for(i=0;i<game.players.length;i++){
							game.players[i].identity=identityList[i];
							game.players[i].showIdentity();
							if(identityList[i]=='zhu'){
								game.zhu=game.players[i];
							}
					}

					if(!game.zhu) game.zhu=game.me;
					else{
						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');
					}
					//选将框分配
					for(i in lib.characterReplace){
						var ix=lib.characterReplace[i];
						for(var j=0;j<ix.length;j++){
							if(chosen.contains(ix[j])||lib.filter.characterDisabled(ix[j])) ix.splice(j--,1);
						}
						if(ix.length){
							event.list.push(i);
							list4.addArray(ix);
						}
					}
					for(i in lib.character){
						if(chosen.contains(i)||list4.contains(i)) continue;
						if(lib.filter.characterDisabled(i)) continue;
						event.list.push(i);
						list4.push(i);
					}
					event.list.randomSort();
					_status.characterlist=list4.slice(0);
					var num=get.config('choice_'+game.me.identity);
					list=event.list.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);
							}
						}
					}
					dialog.setCaption('选择角色');
					game.me.setIdentity();
					
					if(!event.chosen.length){
						game.me.chooseButton(dialog,true).set('onfree',true).selectButton=function(){
							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);
							}
							
							event.list.randomSort();
							list=event.list.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.animate('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.animate('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.animate('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;
					}
					var chooseGroup=false;
					if(event.chosen.length){
						if(lib.character[event.chosen[0]][1]=='shen'){
							chooseGroup=true;
						}
					}
					else if(event.modchosen){
						if(event.modchosen[0]=='random') event.modchosen[0]=result.buttons[0].link;
						else event.modchosen[1]=result.buttons[0].link;
					}
					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);
						if(lib.character[event.choosed[0]][1]=='shen'){
							chooseGroup=true;
						}
					}
					else{
						event.choosed=[result.buttons[0].link];
						if(lib.character[event.choosed[0]][1]=='shen'){
							chooseGroup=true;
						}
						game.addRecentCharacter(result.buttons[0].link);
					}
					"step 2"
					if(event.chosen.length){
						game.me.init(event.chosen[0],event.chosen[1]);
					}
					else if(event.modchosen){
						game.me.init(event.modchosen[0],event.modchosen[1]);
					}
					else 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(game.me==game.zhu){
						game.me.hp++;
						game.me.maxHp++;
						game.me.update();
					}
					
					for(var i=0;i<game.players.length;i++){
						if(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"
					for(var i=0;i<game.players.length;i++){
						_status.characterlist.remove(game.players[i].name1);
						_status.characterlist.remove(game.players[i].name2);
					}
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);

				});
			},
			
			chooseCharacterKaiheiOL:function(){
				var next=game.createEvent('chooseCharacter',false);
				next.setContent(function(){
					"step 0"
					ui.arena.classList.add('choose-character');
					var i;
					var identityList=['fan','fan','fan'];
					var aiList=game.filterPlayer(function(current){
						return current!=game.me&&!current.isOnline();
					});
					if(aiList.length==1){
						identityList[game.players.indexOf(aiList[0])]='zhu';
					}
					else{
						identityList[0]='zhu';
						identityList.randomSort();
					}
					for(i=0;i<game.players.length;i++){
						game.players[i].identity=identityList[i];
						game.players[i].showIdentity();
						game.players[i].identityShown=true;
						if(identityList[i]=='zhu') game.zhu=game.players[i];
					}
					event.list=[];
					var list4=[];
					
					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],libCharacter)) ix.splice(j--,1);
						}
						if(ix.length){
							event.list.push(ix.randomGet());
							list4.addArray(ix);
						}
					}
					for(i in libCharacter){
						if(list4.contains(i)||lib.filter.characterDisabled(i,libCharacter)) continue;
						event.list.push(i);
					}
					_status.characterlist=event.list.slice(0);
					
					var map={};
					for(var player of game.players){
						player._characterChoice=event.list.randomRemove(player.identity=='zhu'?5:3);
						if(player.identity=='fan') player._friend=(player.next.identity=='fan'?player.next:player.previous);
						map[player.playerid]=player._characterChoice;
					}
					game.broadcastAll(function(map){
						for(var i in map){
							lib.playerOL[i]._characterChoice=map[i];
						}
					},map);
					"step 1"
					var list=[];
					for(var i=0;i<game.players.length;i++){
						var dialog=['请选择武将',[game.players[i]._characterChoice,'character']];
						if(game.players[i]._friend){
							dialog.push('队友的武将');
							dialog.push([game.players[i]._friend._characterChoice,'character']);
						}
						list.push([game.players[i],dialog,true,function(){return Math.random()},function(button){
							return _status.event.player._characterChoice.contains(button.link);
						}]);
					}
					game.me.chooseButtonOL(list,function(player,result){
						if(game.online||player==game.me) player.init(result.links[0]);
					});
					"step 2"
					for(var i in lib.playerOL){
						if(!result[i]||result[i]=='ai'||!result[i].links||!result[i].links.length){
							result[i]=lib.playerOL[i]._characterChoice.randomGet();
						}
						else{
							result[i]=result[i].links[0];
						}
						if(!lib.playerOL[i].name){
							lib.playerOL[i].init(result[i]);
						}
					}
					
					game.zhu.maxHp++;
					game.zhu.hp++;
					game.zhu.update();
					
					game.broadcast(function(result,zhu){
						for(var i in result){
							if(!lib.playerOL[i].name){
								lib.playerOL[i].init(result[i]);
							}
						}
						game.zhu=zhu;
						zhu.maxHp++;
						zhu.hp++;
						zhu.update();
						
						setTimeout(function(){
							ui.arena.classList.remove('choose-character');
						},500);
					},result,game.zhu);
					for(var i=0;i<game.players.length;i++){
						_status.characterlist.remove(game.players[i].name1);
						_status.characterlist.remove(game.players[i].name2);
					}
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);
				});
			},
			chooseCharacterHuanleOL:function(){
				var next=game.createEvent('chooseCharacter',false);
				next.setContent(function(){
					"step 0"
					ui.arena.classList.add('choose-character');
					var i;
					event.list=[];
					event.list2=[];
					var list4=[];
					event.controls=['不叫','叫地主'];
					if(!event.map) event.map={};
					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],libCharacter)) ix.splice(j--,1);
						}
						if(ix.length){
							var name=ix.randomGet();
							event.list.push(name);
							if(game.recommendDizhu.contains(name)) event.list2.push(name);
							list4.addArray(ix);
						}
					}
					for(i in libCharacter){
						if(list4.contains(i)||lib.filter.characterDisabled(i,libCharacter)) continue;
						event.list.push(i);
						if(game.recommendDizhu.contains(i)) event.list2.push(i);
					}
					for(var player of game.players){
						var id=player.playerid;
						if(!event.map[id]) event.map[id]=[];
						event.map[id].addArray(event.list2.randomRemove(1));
						event.list.removeArray(event.map[id]);
						event.map[id].addArray(event.list.randomRemove(4-event.map[id].length));
						event.list2.removeArray(event.map[id]);
					}
					_status.characterlist=event.list.slice(0);
					event.videoId=lib.status.videoId++;
					game.broadcastAll(function(map,id){
						ui.create.dialog('你的选将框',[map[game.me.playerid],'character']).videoId=id;
					},event.map,event.videoId);
					event.start=game.players.randomGet();
					event.current=event.start;
					if(event.current!=game.me||!event.current.isOnline()) game.delay(3);
					"step 1"
					event.current.chooseControl(event.controls).set('ai',function(){
						return Math.random()>0.5?'不叫':'叫地主';
					});
					"step 2"
					event.current.chat(result.control);
					if(result.control=='叫地主'||event.current==event.start.next){
						game.zhu=result.control=='叫地主'?event.current:event.current.next;
						for(var player of game.players){
							player.identity=player==game.zhu?'zhu':'fan';
							player.showIdentity();
							player.identityShown=true;
						}
						game.broadcastAll('closeDialog',event.videoId)
						event.map[game.zhu.playerid].addArray(event.list.randomRemove(3));
					}
					else{
						event.current=event.current.next;
						event.goto(1);
					}
					"step 3"
					var list=[];
					var str='选择角色';
					for(var i=0;i<game.players.length;i++){
						list.push([game.players[i],[str,[event.map[game.players[i].playerid],'character']],true]);
					}
					game.me.chooseButtonOL(list,function(player,result){
						if(game.online||player==game.me) player.init(result.links[0],result.links[1]);
					});
					"step 4"
					for(var i in result){
						if(result[i]&&result[i].links){
							for(var j=0;j<result[i].links.length;j++){
								event.list2.remove(result[i].links[j]);
							}
						}
					}
					for(var i in result){
						if(result[i]=='ai'){
							result[i]=event.list2.randomRemove(lib.configOL.double_character?2:1);
						}
						else{
							result[i]=result[i].links
						}
						if(!lib.playerOL[i].name){
							lib.playerOL[i].init(result[i][0],result[i][1]);
						}
					}
					
					game.zhu.maxHp++;
					game.zhu.hp++;
					game.zhu.update();
					
					game.broadcast(function(result,zhu){
						for(var i in result){
							if(!lib.playerOL[i].name){
								lib.playerOL[i].init(result[i][0],result[i][1]);
							}
						}
						game.zhu=zhu;
						zhu.maxHp++;
						zhu.hp++;
						zhu.update();
						
						setTimeout(function(){
							ui.arena.classList.remove('choose-character');
						},500);
					},result,game.zhu);
					for(var i=0;i<game.players.length;i++){
						_status.characterlist.remove(game.players[i].name1);
						_status.characterlist.remove(game.players[i].name2);
					}
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);
				});
			},
			chooseCharacterBinglinOL:function(){
				var next=game.createEvent('chooseCharacter',false);
				next.setContent(function(){
					"step 0"
					ui.arena.classList.add('choose-character');
					var i;
					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];
						}
					}
					event.list=[];
					event.map={};
					for(i in libCharacter){
						if(lib.filter.characterDisabled(i,libCharacter)) continue;
						event.list.push(i);
					}
					event.list.randomSort();
					_status.characterlist=event.list.slice(0);
					event.controls=['不叫地主','一倍','两倍','三倍'];
					for(var player of game.players){
						var id=player.playerid;
						event.map[id]=event.list.randomRemove(4);
					}
					event.start=game.players.randomGet();
					event.current=event.start;
					
					event.videoId=lib.status.videoId++;
					game.zhuSkill='zhuSkill_'+['xiangyang','jiangling','fancheng'].randomGet();
					game.broadcastAll(function(map,id,skill){
						ui.create.dialog('本局城池:'+get.translation(skill),[map[game.me.playerid],'character']).videoId=id;
					},event.map,event.videoId,game.zhuSkill);
					game.delay(6);
					"step 1"
					game.broadcastAll(function(id,current){
						var dialog=get.idDialog(id);
						if(dialog){
							if(game.me==current) dialog.content.firstChild.innerHTML='是否叫地主?';
							else dialog.content.firstChild.innerHTML='请等待其他玩家叫地主';
						}
					},event.videoId,event.current);
					if(event.current!=game.me&&!event.current.isOnline()) game.delay(2);
					event.current.chooseControl(event.controls).set('ai',function(){
						return _status.event.getParent().controls.randomGet();
					});
					"step 2"
					event.current._control=result.control;
					event.current.chat(result.control);
					if(result.control=='三倍'){
						game.bonusNum=3;
						game.zhu=event.current;
						return;
					}
					else if(result.control!='不叫地主'){
						event.controls.splice(1,event.controls.indexOf(result.control));
						event.tempDizhu=event.current;
						if(result.control=='二倍') game.bonusNum=2;
					}
					event.current=event.current.next;
					if(event.current==event.start){
						game.zhu=event.tempDizhu||event.start;
					}
					else event.goto(1);
					if(event.current==event.start.previous&&!event.tempDizhu) event.controls.remove('不叫地主');
					"step 3"
					for(var player of game.players){
						player.identity=player==game.zhu?'zhu':'fan';
						player.showIdentity();
						player.identityShown=true;
						player._characterChoice=event.map[player.playerid];
					}
					event.map[game.zhu.playerid].addArray(event.list.randomRemove(3));
					game.broadcastAll(function(id,map){
						var dialog=get.idDialog(id);
						if(dialog) dialog.close();
						game.me._characterChoice=map[game.me.playerid];
					},event.videoId,event.map);
					var list=[];
					for(var i=0;i<game.players.length;i++){
						var dialog=['请选择武将',[event.map[game.players[i].playerid],'character']];
						if(game.players[i].identity=='fan'){
							var friend=game.findPlayer(function(current){
								return current!=game.players[i]&&current.identity=='fan';
							});
							dialog.push('<div class="text center">队友的选将框</div>');
							dialog.push([event.map[friend.playerid],'character']);
						}
						list.push([game.players[i],dialog,true,function(){return Math.random()},function(button){
							return _status.event.player._characterChoice.contains(button.link);
						}]);
					}
					game.me.chooseButtonOL(list,function(player,result){
						if(game.online||player==game.me) player.init(result.links[0]);
					});
					"step 4"
					for(var i in lib.playerOL){
						if(!result[i]||result[i]=='ai'||!result[i].links||!result[i].links.length){
							result[i]=event.map[i].randomGet();
						}
						else{
							result[i]=result[i].links[0];
						}
						if(!lib.playerOL[i].name){
							lib.playerOL[i].init(result[i]);
						}
					}
					
					game.zhu.maxHp++;
					game.zhu.hp++;
					game.zhu.update();
					
					game.broadcast(function(result,zhu){
						for(var i in result){
							if(!lib.playerOL[i].name){
								lib.playerOL[i].init(result[i]);
							}
						}
						game.zhu=zhu;
						zhu.maxHp++;
						zhu.hp++;
						zhu.update();
						
						setTimeout(function(){
							ui.arena.classList.remove('choose-character');
						},500);
					},result,game.zhu);
					for(var player of game.players){
						if(player==game.zhu){
							player.addSkill(game.zhuSkill);
						}
						else player.addSkill(['binglin_shaxue','binglin_neihong']);
					}
					for(var i=0;i<game.players.length;i++){
						_status.characterlist.remove(game.players[i].name1);
						_status.characterlist.remove(game.players[i].name2);
					}
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);
				});
			},
			chooseCharacterZhidouOL:function(){
				var next=game.createEvent('chooseCharacter',false);
				next.setContent(function(){
					"step 0"
					ui.arena.classList.add('choose-character');
					var i;
					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];
						}
					}
					var groups=[];
					event.list=[];
					event.map={};
					var chara=(get.config('character_online')||lib.characterOnline);
					for(i in chara){
						var list=chara[i];
						for(var j=0;j<list.length;j++){
							if(!lib.character[list[j]]||lib.connectBanned.contains(list[j])||(i=='key'&&lib.filter.characterDisabled(list[j],libCharacter))) list.splice(j--,1);
						}
						if(list.length>=3){
							groups.push(i);
							event.list.addArray(list);
						}
					}
					event.list.randomSort();
					_status.characterlist=event.list.slice(0);
					event.controls=['不叫地主','一倍','两倍','三倍'];
					for(var player of game.players){
						var id=player.playerid;
						player._group=groups.randomRemove(1)[0];
						event.map[id]=chara[player._group].randomGets(3);
						player.storage.doudizhu_cardPile=get.cards(20).sort(function(a,b){
							if(a.name!=b.name) return lib.sort.card(a.name,b.name);
							else if(a.suit!=b.suit) return lib.suit.indexOf(a)-lib.suit.indexOf(b);
							else return a.number-b.number;
						});
						player.markSkill('doudizhu_cardPile');
					}
					event.start=game.players.randomGet();
					event.current=event.start;
					
					event.videoId=lib.status.videoId++;
					game.broadcastAll(function(map,id){
						ui.create.dialog('你的选将框和底牌',[map[game.me.playerid],'character'],game.me.storage.doudizhu_cardPile).videoId=id;
					},event.map,event.videoId);
					game.delay(4);
					"step 1"
					game.broadcastAll(function(id,current){
						var dialog=get.idDialog(id);
						if(dialog){
							if(game.me==current) dialog.content.firstChild.innerHTML='是否叫地主?';
							else dialog.content.firstChild.innerHTML='请等待其他玩家叫地主';
						}
					},event.videoId,event.current);
					if(event.current!=game.me&&!event.current.isOnline()) game.delay(2);
					event.current.chooseControl(event.controls).set('ai',function(){
						return _status.event.getParent().controls.randomGet();
					});
					"step 2"
					event.current._control=result.control;
					event.current.chat(result.control);
					if(result.control=='三倍'){
						game.bonusNum=3;
						game.zhu=event.current;
						return;
					}
					else if(result.control!='不叫地主'){
						event.controls.splice(1,event.controls.indexOf(result.control));
						event.tempDizhu=event.current;
						if(result.control=='二倍') game.bonusNum=2;
					}
					event.current=event.current.next;
					if(event.current==event.start&&(event.start==event.tempDizhu||event.start._control=='不叫地主')){
						game.zhu=event.tempDizhu||event.start.previous;
					}
					else if(event.current==event.start.next&&event.current._control){
						game.zhu=event.tempDizhu;
					}
					else event.goto(1);
					if(event.current==event.start.previous&&!event.tempDizhu) event.controls.remove('不叫地主');
					"step 3"
					for(var player of game.players){
						player.identity=player==game.zhu?'zhu':'fan';
						player.showIdentity();
						player.identityShown=true;
					}
					game.broadcastAll('closeDialog',event.videoId);
					var list=[];
					for(var i=0;i<game.players.length;i++){
						list.push([game.players[i],['选择'+(game.players[i]==game.zhu?'两':'一')+'张武将牌',[event.map[game.players[i].playerid],'character']],true,game.players[i]==game.zhu?2:1]);
					}
					game.me.chooseButtonOL(list,function(player,result){
						if(game.online||player==game.me) player.init(result.links[0],result.links[1]);
					});
					"step 4"
					for(var i in result){
						if(result[i]=='ai'){
							result[i]=event.map[i].randomRemove(lib.playerOL[i]==game.zhu?2:1);
						}
						else{
							result[i]=result[i].links;
						}
						if(!lib.playerOL[i].name){
							lib.playerOL[i].init(result[i][0],result[i][1]);
						}
					}
					
					game.zhu.hp=4;
					game.zhu.maxHp=4;
					game.zhu.update();
					
					game.broadcast(function(result,zhu){
						for(var i in result){
							if(!lib.playerOL[i].name){
								lib.playerOL[i].init(result[i][0],result[i][1]);
							}
						}
						game.zhu=zhu;
						game.zhu.hp=4;
						game.zhu.maxHp=4;
						game.zhu.update();
						
						setTimeout(function(){
							ui.arena.classList.remove('choose-character');
						},500);
					},result,game.zhu);
					for(var i=0;i<game.players.length;i++){
						_status.characterlist.remove(game.players[i].name1);
						_status.characterlist.remove(game.players[i].name2);
					}
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);
				});
			},
			chooseCharacterOL:function(){
				if(_status.mode=='kaihei'){
					game.chooseCharacterKaiheiOL();
					return;
				}
				else if(_status.mode=='huanle'){
					game.chooseCharacterHuanleOL();
					return;
				}
				else if(_status.mode=='online'){
					game.chooseCharacterZhidouOL();
					return;
				}
				else if(_status.mode=='binglin'){
					game.chooseCharacterBinglinOL();
					return;
				}
				var next=game.createEvent('chooseCharacter',false);
				next.setContent(function(){
					"step 0"
					ui.arena.classList.add('choose-character');
					var i;
					var identityList=['zhu','fan','fan'];
					identityList.randomSort();
					for(i=0;i<game.players.length;i++){
						game.players[i].identity=identityList[i];
						game.players[i].showIdentity();
						game.players[i].identityShown=true;
						if(identityList[i]=='zhu') game.zhu=game.players[i];
					}

					var list;
					var list4=[];
					event.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(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],libCharacter)) ix.splice(j--,1);
						}
						if(ix.length){
							event.list.push(i);
							list4.addArray(ix);
						}
					}
					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.contains(ix[j])) ix.splice(j--,1);
							}
						}
					},list4);
					for(i in libCharacter){
						if(list4.contains(i)||lib.filter.characterDisabled(i,libCharacter)) continue;
						event.list.push(i);
						list4.push(i)
					}
					_status.characterlist=list4;
					"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);
					num2=event.list.length-num*game.players.length;
					if(num>5){
						num=5;
					}
					if(num2>2){
						num2=2;
					}
					
					for(var i=0;i<game.players.length;i++){
							var num3=0;
							if(game.players[i]==game.zhu) num3=3;
							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"
					for(var i in result){
						if(result[i]&&result[i].links){
							for(var j=0;j<result[i].links.length;j++){
								event.list.remove(get.sourceCharacter(result[i].links[j]));
							}
						}
					}
					for(var i in result){
						if(result[i]=='ai'){
							var listc=event.list.randomRemove(lib.configOL.double_character?2:1);
							for(var i=0;i<listc.length;i++){
								var listx=lib.characterReplace[listc[i]];
								if(listx&&listx.length) listc[i]=listx.randomGet();
							}
							result[i]=listc;
						}
						else{
							result[i]=result[i].links
						}
						if(!lib.playerOL[i].name){
							lib.playerOL[i].init(result[i][0],result[i][1]);
						}
					}
					
					game.zhu.maxHp++;
					game.zhu.hp++;
					game.zhu.update();
					
					game.broadcast(function(result,zhu){
						for(var i in result){
							if(!lib.playerOL[i].name){
								lib.playerOL[i].init(result[i][0],result[i][1]);
							}
						}
						game.zhu=zhu;
						zhu.maxHp++;
						zhu.hp++;
						zhu.update();
						
						setTimeout(function(){
							ui.arena.classList.remove('choose-character');
						},500);
					},result,game.zhu);
					for(var i=0;i<game.players.length;i++){
						_status.characterlist.remove(game.players[i].name1);
						_status.characterlist.remove(game.players[i].name2);
					}
					setTimeout(function(){
						ui.arena.classList.remove('choose-character');
					},500);
				});
			},
		},
		translate:{
			zhu:"主",
			fan:"反",
			zhu2:"地主",
			fan2:"农民",
			random2:"随机",
			feiyang:"飞扬",
			bahu:"跋扈",
			feiyang_info:"判定阶段开始时,若你的判定区有牌,则你可以弃置两张手牌,然后弃置你判定区的一张牌。每回合限一次。",
			bahu_info:"锁定技,准备阶段开始时,你摸一张牌。出牌阶段,你可以多使用一张【杀】。",
			kaihei:'强易',
			kaihei_info:'出牌阶段,你可以获得一名其他角色的至多两张牌,然后交给其等量的牌。每名角色每局游戏限一次。',
			doudizhu_cardPile:'底牌',
			online_gongshoujintui:'攻守进退',
			gongshoujianbei:'攻守兼备',
			gongshoujianbei_info:'出牌阶段,你可选择:①将此牌当做【万箭齐发】使用。②将此牌当做【桃园结义】使用。',
			jintuiziru:'进退自如',
			jintuiziru_info:'出牌阶段,你可选择:①将此牌当做【南蛮入侵】使用。②将此牌当做【五谷丰登】使用。',
			diqi:'地契',
			diqi_skill:'地契',
			diqi_info:'当你受到伤害时,你可以弃置此牌,防止此伤害。当此牌离开你的装备区后,销毁之。',
			_juzhong:'聚众',
			juzhong_jiu:'聚众',
			zhadan:'炸弹',
			zhadan_info:'当一张牌被使用时,对此牌使用。取消此牌的所有目标,且本局游戏的底价翻倍。',
			jiwangkailai:'继往开来',
			jiwangkailai_info:'出牌阶段,对包含你自己在内的一名角色使用。目标角色选择一项:①弃置所有手牌,然后摸等量的牌。②将所有手牌当做一张不为【继往开来】的普通锦囊牌使用。',
			zhuSkill_xiangyang:'襄阳',
			zhuSkill_xiangyang_info:'回合结束时,你可获得一个额外的出牌阶段或摸牌阶段。',
			zhuSkill_jiangling:'江陵',
			zhuSkill_jiangling0:'江陵',
			zhuSkill_jiangling1:'江陵',
			zhuSkill_jiangling_info:'出牌阶段开始时,你可选择一项:①本阶段内使用【杀】或普通锦囊牌选择唯一目标时可增加一个目标。②本阶段内使用【杀】或普通锦囊牌无次数限制。',
			zhuSkill_fancheng:'樊城',
			zhuSkill_fancheng0:'樊城',
			zhuSkill_fancheng1:'樊城',
			zhuSkill_fancheng_info:'限定技,出牌阶段,你可选择获得一项效果直到游戏结束:①因执行【杀】的效果而对其他角色造成的伤害+1。②对其他角色造成的渠道不为【杀】的伤害+1。',
			binglin_shaxue:'歃血',
			binglin_shaxue_info:'锁定技,每局游戏限三次,当你受到队友造成的伤害时,你防止此伤害。',
			binglin_neihong:'内讧',
			binglin_neihong_info:'锁定技,当你杀死队友后,你所在的阵营视为游戏失败。',
			baiyidujiang:'白衣渡江',
			baiyidujiang_info:'出牌阶段,对地主使用。你选择一项:①令其将手牌数摸至全场最多。②令其将手牌数弃置至全场最少。',
			shuiyanqijuny:'水淹七军',
			shuiyanqijuny_info:'出牌阶段,对至多两名角色使用。目标角色受到1点雷属性伤害,然后若其:是此牌的使用者选择的第一个目标,其弃置一张牌;不是第一个目标,其摸一张牌。',
			luojingxiashi:'落井下石',
			luojingxiashi_info:'出牌阶段,对所有其他的已受伤角色使用。目标角色受到1点伤害。',
			binglinchengxia:'兵临城下',
			binglinchengxia_info:'出牌阶段,对一名其他角色使用。将此牌横置于目标角色的判定区内。目标角色于判定阶段进行判定,若判定结果不为♦,则其弃置装备区内的所有牌或受到1点伤害。',
			toushiche:'投石车',
			toushiche_skill:'投石车',
			toushiche_info:'锁定技,结束阶段开始时,你令所有手牌数大于你的角色依次弃置一张手牌。',
			binglin_bingjin:'兵尽',
		},
		element:{
			player:{
				getTopCards:function(num){
					if(typeof num!='number') num=1;
					if(num<=0) num=1;
					var cards;
					var player=this;
					if(player.storage.doudizhu_cardPile&&player.storage.doudizhu_cardPile.length){
						cards=player.storage.doudizhu_cardPile.randomRemove(num);
						if(player.storage.doudizhu_cardPile.length) player.markSkill('doudizhu_cardPile');
						else player.unmarkSkill('doudizhu_cardPile');
					}
					else cards=[];
					if(cards.length<num) cards.addArray(get.cards(num-cards.length));
					else game.updateRoundNumber();
					return cards;
				},
				hasZhuSkill:function(skill,player){
					if(!this.hasSkill(skill)) return false;
					for(var i in this.storage){
						if(i.indexOf('zhuSkill_')==0&&this.storage[i].contains(skill)) return true;
					}
					return false;
				},
				$dieAfter:function(){
					if(_status.video) return;
					if(!this.node.dieidentity){
						var str={zhu:'地主',fan:'农民'}[this.identity];
						var node=ui.create.div('.damage.dieidentity',str,this);
						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='';
					}
				},
				dieAfter:function(source){
					if(_status.mode=='binglin'&&source&&this!=source&&this.identity==source.identity&&source.hasSkill('binglin_neihong')){
						if(game.me==game.zhu){
							game.over(true);
						}
						else{
							game.over(false);
						}
					}
					else game.checkResult();
				},
				dieAfter2:function(){
					if(_status.mode=='binglin'||_status.mode=='online'||this.identity!='fan') return;
					var player=this,target=game.findPlayer(function(current){
						return current!=player&&current.identity=='fan';
					},true);
					if(target){
						target.showGiveup();
						target.chooseDrawRecover(2);
					}
				},
				logAi:function(targets,card){},
				showIdentity:function(){
					game.broadcastAll(function(player,identity){
						player.identity=identity;
						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:{
			rawAttitude:function(from,to){
				if(from.identity==to.identity) return 10;
				return -10;
			},
		},
		skill:{
			binglin_bingjin:{
				trigger:{player:'phaseEnd'},
				forced:true,
				ruleSkill:true,
				filter:function(event,player){
					return _status.mode=='binglin'&&game.roundNumber>14;
				},
				content:function(){
					player.loseHp();
				},
			},
			zhuSkill_xiangyang:{
				trigger:{player:'phaseEnd'},
				charlotte:true,
				direct:true,
				content:function(){
					'step 0'
					player.chooseControl('摸牌阶段','出牌阶段','cancel2').set('prompt','襄阳:是否执行一个额外的阶段?');
					'step 1'
					if(result.control!='cancel2'){
						player.logSkill(event.name);
						var next=player[result.index?'phaseUse':'phaseDraw']();
						event.next.remove(next);
						trigger.next.push(next);
					}	
				},
			},
			zhuSkill_jiangling:{
				trigger:{player:'phaseUseBegin'},
				direct:true,
				charlotte:true,
				content:function(){
					'step 0'
					player.chooseControl('加目标','多刀','取消').set('prompt',get.prompt2('zhuSkill_jiangling')).set('ai',()=>(3-game.countPlayer()));
					'step 1'
					if(result.index<2){
						player.logSkill('zhuSkill_jiangling');
						player.addTempSkill('zhuSkill_jiangling'+result.index,'phaseUseAfter');
					game.log(player,'选择了','#y'+result.control,'的效果');
					}
				},
			},
			zhuSkill_jiangling0:{
				trigger:{player:'useCard2'},
				direct:true,
				charlotte:true,
				filter:function(event,player){
					if(event.card.name!='sha'&&get.type(event.card)!='trick') return false;
					if(!event.targets||event.targets.length!=1) return false;
					var info=get.info(event.card);
					if(info.allowMultiple==false) return false;
					if(event.targets&&!info.multitarget){
						if(game.hasPlayer(function(current){
							return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current);
						})){
							return true;
						}
					}
					return false;
				},
				content:function(){
					'step 0'
					var prompt2='为'+get.translation(trigger.card)+'增加一个目标'
					player.chooseTarget(get.prompt('zhuSkill_jiangling'),function(card,player,target){
						var player=_status.event.player;
						if(_status.event.targets.contains(target)) return false;
						return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target);
					}).set('prompt2',prompt2).set('ai',function(target){
						var trigger=_status.event.getTrigger();
						var player=_status.event.player;
						return get.effect(target,trigger.card,player,player)*(_status.event.targets.contains(target)?-1:1);
					}).set('targets',trigger.targets).set('card',trigger.card);
					'step 1'
					if(result.bool){
						if(!event.isMine()&&!event.isOnline()) game.delayx();
						event.targets=result.targets;
					}
					else{
						event.finish();
					}
					'step 2'
					if(event.targets){
						player.logSkill('zhuSkill_jiangling',event.targets);
						if(trigger.targets.contains(event.targets[0])) trigger.targets.removeArray(event.targets);
						else{
							//trigger.directHit.addArray(event.targets);
							trigger.targets.addArray(event.targets);
						}
					}
				},
			},
			zhuSkill_jiangling1:{
				charlotte:true,
				mod:{
					cardUsable:function(card,player){
						if(card.name=='sha'||get.type(card)=='trick') return Infinity;
					},
				},
			},
			zhuSkill_fancheng:{
				enable:'phaseUse',
				limited:true,
				charlotte:true,
				skillAnimation:true,
				animationColor:'gray',
				content:function(){
					'step 0'
					player.awakenSkill('zhuSkill_fancheng');
					player.chooseControl('杀','其他').set('prompt','选择要强化的伤害').set('ai',()=>get.rand(0,1));
					'step 1'
					player.addSkill('zhuSkill_fancheng'+result.index);
					game.log(player,'本局游戏内',result.index?'#g杀以外':'#y杀','的伤害+1');
				},
				ai:{
					order:100,
					result:{player:100},
				},
			},
			zhuSkill_fancheng0:{
				trigger:{source:'damageBegin2'},
				forced:true,
				charlotte:true,
				filter:function(event,player){
					return event.player!=player&&event.card&&event.card.name=='sha'&&event.getParent().name=='sha';
				},
				logTarget:'player',
				content:function(){
					trigger.num++;
				},
				mark:true,
				marktext:'殺',
				intro:{content:'因执行【杀】的效果对其他角色造成的伤害+1'},
			},
			zhuSkill_fancheng1:{
				trigger:{source:'damageBegin2'},
				forced:true,
				charlotte:true,
				filter:function(event,player){
					return event.player!=player&&(!event.card||event.card.name!='sha');
				},
				logTarget:'player',
				content:function(){
					trigger.num++;
				},
				mark:true,
				marktext:'谋',
				intro:{content:'不因【杀】对其他角色造成的伤害+1'},
			},
			binglin_shaxue:{
				init:function(player,skill){
					player.addMark(skill,3,false);
				},
				trigger:{player:'damageBegin3'},
				forced:true,
				charlotte:true,
				filter:function(event,player){
					return event.source&&player!=event.source&&player.identity==event.source.identity&&player.countMark('binglin_shaxue')>0;
				},
				content:function(){
					trigger.cancel();
					player.removeMark('binglin_shaxue',1,false);
					trigger.source.removeMark('binglin_shaxue',1,false);
				},
				intro:{content:'剩余次数:#'},
				ai:{
					viewHandcard:true,
					skillTagFilter:function(player,tag,arg){
						return player!=arg&&arg.hasSkill('binglin_shaxue');
					},
				},
			},
			binglin_neihong:{charlotte:true},
			toushiche_skill:{
				trigger:{player:'phaseJieshuBegin'},
				forced:true,
				equipSkill:true,
				filter:function(event,player){
				 return lib.skill.toushiche_skill.logTarget(null,player).length>0;
				},
				logTarget:function(event,player){
					var hs=player.countCards('h');
					return game.filterPlayer(function(current){
						return current!=player&&current.countCards('h')>hs;
					});
				},
				content:function(){
					'step 0'
					event.targets=lib.skill.toushiche_skill.logTarget(null,player).sortBySeat();
					'step 1'
					var target=targets.shift();
					if(target.countCards('h')>0) target.chooseToDiscard('h',true);
					if(targets.length) event.redo();
				},
			},
			online_gongshoujintui:{
				enable:'chooseToUse',
				filter:function(event,player){
					var cards=player.getCards('hs');
					for(var i of cards){
						var name=get.name(i,player);
						if(name=='gongshoujianbei'){
							if(event.filterCard({
								name:'wanjian',
								isCard:true,
								cards:[i],
							},player,event)||event.filterCard({
								name:'taoyuan',
								isCard:true,
								cards:[i],
							},player,event)) return true;
						}
						if(name=='jintuiziru'){
							if(event.filterCard({
								name:'nanman',
								isCard:true,
								cards:[i],
							},player,event)||event.filterCard({
								name:'wugu',
								isCard:true,
								cards:[i],
							},player,event)) return true;
						}
					}
					return false;
				},
				chooseButton:{
					dialog:function(event,player){
						var list=[];
						if(player.countCards('hs','gongshoujianbei')){
							list.push(['锦囊','','wanjian']);
							list.push(['锦囊','','taoyuan']);
						}
						if(player.countCards('hs','jintuiziru')){
							list.push(['锦囊','','nanman']);
							list.push(['锦囊','','wugu']);
						}
						return ui.create.dialog('攻守兼备/进退自如',[list,'vcard'],'hidden');
					},
					filter:function(button,player){
						var name=button.link[2];
						var rawname=((name=='wanjian'||name=='taoyuan')?'gongshoujianbei':'jintuiziru');
						var cards=player.getCards('hs');
						var evt=_status.event.getParent();
						for(var i of cards){
							if(get.name(i,player)==rawname&&evt.filterCard({
								name:name,
								isCard:true,
								cards:[i],
							},player,evt)) return true;
						}
						return false;
					},
					check:function(button){
						return _status.event.player.getUseValue({name:button.link[2],isCard:true});
					},
					backup:function(links){
						var name=links[0][2];
						var rawname=((name=='wanjian'||name=='taoyuan')?'gongshoujianbei':'jintuiziru');
						return {
							popname:true,
							viewAs:{name:name,isCard:true},
							filterCard:{name:rawname},
							ai1:()=>1,
						}
					},
					prompt:function(links){
						var name=links[0][2];
						var rawname=((name=='wanjian'||name=='taoyuan')?'gongshoujianbei':'jintuiziru');
						return '将一张'+get.translation(rawname)+'当做'+get.translation(name)+'使用';
					}
				},
				ai:{
					order:10,
					result:{
						player:1,
					},
				},
			},
			doudizhu_cardPile:{
				intro:{
					content:'cardCount',
				},
			},
			kaihei:{
				enable:'phaseUse',
				filter:function(event,player){
					return player==game.zhu&&game.hasPlayer(function(current){
						return lib.skill.kaihei.filterTarget(null,player,current);
					});
				},
				filterTarget:function(card,player,target){
					return player!=target&&!target.storage.kaihei&&target.countGainableCards(player,'he')>0;
				},
				content:function(){
					'step 0'
					player.gainPlayerCard(target,[1,2],'he',true);
					target.storage.kaihei=true;
					'step 1'
					if(!result.bool||!result.cards.length){
						event.finish();return;
					}
					var num=result.cards.length;
					var hs=player.getCards('he');
					if(hs.length){
						if(hs.length<=num) event._result={bool:true,cards:hs};
						else player.chooseCard('he',true,num,'选择交给'+get.translation(target)+get.cnNumber(num)+'张牌');
					}
					else event.finish();
					'step 2'
					if(result.bool&&result.cards&&result.cards.length) player.give(result.cards,target);
				},
				ai:{
					viewHandcard:true,
					skillTagFilter:function(player,tag,target){
						if(player==target||player.identity!='fan'||target.identity!='fan') return false;
					},
				},
			},
			feiyang:{
				trigger:{player:'phaseJudgeBegin'},
				charlotte:true,
				direct:true,
				filter:function(event,player){
					return _status.mode!='online'&&_status.mode!='binglin'&&player==game.zhu&&player.countCards('j')&&player.countCards('h')>1;
				},
				content:function(){
					"step 0"
					player.chooseToDiscard('h',2,get.prompt('feiyang'),'弃置两张手牌,然后弃置判定区里的一张牌').set('logSkill','feiyang').set('ai',function(card){
						if(_status.event.goon) return 6-get.value(card);
						return 0;
					}).set('goon',player.hasCard(function(card){
						return get.effect(player,{
							name:card.viewAs||card.name,
							cards:[card],
						},player,player)<0;
					},'j'));
					"step 1"
					if(result.bool){
						player.discardPlayerCard(player,'j',true);
					}
				},
			},
			bahu:{
				trigger:{player:'phaseZhunbeiBegin'},
				charlotte:true,
				forced:true,
				filter:function(event,player){
					return _status.mode!='online'&&_status.mode!='binglin'&&player==game.zhu;
				},
				content:function(){
					player.draw();
				},
				mod:{
					cardUsable:function(card,player,num){
						if(_status.mode!='online'&&_status.mode!='binglin'&&player==game.zhu&&card.name=='sha') return num+1;
					},
				},
			},
			diqi_skill:{
				trigger:{player:'damageBegin2'},
				filter:function(event,player){
					var card=player.getEquip('diqi');
					return get.itemtype(card)=='card'&&lib.filter.cardDiscardable(card,player,'diqi_skill');
				},
				check:function(event,player){
					return event.num>=Math.min(player.hp,2);
				},
				prompt2:function(event,player){
					return '弃置'+get.translation(player.getEquip('diqi'))+'并防止即将受到的'+get.cnNumber(event.num)+'点伤害';
				},
				content:function(){
					player.discard(player.getEquip('diqi'));
					trigger.cancel();
				},
				ai:{
					filterDamage:true,
					skillTagFilter:function(player,tag,arg){
						if(arg&&arg.player){
							if(arg.player.hasSkillTag('jueqing',false,player)) return false;
						}
					},
				},
			},
			online_aozhan:{
				trigger:{player:'phaseBefore'},
				forced:true,
				popup:false,
				firstDo:true,
				filter:function(event,player){
					return !_status._aozhan&&game.roundNumber>10;
				},
				content:function(){
					var color=get.groupnature(player.group,"raw");
					if(player.isUnseen()) color='fire';
					player.$fullscreenpop('鏖战模式',color); 
					game.broadcastAll(function(){
						_status._aozhan=true;
						ui.aozhan=ui.create.div('.touchinfo.left',ui.window);
						ui.aozhan.innerHTML='鏖战模式';
						if(ui.time3) ui.time3.style.display='none';
						ui.aozhanInfo=ui.create.system('鏖战模式',null,true);
						lib.setPopped(ui.aozhanInfo,function(){
							var uiintro=ui.create.dialog('hidden');
							uiintro.add('鏖战模式');
							var list=[
								'从第11轮开始,游戏将进入〔鏖战模式〕。',
								'在鏖战模式下,任何角色均不是非转化的【桃】的合法目标。【桃】可以被当做【杀】或【闪】使用或打出。',
							];
							var intro='<ul style="text-align:left;margin-top:0;width:450px">';
							for(var i=0;i<list.length;i++){
								intro+='<li>'+list[i];
							}
							intro+='</ul>'
							uiintro.add('<div class="text center">'+intro+'</div>');
							var ul=uiintro.querySelector('ul');
							if(ul){
								ul.style.width='180px';
							}
							uiintro.add(ui.create.div('.placeholder'));
							return uiintro;
						},250);
						game.playBackgroundMusic();
					});
					game.removeGlobalSkill('online_aozhan');
					game.countPlayer(function(current){current.addSkill('aozhan')});
				},
			},
			online_juzhong:{
				trigger:{global:'useCard'},
				direct:true,
				ruleSkill:true,
				filter:function(event,player){
					return _status.mode=='online'&&!event.all_excluded&&event.player.isFriendOf(player)&&event.player!=player&&lib.skill.online_juzhong.infos[event.card.name]&&player.hasCard(function(card){
						if(_status.connectMode) return true;
						return get.name(card,player)==event.card.name;
					},'h');
				},
				content:function(){
					'step 0'
					player.chooseToDiscard('是否响应【聚众】?',get.translation(trigger.player)+'使用了'+get.translation(trigger.card)+'。你可弃置一张名称相同的牌,令'+lib.skill.online_juzhong.infos[trigger.card.name][0],function(card,player){
						return get.name(card,player)==_status.event.getTrigger().card.name;
					}).set('ai',lib.skill.online_juzhong.infos[trigger.card.name][2]).logSkill=['_juzhong',trigger.player];
					'step 1'
					if(result.bool){
						lib.skill.online_juzhong.infos[trigger.card.name][1]();
						if(!event.goon) event.finish();
					}
					else event.finish();
					'step 2'
					trigger.player.chooseTarget('你可选择一名角色,弃置其的一张牌',function(card,player,target){
						return target.countDiscardableCards(player,'he')>0;
					}).set('ai',function(target){
						var player=_status.event.player;
						return get.effect(target,{name:'guohe_copy2'},player,player);
					});
					'step 3'
					if(result.bool){
						var target=result.targets[0];
						trigger.player.line(target,'green');
						trigger.player.discardPlayerCard(target,true,'he');
					}
				},
				infos:{
					sha:['此【杀】的伤害值基数+1。',function(){
						var evt=_status.event._trigger;
						if(!evt.baseDamage) evt.baseDamage=1;
						evt.baseDamage++;
					},function(card){
						var evt=_status.event.getTrigger();
						if(!evt.targets.length) return 0;
						if(evt.targets[0].hasShan()||evt.targets[0].hasSkillTag('filterDamage',null,{
							player:evt.targets[0],
							card:evt.card,
						})) return 0;
						return 1;
					}],
					shan:['其可弃置一名角色的一张牌。',function(){
						_status.event.goon=true;
					},function(card){
						if(game.zhu.countCards('he',function(card){
							return get.value(card,game.zhu)>=6;
						})) return 7-get.value(card);
						if(game.zhu.countCards('he',function(card){
							return get.value(card,game.zhu)>0
						})) return 5-get.value(card);
						return 0;
					}],
					tao:['其摸两张牌。',function(){
						_status.event._trigger.player.draw(2);
					},function(card){
						return 6-get.value(card);
					}],
					jiu:['其本回合的伤害值或回复值+1。',function(){
						var player=_status.event._trigger.player;
						player.addTempSkill('juzhong_jiu');
						player.addMark('juzhong_jiu',1,false);
					},function(card){
						return 6-get.value(card);
					}],
				},
				ai:{
					viewHandcard:true,
					skillTagFilter:function(player,tag,target){
						if(_status.mode!='online'||player==target||player.identity!=target.identity) return false;
					},
				},
			},
			juzhong_jiu:{
				trigger:{
					player:'recoverBegin',
					source:'damageBegin1',
				},
				forced:true,
				popup:false,
				content:function(){
					trigger.num+=player.countMark('juzhong_jiu');
				},
				onremove:true,
				intro:{content:'本回合的伤害值和回复值+#'},
			},
			online_zhadan_button:{
				trigger:{
					global:'gameDrawAfter',
					player:['gainEnd','loseEnd'],
				},
				firstDo:true,
				forced:true,
				charlotte:true,
				popup:false,
				silent:true,
				filter:function(event,player){
					if(_status.mode!='online'||(player!=game.me&&!player.isOnline())) return;
					if(event.name!='lose') return !player.hasZhadan&&player.countCards('hs','zhadan')>0;
					return player.hasZhadan&&!player.countCards('hs','zhadan');
				},
				content:function(){
					if(!player.hasZhadan){
						player.hasZhadan=true;
						if(player==game.me) lib.skill.online_zhadan_button.initZhadan();
						else player.send(function(){lib.skill.online_zhadan_button.initZhadan()});
					}
					else{
						delete player.hasZhadan;
						if(player==game.me) lib.skill.online_zhadan_button.removeZhadan();
						else player.send(function(){lib.skill.online_zhadan_button.removeZhadan()});
					}
				},
				initZhadan:function(){
					ui.zhadan_button=ui.create.control('激活炸弹','stayleft',function(){
						if(this.classList.contains('hidden')) return;
						this.classList.toggle('glow');
						if(this.classList.contains('glow')&&_status.event.type=='zhadan'&&
						_status.event.isMine()&&ui.confirm&&_status.imchoosing){
							ui.click.cancel(ui.confirm.lastChild);
						}
					});
				},
				removeZhadan:function(){
					if(ui.zhadan_button){
						ui.zhadan_button.remove();
						delete ui.zhadan_button;
					}
				},
			},
			online_zhadan:{
				trigger:{player:'useCard'},
				priority:5,
				popup:false,
				forced:true,
				filter:function(event,player){
					return game.hasPlayer(function(current){
						return current.hasCard(function(card){
							if(get.name(card)!='zhadan') return false;
							return lib.filter.cardEnabled(card,player,'forceEnable');
						},'hs');
					});
				},
				forceLoad:true,
				content:function(){
					'step 0'
					event.source=trigger.player;
					event.card=trigger.card;
					event.targets=trigger.targets;
					event._global_waiting=true;
					event.filterCard=function(card,player){
						if(get.name(card)!='zhadan'||get.itemtype(card)!='card') return false;
						return lib.filter.cardEnabled(card,player,'forceEnable');
					};
					event.send=function(player,card,source,targets,id,id2,skillState){
						if(skillState){
							player.applySkills(skillState);
						}
						if(player==game.me&&ui.zhadan_button&&!ui.zhadan_button.classList.contains('glow')){
							_status.event._result={bool:false};
							if(game.online){
								_status.event._resultid=id;
								game.resume();
							}
							return;
						}
						var str=get.translation(source);
						if(targets&&targets.length){
							str+='对'+get.translation(targets);
						}
						str+='使用了';
						str+=get.translation(card);
						str+=',是否对其使用【炸弹】?';

						var next=player.chooseToUse({
							filterCard:function(card,player){
								if(get.name(card)!='zhadan'||get.itemtype(card)!='card') return false;
								return lib.filter.cardEnabled(card,player,'forceEnable');
							},
							prompt:str,
							_global_waiting:true,
							ai1:function(card){
								var evt=_status.event.getParent('_zhadan')._trigger,player=_status.event.player;
								if(!evt) return 0;
								if(get.attitude(player,evt.player)>0) return 0;
								var eff=0;
								if(!targets.length) return Math.random()-0.5;
								for(var i of targets) eff-=get.effect(i,evt.card,evt.player,player);
								return eff-8;
							},
							source:source,
							source2:targets,
							id:id,
							id2:id2,
							type:'zhadan',
						});
						next.set('respondTo',[source,card]);

						if(game.online){
							_status.event._resultid=id;
							game.resume();
						}
						else{
							next.nouse=true;
						}
					};
					'step 1'
					var list=game.filterPlayer(function(current){
						return current.hasCard(function(card){
							if(get.name(card)!='zhadan') return false;
							return lib.filter.cardEnabled(card,player,'forceEnable');
						},'hs');
					});
					event.list=list;
					event.id=get.id();
					list.sort(function(a,b){
						return get.distance(event.source,a,'absolute')-get.distance(event.source,b,'absolute');
					});
					'step 2'
					if(event.list.length==0){
						event.finish();
					}
					else if(_status.connectMode&&(event.list[0].isOnline()||event.list[0]==game.me)){
						event.goto(4);
					}
					else{
						event.current=event.list.shift();
						event.send(event.current,event.card,event.source,event.targets,event.id,trigger.parent.id);
					}
					'step 3'
					if(result.bool){
						event.zhadanresult=event.current;
						event.zhadanresult2=result;
						if(event.current!=game.me&&!event.current.isOnline()) game.delayx();
						event.goto(8);
					}
					else{
						event.goto(2);
					}
					'step 4'
					var id=event.id;
					var sendback=function(result,player){
						if(result&&result.id==id&&!event.zhadanresult&&result.bool){
							event.zhadanresult=player;
							event.zhadanresult2=result;
							game.broadcast('cancel',id);
							if(_status.event.id==id&&_status.event.name=='chooseToUse'&&_status.paused){
								return (function(){
									event.resultOL=_status.event.resultOL;
									ui.click.cancel();
									if(ui.confirm) ui.confirm.close();
								});
							}
						}
						else{
							if(_status.event.id==id&&_status.event.name=='chooseToUse'&&_status.paused){
								return (function(){
									event.resultOL=_status.event.resultOL;
								});
							}
						}
					};

					var withme=false;
					var withol=false;
					var list=event.list;
					for(var i=0;i<list.length;i++){
						if(list[i].isOnline()){
							withol=true;
							list[i].wait(sendback);
							list[i].send(event.send,list[i],event.card,event.source,event.targets,event.id,trigger.parent.id,get.skillState(list[i]));
							list.splice(i--,1);
						}
						else if(list[i]==game.me){
							withme=true;
							event.send(list[i],event.card,event.source,event.targets,event.id,trigger.parent.id);
							list.splice(i--,1);
						}
					}
					if(!withme){
						event.goto(6);
					}
					if(_status.connectMode){
						if(withme||withol){
							for(var i=0;i<game.players.length;i++){
								game.players[i].showTimer();
							}
						}
					}
					event.withol=withol;
					'step 5'
					if(result&&result.bool&&!event.zhadanresult){
						game.broadcast('cancel',event.id);
						event.zhadanresult=game.me;
						event.zhadanresult2=result;
					}
					'step 6'
					if(event.withol&&!event.resultOL){
						game.pause();
					}
					'step 7'
					for(var i=0;i<game.players.length;i++){
						game.players[i].hideTimer();
					}
					'step 8'
					if(event.zhadanresult){
						event.zhadanresult.$fullscreenpop('炸弹',get.groupnature(event.zhadanresult));
						var next=event.zhadanresult.useResult(event.zhadanresult2);
						next.respondTo=[trigger.player,trigger.card];
						game.bonusNum*=2;
						game.updateRoundNumber();
					}
				}
			},
		},
		card:{
			baiyidujiang:{
				fullskin:true,
				enable:true,
				filterTarget:function(card,player,target){
					return target==game.zhu;
				},
				selectTarget:-1,
				type:'trick',
				content:function(){
					'step 0'
					if(!player.isIn()||!target.isIn()){
						event.finish();
						return;
					}
					var num1=0,num2=Infinity,str=get.translation(target);
					game.countPlayer(function(current){
						var num=current.countCards('h');
						if(num>num1) num1=num;
						if(num<num2) num2=num;
					});
					var num=target.countCards('h'),choices=[];
					event.addIndex=0;
					if(num<num1){
						choices.push('令'+str+'将手牌摸至'+get.cnNumber(num1)+'张');
						event.num1=num1;
					}
					else event.addIndex++;
					if(num>num2){
						choices.push('令'+str+'将手牌弃置至'+get.cnNumber(num2)+'张');
						event.num2=num2;
					}
					if(!choices.length) event.finish();
					else if(choices.length==1) event._result={index:0};
					else player.chooseControl().set('choiceList',choices).set('ai',function(){
						var evt=_status.event.getParent();
						return get.attitude(evt.player,evt.target)>0?0:1;
					});
					'step 1'
					if(result.index+event.addIndex==0){
						target.drawTo(event.num1);
					}
					else target.chooseToDiscard(true,'h',target.countCards('h')-event.num2);
				},
				ai:{
					order:6,
					value:4,
					useful:2,
					tag:{
						draw:1,
						loseCard:1,
					},
					result:{
						target:function(player,target,card,isLink){
							var num1=0,num2=Infinity,str=get.translation(target);
							game.countPlayer(function(current){
								var num=current.countCards('h',function(cardx){
										if(ui.selected.cards.contains(cardx)) return false;
										if(card.cards&&card.cards.contains(cardx)) return false;
										return true;
								});
								if(num>num1) num1=num;
								if(num<num2) num2=num;
							});
							var num=target.countCards('h',function(cardx){
								if(ui.selected.cards.contains(cardx)) return false;
								if(card.cards&&card.cards.contains(cardx)) return false;
								return true;
							});
							if(num1>num){
								if(get.attitude(player,target)>0) return (num1-num)/1.2;
							}
							if(num2<num){
								if(get.attitude(player,target)>0) return (num2-num)/1.2;
							}
							return 0;
						}
					}
				}
			},
			shuiyanqijuny:{
				fullskin:true,
				cardimage:'shuiyanqijunx',
				enable:true,
				filterTarget:true,
				type:'trick',
				selectTarget:[1,2],
				targetprompt:['受伤弃牌','受伤摸牌'],
				contentBefore:function(){
					var evt=event.getParent(),target=evt.stocktargets[0];
					evt.shuiyanqijun_target=target;
				},
				content:function(){
					target.damage('thunder');
					if(target!=event.getParent().shuiyanqijun_target) target.draw();
					else target.chooseToDiscard('he',true);
				},
				ai:{
					order:6,
					value:4,
					useful:2,
					tag:{
						damage:1,
						thunderDamage:1,
						natureDamage:1,
						loseCard:1,
					},
					result:{
						target:function(player,target){
							if(!ui.selected.targets.length) return -1.5;
							return -0.5
						}
					}
				}
			},
			luojingxiashi:{
				fullskin:true,
				enable:true,
				type:'trick',
				selectTarget:-1,
				filterTarget:function(card,player,target){
					return target!=player&&target.isDamaged();
				},
				content:function(){
					target.damage();
				},
				ai:{
					order:3,
					value:4,
					useful:2,
					tag:{
						loseCard:1,
					},
					result:{
						target:-1.5,
					}
				}
			},
			binglinchengxia:{
				fullskin:true,
				type:'delay',
				filterTarget:function(card,player,target){
					return (lib.filter.judge(card,player,target)&&player!=target);
				},
				judge:function(card){
					if(get.suit(card)=='diamond') return 0;
					return -3;
				},
				effect:function(){
					'step 0'
					if(result.bool==false){
						if(!player.countCards('e',function(card){
							return lib.filter.cardDiscardable(card,player,'shuiyanqijuny');
						})){
							player.damage('nosource');
							event.finish();
							return;
						}
						else player.chooseControl('discard_card','take_damage',function(event,player){
							if(get.damageEffect(player,event.player,player)>=0){
								return 'take_damage';
							}
							if(player.hp>=3&&player.countCards('e')>=2){
								return 'take_damage';
							}
							return 'discard_card';
						});
					}
					else event.finish();
					'step 1'
					if(result.control=='discard_card'){
						player.discard(player.getCards('e',function(card){
							return lib.filter.cardDiscardable(card,player,'shuiyanqijuny');
						}));
					}
					else player.damage('nosource');
				},
				ai:{
					order:1,
					value:3,
					useful:2,
					tag:{
						damage:1,
						loseCard:1,
					},
					result:{
						target:function(player,target,card,isLink){
							var es=target.getCards('e');
							if(!es.length) return -1.5;
							var val=0;
							for(var i of es) val+=get.value(i,target);
							return -Math.min(1.5,val/5);
						}
					}
				}
			},
			toushiche:{
				fullskin:true,
				type:'equip',
				subtype:'equip1',
				distance:{attackFrom:-3},
				ai:{
					basic:{
						equipValue:2.5
					}
				},
				skills:['toushiche_skill']
			},
			gongshoujianbei:{
				fullskin:true,
				type:'trick',
			},
			jintuiziru:{
				fullskin:true,
				type:'trick',
			},
			diqi:{
				fullskin:true,
				type:"equip",
				subtype:"equip2",
				skills:['diqi_skill'],
				destroy:'diqi_skill',
				ai:{
					basic:{
						equipValue:6
					},
				},
			},
			zhadan:{
				audio:true,
				fullskin:true,
				type:'trick',
				ai:{
					basic:{
						useful:[6,4],
						value:[6,4],
					},
					result:{player:1},
				},
				notarget:true,
				content:function(){
					var evt=event.getParent(2)._trigger;
					evt.targets.length=0;
					evt.all_excluded=true;
					game.log(evt.card,'的效果被炸弹抵消了');
				},
			},
			jiwangkailai:{
				audio:true,
				fullskin:true,
				type:'trick',
				enable:function(card,player){
					var hs=player.getCards('h',function(cardx){
						return cardx!=card&&(!card.cards||!card.cards.contains(cardx));
					});
					if(!hs.length) return false;
					var use=true,discard=true;
					for(var i of hs){
						if(use&&!game.checkMod(i,player,'unchanged','cardEnabled2',player)) use=false;
						if(discard&&!lib.filter.cardDiscardable(i,player,'jiwangkailai')) discard=false;
						if(!use&&!discard) return false;
					}
					return true;
				},
				selectTarget:-1,
				toself:true,
				filterTarget:function(card,player,target){
					return target==player;
				},
				modTarget:true,
				content:function(){
					'step 0'
					var hs=player.getCards('h');
					if(hs.length){
						var use=true,discard=true;
						for(var i of hs){
							if(use&&!game.checkMod(i,player,'unchanged','cardEnabled2',player)) use=false;
							if(discard&&!lib.filter.cardDiscardable(i,player,'jiwangkailai')) discard=false;
							if(!use&&!discard) break;
						}
						if(use&&discard) player.chooseControl().set('prompt','继往开来:请选择一项').set('choiceList',[
							'弃置所有手牌,然后摸等量的牌',
							'将所有手牌当做一张普通锦囊牌使用',
						]).set('ai',function(){
							if(_status.event.player.countCards('h')>2) return 0;
							return 1;
						});
						else if(use) event._result={index:1};
						else if(discard) event._result={index:0};
						else event.finish();
					}
					else event.finish();
					'step 1'
					var cards=player.getCards('h');
					if(result.index==0){
						player.discard(cards);
						player.draw(cards.length);
						event.finish();
					}
					else{
						var list=[];
						for(var i of lib.inpile){
							if(i!='jiwangkailai'&&get.type(i)=='trick'&&lib.filter.filterCard({name:i,cards:cards},player)) list.push(['锦囊','',i]);
						}
						if(list.length){
							player.chooseButton(['继往开来:选择要使用的牌',[list,'vcard']],true).set('ai',function(button){
								var player=_status.event.player;
								return player.getUseValue({name:button.link[2],cards:player.getCards('h')});
							});
						}
						else event.finish();
					}
					'step 2'
					if(result.bool) player.chooseUseTarget({name:result.links[0][2]},player.getCards('h'),true);
				},
				ai:{
					basic:{
						order:0.5,
						useful:3,
						value:5
					},
					result:{
						target:function(player,target){
							if(target.needsToDiscard(1)||!target.countCards('h',function(card){
								return get.value(card,player)>=5.5;
							})) return 1;
							return 0;
						},
					},
					tag:{
						draw:2
					}
				}
			},
		},
		characterOnline:{
			wei:[
				're_caocao','re_guojia','re_simayi','re_xiahoudun','xuzhu','re_zhangliao','re_zhenji','ol_xiahouyuan','dianwei','re_xunyu','zhanghe',
				'yujin_yujin','re_caozhang','wangyi','guohuai','hanhaoshihuan','chenqun','re_caoxiu','guohuanghou','sunziliufang','xunyou','xinxianying',
				'sp_caiwenji','caoang','caochun','caohong','sp_caoren','chenlin','sp_jiaxu','litong','sp_pangde','simalang','wanglang',
				'kuailiangkuaiyue','wangji','sp_simazhao','sp_wangyuanji','yuejin','zangba','xinpi','liuye','simashi','zhuling','duji','caoanmin',
			],
			shu:[
				're_guanyu','re_huangyueying','re_liubei','re_machao','re_zhangfei','zhaoyun','re_huangzhong','re_weiyan','re_pangtong','ol_sp_zhugeliang',
				're_menghuo','re_zhurong','re_fazheng','re_masu','guanxingzhangbao','xin_liaohua','old_madai','re_jianyong','wuyi','zhangsong','zhoucang',
				'liuchen','xiahoushi','re_zhangyi','liyan','guanyinping','guansuo','mayunlu','mazhong','mizhu','sunqian','xiahouba','zhangxingcai',
				'wangping','yanyan','chendao','ganfuren','re_maliang','dengzhi','lifeng','zhangyì',
			],
			wu:[
				're_ganning','re_huanggai','re_sunquan','re_sunshangxiang','re_zhouyu','old_zhoutai','re_xiaoqiao','re_taishici','sunjian','re_zhangzhang',
				're_lingtong','re_wuguotai','xin_xusheng','re_bulianshi','re_chengpu','handang','xin_panzhangmazhong','xin_zhuran','guyong','zhuhuan','cenhun','sundeng','xuezong',
				'daxiaoqiao','heqi','kanze','sunhao','re_sunluyu','sunshao','zhugejin','zumao','dingfeng','sunliang','zhoufei',
				'weiwenzhugezhi','xf_sufei','xugong','lingcao','sunru','lvdai','panjun','yanjun','zhoufang',
			],
			qun:[
				're_diaochan','re_gongsunzan','re_huatuo','re_huaxiong','re_lvbu','ol_pangde','re_yanwen','jiaxu','gaoshun','xin_liubiao','chengong',
				're_gongsunyuan','guotufengji','dongbai','fuwan','liuxie','sp_machao','tadun','yanbaihu','yuanshu','zhangbao','yl_luzhi','huangfusong','sp_ganning','huangjinleishi',
				're_panfeng','guosi','sp_liuqi','mangyachang','gaolan','lvkuanglvxiang','xunchen','sp_zhanghe','re_hansui','re_hejin','zhujun','ol_dingyuan','hanfu','wangrong',
				'dongcheng','gongsunkang','hucheer','sp_sufei','yj_xuhuang','yj_zhanghe','yj_zhangliao','liuyao','wangcan','sp_taishici','caimao','jiling',
			],
			key:[
				'sp_key_yuri','key_akane','key_akiko','key_ao','key_harukakanata','key_haruko','key_hinata','key_kengo','key_komari','key_kotori','key_kyoko','key_nagisa','key_noda','key_rei','key_rin','key_rumi','key_ryoichi','key_sasami','key_shiorimiyuki','key_shiroha','key_shizuku','key_tomoya','key_tsumugi','key_umi','key_yoshino','key_youta','key_yukine','key_nao','key_misuzu',
			],
		},
		online_cardPile:[
			['spade',1,'guding'],
			['spade',1,'zhadan'],
			['spade',2,'tengjia'],
			['spade',2,'cixiong'],
			['spade',3,'jiu'],
			['spade',3,'guohe'],
			['spade',4,'sha','thunder'],
			['spade',4,'guohe'],
			['spade',5,'sha','thunder'],
			['spade',5,'qinglong'],
			['spade',6,'sha','thunder'],
			['spade',6,'jiwangkailai'],
			['spade',7,'sha','thunder'],
			['spade',7,'jintuiziru'],
			['spade',8,'sha','thunder'],
			['spade',8,'sha'],
			['spade',9,'jiu'],
			['spade',9,'sha'],
			['spade',10,'gongshoujianbei'],
			['spade',10,'sha'],
			['spade',11,'tiesuo'],
			['spade',11,'shunshou'],
			['spade',12,'tiesuo'],
			['spade',12,'zhangba'],
			['spade',13,'wuxie'],
			['spade',13,'dawanma'],
			
			['club',1,'baiyin'],
			['club',1,'zhuge'],
			['club',2,'tengjia'],
			['club',2,'bagua'],
			['club',3,'jiu'],
			['club',3,'sha'],
			['club',4,'jintuiziru'],
			['club',4,'sha'],
			['club',5,'sha','thunder'],
			['club',5,'dilu'],
			['club',6,'sha','thunder'],
			['club',6,'sha'],
			['club',7,'sha','thunder'],
			['club',7,'sha'],
			['club',8,'sha','thunder'],
			['club',8,'sha'],
			['club',9,'jiu'],
			['club',9,'sha'],
			['club',10,'tiesuo'],
			['club',10,'sha'],
			['club',11,'tiesuo'],
			['club',11,'sha'],
			['club',12,'tiesuo'],
			['club',12,'wuxie'],
			['club',13,'tiesuo'],
			['club',13,'jiedao'],
			['club',13,'wuxie'],
			
			['heart',1,'wuxie'],
			['heart',1,'gongshoujianbei'],
			['heart',1,'zhadan'],
			['heart',2,'huogong'],
			['heart',2,'shan'],
			['heart',3,'huogong'],
			['heart',3,'wuzhong'],
			['heart',4,'sha','fire'],
			['heart',4,'tao'],
			['heart',5,'tao'],
			['heart',5,'chitu'],
			['heart',6,'tao'],
			['heart',6,'jiwangkailai'],
			['heart',7,'sha','fire'],
			['heart',7,'tao'],
			['heart',8,'shan'],
			['heart',8,'wuzhong'],
			['heart',9,'shan'],
			['heart',9,'tao'],
			['heart',10,'sha','fire'],
			['heart',10,'sha'],
			['heart',11,'shan'],
			['heart',11,'wuzhong'],
			['heart',12,'shan'],
			['heart',12,'guohe'],
			['heart',13,'wuxie'],
			['heart',13,'zhuahuang'],
			
			['diamond',1,'zhuque'],
			['diamond',1,'juedou'],
			['diamond',2,'tao'],
			['diamond',2,'shan'],
			['diamond',3,'tao'],
			['diamond',3,'shan'],
			['diamond',4,'sha','fire'],
			['diamond',4,'shunshou'],
			['diamond',5,'sha','fire'],
			['diamond',5,'guanshi'],
			['diamond',6,'shan'],
			['diamond',6,'sha'],
			['diamond',7,'shan'],
			['diamond',7,'shan'],
			['diamond',8,'shan'],
			['diamond',8,'shan'],
			['diamond',9,'jiu'],
			['diamond',9,'shan'],
			['diamond',10,'shan'],
			['diamond',10,'sha'],
			['diamond',11,'shan'],
			['diamond',11,'shan'],
			['diamond',12,'huogong'],
			['diamond',12,'tao'],
			['diamond',13,'xiliu'],
			['diamond',13,'sha'],
			['diamond',13,'wuxie']
		],
		help:{
			'斗地主':'<div style="margin:10px">游戏规则</div><ul style="margin-top:0"><li>游戏人数<br>游戏人数为3人(地主x1 + 农民x2)。<li>胜利条件<br>农民:地主死亡。<br>地主:所有农民死亡且自己存活。'+
			'<li>死亡奖惩<br>当有农民死亡时,若另一名农民存活,则其可以选择摸两张牌或回复一点体力。<li>地主专属技能<br>地主可以使用专属技能【飞扬】和【跋扈】。<br>【飞扬】判定阶段开始时,若你的判定区有牌,则你可以弃置两张手牌,然后弃置你判定区的一张牌。每回合限一次。<br>【跋扈】锁定技,准备阶段开始时,你摸一张牌。出牌阶段,你可以多使用一张【杀】。</ul>',
		}
	};
});