'use strict';
game.import('character',function(lib,game,ui,get,ai,_status){
	return {
		name:'huicui',
		connect:true,
		character:{
			dc_dongzhao:['male','wei',3,['dcyijia','dcdingji']],
			kuaiqi:['male','wei',3,['dcliangxiu','dcxunjie']],
			yue_caiyong:['male','qun',3,['dcjiaowei','dcfeibai']],
			pangshanmin:['male','wei',3,['dccaisi','dczhuoli']],
			dc_jiachong:['male','wei',3,['dcbeini','dcshizong']],
			dc_sunchen:['male','wu',4,['dczigu','dczuowei']],
			dc_zhangmancheng:['male','qun',4,['dclvecheng','dczhongji']],
			yue_zhoufei:['female','wu',3,['dclingkong','dcxianshu']],
			dc_wuban:['male','shu',4,['dcyouzhan'],['clan:陈留吴氏']],
			yue_caiwenji:['female','qun',3,['dcshuangjia','dcbeifen']],
			liuchongluojun:['male','qun',3,['dcminze','dcjini']],
			yuechen:['male','wei',4,['dcporui','dcgonghu']],
			zhangkai:['male','qun',4,['dcxiangshu']],
			gaoxiang:['male','shu',4,['dcchiying']],
			yuanyin:['male','qun',3,['dcmoshou','dcyunjiu']],
			dongwan:['female','qun',3,['dcshengdu','dcjieling']],
			zhangchu:['female','qun',3,['dcjizhong','dcrihui','dcguangshi']],
			peiyuanshao:['male','qun',4,['dcmoyu']],
			mengjie:['male','qun',3,['dcyinlu','dcyouqi']],
			dc_huojun:['male','shu',4,['dcgue','dcsigong']],
			dc_sunhanhua:['female','wu',3,['dchuiling','dcchongxu']],
			dc_sunziliufang:['male','wei',3,['dcqinshen','dcweidang']],
			yuantanyuanxiyuanshang:['male','qun',4,['dcneifa']],
			qiaorui:['male','qun',4,['dcaishou','dcsaowei']],
			xianglang:['male','shu',3,['dckanji','dcqianzheng']],
			qinlang:['male','wei',4,['dchaochong','dcjinjin']],
			furongfuqian:['male','shu','4/6',['dcxuewei','dcyuguan']],
			zhenghun:['male','wei',3,['dcqiangzhi','dcpitian']],
			dc_zhaotongzhaoguang:['male','shu',4,['yizan_use','dcqingren','dclongyuan']],
			dc_huanghao:['male','shu',3,['dcqinqing','huisheng','dccunwei']],
			liupi:['male','qun',4,['dcjuying']],
			dc_sp_jiaxu:['male','wei',3,['zhenlue','dcjianshu','dcyongdi']],
			leibo:['male','qun',4,['dcsilve','dcshuaijie']],
			gongsundu:['male','qun',4,['dczhenze','dcanliao']],
			panghui:['male','wei',5,['dcyiyong']],
			dc_yuejiu:['male','qun',4,['dccuijin']],
			chenjiao:['male','wei',3,['dcxieshou','dcqingyan','dcqizi']],
			wanglie:['male','qun',3,['dcchongwang','dchuagui']],
			chengui:['male','qun',3,['dcyingtu','dccongshi']],
			dc_huangquan:['male','shu',3,['dcquanjian','dctujue']],
			yinfuren:['female','wei',3,['dcyingyu','dcyongbi']],
			dc_lvkuanglvxiang:['male','wei',4,['dcshuhe','dcliehou']],
			guanhai:['male','qun',4,['suoliang','qinbao']],
			huzhao:['male','qun',3,['midu','xianwang']],
			dc_liuba:['male','shu',3,['dczhubi','dcliuzhuan']],
			zhangxun:['male','qun',4,['suizheng']],
			zongyu:['male','shu',3,['zyqiao','chengshang']],
			dc_jiling:['male','qun',4,['dcshuangren']],
			dc_yanghu:['male','wei',3,['dcdeshao','dcmingfa']],
			caimaozhangyun:['male','wei',4,['lianzhou','jinglan']],
			tenggongzhu:['female','wu',3,['xingchong','liunian']],
			dc_huangchengyan:['male','qun',3,['dcjiezhen','dczecai','dcyinshi']],
			dc_gaolan:['male','qun',4,['xizhen']],
			guanning:['male','qun','3/7',['dunshi']],
			dc_jiben:['male','qun',3,['xunli','zhishi','lieyi']],
			mamidi:['male','qun','4/6',['bingjie','zhengding']],
			re_dengzhi:['male','shu',3,['jianliang','weimeng']],
			fengxi:['male','wu',3,['yusui','boyan']],
			re_miheng:['male','qun',3,['rekuangcai','reshejian']],
			re_chendeng:['male','qun',3,['refuyuan','reyingshui','rewangzu']],
			wanniangongzhu:['female','qun',3,['zhenge','xinghan']],
			re_xunchen:['male','qun',3,['refenglve','anyong'],['clan:颍川荀氏']],
			re_kanze:['male','wu',3,['xiashu','rekuanshi']],
			lvlingqi:['female','qun',4,['guowu','zhuangrong']],
			zhanghu:['male','wei',4,['cuijian','zhtongyuan']],
			luyusheng:['female','wu',3,['zhente','zhiwei']],
			huaxin:['male','wei',3,['spwanggui','xibing']],
			mengyou:['male','qun',5,['manyi','dcmanzhi']],
			liuyong:['male','shu',3,['zhuning','fengxiang']],
			dc_sunru:['female','wu',3,['xiecui','youxu']],
			xiahoulingnv:['female','wei',4,['fuping','weilie']],
			zhangyao:['female','wu',3,['yuanyu','xiyan']],
			tengyin:['male','wu',3,['chenjian','xixiu']],
			zhangxuan:['female','wu',4,['tongli','shezang']],
			wangtao:['female','shu',3,['huguan','yaopei']],
			wangyue:['female','shu',3,['huguan','mingluan']],
			zhaoyan:['female','wu',3,['jinhui','qingman']],
			heyan:['male','wei',3,['yachai','qingtan']],
			re_sunluyu:['female','wu',3,['remeibu','remumu']],
			re_dongbai:['female','qun',3,['relianzhu','rexiahui']],
			zhoushan:['male','wu',4,['dcmiyun','dcdanying']],
			dc_caiyang:['male','wei',4,['dcxunji','dcjiaofeng']],
			xiahoujie:['male','wei',5,['liedan','zhuangdan']],
			caoxing:['male','qun',4,['cxliushi','zhanwan']],
			re_chunyuqiong:['male','qun',4,['recangchu','reliangying','reshishou']],
			xingdaorong:['male','qun','4/6',['xuxie']],
			re_panfeng:['male','qun',4,['xinkuangfu']],
		},
		characterSort:{
			huicui:{
				sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie','dc_caiyang','zhoushan'],
				sp_caizijiaren:['re_dongbai','re_sunluyu','heyan','zhaoyan','wangtao','wangyue','zhangxuan','tengyin','zhangyao','xiahoulingnv','dc_sunru','pangshanmin','kuaiqi'],
				sp_zhilan:['liuyong','wanniangongzhu','zhanghu','lvlingqi','tenggongzhu','panghui','dc_zhaotongzhaoguang','yuantanyuanxiyuanshang','yuechen'],
				sp_guixin:['re_kanze','re_chendeng','caimaozhangyun','dc_lvkuanglvxiang','dc_gaolan','yinfuren','chengui','chenjiao','dc_sp_jiaxu','qinlang','dc_dongzhao'],
				sp_daihan:['mamidi','dc_jiling','zhangxun','dc_yuejiu','wanglie','leibo','qiaorui','dongwan','yuanyin'],
				sp_jianghu:['guanning','huzhao','dc_huangchengyan','mengjie'],
				sp_zongheng:['huaxin','luyusheng','re_xunchen','re_miheng','fengxi','re_dengzhi','dc_yanghu','zongyu'],
				sp_taiping:['guanhai','liupi','peiyuanshao','zhangchu','zhangkai','dc_zhangmancheng'],
				sp_yanhan:['dc_liuba','dc_huangquan','furongfuqian','xianglang','dc_huojun','gaoxiang','dc_wuban'],
				sp_jishi:['dc_jiben','zhenghun','dc_sunhanhua','liuchongluojun'],
				sp_raoting:['dc_huanghao','dc_sunziliufang','dc_sunchen','dc_jiachong'],
				sp_yijun:['gongsundu','mengyou'],
				sp_zhengyin:['yue_caiwenji','yue_zhoufei','yue_caiyong'],
			}
		},
		skill:{
			//董昭
			dcyijia:{
				audio:2,
				trigger:{global:'damageEnd'},
				filter:function(event,player){
					if(!event.player.isIn()) return false;
					if(get.distance(player,event.player)>1) return false;
					return player.canMoveCard(null,true,game.filterPlayer(i=>i!=event.player),event.player,'canReplace');
				},
				check:function(event,player){
					return player.canMoveCard(true,true,game.filterPlayer(i=>i!=event.player),event.player,'canReplace');
				},
				prompt2:function(event,player){
					return `将场上一张装备牌移动至${get.translation(event.player)}的装备区内(替换原装备)。然后若其因此脱离了一名角色的攻击范围,你摸一张牌。`;
				},
				logTarget:'player',
				line:false,
				content:function*(event,map){
					const player=map.player,trigger=map.trigger,target=trigger.player;
					const inRangeList=game.filterPlayer(current=>current.inRange(target));
					yield player.moveCard(true,game.filterPlayer(i=>i!=target),target,'canReplace');
					const leaveSomeone=inRangeList.some(current=>!current.inRange(target));
					if(leaveSomeone) player.draw();
				},
				ai:{
					maixie:true,
					expose:0.2,
					threaten:3.3,
				},
			},
			dcdingji:{
				audio:2,
				trigger:{player:'phaseZhunbeiBegin'},
				direct:true,
				content:function*(event,map){
					const player=map.player;
					let result;
					result=yield player.chooseTarget(get.prompt2('dcdingji')).set('ai',target=>{
						const att=get.attitude(get.player(),target)/2;
						const delta=5-target.countCards('h');
						let fix=1;
						const hs=target.getCards('h');
						outer:for(let i=0;i<hs.length-1;i++){
							const name1=get.name(hs[i]);
							for(let j=i+1;j<hs.length;j++){
								const name2=get.name(hs[j]);
								if(name1==name2){
									fix=0.5; break outer;
								}
							}
						}
						if(delta>0){
							if(target.hasSkillTag('nogain')) att/=3;
							return Math.sqrt(delta)*att*fix;
						}
						if(delta>-2&&att>0) return fix==0.5?0.1:-1;
						return -Math.sqrt(-delta)*att/2;
					});
					if(!result.bool) return event.finish();
					const target=result.targets[0];
					player.logSkill('dcdingji',target);
					if(target!=player) player.addExpose(0.3);
					const delta=5-target.countCards('h');
					if(delta!=0){
						yield target[delta>0?'draw':'chooseToDiscard'](Math.abs(delta),true);
					}
					target.showHandcards();
					const hs=target.getCards('h');
					let hasSame=false;
					outer:for(let i=0;i<hs.length-1;i++){
						const name1=get.name(hs[i]);
						for(let j=i+1;j<hs.length;j++){
							const name2=get.name(hs[j]);
							if(name1==name2){
								hasSame=true; break outer;
							}
						}
					}
					game.delayex();
					if(hasSame) return event.finish();
					const list=get.inpileVCardList(info=>{
						if(!['basic','trick'].includes(info[0])) return false;
						if(!target.hasUseTarget(new lib.element.VCard({name:info[2],nature:info[3],isCard:true}))) return false;
						return hs.some(card=>{
							return get.name(card)==info[2]&&get.is.sameNature([card,info[3]],true);
						});
					});
					if(!list.length) return event.finish();
					result=yield target.chooseButton(['是否视为使用其中一张牌?',[list,'vcard']]).set('ai',button=>{
						return get.player().getUseValue({name:button.link[2]});
					});
					if(result.bool){
						target.chooseUseTarget(new lib.element.VCard({
							name:result.links[0][2],
							nature:result.links[0][3],
							isCard:true,
						}),true,false);
					}
				},
			},
			//蒯祺
			dcliangxiu:{
				audio:2,
				enable:'phaseUse',
				filter:function(event,player){
					return player.hasCard(card=>{
						const type=get.type2(card,player);
						return player.hasCard(cardx=>{
							if(card==cardx) return false;
							return get.type2(cardx,player)!=type;
						},'he');
					},'he');
				},
				filterCard:function(card,player){
					if(!ui.selected.cards.length) return true;
					return get.type2(ui.selected.cards[0],player)!=get.type2(card,player);
				},
				selectCard:2,
				check:function(card){
					const player=get.player();
					const bannedTypes=[];
					bannedTypes.addArray(player.getStorage('dcliangxiu'));
					if(!ui.selected.cards.length){
						let val=get.value(card);
						if(val>5.5) return 0;
						if(bannedTypes.includes(get.type2(card,player))) return 7.5-val;
						return 5.5-val;
					}
					bannedTypes.addArray(ui.selected.cards.map(card=>get.type2(card,player)));
					bannedTypes.add(get.type2(card,player));
					const filter=card=>!bannedTypes.includes(get.type2(card,player));
					if(!get.cardPile(filter)) return 0;
					return 6-get.value(card);
				},
				position:'he',
				complexCard:true,
				onremove:true,
				content:function*(event,map){
					const player=map.player;
					const cards=[];
					const bannedTypes=[];
					bannedTypes.addArray(event.cards.map(card=>get.type2(card,player)));
					bannedTypes.addArray(player.getStorage('dcliangxiu'));

					const filter=card=>!bannedTypes.includes(get.type2(card,player));
					const piles=['cardPile','discardPile'];
					for(const pile of piles){
						for(let i=0;i<ui[pile].childNodes.length;i++){
							const card=ui[pile].childNodes[i];
							if(filter(card)){
								cards.add(card);
								if(cards.length>=2) break;
							}
						}
						if(cards.length>=2) break;
					}
					let result;
					if(!cards.length){
						player.chat('没牌了…');
						game.log('但是哪里都找不到没有符合条件的牌!');
						event.finish();
						return;
					}
					else if(cards.length==1) result={bool:true,links:cards};
					else result=yield player.chooseButton(['良秀:获得一张牌',cards],true).set('ai',get.buttonValue);
					if(result.bool){
						const toGain=result.links;
						player.markAuto('dcliangxiu',get.type2(toGain[0],false));
						player.when({global:'phaseChange'}).then(()=>{
							player.unmarkSkill('dcliangxiu');
						});
						player.gain(toGain,'gain2');
					}
				},
				intro:{
					content:'已因此技能获得过$牌',
					onunmark:true,
				},
				ai:{
					order:2,
					result:{player:1},
				},
			},
			dcxunjie:{
				audio:2,
				trigger:{global:'phaseEnd'},
				filter:function(event,player){
					if(['handcard','hp'].every(i=>player.isTempBanned(`dcxunjie_${i}`))) return false;
					return player.hasHistory('gain',evt=>{
						return !evt.getParent('phaseDraw',true);
					});
				},
				direct:true,
				content:function*(event,map){
					const player=map.player;
					const choices=[];
					const choiceList=[
						'令一名角色将手牌数摸或弃置至与其体力值相同',
						'令一名角色将体力回复或失去至与其手牌数相同',
					];
					if(!player.isTempBanned('dcxunjie_handcard')) choices.push('选项一');
					else choiceList[0]='<span style="opacity:0.5">'+choiceList[0]+'(已被选择过)</span>';
					if(!player.isTempBanned('dcxunjie_hp')) choices.push('选项二');
					else choiceList[1]='<span style="opacity:0.5">'+choiceList[1]+'(已被选择过)</span>';
					let result;
					if(_status.connectMode) game.broadcastAll(()=>{_status.noclearcountdown=true});
					if(choices.length==1) result={control:choices[0]};
                    else result=yield player.chooseControl(choices,'cancel2').set('choiceList',choiceList).set('prompt',get.prompt('dcxunjie')).set('ai',()=>{
						return get.event('choice');
					}).set('choice',(()=>{
						const getValue=(index,target)=>{
							let att=get.attitude(player,target);
							att=Math.sign(att)*Math.sqrt(Math.abs(att));
							let delt=target.getHp(true)-target.countCards('h');
							if(index==1&&delt<0) delt=0;
							return (1-3*index)*att*delt;
						}
						const list=game.filterPlayer().map(current=>{
							const val0=getValue(0,current),val1=getValue(1,current);
							return [val0,val1,Math.max(val0,val1)];
						}).sort((a,b)=>{
							return b[2]-a[2];
						});
						const toChoose=list[0];
						if(toChoose[2]<=0) return 'cancel2';
						return toChoose[0]>toChoose[1]?0:1;
					})());
					if(result.control=='cancel2'){
						if(_status.connectMode){game.broadcastAll(()=>{delete _status.noclearcountdown;game.stopCountChoose()})}
						return event.finish();
					}
					let prompt='';
					const choice=result.control,index=choice=='选项一'?0:1;
					if(choices.length==1){
						prompt=`###${get.prompt('dcxunjie')}###<div class="text center">${choiceList[index]}</div>`;
					}
					else prompt=`###殉节:请选择一名角色###<div class="text center">${choiceList[index].replace('一名','该')}</div>`;
					result=yield player.chooseTarget(prompt).set('ai',target=>{
						const player=get.player(),index=get.event('index');
						let att=get.attitude(player,target);
						att=Math.sign(att)*Math.sqrt(Math.abs(att));
						let delt=target.getHp(true)-target.countCards('h');
						if(index==1&&delt<0) delt=0;
						return (1-2*index)*att*delt;
					}).set('index',index);
					if(_status.connectMode){game.broadcastAll(()=>{delete _status.noclearcountdown;game.stopCountChoose()})}
					if(!result.bool) return event.finish();
					const target=result.targets[0];
					player.logSkill('dcxunjie',target);
					player.tempBanSkill(`dcxunjie_${index==0?'handcard':'hp'}`,'roundStart',false);
					const delt=(target.getHp(true)-target.countCards('h'))*(1-2*index);
					if(delt==0) event.finish();
					else if(index==0) target[delt>0?'draw':'chooseToDiscard'](Math.abs(delt),true);
					else target[delt>0?'recover':'loseHp'](Math.abs(delt));
				}
			},
			//乐蔡邕
			dcjiaowei:{
				audio:2,
				trigger:{
					global:'phaseBefore',
					player:'enterGame'
				},
				forced:true,
				filter:function(event,player){
					return (event.name!='phase'||game.phaseNumber==0);
				},
				group:'dcjiaowei_prevent',
				content:function*(event,map){
					const player=map.player;
					var cards=player.getCards('h');
					player.addGaintag(cards,'dcjiaowei_tag');
				},
				mod:{
					ignoredHandcard:function(card,player){
						if(card.hasGaintag('dcjiaowei_tag')) return true;
					},
					cardDiscardable:function(card,player,name){
						if(name=='phaseDiscard'&&card.hasGaintag('dcjiaowei_tag')) return false;
					},
				},
				subSkill:{
					prevent:{
						audio:'dcjiaowei',
						trigger:{
							player:'damageBegin4',
						},
						forced:true,
						filter:function(event,player){
							if(!event.source||!event.source.isIn()) return false;
							return event.source.countCards('h')<=player.countCards('h',card=>card.hasGaintag('dcjiaowei_tag'));
						},
						content:function*(event,map){
							map.trigger.cancel();
						},
						ai:{
							effect:{
								target:function(card,player,target){
									if(get.tag(card,'damage')){
										const num=target.countCards('h',card=>card.hasGaintag('dcjiaowei_tag'));
										let cards=[];
										if(card.cards) cards.addArray(card.cards);
										if(ui.selected.cards) cards.addArray(ui.selected.cards);
										cards=cards.filter(card=>{
											if(get.itemtype(card)!='card') return false;
											return get.owner(card)==player&&get.position(card)=='e';
										});
										if(player.countCards('h')-cards.length<=num) return 'zeroplayertarget';
									}
								},
							},
						},
					},
				},
			},
			dcfeibai:{
				audio:2,
				trigger:{player:'useCardAfter'},
				usable:1,
				locked:false,
				filter:function(event,player){
					return player.getHistory('useCard').indexOf(event)>0;
				},
				prompt2:function(event,player){
					const history=player.getHistory('useCard');
					const ind=history.indexOf(event)-1,evt=history[ind];
					const len=get.cardNameLength(event.card)+get.cardNameLength(evt.card);
					return `随机获得一张字数为${len}的牌`;
				},
				check:function(event,player){
					const history=player.getHistory('useCard');
					const ind=history.indexOf(event)-1,evt=history[ind];
					const len=get.cardNameLength(event.card)+get.cardNameLength(evt.card);
					return player.countCards('h',card=>card.hasGaintag('dcjiaowei_tag'))<=len||get.cardPile(card=>{
						return get.cardNameLength(card,false)==len;
					});
				},
				content:function*(event,map){
					const player=map.player,trigger=map.trigger;
					const history=player.getHistory('useCard');
					const ind=history.indexOf(trigger)-1,evt=history[ind];
					const len=get.cardNameLength(trigger.card)+get.cardNameLength(evt.card);
					const card=get.cardPile(card=>{
						return get.cardNameLength(card,false)==len;
					});
					if(card){
						yield player.gain(card,'gain2');
					}
					else{
						let str=`没有${len}字的牌…`;
						if(len==5&&Math.random()<=0.2) str='五字不行哇';
						player.chat(str);
						game.log(`但是找不到字数为${len}的牌!`);
					}
					if(player.countCards('h',card=>card.hasGaintag('dcjiaowei_tag'))<=len){
						player.storage.counttrigger.dcfeibai--;
						game.log(player,'重置了','#【飞白】');
					}
				},
				mod:{
					aiOrder:function(player,card,num){
						const evt=player.getLastUsed();
						if(!evt) return;
						const len=get.cardNameLength(card)+get.cardNameLength(evt.card);
						const cardx=get.cardPile(card=>{
							return get.cardNameLength(card,false)==len;
						});
						if(cardx) return num+8+(len==2||len==4?2:0);
					},
				}
			},
			//庞山民
			dccaisi:{
				audio:2,
				trigger:{player:'useCardAfter'},
				filter:function(event,player){
					if(get.type(event.card)!='basic') return false;
					if(player.getHistory('gain',evt=>evt.getParent().name=='dccaisi').length>player.maxHp) return false;
					return _status.currentPhase;
				},
				prompt2:function(event,player){
					return `从${player==_status.currentPhase?'牌堆':'弃牌'}堆中随机获得一张非基本牌`;
				},
				content:function*(event,map){
					const player=map.player,trigger=map.trigger;
					const position=player==_status.currentPhase?'cardPile':'discardPile';
					const card=get[position](card=>{
						return get.type(card,false)!='basic';
					});
					if(card){
						player.gain(card,'gain2');
					}
					else{
						player.chat('没有非基本牌…');
						game.log(`但是${position=='discardPile'?'弃':''}牌堆里没有非基本牌!`);

					}
				},
			},
			dczhuoli:{
				audio:2,
				trigger:{global:'phaseEnd'},
				forced:true,
				filter:function(event,player){
					return player.getHistory('useCard').length>player.maxHp;
				},
				content:function*(event,map){
					const player=map.player;
					if(player.maxHp<game.countPlayer()){
						yield player.gainMaxHp();
					}
					player.recover();
				}
			},
			//魏贾充
			dcbeini:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filterCard:function(card,player){
					const delt=player.countCards('h')-player.maxHp;
					return delt>0;
				},
				selectCard:function(){
					const player=get.player();
					const delt=player.countCards('h')-player.maxHp;
					return delt>0?delt:-1;
				},
				promptfunc:()=>{
					const player=get.player();
					const delt=player.countCards('h')-player.maxHp;
					let str='';
					if(delt>0) str+=`弃置${get.cnNumber(delt)}张牌`;
					else if(delt==0) str+=`点击“确定”`;
					else str+=`摸${get.cnNumber(-delt)}张牌`;
					return `${str},然后选择两名角色,前者视为对后者使用一张【杀】,且这两者的非锁定技失效。`;
				},
				content:function*(event,map){
					var player=map.player;
					if(player.countCards('h')<player.maxHp) yield player.drawTo(player.maxHp);
					if(game.countPlayer()<2){
						event.finish();
						return;
					}
					var result=yield player.chooseTarget('悖逆:请选择两名角色','前者视为对后者使用一张【杀】,且这两名角色的非锁定技失效直到回合结束。',true,2,(card,player,target)=>{
						var sha=new lib.element.VCard({name:'sha',isCard:true});
						if(ui.selected.targets.length){
							var targetx=ui.selected.targets[0];
							return targetx.canUse(sha,target,false);
						}
						return lib.filter.cardEnabled(sha,target);
					}).set('targetprompt',['打人','被打']).set('multitarget',true).set('ai',target=>{
						var aiTargets=get.event('aiTargets');
						if(aiTargets){
							return aiTargets[ui.selected.targets.length]==target?10:0;
						}
						return 0;
					}).set('aiTargets',(()=>{
						var targets=[],eff=0;
						var sha=new lib.element.VCard({name:'sha',isCard:true});
						for(var user of game.filterPlayer()){
							for(var target of game.filterPlayer()){
								if(user==target) continue;
								var targetsx=[user,target];
								targetsx.forEach(i=>i.addSkill('dcbeini_fengyin'));
								var effx=get.effect(target,sha,user,player);
								targetsx.forEach(i=>i.removeSkill('dcbeini_fengyin'));
								if(user==player) effx+=1;
								if(get.attitude(player,user)>0) effx-=0.1;
								if(effx>eff){
									eff=effx;
									targets=targetsx;
								}
							}
						}
						if(targets.length) return targets;
						return null;
					})());
					if(result.bool){
						var user=result.targets[0],target=result.targets[1];
						result.targets.forEach(i=>i.addTempSkill('dcbeini_fengyin'));
						var sha=new lib.element.VCard({name:'sha',isCard:true});
						if(user.canUse(sha,target,false)) user.useCard(sha,target,false,'noai');
					}
				},
				ai:{
					order:0.1,
					result:{
						player:function(player){
							if(player.countCards('h')-player.maxHp>=3) return 1;
							return game.hasPlayer(current=>get.attitude(player,current)<=0)?1:0;
						}
					},
				},
				subSkill:{
					fengyin:{
						inherit:'fengyin',
					},
				}
			},
			dcshizong:{
				audio:2,
				enable:'chooseToUse',
				hiddenCard:function(player,name){
					if(get.type(name)!='basic') return false;
					return player.countCards('he')>=player.countMark('dcshizong')+1;
				},
				filter:function(event,player){
					if(event.type=='wuxie'||event.dcshizong) return false;
					if(player.countCards('he')<player.countMark('dcshizong')+1) return false;
					for(const name of lib.inpile){
						if(get.type(name)!='basic') continue;
						const card={name:name,isCard:true};
						if(event.filterCard(card,player,event)) return true;
						if(name=='sha'){
							for(const nature of lib.inpile_nature){
								card.nature=nature;
								if(event.filterCard(card,player,event)) return true;
							}
						}
					}
					return false;
				},
				chooseButton:{
					dialog:function(event,player){
						const vcards=get.inpileVCardList(info=>{
							if(info[0]!='basic') return;
							const card={name:info[2],nature:info[3],isCard:true};
							return event.filterCard(card,player,event);
						})
						return ui.create.dialog('恃纵',[vcards,'vcard'],'hidden');
					},
					check:function(button){
						if(get.event().getParent().type!='phase') return 1;
						const player=get.player();
						const card={name:button.link[2],nature:button.link[3]};
						if(game.hasPlayer(current=>{
							return player.canUse(card,current)&&get.effect(current,card,player,player)>0;
						})){
							switch(button.link[2]){
								case 'tao':return 5;
								case 'jiu':return 3.01;
								case 'sha':
									if(button.link[3]=='fire') return 2.95;
									else if(button.link[3]=='thunder') return 2.92;
									else return 2.9;
							}
						}
						return 0;
					},
					backup:function(links,player){
						return {
							filterCard:true,
							filterTarget:lib.filter.notMe,
							selectTarget:1,
							selectCard:()=>get.player().countMark('dcshizong')+1,
							viewAs:{
								name:links[0][2],
								nature:links[0][3],
								suit:'none',
								number:null,
								isCard:true,
							},
							position:'he',
							popname:true,
							ignoreMod:true,
							ai1:function(card){
								return 1/(1.1+Math.max(-1,get.value(card)));
							},
							ai2:function(target){
								const att=get.attitude(get.player(),target);
								const value=ui.selected.cards.map(card=>get.value(card)).reduce((p,c)=>{
									return p+c;
								},0);
								if(value>0||player.getHp()<=1) return att;
								return -att;
							},
							precontent:function*(event,map){
								var player=map.player,target=event.result.targets[0];
								player.logSkill('dcshizong',target);
								if(!player.countMark('dcshizong')) player.when({global:'phaseAfter'}).then(()=>delete player.storage.dcshizong);
								player.addMark('dcshizong',1,false);
								yield player.give(event.result.cards.slice(),target);
								var viewAs=new lib.element.VCard({name:event.result.card.name,nature:event.result.card.nature,isCard:true});
								var result=yield target.chooseCard('恃纵:是否将一张牌置于牌堆底?',`若如此做,${get.translation(player)}视为使用一张${get.translation(viewAs.nature)}【${get.translation(viewAs.name)}】`,'he').set('ai',card=>{
									if(get.event('goon')) return 7-get.value(card);
									return 0;
								}).set('goon',get.attitude(target,player)*(player.getUseValue(viewAs)||1)>=1);
								var card=event.result.cards[0];
								if(result.bool){
									var card=result.cards[0];
									game.delayex();
									var next=target.loseToDiscardpile(card,ui.cardPile);
									next.log=false;
									if(get.position(card)=='e'){
										game.log(target,'将',card,'置于了牌堆底');
									}
									else{
										next.blank=true;
										game.log(target,'将一张牌置于了牌堆底');
									}
									result=yield next;
									game.broadcastAll(viewAs=>{
										lib.skill.dcshizong_backup2.viewAs=viewAs;
									},lib.skill.dcshizong_backup.viewAs);
									var evt=event.getParent();
									evt.set('_backupevent','dcshizong_backup2');
									evt.set('openskilldialog',`请选择${get.translation(viewAs.nature)}${get.translation(viewAs.name)}的目标`);
									evt.backup('dcshizong_backup2');
									evt.set('norestore',true);
									evt.set('custom',{
										add:{},
										replace:{window:function(){}}
									});
									evt.goto(0);
									if(target!=_status.currentPhase) player.tempBanSkill('dcshizong');
								}
								else{
									target.chat('不放!');
									game.log(target,'选择不将牌置于牌堆底');
									var evt=event.getParent();
									evt.set('dcshizong',true);
									evt.goto(0);
								}
								game.delayx();
							},
							ai:{
								order:10,
							},
						}
					},
					prompt:function(links,player){
						return `###恃纵:选择要交出的牌和目标角色###将${get.cnNumber(player.countMark('dcshizong')+1)}张牌交给一名其他角色,其可以选择将一张牌置于牌堆底,视为你使用一张${get.translation(links[0][3]||'')}${get.translation(links[0][2])}。`;
					}
				},
				ai:{
					order:function(){
						const player=get.player(),event=get.event();
						if(event.filterCard({name:'jiu'},player,event)&&get.effect(player,{name:'jiu'})>0){
							return get.order({name:'jiu'})+0.1;
						}
						return get.order({name:'sha'})+0.1;
					},
					respondSha:true,
					fireAttack:true,
					respondShan:true,
					skillTagFilter:function(player,tag,arg){
						if(tag=='fireAttack') return true;
						if(player.countCards('he')<player.countMark('dcshizong')+1) return false;
						if(tag=='respondSha'&&arg!='use') return false;
					},
					result:{
						player:function(player){
							if(_status.event.dying) return get.attitude(player,_status.event.dying);
							return 1;
						},
					}
				},
				subSkill:{
					backup:{},
					backup2:{
						filterCard:()=>false,
						selectCard:-1,
						precontent:function(){
							delete event.result.skill;
						}
					},
				},
			},
			//张曼成
			dclvecheng:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filterTarget:lib.filter.notMe,
				content:function(){
					player.addTempSkill('dclvecheng_xiongluan');
					player.markAuto('dclvecheng_xiongluan',[target]);
					var cards=player.getCards('h','sha');
					if(cards.length) player.addGaintag(cards,'dclvecheng_xiongluan');
				},
				ai:{
					threaten:3.1,
					order:3.5,
					expose:0.2,
					result:{
						target:function(player,target){
							if(player.getStorage('dclvecheng_xiongluan').contains(target)) return 0;
							if(target.getEquip('bagua')||target.getEquip('rewrite_bagua')) return -0.6;
							var hs=player.countCards('h',card=>{
								if(!player.canUse(card,target)) return false;
								return get.name(card)=='sha'&&get.effect(target,card,player,player)>0;
							});
							var ts=target.hp;
							if(hs>=ts&&ts>1) return -2;
							return -1;
						}
					}
				},
				subSkill:{
					xiongluan:{
						trigger:{player:'phaseEnd'},
						charlotte:true,
						forced:true,
						popup:false,
						onremove:function(player,skill){
							player.removeGaintag('dclvecheng_xiongluan');
							delete player.storage[skill];
						},
						filter:function(event,player){
							return player.getStorage('dclvecheng_xiongluan').some(i=>i.isIn());
						},
						content:function(){
							'step 0'
							event.targets=player.getStorage('dclvecheng_xiongluan').slice();
							event.targets.sortBySeat();
							'step 1'
							if(!event.targets.length){
								event.finish();
								return;
							}
							var target=event.targets.shift();
							event.target=target;
							target.showHandcards();
							var cards=target.getCards('h','sha');
							if(!cards.length) event.redo();
							else event.forced=false;
							'step 2'
							var forced=event.forced;
							var prompt2=forced?'掠城:选择对'+get.translation(player)+'使用的【杀】':'掠城:是否依次对'+get.translation(player)+'使用所有的【杀】?';
							target.chooseToUse(forced,function(card,player,event){
								if(get.itemtype(card)!='card'||get.name(card)!='sha') return false;
								return lib.filter.filterCard.apply(this,arguments);
							},prompt2).set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
								if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
								return lib.filter.targetEnabled.apply(this,arguments);
							}).set('sourcex',player);
							'step 3'
							if(result.bool){
								if(target.countCards('h','sha')){
									event.forced=true;
									event.goto(2);
									return;
								}
							}
							event.forced=false;
							event.goto(1);
						},
						intro:{
							content:'对$使用“掠城”【杀】无任何次数限制',
						},
						mod:{
							cardUsableTarget:function(card,player,target){
								if(!card.cards||card.cards.length!=1) return;
								if(card.name=='sha'&&card.cards[0].hasGaintag('dclvecheng_xiongluan')&&player.getStorage('dclvecheng_xiongluan').contains(target)) return true;
							},
						}
					}
				}
			},
			dczhongji:{
				audio:2,
				trigger:{player:'useCard'},
				filter:function(event,player){
					if(player.countCards('h')>=player.maxHp) return false;
					var suit=get.suit(event.card);
					return !lib.suit.contains(suit)||!player.countCards('h',{suit:suit});
				},
				check:function(event,player){
					var num=Math.min(20,player.maxHp-player.countCards('h'));
					if(num<=0) return false;
					var numx=player.getHistory('useSkill',evt=>{
						return evt.skill=='dczhongji';
					}).length+1;
					if(numx>num) return false;
					if(_status.currentPhase!=player) return true;
					if(player.hasCard(card=>{
						var suit=get.suit(card);
						return player.hasValueTarget(card)&&!player.hasCard(cardx=>{
							return cardx!=card&&get.suit(cardx)==suit;
						});
					})) return false;
					return true;
				},
				prompt2:function(event,player){
					var num=Math.min(20,player.maxHp-player.countCards('h'));
					var str=num>0?'摸'+get.cnNumber(num)+'张牌,然后':'';
					return str+'弃置'+get.cnNumber(1+player.getHistory('useSkill',evt=>{
						return evt.skill=='dczhongji';
					}).length)+'张牌';
				},
				content:function(){
					'step 0'
					var num=Math.min(20,player.maxHp-player.countCards('h'));
					if(num>0) player.draw(num);
					'step 1'
					var num=player.getHistory('useSkill',evt=>{
						return evt.skill=='dczhongji';
					}).length;
					player.chooseToDiscard('螽集:请弃置'+get.cnNumber(num)+'张牌','he',true,num).set('ai',get.unuseful);
				},
				ai:{
					threaten:3.2,
				}
			},
			//乐周妃
			dclingkong:{
				audio:2,
				trigger:{
					global:'phaseBefore',
					player:'enterGame'
				},
				forced:true,
				filter:function(event,player){
					return (event.name!='phase'||game.phaseNumber==0);
				},
				content:function(){
					'step 0'
					var cards=player.getCards('h');
					player.addGaintag(cards,'dclingkong_tag');
				},
				mod:{
					ignoredHandcard:function(card,player){
						if(card.hasGaintag('dclingkong_tag')){
							return true;
						}
					},
					cardDiscardable:function(card,player,name){
						if(name=='phaseDiscard'&&card.hasGaintag('dclingkong_tag')){
							return false;
						}
					},
				},
				group:'dclingkong_marker',
				subSkill:{
					marker:{
						audio:'dclingkong',
						trigger:{player:['gainAfter','loseAsyncAfter']},
						forced:true,
						filter:(event,player)=>{
							// if(player==_status.currentPhase) return false;
							if(event.getParent('phaseDraw',true)) return false;
							const evt=player.getHistory('gain')[0];
							if(!evt) return false;
							if(event.name=='gain'){
								if(evt!=event||event.getlx===false) return false;
							}
							else if(evt.getParent()!=event) return false;
							const hs=player.getCards('h');
							if(!hs.length) return false;
							const cards=event.getg(player);
							return cards.some(card=>hs.includes(card));
						},
						content:function(){
							var hs=player.getCards('h'),cards=trigger.getg(player);
							var card=cards.filter(card=>hs.includes(card)).randomGet();
							player.addGaintag(card,'dclingkong_tag');
							game.delayx();
						},
					},
				},
			},
			dcxianshu:{
				audio:2,
				enable:'phaseUse',
				filter:(event,player)=>{
					return game.hasPlayer(current=>current!=player)&&player.hasCard(card=>card.hasGaintag('dclingkong_tag'),'h');
				},
				filterCard:(card)=>card.hasGaintag('dclingkong_tag'),
				filterTarget:lib.filter.notMe,
				discard:false,
				lose:false,
				delay:false,
				position:'h',
				check:card=>{
					const player=_status.event.player,event=_status.event,color=get.color(card);
					if(color=='red'){
						return (event.getTempCache('dcxianshu','red')
							||event.putTempCache('dcxianshu','red',game.hasPlayer(current=>{
								return current!=player&&current.hp<=player.hp&&current.isDamaged()&&get.recoverEffect(current,player,player)>0;
							}).toString()))=='true'?(7-get.value(card)):0;
					}
					else if(color=='black'){
						return (event.getTempCache('dcxianshu','black')
							||event.putTempCache('dcxianshu','black',game.hasPlayer(current=>{
								return current!=player&&current.hp>=player.hp&&get.effect(current,{name:'losehp'},player,player)>0;
							}).toString()))=='true'?(7-get.value(card)):0;
					}
					return 6-get.value(card);
				},
				content:function(){
					'step 0'
					player.give(cards,target,true);
					event.color=get.color(cards[0],player);
					'step 1'
					if(target.isIn()){
						var num=Math.min(Math.abs(target.getHp()-player.getHp()),5);
						if(num>0) player.draw(num);
					}
					'step 2'
					if(event.color=='red'){
						if(target.getHp()<=player.getHp()&&target.isDamaged()) target.recover();
					}
					else if(event.color=='black'){
						if(target.getHp()>=player.getHp()) target.loseHp()
					}
				},
				ai:{
					combo:'dclingkong',
					order:10,
					result:{
						player:function(player,target){
							if(!ui.selected.cards.length) return 0;
							let num=target.getHp()-player.getHp();
							const card=ui.selected.cards[0],color=get.color(card);
							if(color=='red'&&target.getHp()<=player.getHp()&&target.isDamaged()) num++;
							else if(color=='black'&&target.getHp()>=player.getHp()) num--;
							return Math.min(Math.abs(num),5)*1.1;
						},
						target:function(player,target){
							if(!ui.selected.cards.length) return 0;
							const card=ui.selected.cards[0],color=get.color(card),val=get.value(card,target);
							if(color=='red'&&target.getHp()<=player.getHp()&&target.isDamaged()) return get.recoverEffect(target,player,target)+val/1.4;
							else if(color=='black'&&target.getHp()>=player.getHp()) return get.effect(target,{name:'losehp'},player,target)+val/1.4;
							return val/1.4;
						},
					},
				},
			},
			//吴班
			dcyouzhan:{
				audio:2,
				trigger:{
					global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
				},
				forced:true,
				direct:true,
				filter:function(event,player){
					if(player!=_status.currentPhase) return false;
					return game.hasPlayer(current=>{
						if(current==player) return false;
						var evt=event.getl(current);
						return evt&&evt.cards2.length;
					});
				},
				content:function(){
					'step 0'
					var targets=game.filterPlayer(current=>{
						if(current==player) return false;
						var evt=trigger.getl(current);
						return evt&&evt.cards2.length;
					});
					event.targets=targets;
					player.logSkill('dcyouzhan',targets);
					'step 1'
					var target=targets.shift();
					player.draw().gaintag=['dcyouzhan'];
					player.addTempSkill('dcyouzhan_limit');
					target.addTempSkill('dcyouzhan_effect');
					target.addMark('dcyouzhan_effect',1,false);
					target.addTempSkill('dcyouzhan_draw');
					if(targets.length){
						event.redo();
					}
				},
				ai:{
					damageBonus:true,
					skillTagFilter:function(player,tag,arg){
						if(!arg||!arg.target||!arg.target.hasSkill('dcyouzhan_effect')) return false;
					}
				},
				subSkill:{
					effect:{
						audio:'dcyouzhan',
						trigger:{
							player:'damageBegin3',
						},
						filter:function(event,player){
							return player.hasMark('dcyouzhan_effect');
						},
						forced:true,
						charlotte:true,
						onremove:true,
						content:function(){
							'step 0'
							trigger.num+=player.countMark('dcyouzhan_effect');
							player.removeSkill('dcyouzhan_effect');
						},
						mark:true,
						intro:{
							content:'本回合下一次受到的伤害+#',
						},
						ai:{
							effect:{
								target:function(card,player,target){
									if(get.tag(card,'damage')) return 1+0.5*target.countMark('dcyouzhan_effect');
								}
							}
						}
					},
					draw:{
						trigger:{
							global:'phaseJieshuBegin',
						},
						forced:true,
						charlotte:true,
						filter:function(event,player){
							return !player.getHistory('damage').length;
						},
						content:function(){
							player.draw(Math.min(3,player.getHistory('lose').length));
						},
					},
					limit:{
						charlotte:true,
						onremove:function(player){
							player.removeGaintag('dcyouzhan');
						},
						mod:{
							ignoredHandcard:function(card,player){
								if(card.hasGaintag('dcyouzhan')) return true;
							},
							cardDiscardable:function(card,player,name){
								if(name=='phaseDiscard'&&card.hasGaintag('dcyouzhan')) return false;
							},
						},
					}
				}
			},
			//乐蔡文姬
			dcshuangjia:{
				audio:2,
				trigger:{
					global:'phaseBefore',
					player:'enterGame'
				},
				forced:true,
				filter:function(event,player){
					return (event.name!='phase'||game.phaseNumber==0);
				},
				content:function(){
					'step 0'
					var cards=player.getCards('h');
					player.addGaintag(cards,'dcshuangjia_tag');
				},
				mod:{
					ignoredHandcard:function(card,player){
						if(card.hasGaintag('dcshuangjia_tag')){
							return true;
						}
					},
					cardDiscardable:function(card,player,name){
						if(name=='phaseDiscard'&&card.hasGaintag('dcshuangjia_tag')){
							return false;
						}
					},
					globalTo:function(from,to,distance){
						return distance+Math.min(5,to.countCards('h',card=>card.hasGaintag('dcshuangjia_tag')));
					}
				},
			},
			dcbeifen:{
				audio:2,
				trigger:{
					player:['loseAfter'],
					global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
				},
				filter:function(event,player){
					var evt=event.getl(player);
					if(!evt||!evt.hs||!evt.hs.length) return false;
					if(event.name=='lose'){
						for(var i in event.gaintag_map){
							if(event.gaintag_map[i].contains('dcshuangjia_tag')) return true;
						}
						return false;
					}
					return player.hasHistory('lose',evt=>{
						if(event!=evt.getParent()) return false;
						for(var i in evt.gaintag_map){
							if(evt.gaintag_map[i].contains('dcshuangjia_tag')) return true;
						}
						return false;
					});
				},
				forced:true,
				content:function(){
					var suits=lib.suit.slice();
					player.countCards('h',card=>{
						if(!card.hasGaintag('dcshuangjia_tag')) return false;
						suits.remove(get.suit(card));
					});
					var cards=[];
					while(suits.length){
						var suit=suits.shift();
						var card=get.cardPile(cardx=>{
							return get.suit(cardx,false)==suit;
						});
						if(card) cards.push(card);
					}
					if(cards.length){
						player.gain(cards,'gain2');
					}
				},
				mod:{
					cardUsable:function(card,player){
						var len=player.countCards('h');
						var cnt=player.countCards('h',card=>card.hasGaintag('dcshuangjia_tag'));
						if(2*cnt<len) return Infinity;
					},
					targetInRange:function(card,player){
						var len=player.countCards('h');
						var cnt=player.countCards('h',card=>card.hasGaintag('dcshuangjia_tag'));
						if(2*cnt<len) return true;
					},
					aiOrder:function(player,card,num){
						if(get.itemtype(card)=='card'&&card.hasGaintag('dcshuangjia_tag')){
							var suits=lib.suit.slice();
							player.countCards('h',cardx=>{
								if(!cardx.hasGaintag('dcshuangjia_tag')) return false;
								if(card==cardx) return false;
								suits.remove(get.suit(cardx));
							});
							if(suits.length) return num+suits.length*2.5;
						}
					},
				},
			},
			//孟优
			dcmanzhi:{
				audio:2,
				trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']},
				filter:function(event,player){
					if(event.name=='phaseJieshu'){
						var del=0;
						game.getGlobalHistory('changeHp',evt=>{
							if(evt.player!=player) return;
							for(var phase of lib.phaseName){
								var evtx=evt.getParent(phase);
								if(evtx&&evtx.name==phase){
									del+=evt.num;
									break;
								}
							}
						});
						if(del!=0) return false;
					}
					return game.hasPlayer(current=>{
						if(current==player) return false;
						return !player.hasSkill('dcmanzhi_1')&&current.countCards('he')||!player.hasSkill('dcmanzhi_2')&&current.countCards('hej');
					})
				},
				direct:true,
				content:function(){
					'step 0'
					if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
					player.chooseTarget(get.prompt2('dcmanzhi'),(card,player,target)=>{
						if(player==target) return false;
						return !player.hasSkill('dcmanzhi_1')&&target.countCards('he')||!player.hasSkill('dcmanzhi_2')&&target.countCards('hej');
					}).set('ai',target=>{
						return 1-get.attitude(get.player(),target);
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						event.target=target;
						var choices=[];
						var choiceList=[
							'令其交给你两张牌,然后其视为使用一张无距离限制的【杀】',
							'你获得其区域内的至多两张牌,然后交给其等量的牌并摸一张牌'
						];
						var chosen=[player.hasSkill('dcmanzhi_1'),player.hasSkill('dcmanzhi_2')];
						if(target.countCards('he')&&(!chosen[0]||trigger.name=='phaseZhunbei')) choices.push('选项一');
						else choiceList[0]='<span style="opacity:0.5">'+choiceList[0]+(chosen[0]?'(已被选择过)':'')+'</span>';
						if(target.countCards('hej')&&(!chosen[1]||trigger.name=='phaseZhunbei')) choices.push('选项二');
						else choiceList[1]='<span style="opacity:0.5">'+choiceList[1]+(chosen[1]?'(已被选择过)':'')+'</span>';
						if(trigger.name=='phaseJieshu') choices.push('cancel2');
						player.chooseControl(choices).set('choiceList',choiceList).set('ai',()=>{
							return _status.event.choice;
						}).set('choice',function(){
							if(target.getUseValue({name:'sha'},false)>5&&!player.hasShan()&&trigger.name=='phaseZhunbei') return 1;
							return 0;
						}()).set('prompt','蛮智:请选择一项');
					}
					else{
						if(_status.connectMode){game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});}
						event.finish();
					}
					'step 2'
					if(_status.connectMode){game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});}
					if(result.control=='cancel2'){event.finish();return;}
					player.logSkill('dcmanzhi',target);
					if(result.control=='选项一'){
						player.addTempSkill('dcmanzhi_1');
						target.chooseCard(2,'he','蛮智:请交给'+get.translation(player)+'两张牌');
					}
					else{
						player.addTempSkill('dcmanzhi_2');
						player.gainPlayerCard(target,'hej',[1,2],true);
						event.goto(5);
					}
					'step 3'
					if(result.bool){
						target.give(result.cards,player);
					}
					else event.finish();
					'step 4'
					target.chooseUseTarget('sha',true,'nodistance');
					event.finish();
					'step 5'
					if(result.bool&&target.isIn()){
						var num=result.cards.length,hs=player.getCards('he');
						if(!hs.length) event.finish();
						else 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 6'
					if(result.bool){
						player.give(result.cards,target);
						player.draw();
					}
				},
				subSkill:{
					1:{charlotte:true},
					2:{charlotte:true},
				}
			},
			//孙綝
			dczigu:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filterCard:true,
				position:'he',
				selectCard:1,
				check:function(card){
					var player=_status.event.player;
					if(!player.hasSkill('dczuowei')) return 6-get.value(card);
					if(player.countCards('h')==player.countCards('e')+1&&!player.hasCard(card=>player.hasValueTarget(card),'h')){
						if(get.position(card)=='e') return 0;
						return 8-get.value(card);
					}
					return 6-get.value(card);
				},
				content:function(){
					'step 0'
					var targets=game.filterPlayer(current=>{
						return current.countGainableCards(player,'e');
					});
					if(targets.length==0) event._result={bool:false};
					else if(targets.length==1) event._result={bool:true,targets:targets};
					else player.chooseTarget('自固:获得一名角色装备区里的一张牌',true,(card,player,target)=>{
						return target.countGainableCards(player,'e');
					}).set('ai',target=>{
						if(target==_status.event.player) return 10;
						if(get.attitude(_status.event.player,target)<0){
							if(target.hasCard(card=>{
								return get.value(card,player)>=6;
							})) return 12;
							return 8;
						}
						return 0;
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						event.target=target;
						player.gainPlayerCard('e',target,true);
					}
					'step 2'
					if(!result.bool||target==player||!result.cards||!result.cards.some(i=>get.owner(i)==player)) player.draw();
				},
				ai:{
					order:function(item,player){
						if(!player.hasSkill('dczuowei')) return 9;
						if(player.countCards('h')==player.countCards('e')+1&&!player.hasCard(card=>player.hasValueTarget(card),'h')) return 9;
						return 1;
					},
					result:{
						player:1
					}
				}
			},
			dczuowei:{
				audio:2,
				trigger:{player:'useCard'},
				filter:function(event,player){
					if(_status.currentPhase!=player) return false;
					if(!player.hasSkill('dczuowei_ban')) return true;
					return Math.sign(player.countCards('h')-Math.max(1,player.countCards('e')))>=0;
				},
				direct:true,
				locked:false,
				content:function(){
					'step 0'
					var hs=player.countCards('h');
					var es=Math.max(1,player.countCards('e'));
					var sign=Math.sign(hs-es);
					event.sign=sign;
					if(sign>0) player.chooseBool(get.prompt('dczuowei'),'令'+get.translation(trigger.card)+'不可被响应').set('ai',()=>1);
					else if(sign==0) player.chooseTarget(get.prompt('dczuowei'),'对一名其他角色造成1点伤害',lib.filter.notMe).set('ai',target=>{
							return get.damageEffect(target,_status.event.player,_status.event.player);
						});
					else player.chooseBool(get.prompt('dczuowei'),'摸两张牌,然后本回合你不能再触发该分支').set('ai',()=>1);
					'step 1'
					if(!result.bool) event.finish()
					else if(event.sign<=0&&!event.isMine()&&!event.isOnline()) game.delayx();
					'step 2'
					var sign=event.sign;
					if(sign>0){
						player.logSkill('dczuowei');
						trigger.directHit.addArray(game.players);
						event.finish();
					}
					else if(sign==0){
						var target=result.targets[0];
						player.logSkill('dczuowei',target);
						target.damage();
					}
					else{
						player.logSkill('dczuowei');
						player.draw(2);
						player.addTempSkill('dczuowei_ban');
					}
				},
				subSkill:{
					ban:{charlotte:true}
				},
				mod:{
					aiValue:function(player,card,num){
						if(_status.currentPhase!=player) return;
						const event=get.event();
						if(!player.isPhaseUsing()) return;
						if(event.type!='phase') return;
						const cardsh=[],cardse=[];
						for(const cardx of ui.selected.cards){
							const pos=get.position(cardx);
							if(pos=='h') cardsh.add(cardx);
							else if(pos=='e') cardse.add(cardx);
						}
						const hs=player.countCards('h')-cardsh.length,es=Math.max(1,player.countCards('e')-cardse.length);
						const delt=hs-es;
						if(delt<=0) return;
						if(get.position(card)=='h'&&delt==1) return num/1.25;
					},
					aiUseful:function(){
						return lib.skill.dczuowei.mod.aiValue.apply(this,arguments);
					},
					aiOrder:function(player,card,num){
						if(player.hasSkill('dczuowei_ban')||_status.currentPhase!=player) return;
						const cardsh=[],cardse=[];
						const pos=get.position(card);
						if(pos=='h') cardsh.add(card);
						else if(pos=='e') cardse.add(card);
						if(get.tag(card,'draw')||get.tag(card,'gain')){
							const hs=player.countCards('h')-cardsh.length,es=Math.max(1,player.countCards('e')-cardse.length+(get.type(card)=='equip'));
							if(player.hasSkill('dczuowei_ban')&&hs<es||hs==es) return num+10;
							return num/5;
						}
					},
				},
				ai:{
					threaten:3,
					reverseEquip:true,
					effect:{
						player_use:function(card,player,target,current){
							if(_status.currentPhase!=player) return;
							if(get.type(card)=='equip'&&get.cardtag(card,'gifts')) return;
							if(player.countCards('h')>Math.max(1,player.countCards('e'))) return [1,3];
						}
					}
				}
			},
			//刘宠骆俊
			dcminze:{
				audio:2,
				enable:'phaseUse',
				filter:function(event,player){
					return !player.hasSkill('dcminze_ban');
				},
				filterTarget:function(card,player,target){
					if(player.getStorage('dcminze_targeted').contains(target)) return false;
					return target.countCards('h')<player.countCards('h');
				},
				filterCard:function(card,player){
					if(!ui.selected.cards.length) return true;
					return get.name(ui.selected.cards[0])!=get.name(card);
				},
				selectCard:[1,2],
				complexCard:true,
				position:'he',
				discard:false,
				lose:false,
				delay:false,
				group:'dcminze_draw',
				content:function(){
					'step 0'
					player.give(cards,target);
					player.addTempSkill('dcminze_targeted','phaseUseAfter');
					player.markAuto('dcminze_targeted',[target]);
					player.addTempSkill('dcminze_given');
					player.markAuto('dcminze_given',cards.map(i=>get.name(i,player)));
					'step 1'
					if(target.countCards('h')>player.countCards('h')){
						player.addTempSkill('dcminze_ban','phaseUseAfter');
					}
				},
				ai:{
					order:6.5,
					expose:0.2,
				},
				subSkill:{
					targeted:{onremove:true,charlotte:true},
					ban:{charlotte:true},
					given:{
						charlotte:true,
						onremove:true,
						intro:{
							content:'本回合以此法交出的牌名:$',
						},
					},
					draw:{
						trigger:{player:'phaseJieshuBegin'},
						filter:function(event,player){
							return player.getStorage('dcminze_given').length;
						},
						forced:true,
						locked:false,
						content:function(){
							var num=Math.min(5,player.getStorage('dcminze_given').length)-player.countCards('h');
							if(num>0) player.draw(num);
						}
					}
				}
			},
			dcjini:{
				audio:2,
				trigger:{player:'damageEnd'},
				direct:true,
				filter:function(event,player){
					return player.maxHp-player.countMark('dcjini_counted')>0;
				},
				content:function(){
					'step 0'
					player.chooseCard(get.prompt2('dcjini'),[1,player.maxHp-player.countMark('dcjini_counted')],lib.filter.cardRecastable).set('ai',card=>{
						return 6-get.value(card);
					});
					'step 1'
					if(result.bool){
						var cards=result.cards;
						player.logSkill('dcjini');
						player.addTempSkill('dcjini_counted');
						player.addMark('dcjini_counted',cards.length,false);
						event.recast=player.recast(cards);
					}
					else event.finish();
					'step 2'
					if(trigger.source&&trigger.source.isIn()&&player.hasHistory('gain',evt=>evt.getParent(2)==event.recast&&evt.cards.some(value=>get.name(value)=='sha'))){
						player.chooseToUse(function(card){
							if(get.name(card)!='sha') return false;
							return lib.filter.filterCard.apply(this,arguments);
						},'击逆:是否对'+get.translation(trigger.source)+'使用一张不可被响应的杀?').set('complexSelect',true).set('filterTarget',function(card,player,target){
							if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
							return lib.filter.targetEnabled.apply(this,arguments);
						}).set('sourcex',trigger.source).set('oncard',()=>{
							_status.event.directHit.addArray(game.players);
						});
					}
				},
				subSkill:{
					counted:{
						onremove:true,
						charlotte:true
					}
				}
			},
			//乐綝
			dcporui:{
				audio:2,
				trigger:{global:'phaseJieshuBegin'},
				filter:function(event,player){
					if(player==event.player) return false;
					if(player.countMark('dcporui_round')>=(player.hasMark('dcgonghu_basic')?2:1)||player.countCards('h')==0) return false;
					return game.hasPlayer(current=>{
						if(current==player||current==event.player) return false;
						return current.hasHistory('lose',function(evt){
							return evt.cards2.length>0;
						});
					})&&player.countCards('he')>0;
				},
				direct:true,
				content:function(){
					'step 0'
					var map={};
					game.countPlayer(function(current){
						if(current==player||current==trigger.player) return false;
						if(current.hasHistory('lose',function(evt){
							return evt.cards2.length>0;
						})) map[current.playerid]=Math.min(5,current.getHistory('lose').reduce(function(num,evt){
							return num+evt.cards2.length;
						},0))+1;
					});
					player.chooseCardTarget({
						prompt:get.prompt('dcporui'),
						prompt2:get.skillInfoTranslation('dcporui',player),
						filterCard:function(card,player){
							return lib.filter.cardDiscardable(card,player,'dcporui');
						},
						position:'he',
						filterTarget:function(card,player,target){
							return Object.keys(_status.event.map).contains(target.playerid);
						},
						ai1:function(card){
							return 7-get.value(card);
						},
						ai2:function(target){
							return get.effect(target,{name:'sha'},_status.event.player,_status.event.player)*_status.event.map[target.playerid];
						}
					}).set('map',map);
					'step 1'
					if(result.bool){
						var target=result.targets[0],cards=result.cards;
						event.target=target;
						player.logSkill('dcporui',target);
						player.discard(cards);
						event.num2=Math.min(5,target.getHistory('lose').reduce(function(num,evt){
							return num+evt.cards2.length;
						},0));
						event.num=event.num2+1;
						player.addTempSkill('dcporui_round','roundStart');
						player.addMark('dcporui_round',1,false);
					}
					else event.finish();
					'step 2'
					var card={name:'sha',isCard:true,storage:{dcporui:true}};
					if(player.canUse(card,target,false)&&target.isIn()){
						player.useCard(card,target);
						event.num--;
					}
					else event.goto(4);
					'step 3'
					if(event.num>0) event.goto(2);
					'step 4'
					if(!player.hasMark('dcgonghu_damage')&&target.isIn()){
						var cards=player.getCards('h');
						if(cards.length==0) event._result={bool:false};
						else if(cards.length<=event.num2) event._result={bool:true,cards:cards};
						else player.chooseCard('破锐:交给'+get.translation(target)+get.cnNumber(event.num2)+'张手牌',true,event.num2);
					}
					else event.finish();
					'step 5'
					if(result.bool){
						player.give(result.cards,target);
					}
					event.finish();
					'step 6'
					if(player.hasMark('dcgonghu_basic')){
						if(!target.hasHistory('damage',evt=>{
							return evt.card&&evt.card.storage&&evt.card.storage.dcporui&&evt.getParent('dcporui')==event;
						})){
							player.recover();
						}
					}
				},
				subSkill:{
					round:{charlotte:true,onremove:true}
				},
				ai:{
					expose:0.4,
					threaten:3.8,
				}
			},
			dcgonghu:{
				audio:2,
				trigger:{
					player:['loseAfter','damageEnd'],
					source:'damageSource',
					global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
				},
				forced:true,
				filter:function(event,player){
					if(event.name=='damage'){
						if(player.hasMark('dcgonghu_damage')) return false;
						var num=0;
						player.getHistory('damage',evt=>num+=evt.num);
						player.getHistory('sourceDamage',evt=>num+=evt.num);
						return num>1;
					}
					if(!_status.currentPhase||_status.currentPhase==player) return false;
					if(player.hasMark('dcgonghu_basic')) return false;
					if(_status.currentPhase&&_status.currentPhase==player) return false;
					var evt=event.getl(player);
					if(!evt||!evt.cards2||!evt.cards2.some(i=>get.type2(i,player)=='basic')) return false;
					var num=0;
					player.getHistory('lose',function(evtx){
						if(num<2){
							if(evtx&&evtx.cards2) num+=evtx.cards2.filter(i=>get.type2(i,player)=='basic').length;
						}
					});
					return num>=2;
				},
				group:['dcgonghu_basic','dcgonghu_trick'],
				content:function(){
					player.addMark('dcgonghu_'+(trigger.name=='damage'?'damage':'basic'),1,false);
					game.log(player,'修改了技能','#g【破锐】');
				},
				subSkill:{
					trick:{
						audio:'dcgonghu',
						trigger:{player:'useCard2'},
						direct:true,
						locked:true,
						filter:function(event,player){
							if(!player.hasMark('dcgonghu_basic')||!player.hasMark('dcgonghu_damage')) return false;
							var card=event.card;
							if(get.color(card,false)!='red'||get.type(card,null,true)!='trick') return false;
							var info=get.info(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(card,player,current);
								})){
									return true;
								}
							}
							return false;
						},
						content:function(){
							'step 0'
							var prompt2='为'+get.translation(trigger.card)+'增加一个目标'
							player.chooseTarget(get.prompt('dcgonghu_trick'),function(card,player,target){
								var player=_status.event.player;
								return !_status.event.targets.contains(target)&&lib.filter.targetEnabled2(_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);
							}).set('card',trigger.card).set('targets',trigger.targets);
							'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('dcgonghu_trick',event.targets);
								trigger.targets.addArray(event.targets);
							}
						},
					},
					basic:{
						audio:'dcgonghu',
						trigger:{player:'useCard'},
						forced:true,
						filter:function(event,player){
							if(!player.hasMark('dcgonghu_basic')||!player.hasMark('dcgonghu_damage')) return false;
							var card=event.card;
							return (get.color(card,false)=='red'&&get.type(card,null,false)=='basic');
						},
						content:function(){
							trigger.directHit.addArray(game.filterPlayer());
							game.log(trigger.card,'不可被响应');
						},
					},
				}
			},
			//张闿
			dcxiangshu:{
				audio:2,
				trigger:{global:'phaseUseBegin'},
				direct:true,
				filter:function(event,player){
					return event.player!=player&&event.player.countCards('h')>=event.player.hp;
				},
				content:function(){
					'step 0'
					var list=[0,1,2,3,4,5,'cancel2'];
					player.chooseControl(list).set('prompt',get.prompt2('dcxiangshu')).set('ai',()=>{
						return _status.event.choice;
					}).set('choice',function(){
						if(get.attitude(player,trigger.player)>0) return 'cancel2';
						var cards=trigger.player.getCards('h');
						var num=0;
						for(var card of cards){
							if(!trigger.player.hasValueTarget(card)){
								num++;
								if(num>=5) break;
							}
						}
						if(cards.length>=3&&Math.random()<0.5) num=Math.max(0,num-1);
						return num;
					}());
					'step 1'
					if(result.control!='cancel2'){
						player.logSkill('dcxiangshu',trigger.player);
						var num=result.index;
						player.storage.dcxiangshu_lottery=num;
						player.addTempSkill('dcxiangshu_lottery','phaseUseAfter');
					}
					else event.finish();
					'step 2'
					player.chooseToDiscard('相鼠:是否弃置一张牌不公布此数字?').set('ai',card=>2-get.value(card));
					'step 3'
					if(!result.bool){
						var num=player.storage.dcxiangshu_lottery;
						player.markSkill('dcxiangshu_lottery');
						player.popup(num);
						game.log(player,'选择了数字','#g'+num);
					}
				},
				subSkill:{
					lottery:{
						audio:'dcxiangshu',
						trigger:{global:'phaseUseEnd'},
						charlotte:true,
						forced:true,
						onremove:true,
						logTarget:'player',
						filter:function(event,player){
							return typeof player.storage.dcxiangshu_lottery=='number'&&Math.abs(event.player.countCards('h')-player.storage.dcxiangshu_lottery)<=1;
						},
						content:function(){
							var delt=Math.abs(trigger.player.countCards('h')-player.storage.dcxiangshu_lottery);
							if(delt<=1&&trigger.player.countGainableCards('he',player)>0){
								player.gainPlayerCard(trigger.player,'he',true);
							}
							if(delt==0){
								trigger.player.damage(player);
							}
						},
						intro:{content:'猜测的数字为#'}
					}
				}
			},
			//裴元绍
			dcmoyu:{
				audio:2,
				init:()=>{
					game.addGlobalSkill('dcmoyu_ai');
				},
				onremove:()=>{
					if(!game.hasPlayer(i=>i.hasSkill('dcmoyu'),true)) game.removeGlobalSkill('dcmoyu_ai');
				},
				enable:'phaseUse',
				filter:function(event,player){
					return !player.hasSkill('dcmoyu_ban')&&game.hasPlayer(current=>lib.skill.dcmoyu.filterTarget(null,player,current));
				},
				filterTarget:function(card,player,target){
					return player!=target&&!player.getStorage('dcmoyu_clear').contains(target)&&target.countGainableCards(player,'hej');
				},
				content:function(){
					'step 0'
					player.addTempSkill('dcmoyu_clear');
					player.markAuto('dcmoyu_clear',[target]);
					player.gainPlayerCard(target,'hej',true);
					'step 1'
					var num=player.getStorage('dcmoyu_clear').length;
					target.chooseToUse(function(card,player,event){
						if(get.name(card)!='sha') return false;
						return lib.filter.filterCard.apply(this,arguments);
					},'是否对'+get.translation(player)+'使用一张无距离限制的【杀】(伤害基数为'+num+')?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
						if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
						return lib.filter.targetEnabled.apply(this,arguments);
					}).set('sourcex',player).set('num',num).set('oncard',card=>{
						_status.event.baseDamage=_status.event.getParent().num;
					});
					'step 2'
					if(result.bool){
						if(player.hasHistory('damage',evt=>{
							return evt.card&&evt.card.name=='sha'&&evt.getParent(4)==event;
						})) player.addTempSkill('dcmoyu_ban');
					}
				},
				subSkill:{
					clear:{
						charlotte:true,
						onremove:true,
					},
					ban:{
						charlotte:true,
						mark:true,
						marktext:'欲',
						intro:{content:'偷马贼被反打了!'},
					},
					ai:{
						trigger:{player:'dieAfter'},
						filter:()=>{
							return !game.hasPlayer(i=>i.hasSkill('dcmoyu'),true);
						},
						silent:true,
						forceDie:true,
						content:()=>{
							game.removeGlobalSkill('dcmoyu_ai');
						},
						ai:{
							effect:{
								target:function(card,player,target,current){
									if(get.type(card)=='delay'&&current<0){
										var currentx=_status.currentPhase;
										if(!currentx||!currentx.isIn()) return;
										var list=game.filterPlayer(current=>{
											if(current==target) return true;
											if(!current.hasSkill('dcmoyu')) return false;
											if(current.hasJudge('lebu')) return false;
											return get.attitude(current,target)>0;
										});
										list.sortBySeat(currentx);
										if(list.indexOf(target)!=0) return 'zerotarget';
									}
								},
							},
						}
					}
				},
				ai:{
					order:9,
					threaten:2.4,
					result:{
						target:function(player,target){
							var num=get.sgn(get.attitude(player,target));
							var eff=get.effect(target,{name:'shunshou'},player,player)*num;
							if(eff*num>0) return eff/10;
							if(player.hasShan()&&!target.hasSkillTag('directHit_ai',true,{
								target:player,
								card:{name:'sha'},
							},true)) return eff;
							if(target.hasSha()&&player.hp+player.countCards('hs',function(card){
								var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
								if(mod2!='unchanged') return mod2;
								var mod=game.checkMod(card,player,player,'unchanged','cardSavable',player);
								if(mod!='unchanged') return mod;
								var savable=get.info(card).savable;
								if(typeof savable=='function') savable=savable(card,player,player);
								return savable;
							})<=player.getStorage('dcmoyu_clear').length+1) return 0;
							return eff;
						}
					}
				}
			},
			//张楚
			dcjizhong:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filterTarget:lib.filter.notMe,
				selectTarget:1,
				content:function(){
					'step 0'
					target.draw(2);
					'step 1'
					var marked=target.hasMark('dcjizhong');
					var cards=target.getCards('h');
					if(marked){
						if(cards.length<=3) event._result={bool:true,cards:cards};
						else target.chooseCard(`集众:交给${get.translation(player)}三张手牌`,3,true);
					}
					else{
						target.chooseCard(`集众:交给${get.translation(player)}三张手牌,或点击“取消”获得“信众”标记`,3).set('ai',card=>{
							if(get.event('goon')) return 20-get.value(card);
							return 1-get.value(card);
						}).set('goon',get.attitude(target,player)>0);
					}
					'step 2'
					if(!result.bool){
						target.addMark('dcjizhong',1);
					}
					else{
						target.give(result.cards,player);
					}
				},
				marktext:'信',
				intro:{
					name:'信众',
					name2:'信众',
					markcount:()=>0,
					content:'已成为信徒',
				},
				ai:{
					order:9.5,
					result:{
						target:function(player,target){
							var num=target.countCards('h');
							if(num<=1) return -num;
							if(get.attitude(player,target)>0) return 1;
							return -1/(num/2+1);
						}
					}
				}
			},
			dcrihui:{
				audio:2,
				trigger:{player:'useCardAfter'},
				usable:1,
				filter:function(event,player){
					if(!event.targets||event.targets.length!=1||event.targets[0]==player) return false;
					var card=event.card;
					var target=event.targets[0];
					var marked=target.hasMark('dcjizhong');
					return (get.type(card)=='trick'||get.color(card)=='black'&&get.type(card)=='basic')&&
						(marked||!marked&&game.hasPlayer(current=>current.hasMark('dcjizhong')));
				},
				direct:true,
				content:function(){
					'step 0'
					var target=trigger.targets[0];
					var card={name:trigger.card.name,nature:trigger.card.nature,isCard:true};
					event.target=target;
					event.card=card;
					if(target.hasMark('dcjizhong')) player.gainPlayerCard(get.prompt('dcrihui',target),target,'hej').set('logSkill',['dcrihui',target]);
					else{
						player.chooseBool(get.prompt('dcrihui',target),'令所有有“信众”的角色依次视为对其使用一张'+get.translation(card)).set('ai',()=>{
							return _status.event.bool;
						}).set('bool',function(){
							var eff=0;
							game.countPlayer(current=>{
								if(!current.hasMark('dcjizhong')) return;
								eff+=get.effect(target,card,current,player);
							});
							return eff>0;
						}());
					}
					'step 1'
					if(!result.bool){
						player.storage.counttrigger.dcrihui--;
						event.finish();
						return;
					}
					if(target.hasMark('dcjizhong')) event.finish();
					else{
						player.logSkill('dcrihui',target);
						event.targets=game.filterPlayer(current=>current.hasMark('dcjizhong'));
						event.targets.sortBySeat(_status.currentPhase);
					}
					'step 2'
					var current=event.targets.shift();
					if(current.canUse(card,target,false)){
						current.useCard(card,target,false);
					}
					if(event.targets.length) event.redo();
				}
			},
			dcguangshi:{
				audio:2,
				trigger:{player:'phaseZhunbeiBegin'},
				filter:function(event,player){
					return !game.hasPlayer(current=>current!=player&&!current.hasMark('dcjizhong'));
				},
				forced:true,
				content:function(){
					player.draw(2);
					player.loseHp();
				}
			},
			//董绾
			dcshengdu:{
				audio:2,
				trigger:{player:'phaseBegin'},
				direct:true,
				content:function(){
					'step 0'
					if(target) event._result={bool:true,targets:[target]};
					else player.chooseTarget(get.prompt2('dcshengdu'),lib.filter.notMe).set('ai',target=>{
						var player=_status.event.player;
						var att=get.attitude(player,target);
						var eff=get.effect(target,{
							name:'sha',
							storage:{dcjieling:true},
						},player,player);
						var value=att/5;
						if(value<0) value=-value/1.3;
						value=Math.max(value-eff/20,0.01);
						var skills=target.getSkills(null,false,false);
						for(var skill of skills){
							var str=get.skillInfoTranslation(skill,target);
							if(/摸牌阶段[^少放弃]{0,8}摸/.test(str)) value+=Math.random()/2+1.5;
						}
						return value;
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('dcshengdu',target);
						target.addSkill('dcshengdu_effect');
						target.markAuto('dcshengdu_effect',[player]);
					}
				},
				subSkill:{
					effect:{
						trigger:{player:'gainAfter'},
						charlotte:true,
						forced:true,
						popup:false,
						filter:function(event,player){
							return event.getParent(2).name=='phaseDraw';
						},
						content:function(){
							'step 0'
							var targets=player.getStorage('dcshengdu_effect');
							event.targets=targets.sortBySeat(player);
							'step 1'
							var target=targets.shift();
							if(target.isIn()){
								target.logSkill('dcshengdu_effect',player);
								target.draw(trigger.cards.length);
							}
							if(targets.length) event.redo();
							'step 2'
							player.removeSkill('dcshengdu_effect');
							game.delayx();
						},
						marktext:'绞',
						intro:{
							content:'下个摸牌阶段得到牌后,$摸等量的牌'
						}
					}
				}
			},
			dcjieling:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				position:'hs',
				viewAs:{
					name:'sha',
					storage:{dcjieling:true}
				},
				filterCard:function(card,player){
					if(ui.selected.cards.length){
						return get.color(card)!=get.color(ui.selected.cards[0]);
					}
					return true;
				},
				selectCard:2,
				complexCard:true,
				check:function(card){
					return 6-get.value(card);
				},
				precontent:function(){
					player.addTempSkill('dcjieling_after');
					event.getParent().addCount=false;
				},
				ai:{
					order:function(item,player){
						return get.order({name:'sha'})+0.1;
					},
				},
				locked:false,
				mod:{
					targetInRange:function(card){
						if(card.storage&&card.storage.dcjieling) return true;
					},
					cardUsable:function(card,player,num){
						if(card.storage&&card.storage.dcjieling) return Infinity;
					},
				},
				subSkill:{
					after:{
						charlotte:true,
						audio:'dcjieling',
						trigger:{global:'useCardAfter'},
						filter:function(event,player){
							return event.card.name=='sha'&&event.card.storage&&event.card.storage.dcjieling;
						},
						direct:true,
						content:function(){
							'step 0'
							var damaged=game.hasPlayer2(current=>{
								return current.hasHistory('damage',evt=>evt.card==trigger.card);
							});
							var targets=trigger.targets.filter(i=>i.isIn());
							player.logSkill('dcjieling_after',targets);
							if(damaged){
								for(var target of targets){
									target.loseHp();
								}
							}
							else{
								for(var target of targets){
									var next=game.createEvent('dcshengdu',false);
									next.player=player;
									next.target=target;
									next.setContent(lib.skill.dcshengdu.content);
								}
							}
						}
					}
				}
			},
			//袁胤
			dcmoshou:{
				audio:2,
				trigger:{target:'useCardToTargeted'},
				init:function(player,skill){
					if(typeof player.storage[skill]!='number') player.storage[skill]=0;
				},
				filter:function(event,player){
					return get.color(event.card)=='black'&&event.player!=player;
				},
				frequent:true,
				prompt2:function(event,player){
					var num=player.getAllHistory('useSkill',evt=>evt.skill=='dcmoshou').length%3+1;
					return '摸'+get.cnNumber(num)+'张牌';
				},
				content:function(){
					var num=player.getAllHistory('useSkill',evt=>evt.skill=='dcmoshou').length;
					player.storage.dcmoshou=num;
					player.syncStorage('dcmoshou');
					player.markSkill('dcmoshou');
					num=(num-1)%3+1;
					player.draw(num);
				},
				mark:true,
				marktext:'守',
				intro:{
					markcount:function(storage,player){
						if(typeof storage!='number') return 1;
						return storage%3+1;
					},
					content:'本局游戏已发动过$次技能',
				}
			},
			dcyunjiu:{
				audio:2,
				trigger:{global:'dieAfter'},
				direct:true,
				content:function(){
					'step 0'
					var evt=trigger.player.getHistory('lose',evtx=>{
						return evtx.getParent(2)==trigger;
					})[0];
					if(!evt) event.finish();
					else{
						var cards=[];
						//冷知识,角色死亡后只有手牌区和装备区的牌是被系统弃置的,其余牌的处理方式均为置入弃牌堆
						cards.addArray(evt.hs).addArray(evt.es);
						event.cards=cards.filterInD('d');
						var num=cards.length;
						if(num){
							event.videoId=lib.status.videoId++;
							var func=function(cards,id){
								var num=cards.length;
								var dialog=ui.create.dialog(get.prompt('dcyunjiu'),'<div class="text center">弃置'+get.cnNumber(num)+'张牌,令一名其他角色获得以下这些牌</div>',cards);
								dialog.videoId=id;
								return dialog;
							};
							if(player.isOnline2()){
								player.send(func,cards,event.videoId);
							}
							event.dialog=func(cards,event.videoId);
							if(player!=game.me||_status.auto){
								event.dialog.style.display='none';
							}
							player.chooseCardTarget({
								prompt:false,
								filterTarget:lib.filter.notMe,
								filterCard:lib.filter.cardDiscardable,
								selectCard:num,
								position:'he',
								goon:function(){
									if(!game.hasPlayer(current=>get.attitude(player,current))>0) return false;
									var value=0;
									for(var card of cards){
										value+=get.value(card,player,'raw')-1.2;
									}
									return value>0;
								}(),
								ai1:function(card){
									if(_status.event.goon){
										if(ui.selected.cards.length==_status.event.selectCard[1]-1&&ui.selected.cards.length>0) return 7-get.value(card);
										return 5.5-get.value(card);
									}
									return 0;
								},
								ai2:function(target){
									return get.attitude(_status.event.player,target)/Math.sqrt(target.countCards('h')+1);
								}
							});
						}
						else event.finish();
					}
					'step 1'
					if(player.isOnline2()){player.send('closeDialog',event.videoId)}
					event.dialog.close();
					if(result.bool){
						var cardsx=result.cards,target=result.targets[0];
						player.logSkill('dcyunjiu',target);
						player.discard(cardsx);
						target.gain(cards.filterInD('d'),'gain2').giver=player;
					}
					else event.finish();
					'step 2'
					player.gainMaxHp();
					player.recover();
				}
			},
			//高翔
			dcchiying:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filterTarget:function(card,player,target){
					return target.hp<=player.hp;
				},
				content:function(){
					'step 0'
					var targets=game.filterPlayer(current=>target.inRange(current)&&current!=player).sortBySeat(player);
					event.targets=targets;
					if(!targets.length) event.finish();
					'step 1'
					var current=targets.shift();
					if(current.countCards('he')) current.chooseToDiscard('驰应:请弃置一张牌','he',true);
					if(targets.length) event.redo();
					'step 2'
					if(target!=player){
						var cards=[];
						game.getGlobalHistory('cardMove',evt=>{
							if(evt.getParent(3)==event){
								cards.addArray(evt.cards.filter(card=>get.type(card)=='basic'));
							}
						});
						cards=cards.filterInD('d');
						if(cards.length) target.gain(cards,'gain2');
					}
				},
				ai:{
					order:6,
					result:{
						target:function(player,target){
							var targets=game.filterPlayer(current=>target.inRange(current)&&current!=player);
							var eff=0;
							for(var targetx of targets){
								var effx=get.effect(targetx,{name:'guohe_copy2'},player,target);
								if(get.attitude(player,targetx)<0) effx/=2;
								eff+=effx;
							}
							return (target==player?0.5:1)*eff*(get.attitude(player,target)<=0?0.75:1);
						}
					}
				}
			},
			//霍峻
			dcgue:{
				audio:2,
				enable:['chooseToUse','chooseToRespond'],
				hiddenCard:function(player,name){
					if(player.getStorage('dcgue').contains(_status.currentPhase)) return false;
					return name=='sha'||name=='shan';
				},
				filter:function(event,player){
					//if(event.dcgue||event.type=='wuxie'||player==_status.currentPhase||player.getStorage('dcgue').contains(_status.currentPhase)) return false;
					if(event.dcgue||event.type=='wuxie'||player==_status.currentPhase) return false;
					if(!player.countCards('h')||player.hasSkill('dcgue_blocker',null,null,false)) return false;
					for(var name of ['sha','shan']){
						if(event.filterCard({name:name,isCard:true},player,event)) return true;
					}
					return false;
				},
				chooseButton:{
					dialog:function(event,player){
						var vcards=[];
						for(var name of ['sha','shan']){
							var card={name:name,isCard:true};
							if(event.filterCard(card,player,event)) vcards.push(['基本','',name]);
						}
						return ui.create.dialog('孤扼',[vcards,'vcard'],'hidden');
					},
					check:function(button){
						if(_status.event.player.countCards('h',{name:['sha','shan']})>1) return 0;
						return 1;
					},
					backup:function(links,player){
						return {
							filterCard:()=>false,
							selectCard:-1,
							viewAs:{
								name:links[0][2],
								isCard:true,
							},
							popname:true,
							precontent:function(){
								'step 0'
								player.logSkill('dcgue');
								player.addTempSkill('dcgue_blocker');
								player.showHandcards();
								delete event.result.skill;
								'step 1'
								if(player.countCards('h',{name:['sha','shan']})>1){
									var evt=event.getParent();
									evt.set('dcgue',true);
									evt.goto(0);
									delete evt.openskilldialog;
									return;
								}
								//else player.markAuto('dcgue',[_status.currentPhase]);
								game.delayx();
							},
						}
					},
					prompt:function(links,player){
						return '展示所有手牌'+(player.countCards('h',{name:['sha','shan']})<=1?',然后视为使用【'+get.translation(links[0][2])+'】':'');
					}
				},
				subSkill:{blocker:{charlotte:true}},
				//intro:{content:'已于$的回合发动过技能'},
				ai:{
					order:1,
					respondSha:true,
					respondShan:true,
					skillTagFilter:function(player,tag,arg){
						//if(player.getStorage('dcgue').contains(_status.currentPhase)) return false;
						if(player.countCards('h',{name:['sha','shan']})>1) return false;
					},
					result:{
						player:function(player){
							if(player.countCards('h',{name:['sha','shan']})>1) return 0;
							return 1;
						}
					}
				}
			},
			dcsigong:{
				audio:2,
				trigger:{global:'phaseEnd'},
				filter:function(event,player){
					if(player.hasSkill('dcsigong_round')) return false;
					if(event.player==player||!event.player.isIn()) return false;
					if(!player.canUse('sha',event.player,false)) return false;
					var respondEvts=[];
					game.countPlayer2(current=>respondEvts.addArray(current.getHistory('useCard')).addArray(current.getHistory('respond')));
					respondEvts=respondEvts.filter(i=>i.respondTo).map(evt=>evt.respondTo);
					return event.player.hasHistory('useCard',evt=>{
						return respondEvts.some(list=>list[1]==evt.card);
					});
				},
				direct:true,
				content:function(){
					'step 0'
					var num=1-player.countCards('h');
					event.num=num;
					var prompt2='';
					if(num>=0){
						var next=player.chooseBool().set('ai',()=>_status.event.goon);
						prompt2+=(num>0?'摸一张牌,':'')+'视为对'+get.translation(trigger.player)+'使用一张【杀】(伤害基数+1)';
					}
					else{
						var next=player.chooseToDiscard(-num).set('ai',card=>{
							if(_status.event.goon) return 5.2-get.value(card);
							return 0;
						}).set('logSkill',['dcsigong',trigger.player]);
						prompt2+='将手牌数弃置至1,视为对'+get.translation(trigger.player)+'使用一张【杀】(伤害基数+1)';
					}
					next.set('prompt',get.prompt('dcsigong',trigger.player));
					next.set('prompt2',prompt2);
					next.set('goon',get.effect(trigger.player,{name:'sha'},player,player)>0);
					'step 1'
					if(result.bool){
						if(num>=0) player.logSkill('dcsigong',trigger.player);
						if(num>0) player.draw(num,'nodelay');
						event.num=Math.max(1,Math.abs(num));
					}
					else event.finish();
					'step 2'
					if(player.canUse('sha',trigger.player,false)){
						player.addTempSkill('dcsigong_check');
						player.useCard({name:'sha',isCard:true},trigger.player,false).set('shanReq',num).set('oncard',card=>{
							var evt=_status.event;
							evt.baseDamage++;
							for(var target of game.filterPlayer(null,null,true)){
								var id=target.playerid;
								var map=evt.customArgs;
								if(!map[id]) map[id]={};
								map[id].shanRequired=evt.shanReq;
							}
						});
					}
				},
				subSkill:{
					round:{charlotte:true},
					check:{
						charlotte:true,
						forced:true,
						popup:false,
						trigger:{source:'damageSource'},
						filter:function(event,player){
							return event.card&&event.card.name=='sha'&&event.getParent(3).name=='dcsigong';
						},
						content:function(){
							player.addTempSkill('dcsigong_round','roundStart');
						}
					}
				}
			},
			//孙寒华
			dchuiling:{
				audio:2,
				trigger:{player:'useCard'},
				forced:true,
				direct:true,
				filter:function(){
					return ui.discardPile.childNodes.length>0;
				},
				onremove:true,
				mark:true,
				marktext:'灵',
				intro:{
					name2:'灵',
					mark:function(dialog,storage,player){
						dialog.addText('共有'+(storage||0)+'个标记');
						dialog.addText('注:图标的颜色代表弃牌堆中较多的颜色');
					},
				},
				global:'dchuiling_hint',
				content:function(){
					'step 0'
					var mark=false;
					var red=0,black=0;
					for(var i=0;i<ui.discardPile.childNodes.length;i++){
						var color=get.color(ui.discardPile.childNodes[i]);
						if(color=='red') red++;
						if(color=='black') black++;
					}
					if(red==black) event.finish();
					else if(red>black){
						player.logSkill('dchuiling');
						player.recover();
						event.finish();
						if(get.color(trigger.card)=='black') mark=true;
						event.logged=true;
					}
					else{
						if(!event.isMine()&&!event.isOnline()) game.delayx();
						player.chooseTarget(get.prompt('dchuiling'),'弃置一名角色的一张牌',(card,player,target)=>{
							return target.countDiscardableCards(player,'he')>0;
						}).set('ai',target=>{
							return get.effect(target,{name:'guohe_copy2'},_status.event.player);
						});
						if(get.color(trigger.card)=='red') mark=true;
					}
					if(mark){
						if(!event.logged) player.logSkill('dchuiling');
						player.addMark('dchuiling',1);
						event.logged=true;
					}
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						if(!event.logged) player.logSkill('dchuiling',target);
						else player.line(target);
						player.discardPlayerCard(target,'he',true);
					}
				},
				subSkill:{
					hint:{
						trigger:{
							global:['loseAfter','loseAsyncAfter','cardsDiscardAfter','equipAfter'],
						},
						forced:true,
						popup:false,
						lastDo:true,
						forceDie:true,
						forceOut:true,
						filter:function(event,player){
							if(event._dchuiling_checked) return false;
							event._dchuiling_checked=true;
							var cards=event.getd();
							if(!cards.filterInD('d').length) return false;
							return true;
						},
						markColor:[
							['rgba(241, 42, 42, 0.75)', 'black'],
							['',''],
							['rgba(18, 4, 4, 0.75)', 'rgb(200, 200, 200)']
						],
						content:function(){
							'step 0'
							var red=0,black=0;
							for(var i=0;i<ui.discardPile.childNodes.length;i++){
								var color=get.color(ui.discardPile.childNodes[i]);
								if(color=='red') red++;
								if(color=='black') black++;
							}
							if(trigger.name.indexOf('lose')==0){
								var cards=trigger.getd().filterInD('d');
								for(var i=0;i<cards.length;i++){
									var color=get.color(cards[i]);
									if(color=='red') red++;
									if(color=='black') black++;
								}
							}
							game.broadcastAll(function(ind){
								var bgColor=lib.skill.dchuiling_hint.markColor[ind][0],text='<span style="color: '+lib.skill.dchuiling_hint.markColor[ind][1]+'">灵</span>';
								for(var player of game.players){
									if(player.marks.dchuiling){
										player.marks.dchuiling.firstChild.style.backgroundColor=bgColor;
										player.marks.dchuiling.firstChild.innerHTML=text;
									}
								}
							},Math.sign(black-red)+1);
						},
					}
				},
				mod:{
					aiOrder:function(player,card,num){
						if(get.itemtype(card)!='card') return;
						var len=ui.discardPile.childNodes.length;
						if(!len){
							var type=get.type(card);
							if(type=='basic'||type=='trick'){
								if(player.getDamagedHp()>0){
									return num+(get.color(card)=='red'?15:10);
								}
								return num+10;
							}
							return;
						}
						if(len>40) return;
						var red=0,black=0;
						for(var i=0;i<ui.discardPile.childNodes.length;i++){
							var color=get.color(ui.discardPile.childNodes[i]);
							if(color=='red') red++;
							if(color=='black') black++;
						}
						if(red==black){
							var type=get.type(card);
							if(type=='basic'||type=='trick'){
								if(player.getDamagedHp()>0){
									return num+(get.color(card)=='red'?15:10);
								}
								return num+10;
							}
							return;
						}
						else{
							var color=get.color(card);
							if(color=='red'&&red<black||color=='black'&&red>black) return num+10;
						}
					},
				}
			},
			dcchongxu:{
				audio:2,
				enable:'phaseUse',
				limited:true,
				skillAnimation:true,
				animationColor:'wood',
				derivation:['dctaji','dcqinghuang'],
				filterCard:()=>false,
				selectCard:[0,1],
				prompt:function(){
					return '限定技。你可以失去〖汇灵〗,增加'+Math.min(game.countPlayer(),_status.event.player.countMark('dchuiling'))+'点体力上限,然后获得〖踏寂〗和〖清荒〗。'
				},
				filter:function(event,player){
					return player.countMark('dchuiling')>=4;
				},
				content:function(){
					'step 0'
					player.awakenSkill('dcchongxu');
					player.gainMaxHp(Math.min(game.countPlayer(),player.countMark('dchuiling')));
					player.removeSkill('dchuiling');
					'step 1'
					player.addSkillLog('dctaji');
					player.addSkillLog('dcqinghuang');
				},
				ai:{
					order:function(itemp,player){
						if(player.hasCard(card=>{
							return get.type(card)!='equip'&&player.getUseValue(card)>1;
						},'h')) return 12;
						return 0.1;
					},
					result:{
						player:function(player){
							var count=player.countMark('dchuiling');
							if(count>=game.countPlayer()-1) return 1;
							return (count>=6||player.hp<=2)?1:0;
						}
					}
				}
			},
			dctaji:{
				audio:2,
				trigger:{
					player:'loseAfter',
					global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
				},
				forced:true,
				locked:false,
				filter:function(event,player){
					var evt=event.getl(player);
					return evt&&evt.hs&&evt.hs.length;
				},
				content:function(){
					'step 0'
					var evt=trigger.getParent();
					var effects=[
						['useCard',function(){
							'step 0'
							var targets=game.filterPlayer(current=>{
								return current.countDiscardableCards(player,'he')&&current!=player;
							});
							if(!targets.length) event.finish();
							else player.chooseTarget('踏寂:弃置其他角色一张牌',true,(card,player,target)=>{
								return _status.event.targets.contains(target);
							}).set('targets',targets).set('ai',target=>{
								return get.effect(target,{name:'guohe_copy2'},_status.event.player);
							});
							'step 1'
							if(result.bool){
								var target=result.targets[0];
								player.line(target);
								player.discardPlayerCard(target,'he',true);
							}
						}],
						['respond',function(){
							player.draw();
						}],
						['discard',function(){
							player.recover();
						}],
						['other',function(){
							player.addSkill('dctaji_damage');
							player.addMark('dctaji_damage',1,false);
							game.log(player,'下一次对其他角色造成的伤害','#g+1');

						}]
					];
					var name=evt.name;
					if(trigger.name=='loseAsync') name=evt.type;
					var list=['useCard','respond','discard','other'];
					if(!list.contains(name)) name='other';
					for(var i=0;i<1+player.countMark('dcqinghuang_add');i++){
						if(!list.length) break;
						if(!list.contains(name)) name=list.randomRemove(1)[0];
						if(name=='useCard') list.remove('useCard');
						for(var effect of effects){
							if(effect[0]==name){
								list.remove(name);
								var next=game.createEvent('dctaji_'+name);
								next.player=player;
								next.setContent(effect[1]);
								break;
							}
						}
					}
				},
				subSkill:{
					damage:{
						trigger:{source:'damageBegin3'},
						forced:true,
						charlotte:true,
						onremove:true,
						filter:function(event,player){
							return event.player!=player;
						},
						content:function(){
							trigger.num+=player.countMark('dctaji_damage');
							player.removeSkill('dctaji_damage');
						},
						intro:{
							content:'下次对其他角色造成伤害时,此伤害+#',
						}
					}
				}
			},
			dcqinghuang:{
				audio:2,
				trigger:{player:'phaseUseBegin'},
				filter:function(event,player){
					return player.maxHp>1;
				},
				check:function(event,player){
					var num1=player.countCards('h');
					var num2=player.countCards('h',card=>player.hasValueTarget(card));
					var num3=player.getHandcardLimit();
					if(player.isDamaged()){
						return num2>1||num1-num2-num3>0;
					}
					else{
						return num2>2+Math.max(0,3-player.hp)||player.hp>2&&num1-num2-num3>2;
					}
				},
				content:function(){
					player.loseMaxHp();
					player.addTempSkill('dcqinghuang_add');
					player.addMark('dcqinghuang_add',1,false);
				},
				subSkill:{
					add:{
						charlotte:true,
						onremove:true,
					}
				}
			},
			//孟节
			dcyinlu:{
				audio:2,
				trigger:{
					global:'phaseBefore',
					player:'enterGame',
				},
				forced:true,
				locked:false,
				derivation:['dcyinlu_lequan','dcyinlu_huoxi','dcyinlu_zhangqi','dcyinlu_yunxiang'],
				global:['dcyinlu_lequan','dcyinlu_huoxi','dcyinlu_zhangqi','dcyinlu_yunxiang'],
				group:'dcyinlu_move',
				filter:function(event,player){
					return (event.name!='phase'||game.phaseNumber==0);
				},
				hasMark:function(target){
					return lib.skill.dcyinlu.derivation.some(i=>target.hasMark(i));
				},
				content:function(){
					'step 0'
					event.marks=lib.skill.dcyinlu.derivation.slice(0,3);
					if(game.countPlayer()<=2) event.goto(3);
					'step 1'
					player.chooseTarget('引路:令三名角色分别获得〖引路〗标记',true,3).set('targetprompt',()=>{
						return get.translation(lib.skill.dcyinlu.derivation[ui.selected.targets.length-1]);
					}).set('complexSelect',true).set('ai',target=>{
						var player=_status.event.player;
						if(ui.selected.targets.length==2) return get.effect(target,{name:'losehp'},player,player);
						return get.attitude(player,target);
					});
					'step 2'
					if(result.bool){
						var targets=result.targets;
						player.line(targets);
						for(var i=0;i<targets.length;i++){
							targets[i].addMark(event.marks[i]);
						}
					}
					event.goto(5);
					'step 3'
					player.logSkill('dcyinlu',game.players);
					var list=[];
					for(var mark of event.marks){
						list.push([mark,'<div class="popup text" style="width:calc(100% - 10px);display:inline-block"><div class="skill">【'+
							get.translation(mark)+'】</div><div>'+lib.translate[mark+'_info']+'</div></div>'])
					}
					var target=game.filterPlayer(i=>i!=player)[0];
					if(!game.hasPlayer(current=>current!=player)) target=player;
					event.target=target;
					player.chooseButton(['引路:令'+get.translation(target)+'获得2枚〖引路〗标记',[list,'textbutton']]).set('ai',button=>{
						var mark=button.link;
						if(mark=='dcyinlu_lequan') return 9;
						if(mark=='dcyinlu_zhangqi') return 10;
						return 8;
					}).set('forced',true).set('selectButton',2).set('forcebutton',true);
					'step 4'
					if(result.bool){
						var marks=result.links;
						for(var mark of marks) target.addMark(mark,1);
						event.marks.removeArray(marks);
						for(var mark of event.marks) player.addMark(mark,1);
					}
					'step 5'
					player.addMark('dcyinlu_yunxiang',1);
					player.addMark('dcyinlu_xiang',1);
					game.log(player,'获得了1点芸香值');
				},
				subSkill:{
					move:{
						audio:'dcyinlu',
						trigger:{
							player:'phaseZhunbeiBegin',
							global:'die',
						},
						direct:true,
						filter:function(event,player){
							if(event.name=='die'){
								return lib.skill.dcyinlu.hasMark(event.player);
							}
							return game.hasPlayer(current=>{
								return lib.skill.dcyinlu.hasMark(current);
							})
						},
						content:function(){
							'step 0'
							if(trigger.name=='die'){
								var marks=lib.skill.dcyinlu.derivation.filter(mark=>trigger.player.hasMark(mark));
								event.marks=marks;
								event.goto(3);
							}
							else{
								if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
								player.chooseTarget(get.prompt('dcyinlu_move'),'移动一名角色的〖引路〗标记',2,(card,player,target)=>{
									if(ui.selected.targets.length==0) return lib.skill.dcyinlu.hasMark(target);
									return true;
								}).set('ai',target=>{
									var player=_status.event.player;
									if(ui.selected.targets.length==0){
										var owned=lib.skill.dcyinlu.derivation.filter(i=>target.hasMark(i));
										var att=get.attitude(player,target);
										if(att>0){
											if(owned.contains('dcyinlu_zhangqi')) return target.hasCard({suit:'spade'},'he')?5:10;
											if(owned.contains('dcyinlu_lequan')&&target.isHealthy()&&game.hasPlayer(current=>{
												return current!=target&&get.recoverEffect(current,player,player)>0;
											})) return 2;
											return 0;
										}
										if(att<0){
											if(owned.some(i=>i!='dcyinlu_zhangqi')) return 8;
											return 0;
										}
										if(owned.contains('dcyinlu_zhangqi')&&game.hasPlayer(current=>{
											return current!=target&&get.effect(current,{name:'losehp'},player,player)>0;
										})) return 3;
										return 1;
									}
									else{
										var targetx=ui.selected.targets[0];
										var att=get.attitude(player,targetx),att2=get.attitude(player,target);
										var owned=lib.skill.dcyinlu.derivation.filter(i=>targetx.hasMark(i));
										if(att>0){
											if(owned.contains('dcyinlu_zhangqi')) return -att2;
											if(owned.contains('dcyinlu_lequan')) return get.recoverEffect(target,player,player);
										}
										else if(att<0){
											if(owned.some(i=>i!='dcyinlu_zhangqi')) return att2;
										}
										else{
											if(owned.contains('dcyinlu_zhangqi')) return get.effect(target,{name:'losehp'},player,player);
											return att2;
										}
									}
									return Math.random();
								});
							}
							'step 1'
							if(result.bool){
								var marks=lib.skill.dcyinlu.derivation;
								var targets=result.targets,owned=marks.filter(mark=>targets[0].hasMark(mark));
								event.targets=targets;
								if(owned.length==1) event._result={bool:true,control:owned[0]};
								else{
									player.chooseControl(owned).set('prompt','引路:选择要移动'+get.translation(targets[0])+'的标记').set('choiceList',owned.map(mark=>{
										return '<div class="skill">【'+get.translation(mark)+'】</div><div>'+lib.translate[mark+'_info']+'</div>';
									})).set('displayIndex',false).set('ai',()=>{
										return _status.event.choice;
									}).set('choice',function(){
										var att=get.attitude(player,targets[0]),att2=get.attitude(player,targets[1]);
										if(att>0){
											if(owned.contains('dcyinlu_zhangqi')&&att2<0) return 'dcyinlu_zhangqi';
											if(owned.contains('dcyinlu_lequan')&&att2>0) return 'dcyinlu_lequan';
										}
										else if(att<0){
											var marksx=owned.filter(i=>i!='dcyinlu_zhangqi');
											if(marksx.length&&att2>0) return marksx[0];
											return owned[0];
										}
										else{
											if(owned.contains('dcyinlu_zhangqi')) return 'dcyinlu_zhangqi';
										}
										if(owned.length>1) owned.remove('dcyinlu_zhangqi');
										return owned[0];
									}());
								}
							}
							else{
								if(_status.connectMode) game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
								event.finish();
							}
							'step 2'
							if(_status.connectMode) game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
							var mark=result.control,count=targets[0].countMark(mark);
							player.logSkill('dcyinlu_move',targets,false);
							player.line2(targets,mark=='dcyinlu_zhangqi'?'fire':'green');
							targets[0].removeMark(mark,count);
							targets[1].addMark(mark,count);
							event.finish();
							'step 3'
							player.chooseTarget('引路:是否转移“'+get.translation(event.marks[0])+'”标记?').set('ai',target=>{
								var player=_status.event.player,mark=_status.event.mark;
								if(mark=='dcyinlu_zhangqi') return get.effect(target,{name:'losehp'},player,player)+0.1;
								if(mark=='dcyinlu_lequan') return get.recoverEffect(target,player,player)+get.attitude(player,target)/5;
								return get.attitude(player,target);
							}).set('mark',event.marks[0]);
							'step 4'
							if(result.bool){
								var target=result.targets[0];
								player.logSkill('dcyinlu_move',target);
								var count=trigger.player.countMark(event.marks[0]);
								trigger.player.removeMark(event.marks[0],count,false);
								target.addMark(event.marks[0],count);
							}
							'step 5'
							event.marks.shift();
							if(event.marks.length) event.goto(3);
						}
					},
					lequan:{
						trigger:{player:'phaseJieshuBegin'},
						direct:true,
						charlotte:true,
						filter:function(event,player){
							return player.hasMark('dcyinlu_lequan')&&game.hasPlayer(current=>current.hasSkill('dcyinlu'));
						},
						marktext:'乐',
						intro:{
							name:'乐泉',
							name2:'乐泉',
							markcount:()=>0,
							content:'结束阶段,你可以弃置一张♦牌并回复1点体力。'
						},
						content:function(){
							'step 0'
							player.chooseToDiscard('乐泉:是否弃置一张♦牌并回复1点体力?',{suit:'diamond'},'he').set('ai',card=>{
								if(_status.event.goon) return 7-get.value(card);
								return 0;
							}).set('logSkill','dcyinlu_lequan').set('goon',get.recoverEffect(player,player));
							'step 1'
							if(result.bool){
								player.recover();
							}
						}
					},
					huoxi:{
						trigger:{player:'phaseJieshuBegin'},
						direct:true,
						charlotte:true,
						filter:function(event,player){
							return player.hasMark('dcyinlu_huoxi')&&game.hasPlayer(current=>current.hasSkill('dcyinlu'));
						},
						marktext:'藿',
						intro:{
							name:'藿溪',
							name2:'藿溪',
							markcount:()=>0,
							content:'结束阶段,你可以弃置一张♥牌并摸两张牌。'
						},
						content:function(){
							'step 0'
							player.chooseToDiscard('藿溪:是否弃置一张♥牌并摸两张牌?',{suit:'heart'},'he').set('ai',card=>{
								return 6-get.value(card);
							}).set('logSkill','dcyinlu_huoxi');
							'step 1'
							if(result.bool){
								player.draw(2);
							}
						},
					},
					zhangqi:{
						trigger:{player:'phaseJieshuBegin'},
						forced:true,
						direct:true,
						charlotte:true,
						filter:function(event,player){
							return player.hasMark('dcyinlu_zhangqi')&&game.hasPlayer(current=>current.hasSkill('dcyinlu'));
						},
						marktext:'瘴',
						intro:{
							name:'瘴气',
							name2:'瘴气',
							markcount:()=>0,
							content:'锁定技。结束阶段,你须弃置一张♠牌,否则失去1点体力。'
						},
						content:function(){
							'step 0'
							player.chooseToDiscard('瘴气:弃置一张♠牌,或失去1点体力',{suit:'spade'},'he').set('ai',card=>{
								if(_status.event.goon) return 7-get.value(card);
								return 0;
							}).set('logSkill','dcyinlu_zhangqi').set('goon',get.effect(player,{name:'losehp'},player)<0);
							'step 1'
							if(!result.bool){
								player.logSkill('dcyinlu_zhangqi');
								player.loseHp();
							}
						}
					},
					yunxiang:{
						trigger:{player:['phaseJieshuBegin','damageBegin4']},
						direct:true,
						charlotte:true,
						filter:function(event,player){
							if(!game.hasPlayer(current=>current.hasSkill('dcyinlu'))) return false;
							if(event.name=='phaseJieshu') return player.hasMark('dcyinlu_yunxiang');
							return player.hasMark('dcyinlu_yunxiang')&&player.hasMark('dcyinlu_xiang');
						},
						onremove:function(player){
							delete player.storage.dcyinlu_xiang;
						},
						marktext:'芸',
						intro:{
							name:'芸香',
							name2:'芸香',
							markcount:function(storage,player){
								return player.countMark('dcyinlu_xiang');
							},
							content:function(storage,player){
								return '①结束阶段,你可以弃置一张♣牌,获得1点“芸香”值。②当你受到伤害时,你可以扣减所有“芸香”值,减少等量的伤害。<li>当前芸香值:'+player.countMark('dcyinlu_xiang');
							}
						},
						content:function(){
							'step 0'
							if(trigger.name=='phaseJieshu'){
								player.chooseToDiscard('芸香:是否弃置一张♣牌,获得1枚“香”?',{suit:'club'},'he').set('ai',card=>{
									return 6-get.value(card)+2.5*_status.event.player.countMark('dcyinlu_xiang');
								}).set('logSkill','dcyinlu_yunxiang');
							}
							else{
								player.chooseBool('芸香:是否移去所有“香”,令此伤害-'+player.countMark('dcyinlu_xiang')+'?').set('ai',()=>{
									return _status.event.bool;
								}).set('bool',get.damageEffect(player,trigger.source,player)<0);
							}
							'step 1'
							if(result.bool){
								if(trigger.name=='phaseJieshu'){
									player.addMark('dcyinlu_xiang',1,false);
									game.log(player,'获得了1点芸香值');
								}
								else{
									player.logSkill('dcyinlu_yunxiang');
									var num=player.countMark('dcyinlu_xiang');
									player.removeMark('dcyinlu_xiang',num,false);
									game.log(player,'扣减了',num,'点芸香值');
									trigger.num=Math.max(0,trigger.num-num);
								}
							}
						}
					}
				}
			},
			dcyouqi:{
				audio:2,
				trigger:{global:'loseAfter'},
				filter:function(event,player){
					if(event.getParent(3).name.indexOf('dcyinlu_')!=0||player==event.player) return false;
					return true;
				},
				derivation:'dcyouqi_faq',
				direct:true,
				forced:true,
				content:function(){
					if(Math.random()<1.25-0.25*get.distance(player,trigger.player)||get.isLuckyStar(player)){
						player.logSkill('dcyouqi');
						player.gain(trigger.cards.filterInD('d'),'gain2');
					}
				},
			},
			//孙资刘放
			dcqinshen:{
				audio:2,
				trigger:{player:'phaseDiscardEnd'},
				frequent:true,
				prompt2:function(){
					return '摸'+get.cnNumber(lib.skill.dcqinshen.getNum())+'张牌';
				},
				getNum:function(){
					var list=lib.suit.slice();
					game.getGlobalHistory('cardMove',function(evt){
						if(evt.name!='lose'&&evt.name!='cardsDiscard') return false;
						if(evt.name=='lose'&&evt.position!=ui.discardPile) return false;
						for(var card of evt.cards) list.remove(get.suit(card,false));
					});
					return list.length;
				},
				filter:function(event,player){
					return lib.skill.dcqinshen.getNum()>0;
				},
				content:function(){
					player.draw(lib.skill.dcqinshen.getNum());
				}
			},
			dcweidang:{
				audio:2,
				trigger:{global:'phaseJieshuBegin'},
				/**
				 * @deprecated
				 */
				getLength:card=>get.cardNameLength(card),
				direct:true,
				filter:function(event,player){
					var num=lib.skill.dcqinshen.getNum();
					return event.player!=player&&(_status.connectMode?player.countCards('he'):player.hasCard(card=>get.cardNameLength(card)==num,'he'));
				},
				content:function(){
					'step 0'
					var num=lib.skill.dcqinshen.getNum();
					event.num=num;
					player.chooseCard(get.prompt('dcweidang'),'将一张字数为'+num+'的牌置于牌堆底,然后获得一张字数为'+num+'的牌。若你能使用此牌,你使用之。','he',(card,player,target)=>{
						return get.cardNameLength(card)==_status.event.num;
					}).set('num',num).set('ai',card=>{
						return 5-get.value(card);
					});
					'step 1'
					if(result.bool){
						player.logSkill('dcweidang'),
						player.lose(result.cards[0],ui.cardPile);
						game.broadcastAll(function(player){
							var cardx=ui.create.card();
							cardx.classList.add('infohidden');
							cardx.classList.add('infoflip');
							player.$throw(cardx,1000,'nobroadcast');
						},player);
						game.delayx();
					}
					else event.finish();
					'step 2'
					var card=get.cardPile(cardx=>get.cardNameLength(cardx)==num);
					if(card){
						player.gain(card,'gain2');
						if(player.hasUseTarget(card)){
							player.chooseUseTarget(card,true);
						}
					}
				}
			},
			//三袁
			dcneifa:{
				audio:2,
				trigger:{player:'phaseUseBegin'},
				content:function(){
					'step 0'
					player.draw(3);
					player.chooseToDiscard(true,'he').set('ai',function(cardx){
						var player=_status.event.player;
						var num=0;
						var hs=player.getCards('h');
						var muniu=player.getEquip('muniu');
						if(muniu&&muniu.cards) hs=hs.concat(muniu.cards);
						if(get.type(cardx)=='basic'){
							var shas=hs.filter(function(card){
								return card!=cardx&&get.name(card,player)=='sha'&&player.hasValueTarget(card,false);
							});
							var numx=player.countCards('h',function(card){
								return get.type2(card,player)=='trick';
							});
							num+=Math.min(numx,Math.max(0,shas.length-player.getCardUsable('sha')))*0.65;
							num+=Math.min(player.getCardUsable('sha')+numx,shas.filter(function(card){
								return game.countPlayer(function(current){
									return player.canUse(card,current)&&get.effect(current,card,player,player)>0;
								})>1;
							}).length)*1.1;
							var taos=Math.min(player.maxHp-player.hp,hs.filter(function(card){
								return cardx!=card&&get.name(card,player)=='tao';
							}).length);
							num+=taos*player.getDamagedHp()*1.2;
						}
						else if(get.type2(cardx)=='trick'){
							var numx=Math.sqrt(Math.min(5,player.countCards('h',function(card){
								return get.type(card,player)=='basic';
							})));
							num+=hs.filter(function(card){
								return card!=cardx&&get.type2(card)=='trick'&&player.hasValueTarget(card);
							}).length*0.65;
						}
						else num=4;
						return num*1.5-get.value(cardx);
					});
					'step 1'
					if(result.bool&&result.cards&&result.cards.length&&get.type(result.cards[0])!='equip'){
						var name=get.type(result.cards[0])=='basic'?'dcneifa_basic':'dcneifa_trick';
						player.addTempSkill(name,'phaseUseAfter');
						var num=Math.min(5,player.countCards('h',function(cardx){
							var type=get.type(cardx,player);
							return (name=='dcneifa_basic')!=(type=='basic')&&type!='equip';
						}));
						if(num>0) player.addMark(name,num,false);
						else player.storage[name]=0;
					}
				},
				ai:{
					threaten:2.33,
				},
			},
			dcneifa_basic:{
				mark:true,
				marktext:'伐',
				onremove:true,
				intro:{
					name:'内伐 - 基本牌',
					content:'本回合内不能使用锦囊牌,使用【杀】选择目标时可以额外指定一个目标且使用【杀】的目标次数上限+#。',
				},
				mod:{
					cardEnabled:function(card,player){
						if(get.type(card,'trick')=='trick') return false;
					},
					cardSavable:function(card,player){
						if(get.type(card,'trick')=='trick') return false;
					},
					cardUsable:function(card,player,num){
						if(card.name=='sha'){
							return num+player.countMark('dcneifa_basic');
						}
					},
				},
				trigger:{player:'useCard2'},
				filter:function(event,player){
					if(event.card.name!='sha') return false;
					return game.hasPlayer(function(current){
						return !event.targets.contains(current)&&player.canUse(event.card,current,false);
					});
				},
				direct:true,
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt('dcneifa'),'为'+get.translation(trigger.card)+'额外指定一个目标',function(card,player,target){
						return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target,false);
					}).set('sourcex',trigger.targets).set('ai',function(target){
						var player=_status.event.player;
						return get.effect(target,_status.event.card,player,player);
					}).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'
					player.logSkill('dcneifa',event.targets);
					trigger.targets.addArray(event.targets);
				},
			},
			dcneifa_trick:{
				trigger:{player:'useCard2'},
				direct:true,
				mark:true,
				marktext:'伐',
				onremove:true,
				mod:{
					cardEnabled:function(card,player){
						if(get.type(card)=='basic') return false;
					},
					cardSavable:function(card,player){
						if(get.type(card)=='basic') return false;
					},
				},
				intro:{
					name:'内伐 - 锦囊牌',
					content:'本回合内不能使用基本牌,且使用普通锦囊牌选择目标时可以增加或减少一个目标。'
				},
				filter:function(event,player){
					if(get.type(event.card)!='trick') return false;
					if(event.targets&&event.targets.length>0) return true;
					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);
						})){
							return true;
						}
					}
					return false;
				},
				content:function(){
					'step 0'
					var prompt2='为'+get.translation(trigger.card)+'增加或减少一个目标'
					player.chooseTarget(get.prompt('dcneifa'),function(card,player,target){
						var player=_status.event.player;
						if(_status.event.targets.contains(target)) return true;
						return lib.filter.targetEnabled2(_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('dcneifa',event.targets);
						if(trigger.targets.contains(event.targets[0])) trigger.targets.removeArray(event.targets);
						else trigger.targets.addArray(event.targets);
					}
				}
			},
			//桥蕤
			dcaishou:{
				audio:2,
				trigger:{player:'phaseZhunbeiBegin'},
				filter:function(event,player){
					return player.hasCard(card=>card.hasGaintag('dcaishou_tag'),'h');
				},
				forced:true,
				locked:false,
				group:['dcaishou_draw','dcaishou_lose'],
				subfrequent:['draw'],
				content:function(){
					'step 0'
					player.discard(player.getCards('h',card=>card.hasGaintag('dcaishou_tag')));
					'step 1'
					var len=0;
					player.getHistory('lose',evt=>{
						if(evt.getParent(2)==event) len+=evt.cards.length;
					});
					if(len>Math.max(0,player.hp)&&player.maxHp<9){
						player.gainMaxHp();
					}
				},
				subSkill:{
					draw:{
						audio:'dcaishou',
						trigger:{player:'phaseJieshuBegin'},
						frequent:function(event,player){
							return player.maxHp>1;
						},
						prompt2:function(event,player){
							return '摸'+get.cnNumber(player.maxHp)+'张牌,称为“隘”';
						},
						check:function(event,player){
							return player.maxHp>1;
						},
						content:function(){
							player.draw(player.maxHp).gaintag=['dcaishou_tag'];
						}
					},
					lose:{
						audio:'dcaishou',
						trigger:{
							player:'loseAfter',
							global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
						},
						forced:true,
						locked:false,
						filter:function(event,player){
							if(player==_status.currentPhase) return false;
							var evt=event.getl(player);
							if(!evt||!evt.hs||!evt.hs.length||player.hasCard(card=>card.hasGaintag('dcaishou_tag'),'h')) return false;
							if(event.name=='lose'){
								for(var i in event.gaintag_map){
									if(event.gaintag_map[i].contains('dcaishou_tag')) return true;
								}
								return false;
							}
							return player.hasHistory('lose',function(evt){
								if(event!=evt.getParent()) return false;
								for(var i in evt.gaintag_map){
									if(evt.gaintag_map[i].contains('dcaishou_tag')) return true;
								}
								return false;
							});
						},
						content:function(){
							player.loseMaxHp();
						}
					},
				}
			},
			dcsaowei:{
				audio:2,
				trigger:{global:'useCardAfter'},
				filter:function(event,player){
					return event.player!=player&&event.card.name=='sha'&&event.targets.length&&!event.targets.contains(player)&&
						event.targets.every(current=>player.inRange(current)&&current.isIn())&&player.hasCard(card=>card.hasGaintag('dcaishou_tag'),'h');
				},
				direct:true,
				content:function(){
					'step 0'
					player.chooseCardTarget({
						position:'hs',
						prompt:get.prompt('dcsaowei'),
						prompt2:'将一张“隘”当做【杀】对'+get.translation(trigger.targets)+'使用',
						targets:trigger.targets,
						filterCard:function(card,player){
							if(get.itemtype(card)=='card'&&!card.hasGaintag('dcaishou_tag')) return false;
							return _status.event.targets.every(current=>player.canUse(get.autoViewAs({name:'sha'},[card]),current,false));
						},
						filterTarget:function(card,player,target){
							if(!_status.event.targets.contains(target)) return false;
							card=get.autoViewAs({name:'sha'},[card]);
							return lib.filter.filterTarget.apply(this,arguments);
						},
						selectTarget:-1,
						ai1:function(card){
							var player=_status.event.player;
							if(player.isHealthy()&&player.hasSkill('dcaishou')&&player.countCards('h',card=>card.hasGaintag('dcaishou_tag')==1)) return 0;
							var eff=0;
							for(var target of _status.event.targets){
								eff+=get.effect(target,get.autoViewAs({name:'sha'},[card]),player,player);
							}
							if(eff>0) return 6.5+eff/10-get.value(card);
							return 0;
						},
						ai2:()=>1,
					});
					'step 1'
					if(result.bool){
						var cards=result.cards,targets=result.targets;
						event.cards=cards;
						var next=player.useCard({name:'sha'},cards,targets,false,'dcsaowei');
						player.when('useCardAfter')
							.filter(event=>event==next)
							.then(()=>{
								if(player.hasHistory('sourceDamage',evt=>evt.card==trigger.card)){
									var cards=trigger.cards.filterInD();
									if(cards.length>0) player.gain(cards,'gain2');
								}
							});
					}
				},
			},
			//向朗
			dckanji:{
				audio:2,
				enable:'phaseUse',
				usable:2,
				filter:function(event,player){
					return player.countCards('h');
				},
				content:function(){
					'step 0'
					player.showHandcards();
					'step 1'
					var suits=[];
					player.getCards('h',card=>suits.add(get.suit(card)));
					if(suits.length==player.countCards('h')){
						player.draw(2);
						event.suitsLength=suits.length;
						player.addTempSkill('dckanji_check');
					}
				},
				subSkill:{
					check:{
						trigger:{player:'gainAfter'},
						filter:function(event,player){
							if(event.getParent(2).name!='dckanji') return false;
							var len=event.getParent(2).suitsLength;
							var suits=[];
							player.getCards('h',card=>suits.add(get.suit(card)));
							return suits.length>=4&&len<4;
						},
						charlotte:true,
						forced:true,
						popup:false,
						content:function(){
							player.skip('phaseDiscard');
							game.log(player,'跳过了','#y弃牌阶段');
						},
					}
				},
				ai:{
					order:9,
					result:{
						player:function(player,target){
							var count=player.countCards('h');
							if(count>4) return false;
							var suits=[];
							player.getCards('h',card=>suits.add(get.suit(card)));
							return suits.length==count?1:0;
						}
					}
				}
			},
			dcqianzheng:{
				audio:2,
				trigger:{target:'useCardToTargeted'},
				usable:2,
				direct:true,
				filter:function(event,player){
					return event.player!=player&&(get.type(event.card)=='trick'||event.card.name=='sha')&&player.countCards('he')>1;
				},
				content:function(){
					'step 0'
					var str=',若重铸的牌中没有'+get.translation(get.type2(trigger.card))+'牌,你于'+get.translation(trigger.cards)+'进入弃牌堆后获得之';
					player.chooseCard(get.prompt('dcqianzheng'),'重铸两张牌'+(trigger.cards.length?str:'')+'。',2,'he',lib.filter.cardRecastable).set('ai',card=>{
						var val=get.value(card);
						if(get.type2(card)==_status.event.type) val+=0.5;
						return 6-val;
					}).set('type',get.type2(trigger.card));
					'step 1'
					if(result.bool){
						var cards=result.cards;
						player.logSkill('dcqianzheng');
						player.recast(cards);
						if(cards.every(card=>get.type2(card)!=get.type2(trigger.card))){
							trigger.getParent().dcqianzheng=true;
							player.addTempSkill('dcqianzheng_gain');
						}
					}
					else player.storage.counttrigger.dcqianzheng--;
				},
				subSkill:{
					gain:{
						trigger:{global:'cardsDiscardAfter'},
						filter:function(event,player){
							var evt=event.getParent();
							if(evt.name!='orderingDiscard') return false;
							return evt.relatedEvent.dcqianzheng&&event.cards.filterInD('d').length;
						},
						charlotte:true,
						forced:true,
						popup:false,
						content:function(){
							player.gain(trigger.cards.filterInD('d'),'gain2');
						},
					}
				},
			},
			//秦朗
			dchaochong:{
				audio:2,
				trigger:{player:'useCardAfter'},
				filter:function(event,player){
					return player.getHandcardLimit()!=player.countCards('h');
				},
				direct:true,
				locked:false,
				content:function(){
					'step 0'
					var del=player.getHandcardLimit()-player.countCards('h');
					event.delta=del;
					if(del>0){
						player.chooseBool(get.prompt('dchaochong'),'摸'+get.cnNumber(Math.min(5,del))+'张牌,然后令你的手牌上限-1').set('ai',()=>{
							var player=_status.event.player;
							if(player.isPhaseUsing()&&player.hasCard(cardx=>player.hasUseTarget(cardx)&&player.hasValueTarget(cardx),'hs')) return false;
							return true;
						});
					}
					else if(del<0){
						player.chooseToDiscard(get.prompt('dchaochong'),'弃置'+get.cnNumber(-del)+'张手牌,然后令你的手牌上限+1',-del).set('ai',card=>{
							var player=_status.event.player;
							if(player.isPhaseUsing()&&player.hasCard(cardx=>player.hasValueTarget(cardx),'hs')) return 6-player.getUseValue(card);
							return 5-get.value(card);
						}).set('logSkill','dchaochong');
					}
					'step 1'
					if(result.bool){
						if(event.delta>0){
							player.logSkill('dchaochong');
							player.draw(Math.min(5,event.delta));
							lib.skill.dchaochong.change(player,-1);
						}
						else if(event.delta<0){
							lib.skill.dchaochong.change(player,1);
						}
					}
				},
				change:function(player,num){
					if(typeof player.storage.dchaochong!=='number') player.storage.dchaochong=0;
					if(!num) return;
					player.storage.dchaochong+=num;
					player.markSkill('dchaochong');
					game.log(player,'的手牌上限','#g'+(num>0?'+':'')+num);
				},
				markimage:'image/card/handcard.png',
				intro:{
					content:function(storage,player){
						var num=player.storage.dchaochong;
						return '手牌上限'+(num>=0?'+':'')+num;
					}
				},
				mod:{
					maxHandcard:function(player,num){
						return num+player.countMark('dchaochong');
					}
				},
				ai:{threaten:2.2}
			},
			dcjinjin:{
				audio:2,
				trigger:{
					source:'damageSource',
					player:'damageEnd',
				},
				usable:1,
				logTarget:'source',
				check:function(event,player){
					if(typeof player.storage.dchaochong!='number'||player.storage.dchaochong==0) return true;
					var evt=event.getParent('useCard');
					if(evt&&evt.player==player&&event.source==player) return false;
					if(player.isPhaseUsing()&&player.storage.dchaochong==-1) return true;
					return Math.abs(player.storage.dchaochong)>=2;
				},
				prompt2:function(event,player){
					var str='';
					if(typeof player.storage.dchaochong=='number'&&player.storage.dchaochong!=0){
						str +='重置因〖佞宠〗增加或减少的手牌上限,';
					}
					var num=Math.abs(player.countMark('dchaochong'))||1;
					if(event.source&&event.source.isIn()){
						str+='令伤害来源弃置至多'+get.cnNumber(num)+'张牌,然后你摸'+num+'-X张牌(X为其弃置的牌数)';
					}
					else str+='你摸'+get.cnNumber(num)+'张牌';
					return str;
				},
				content:function(){
					'step 0'
					var del=Math.abs(player.countMark('dchaochong'))||1;
					event.delta=del;
					player.storage.dchaochong=0;
					if(player.hasSkill('dchaochong',null,false,false)) player.markSkill('dchaochong');
					game.log(player,'重置了手牌上限');
					if(trigger.source&&trigger.source.isIn()){
						trigger.source.chooseToDiscard(get.translation(player)+'对你发动了【矜谨】','弃置至多'+get.cnNumber(del)+'张牌,然后'+get.translation(player)+'摸'+del+'-X张牌(X为你弃置的牌数)。',[1,del],'he').set('ai',card=>{
							if(_status.event.goon) return 5.5-get.value(card);
							return 0;
						}).set('goon',get.attitude(trigger.source,player)<0);
					}
					'step 1'
					var num=event.delta;
					if(result.bool) num-=result.cards.length;
					if(num>0) player.draw(num);
				},
				ai:{
					combo:'dchaochong',
					maixie:true,
					maixie_hp:true,
					threaten:0.85,
					effect:{
						target:function(card,player,target){
							if(get.tag(card,'damage')){
								if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
								if(!target.hasFriend()) return;
								var num=0;
								if(typeof target.storage.dcninchong=='number') num=Math.abs(target.storage.dcninchong);
								if(num<=0) return;
								return [1,Math.min(1,num/3)];
							}
						},
					},
				},
			},
			//二傅
			dcxuewei:{
				audio:2,
				trigger:{player:'phaseJieshuBegin'},
				direct:true,
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt2('dcxuewei'),(card,player,target)=>{
						return target.hp<=player.hp;
					}).set('ai',target=>{
						var player=_status.event.player;
						return get.effect(target,{name:'tao'},player,player)+0.1;
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('dcxuewei',target);
						player.addTempSkill('dcxuewei_shelter',{player:'phaseBegin'});
						player.markAuto('dcxuewei_shelter',[target]);
					}
				},
				ai:{threaten:1.1},
				subSkill:{
					shelter:{
						audio:'dcxuewei',
						trigger:{global:'damageBegin4'},
						filter:function(event,player){
							return player.getStorage('dcxuewei_shelter').contains(event.player);
						},
						charlotte:true,
						forced:true,
						onremove:true,
						logTarget:'player',
						marktext:'卫',
						intro:{content:'保护对象:$'},
						content:function(){
							'step 0'
							trigger.cancel();
							'step 1'
							player.loseHp();
							if(trigger.player!=player) game.asyncDraw([player,trigger.player]);
							else player.draw('nodelay');
							'step 2'
							game.delayx();
						},
						ai:{
							filterDamage:true,
							skillTagFilter:function(player,tag,arg){
								if(arg&&arg.player&&arg.player.hasSkillTag('jueqing',false,player)) return false;
								return true;
							}
						},
					}
				},
			},
			dcyuguan:{
				audio:2,
				trigger:{global:'phaseEnd'},
				filter:function(event,player){
					var num=player.getDamagedHp();
					if(num==0) return false;
					return !game.hasPlayer(current=>{
						return current.getDamagedHp()>num;
					});
				},
				check:function(event,player){
					var num=player.getDamagedHp()-1;
					if(num<=0) return false;
					var list=game.filterPlayer().map(target=>{
						return get.attitude(player,target)*Math.pow(Math.max(0,target.maxHp-target.countCards('h')-1),2);
					}).sort((a,b)=>b-a);
					return list.slice(0,num).reduce((p,c)=>p+c,0)>0;
				},
				content:function(){
					'step 0'
					player.loseMaxHp();
					'step 1'
					var num=player.getDamagedHp();
					if(!player.isIn()||!num) event.finish();
					else player.chooseTarget('御关:令'+get.cnNumber(num)+'名角色将手牌摸至体力上限',Math.min(game.countPlayer(),num),true).set('ai',target=>{
						return get.attitude(_status.event.player,target)*Math.max(0.1,target.maxHp-target.countCards('h'));
					});
					'step 2'
					if(result.bool){
						var targets=result.targets.sortBySeat(_status.currentPhase);
						player.line(targets);
						for(var target of targets){
							target.drawTo(target.maxHp);
						}
					}
				}
			},
			//郑浑
			dcqiangzhi:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filterTarget:function(card,player,target){
					if(target==player) return false;
					return target.countDiscardableCards(player,'he')+player.countDiscardableCards(player,'he')>=3;
				},
				content:function(){
					'step 0'
					var dialog=[];
					dialog.push('强峙:弃置你与'+get.translation(target)+'的共计三张牌');
					if(player.countCards('h')) dialog.addArray(['<div class="text center">你的手牌</div>',player.getCards('h')]);
					if(player.countCards('e')) dialog.addArray(['<div class="text center">你的装备</div>',player.getCards('e')]);
					if(target.countCards('h')){
						dialog.add('<div class="text center">'+get.translation(target)+'的手牌</div>');
						if(player.hasSkillTag('viewHandcard',null,target,true)) dialog.push(target.getCards('h'));
						else dialog.push([target.getCards('h'),'blank']);
					}
					if(target.countCards('e')) dialog.addArray(['<div class="text center">'+get.translation(target)+'的装备</div>',target.getCards('e')]);
					player.chooseButton(3,true).set('createDialog',dialog).set('filterButton',button=>{
						if(!lib.filter.canBeDiscarded(button.link,_status.event.player,get.owner(button.link))) return false;
						return true;
					}).set('filterOk',()=>{
						return ui.selected.buttons.length==3;
					}).set('ai',button=>{
						var player=_status.event.player;
						var target=_status.event.getParent().target;
						var card=button.link;
						if(get.owner(card)==player){
							if(_status.event.damage) return 15-get.value(card);
							if(player.hp>=3||get.damageEffect(player,target,player)>=0||player.hasSkill('dcpitian')&&player.getHandcardLimit()-player.countCards('h')>=1&&player.hp>1) return 0;
							if(ui.selected.buttons.length==0) return 10-get.value(card);
							return 0;
						}
						else{
							if(_status.event.damage) return 0;
							return -(get.sgnAttitude(player,target)||1)*get.value(card);
						}
					}).set('damage',get.damageEffect(target,player,player)>10&&player.countCards('he',card=>{
						return lib.filter.canBeDiscarded(card,player,player)&&get.value(card)<5;
					})>=3);
					'step 1'
					if(result.bool){
						var links=result.links;
						var list1=[],list2=[];
						event.players=[player,target];
						for(var card of links){
							if(get.owner(card)==player) list1.push(card);
							else list2.push(card);
						}
						if(list1.length&&list2.length){
							game.loseAsync({
								lose_list:[
									[player,list1],
									[target,list2]
								],
								discarder:player,
							}).setContent('discardMultiple');
							event.finish();
						}
						else if(list2.length) target.discard(list2);
						else player.discard(list1);
						if(list2.length>=3) event.players.reverse();
					}
					else event.finish();
					'step 2'
					event.players[0].line(event.players[1]);
					event.players[1].damage(event.players[0]);
				},
				ai:{
					expose:0.2,
					order:4,
					result:{
						target:function(player,target){
							return get.effect(target,{name:'guohe_copy2'},player,target)/2*(target.countDiscardableCards(player,'he')>=2?1.25:1)+get.damageEffect(target,player,target)/3;
						}
					}
				}
			},
			dcpitian:{
				audio:2,
				trigger:{
					player:['loseAfter','damageEnd'],
					global:'loseAsyncAfter',
				},
				forced:true,
				locked:false,
				group:'dcpitian_draw',
				filter:function(event,player){
					if(event.name=='damage') return true;
					return event.type=='discard'&&event.getl(player).cards2.length>0;
				},
				content:function(){
					player.addMark('dcpitian_handcard',1,false);
					player.addSkill('dcpitian_handcard');
					game.log(player,'的手牌上限','#y+1');
				},
				subSkill:{
					draw:{
						audio:'dcpitian',
						trigger:{player:'phaseJieshuBegin'},
						filter:function(event,player){
							return player.countCards('h')<player.getHandcardLimit();
						},
						prompt2:function(event,player){
							return '摸'+get.cnNumber(Math.min(5,player.getHandcardLimit()-player.countCards('h')))+'张牌,重置因〖辟田〗增加的手牌上限';
						},
						check:function(event,player){
							return player.getHandcardLimit()-player.countCards('h')>Math.min(2,player.hp-1);
						},
						content:function(){
							'step 0'
							var num=Math.min(5,player.getHandcardLimit()-player.countCards('h'));
							if(num>0) player.draw(num);
							'step 1'
							player.removeMark('dcpitian_handcard',player.countMark('dcpitian_handcard'),false);
							game.log(player,'重置了','#g【辟田】','增加的手牌上限');
						}
					},
					handcard:{
						markimage:'image/card/handcard.png',
						intro:{
							content:function(storage,player){
								return '手牌上限+'+storage;
							}
						},
						charlotte:true,
						mod:{
							maxHandcard:function(player,num){
								return num+player.countMark('dcpitian_handcard');
							}
						},
					}
				},
				ai:{
					effect:{
						target:function (card,player,target){
							if(get.tag(card,'discard')) return 0.9;
							if(get.tag(card,'damage')) return 0.95;
						},
					},
				},
			},
			//新服二赵
			dcqingren:{
				audio:2,
				trigger:{player:'phaseJieshuBegin'},
				frequent:true,
				filter:function(event,player){
					return player.hasHistory('useSkill',evt=>['yizan_use','yizan_use_backup'].contains(evt.sourceSkill||evt.skill));
				},
				content:function(){
					player.draw(player.getHistory('useSkill',evt=>['yizan_use','yizan_use_backup'].contains(evt.sourceSkill||evt.skill)).length)
				},
			},
			dclongyuan:{
				audio:'xinfu_longyuan',
				forced:true,
				unique:true,
				juexingji:true,
				trigger:{
					global:'phaseEnd',
				},
				skillAnimation:true,
				animationColor:'orange',
				filter:function(event,player){
					return player.countMark('yizan_use')>=3;
				},
				content:function(){
					player.awakenSkill('dclongyuan');
					player.draw(2);
					player.recover();
					player.storage.yizan=true;
				},
				derivation:'yizan_rewrite',
			},
			//黄皓
			dcqinqing:{
				audio:2,
				trigger:{player:'phaseJieshuBegin'},
				direct:true,
				filter:function(event,player){
					var zhu=game.filterPlayer(current=>current.getSeatNum()==1)[0];
					if(!zhu||!zhu.isIn()) return false;
					return game.hasPlayer(current=>{
						return current!=player&&current.inRange(zhu);
					});
				},
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt2('dcqinqing'),function(card,player,target){
						var zhu=game.filterPlayer(current=>current.getSeatNum()==1)[0];
						return target!=player&&target.inRange(zhu)&&target.countDiscardableCards(player,'he')>0;
					}).set('ai',function(target){
						var zhu=game.filterPlayer(current=>current.getSeatNum()==1)[0];
						var he=target.countCards('he');
						if(get.attitude(_status.event.player,target)>0){
							if(target.countCards('h')>zhu.countCards('h')+1) return 0.1;
						}
						else{
							if(he>zhu.countCards('h')+1) return 2;
							if(he>0) return 1;
						}
						return 0;
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						event.target=target;
						player.logSkill('dcqinqing',target);
						if(target.countCards('he')) player.discardPlayerCard(target,'he',true);
					}
					else{
						event.finish();
					}
					'step 2'
					var zhu=game.filterPlayer(current=>current.getSeatNum()==1)[0];
					if(zhu&&zhu.isIn()){
						if(target.countCards('h')>zhu.countCards('h')) player.draw();
					}
				}
			},
			dccunwei:{
				audio:2,
				trigger:{target:'useCardToTargeted'},
				forced:true,
				filter:function(event,player){
					return player!=event.player&&get.type2(event.card)=='trick'&&(event.targets.length==1||player.countCards('he')>0);
				},
				content:function(){
					if(trigger.targets.length==1) player.draw();
					else if(player.countCards('he')>0) player.chooseToDiscard('he',true,'存畏:请弃置一张牌');
				}
			},
			//刘辟
			dcjuying:{
				audio:2,
				trigger:{player:'phaseUseEnd'},
				filter:function(event,player){
					return player.getCardUsable('sha',true)>player.getHistory('useCard',evt=>{
						return evt.getParent('phaseUse')==event&&evt.card.name=='sha'&&evt.addCount!==false;
					}).length;
				},
				direct:true,
				content:function(){
					'step 0'
					player.chooseButton([
						get.prompt('dcjuying'),
						[[
							['sha','你于下回合使用【杀】的次数上限+1'],
							['hand','本回合手牌上限+2'],
							['draw','摸三张牌'],
						],'textbutton']
					]).set('ai',function(button){
						var player=_status.event.player,choice=button.link;
						if(choice=='draw') return 10;
						if(choice=='sha') return 9;
						var del=3-player.hp;
						if(choice=='hand'&&player.needsToDiscard()>0&&del<=0) return 8;
						return 0;
					}).set('selectButton',[1,3]);
					'step 1'
					if(result.bool){
						player.logSkill('dcjuying');
						var choices=result.links;
						event.choices=choices;
						if(choices.contains('sha')){
							player.addMark('dcjuying_sha',1,false);
							player.addSkill('dcjuying_sha');
						}
						if(choices.contains('hand')){
							player.addMark('dcjuying_hand',1,false);
							player.addTempSkill('dcjuying_hand');
						}
						if(choices.contains('draw')){
							player.draw(3);
						}
					}
					else event.finish();
					'step 2'
					var num=event.choices.length-Math.max(0,player.hp);
					if(num>0){
						player.chooseToDiscard(true,'he');
					}
				},
				ai:{
					effect:{
						player_use:function(card,player,target){
							if(typeof card=='object'&&player.isPhaseUsing()&&card.name=='sha'&&player.getCardUsable('sha')==1) return 'zeroplayertarget';
						},
						target_use:function(card,player,target){
							if(card.name=='jiu'&&player.getCardUsable('sha')==2) return [1,1];
						}
					},
				},
				subSkill:{
					sha:{
						trigger:{player:'phaseBegin'},
						filter:function(event,player){
							return player.countMark('dcjuying_sha')>0;
						},
						silent:true,
						firstDo:true,
						charlotte:true,
						onremove:true,
						content:function(){
							player.addMark('dcjuying_effect',player.countMark('dcjuying_sha'),false);
							player.addTempSkill('dcjuying_effect');
							player.removeSkill('dcjuying_sha');
						},
						intro:{content:'下回合使用【杀】的次数上限+#'}
					},
					effect:{
						onremove:true,
						charlotte:true,
						mod:{
							cardUsable:function(card,player,num){
								if(card.name=='sha') return num+player.countMark('dcjuying_effect');
							},
						},
						intro:{content:'本回合使用【杀】的次数上限+#'}
					},
					hand:{
						onremove:true,
						charlotte:true,
						mod:{
							maxHandcard:function(player,num){
								return num+2*player.countMark('dcjuying_hand');
							}
						}
					}
				},
			},
			//新服加强魏贾诩
			dcjianshu:{
				audio:'jianshu',
				enable:'phaseUse',
				usable:1,
				filter:function(event,player){
					return player.countCards('h',{color:'black'})>0;
				},
				filterTarget:function(card,player,target){
					if(target==player) return false;
					if(ui.selected.targets.length){
						return ui.selected.targets[0]!=target&&!ui.selected.targets[0].hasSkillTag('noCompareSource')&&target.countCards('h')
						&&!target.hasSkillTag('noCompareTarget');
					}
					return true;
				},
				targetprompt:['发起者','拼点目标'],
				filterCard:{color:'black'},
				discard:false,
				lose:false,
				delay:false,
				check:function(card){
					if(_status.event.player.hp==1) return 8-get.value(card);
					return 6-get.value(card);
				},
				selectTarget:2,
				multitarget:true,
				content:function(){
					'step 0'
					player.give(cards,targets[0],'give');
					'step 1'
					targets[0].chooseToCompare(targets[1]);
					'step 2'
					player.addTempSkill('dcjianshu_check','phaseUseAfter');
					if(result.bool){
						var cards=targets[0].getCards('he',function(card){
							return lib.filter.cardDiscardable(card,targets[0],'dcjianshu');
						});
						if(cards.length>0) targets[0].discard(cards.randomGet());
						targets[1].loseHp();
					}
					else if(result.tie){
						targets[0].loseHp();
						targets[1].loseHp();
					}
					else{
						var cards=targets[1].getCards('he',function(card){
							return lib.filter.cardDiscardable(card,targets[1],'dcjianshu');
						});
						if(cards.length>0) targets[1].discard(cards.randomGet());
						targets[0].loseHp();
					}
				},
				subSkill:{
					check:{
						trigger:{global:'dieAfter'},
						charlotte:true,
						forced:true,
						popup:false,
						filter:function(event,player){
							return event.getParent(3).name=='dcjianshu';
						},
						content:function(){
							delete player.getStat('skill').dcjianshu;
						}
					}
				},
				ai:{
					expose:0.4,
					order:4,
					result:{
						target:function(player,target){
							if(ui.selected.targets.length) return -1;
							return -0.5;
						}
					}
				}
			},
			dcyongdi:{
				audio:'yongdi',
				audioname:['xinping'],
				unique:true,
				limited:true,
				enable:'phaseUse',
				filterTarget:function(card,player,target){
					return target.hasSex('male');
				},
				animationColor:'thunder',
				skillAnimation:'legend',
				mark:true,
				intro:{
					content:'limited'
				},
				content:function(){
					'step 0'
					player.awakenSkill('dcyongdi');
					//player.logSkill('dcyongdi',target);
					if(!game.hasPlayer(current=>current.maxHp<target.maxHp)){
						target.gainMaxHp();
					}
					'step 1'
					if(target.isMinHp()){
						target.recover();
					}
					'step 2'
					if(target.isMinHandcard()){
						target.draw(Math.min(5,target.maxHp));
					}
					'step 3'
					game.delayx();
				},
				ai:{
					expose:0.3,
					order:1,
					result:{
						target:function(player,target){
							var val=0;
							var bool1=!game.hasPlayer(current=>current.maxHp<target.maxHp),bool2=target.isMinHp(),bool3=target.isMinHandcard();
							if(bool1) val+=6.5;
							if(bool2){
								if(bool1) target.maxHp++;
								val+=Math.max(0,get.recoverEffect(target,player,player));
								if(bool1) target.maxHp--;
							}
							if(bool3){
								var num=Math.max(0,Math.min(5,target.maxHp+(bool1?1:0)));
								val+=5*num;
							}
							return val;
						}
					}
				}
			},
			//雷普
			dcsilve:{
				audio:2,
				trigger:{
					player:'enterGame',
					global:'phaseBefore',
				},
				forced:true,
				locked:false,
				direct:true,
				onremove:['dcsilve','dcsilve_self'],
				filter:function(event,player){
					return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0);
				},
				content:function(){
					'step 0'
					player.chooseTarget('私掠:请选择一名其他角色','选择一名其他角色(暂时仅你可见),称为“私掠”角色,且你获得后续效果',true,(card,player,target)=>{
						return target!=player&&!player.getStorage('dcsilve').contains(target);
					}).set('ai',target=>{
						var att=get.attitude(_status.event.player,target);
						if(att>0) return att+1;
						if(att==0) return Math.random();
						return att;
					}).set('animate',false);
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('dcsilve');
						player.markAuto('dcsilve',[target]);
						player.addSkill('dcsilve_rob');
						player.addSkill('dcsilve_revenge');
						target.addSkill('dcsilve_target');
						if(!target.storage.dcsilve_target) target.storage.dcsilve_target=[];
						target.storage.dcsilve_target.push(player);
					}
				},
				subSkill:{
					rob:{
						audio:'dcsilve',
						trigger:{global:'damageSource'},
						filter:function(event,player){
							if(!player.getStorage('dcsilve').contains(event.source)) return false;
							if(!event.player.isIn()||event.player==player) return false;
							if(player.getStorage('dcsilve_robbed').contains(event.player)) return false;
							return event.player.countCards('he')>0;
						},
						charlotte:true,
						prompt2:function(event,player){
							return '获得'+get.translation(event.player)+'一张牌';
						},
						logTarget:'player',
						content:function(){
							player.addTempSkill('dcsilve_robbed');
							player.markAuto('dcsilve_self',[trigger.player]);
							if(trigger.player.countGainableCards(player,'he')>0){
								player.markAuto('dcsilve_robbed',[trigger.player]);
								player.gainPlayerCard(trigger.player,'he',true);
							}
							if(trigger.source&&trigger.source!=player) trigger.source.markSkill('dcsilve_target');
						}
					},
					revenge:{
						audio:'dcsilve',
						trigger:{global:'damageEnd'},
						filter:function(event,player){
							if(!player.getStorage('dcsilve').contains(event.player)) return false;
							if(!event.player.isIn()||!event.source||!event.source.isIn()||event.source==player) return false;
							return true;
						},
						forced:true,
						locked:false,
						charlotte:true,
						direct:true,
						content:function(){
							'step 0'
							if(trigger.player&&trigger.player!=player) trigger.player.markSkill('dcsilve_target');
							player.markAuto('dcsilve_self',[trigger.player]);
							player.chooseToUse('私掠:对'+get.translation(trigger.source)+'使用一张【杀】,或弃置一张手牌',function(card,player,event){
								if(get.name(card)!='sha') return false;
								return lib.filter.filterCard.apply(this,arguments);
							}).set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
								if(target!=_status.event.source&&!ui.selected.targets.contains(_status.event.source)) return false;
								return lib.filter.targetEnabled.apply(this,arguments);
							}).set('source',trigger.source).set('logSkill','dcsilve_revenge');
							'step 1'
							if(!result.bool){
								if(player.countCards('h')>0) player.chooseToDiscard('h',true).set('logSkill','dcsilve_revenge');
							}
						}
					},
					self:{
						marktext:'私',
						intro:{
							name:'私掠',
							content:function(storage,player){
								if(!storage||!storage.length) return '没有打劫对象';
								if(storage[0]==player) return '已绑定'+get.translation(player)+'自己';
								return '打劫对象:'+get.translation(storage);
							}
						},
					},
					target:{
						marktext:'掠',
						intro:{
							name:'私掠',
							content:function(storage,player){
								return '被'+get.translation(storage)+'盯上了!';
							}
						}
					},
					robbed:{onremove:true,charlotte:true},
				}
			},
			dcshuaijie:{
				audio:2,
				enable:'phaseUse',
				limited:true,
				skillAnimation:true,
				animationColor:'thunder',
				filter:function(event,player){
					var targets=player.getStorage('dcsilve').filter(i=>i.isIn());
					if(!targets.length) return true;
					return targets.filter(target=>{
						return player.hp>target.hp&&player.countCards('e')>target.countCards('e');
					}).length==targets.length;
				},
				content:function(){
					'step 0'
					player.awakenSkill('dcshuaijie');
					player.loseMaxHp();
					var choices=[];
					var choiceList=[
						'获得“私掠”角色至多三张牌',
						'从牌堆中获得三张类型各不相同的牌'
					];
					var targets=player.getStorage('dcsilve').filter(i=>i.isIn());
					event.targets=targets;
					if(targets.length) choices.push('选项一');
					else choiceList[0]='<span style="opacity:0.5; ">'+choiceList[0]+'</span>';
					choices.push('选项二');
					player.chooseControl(choices).set('prompt','衰劫:选择一项').set('choiceList',choiceList).set('ai',()=>_status.event.choice).set('choice',function(){
						var eff=0;
						for(var target of targets){
							eff+=get.effect(target,{name:'shunshou_copy2'},player,player)*2;
						}
						eff-=get.effect(player,{name:'dongzhuxianji'},player,player);
						return eff>0&&choices.contains('选项一')?'选项一':'选项二';
					}());
					'step 1'
					if(result.control=='选项一'){
						if(targets.length){
							for(var target of targets){
								if(target.countGainableCards(player,'he')>0) {
									player.line(target);
									player.gainPlayerCard(target,'he',true,[1,3]);
								}
							}
						}
					}
					else{
						var cards=[];
						for(var i=0;i<3;i++){
							var card=get.cardPile(cardx=>{
								return cards.filter(cardxx=>get.type2(cardxx)==get.type2(cardx)).length==0;
							});
							if(card) cards.push(card);
						}
						if(cards.length) player.gain(cards,'gain2');
					}
					'step 2'
					var targets=player.getStorage('dcsilve').filter(i=>i.isIn());
					for(var target of targets){
						target.unmarkAuto('dcsilve_target',[player]);
					}
					delete player.storage.dcsilve;
					delete player.storage.dcsilve_self;
					player.markAuto('dcsilve',[player]);
					player.markAuto('dcsilve_self',[player]);
				},
				ai:{
					combo:'dcsilve',
					order:8,
					result:{
						player:function(player){
							var targets=player.getStorage('dcsilve').filter(i=>i.isIn());
							if(!targets.length) return 1;
							var att=0;
							targets.forEach(i=>att+=get.attitude(player,i));
							if(att<0) return 1;
							return 0;
						}
					}
				}
			},
			//庞会
			dcyiyong:{
				audio:2,
				trigger:{
					source:'damageBegin1',
				},
				//usable:2,
				filter:function(event,player){
					return player.countDiscardableCards(player,'he')>0&&player!=event.player;
				},
				check:function(event,player){
					return get.attitude(player,event.player)<0&&player.countCards('he',card=>lib.filter.cardDiscardable(card,player,'dcyiyong')&&get.value(card,player)<7)>0;
				},
				logTarget:'player',
				content:function(){
					'step 0'
					event.list=[player];
					event.cards0=[];event.cards1=[];
					if(trigger.player.countDiscardableCards(trigger.player,'he')>0){
						event.list.push(trigger.player);
					}
					if(!event.isMine()&&!event.isOnline()) game.delayx();
					player.chooseCardOL(event.list,'he',true,[1,Infinity],'异勇:弃置任意张牌',(card,player,target)=>{
						return lib.filter.cardDiscardable(card,player,'dcyiyong');
					}).set('ai',card=>{
						var evt=_status.event.getParent(2);
						var source=evt.player,player=_status.event.player,target=evt.list[1];
						if(!target) return get.unuseful(card);
						if(player==source){
							var total=0,need=0;
							target.countCards('he',card=>{
								if(lib.filter.cardDiscardable(card,target,'dcyiyong')&&get.value(card)<5) need+=get.number(card);
							});
							for(var i of ui.selected.cards) total+=get.number(i);
							if(total>=need+5) return 0;
							var val=6;
							if(target.hp<=2&&!target.hasSkillTag('filterDamage',null,{
								player:player,
								card:evt.getTrigger().card,
							})) val+=2+get.number(card)/5;
							if(target.countCards('he',card=>get.value(card)<5)>=3) val-=3+get.number(card)/5;
							return val-get.value(card);
						}
						if(ui.selected.cards.length>1&&ui.selected.cards.length+2>=source.countCards('he')) return 0;
						if(player.hp<=2&&!target.hasSkillTag('filterDamage',null,{
							player:player,
							card:evt.getTrigger().card,
						})) return 10-get.value(card);
						return 5-get.value(card);
					});
					'step 1'
					var lose_list=[],cards=[];
					for(var i=0; i<result.length; i++){
						var current=event.list[i],cards2=result[i].cards;
						cards.push(cards2);
						event['cards'+i]=cards2;
						event.cards=cards;
						lose_list.push([current,cards2]);
					}
					game.loseAsync({lose_list:lose_list}).setContent('discardMultiple');
					'step 2'
					var getn=function(cards){
						return cards.map(i=>get.number(i,false)).reduce((p,c)=>p+c,0)
					}
					var num0=getn(event.cards0),num1=getn(event.cards1);
					if(num0<=num1){
						player.draw(event.cards1.length);
					}
					if(num0>=num1){
						trigger.num++;
					}
				}
			},
			//乐就
			dccuijin:{
				audio:2,
				trigger:{global:'useCard'},
				direct:true,
				filter:function(event,player){
					return event.card.name=='sha'&&(event.player==player||player.inRange(event.player))&&player.countCards('he')>0;
				},
				content:function(){
					'step 0'
					if(player!=game.me&&!player.isOnline()) game.delayx();
					var target=trigger.player;
					event.target=target;
					player.chooseToDiscard('he',get.prompt('dccuijin',target),'弃置一张牌并令'+get.translation(trigger.player)+'使用的【杀】伤害+1,但若其未造成伤害,则你摸一张牌并对其造成1点伤害。').set('ai',function(card){
						if(_status.event.goon) return 7-get.value(card);
						return 0;
					}).set('goon',function(){
						var d1=true;
						if(trigger.player.hasSkill('jueqing')||trigger.player.hasSkill('gangzhi')) d1=false
						for(var target of trigger.targets){
							if(!target.mayHaveShan(player,'use')||trigger.player.hasSkillTag('directHit_ai',true,{
								target:target,
								card:trigger.card,
							},true)){
								if(!target.hasSkill('gangzhi')) d1=false;
								if(!target.hasSkillTag('filterDamage',null,{
									player:trigger.player,
									card:trigger.card,
								})&&get.attitude(player,target)<0) return true;
							}
						}
						if(d1) return get.damageEffect(trigger.player,player,player)>0;
						return false;
					}()).logSkill=['dccuijin',target];
					'step 1'
					if(result.bool){
						if(typeof trigger.baseDamage!='number') trigger.baseDamage=1;
						trigger.baseDamage++;
						player.addSkill('dccuijin_damage');
						player.markAuto('dccuijin_damage',[trigger.card]);
						if(!player.storage.dccuijin_map) player.storage.dccuijin_map={};
						player.storage.dccuijin_map[trigger.card.cardid]=trigger.targets.slice();
					}
				},
				subSkill:{
					damage:{
						trigger:{
							global:['damage','damageCancelled','damageZero','shaMiss','useCardToExcluded','useCardToEnd','eventNeutralized','useCardAfter','shaCancelled'],
						},
						forced:true,
						silent:true,
						firstDo:true,
						charlotte:true,
						onremove:true,
						filter:function(event,player,name){
							if(!event.card) return false;
							var cards=player.getStorage('dccuijin_damage');
							if(!cards.contains(event.card)) return false;
							return true;
						},
						content:function(){
							'step 0'
							var card=trigger.card;
							if(event.triggername=='useCardAfter'){
								var cards=player.getStorage('dccuijin_damage');
								cards=cards.remove(card);
								if(!cards.length){
									player.removeSkill('dccuijin_damage');
									delete player.storage.dccuijin_map;
								}
								else delete player.storage.dccuijin_map[card.cardid];
								event.finish();
							}
							else{
								var target,source;
								if(trigger.name.indexOf('damage')==0){
									target=trigger.player;
									source=trigger.source;
								}
								else{
									target=trigger.target;
									source=trigger.player;
								}
								if(player.storage.dccuijin_map[card.cardid].contains(target)&&!target.hasHistory('damage',evt=>{
									return evt.card==card;
								})){
									player.logSkill('dccuijin_damage',source);
									player.storage.dccuijin_map[card.cardid].remove(target);
									player.draw();
									if(source&&source.isIn()){
										player.line(trigger.player,'green');
										trigger.player.damage();
									}
								}
							}
							'step 1'
							game.delayx();
						},
					},
				},
			},
			//陈矫
			dcxieshou:{
				trigger:{
					global:'damageEnd',
				},
				usable:1,
				filter:function(event,player){
					return get.distance(player,event.player)<=2&&event.player.isIn();
				},
				check:function(event,player){
					return get.attitude(player,event.player)>4;
				},
				locked:false,
				logTarget:'player',
				onremove:true,
				change:function(player,num){
					player.addSkill('dcxieshoux');
					if(typeof player.storage.dcxieshoux!=='number') player.storage.dcxieshoux=0;
					if(!num) return;
					player.storage.dcxieshoux+=num;
					if(player.storage.dcxieshoux!=0) player.markSkill('dcxieshoux');
					else player.unmarkSkill('dcxieshoux');
					game.log(player,'的手牌上限',(num>0?'+':'')+num);
				},
				content:function(){
					'step 0'
					lib.skill.dcxieshou.change(player,-1);
					'step 1'
					var list=[],target=trigger.player;
					event.target=target;
					var choiceList=['回复1点体力','复原,摸两张牌'];
					if(target.getDamagedHp()==0) choiceList[0]='<span style="opacity:0.5; ">'+choiceList[0]+'</span>';
					else list.push('选项一');
					list.push('选项二');
					target.chooseControl(list).set('choiceList',choiceList).set('prompt',get.translation(player)+'对你发动了【协守】,请选择一项');
					'step 2'
					if(result.control=='选项一'){
						target.recover();
					}
					else {
						target.link(false);
						target.draw(2);
					}
				},
				ai:{
					expose:0.3,
				},
			},
			dcxieshoux:{
				markimage:'image/card/handcard.png',
				intro:{
					content:function(storage,player){
						var num=player.storage.dcxieshoux;
						return '手牌上限'+(num >= 0?'+':'')+num;
					}
				},
				charlotte:true,
				mod:{
					maxHandcard:function(player,num){
						return num+(player.storage.dcxieshoux||0);
					}
				},
			},
			dcqingyan:{
				trigger:{
					target:'useCardToTargeted',
				},
				filter:function(event,player){
					return event.player!=player&&get.color(event.card)=='black';
				},
				usable:2,
				direct:true,
				content:function(){
					'step 0'
					if(player.countCards('h')<player.hp){
						player.chooseBool(get.prompt('dcqingyan'),'将手牌摸至体力上限(摸'+get.cnNumber(player.maxHp-player.countCards('h'))+'张牌)').set('ai',()=>1);
					}else{
						player.chooseToDiscard(get.prompt('dcqingyan'),'弃置一张手牌令你的手牌上限+1').set('ai',card=>6-get.value(card)).set('logSkill','dcqingyan');
					}
					'step 1'
					if(result.bool){
						if(result.cards&&result.cards.length){
							lib.skill.dcxieshou.change(player,1);
						}else{
							player.logSkill('dcqingyan');
							player.drawTo(player.maxHp);
						}
					} else player.storage.counttrigger.dcqingyan--;
				}
			},
			dcqizi:{
				mod:{
					cardSavable:function(card,player,target){
						if(get.distance(player,target)>2&&card.name=='tao'&&target==_status.event.dying) return false;
					},
				}
			},
			//公孙度
			dczhenze:{
				audio:2,
				trigger:{player:'phaseDiscardBegin'},
				direct:true,
				content:function(){
					'step 0'
					var getCond=(player)=>Math.sign(player.countCards('h')-Math.max(0,player.hp));
					var me=getCond(player);
					var recovers=game.filterPlayer(current=>getCond(current)==me),loses=game.filterPlayer().removeArray(recovers);
					event.recovers=recovers; event.loses=loses;
					var list=[];
					if(loses.length) list.push('选项一');
					if(recovers.length) list.push('选项二');
					list.push('cancel2');
					var sign=[['≥','<'],['≠','='],['≤','>']];
					var choiceList=[
						'令所有手牌数'+sign[me+1][0]+'体力值的角色失去1点体力'+(loses.length?'('+get.translation(loses)+')':''),
						'令所有手牌数'+sign[me+1][1]+'体力值的角色回复1点体力'+(recovers.length?'('+get.translation(recovers)+')':'')
					];
					if(!loses.length) choiceList[0]='<span style="opacity:0.5">'+choiceList[0]+'</span>';
					if(!recovers.length) choiceList[1]='<span style="opacity:0.5">'+choiceList[1]+'</span>';
					player.chooseControl(list).set('choiceList',choiceList).set('prompt',get.prompt('dczhenze')).set('ai',()=>_status.event.choice).set('choice',(()=>{
						var effect=0;
						if(list.length==2){
							if(list.contains('选项一')){
								loses.forEach(i=>effect+=get.effect(i,{name:'losehp'},player,player));
								if(effect>0) return '选项一';
							}else{
								recovers.forEach(i=>effect+=get.recoverEffect(i,player,player));
								if(effect>0) return '选项二';
							}
						}else{
							loses.forEach(i=>effect-=get.effect(i,{name:'losehp'},player,player));
							recovers.forEach(i=>effect+=get.recoverEffect(i,player,player));
							if(effect>0) return '选项二';
							return '选项一';
						}
					})());
					'step 1'
					if(result.control=='cancel2'){
						event.finish();
					}
					else {
						var lose=result.control=='选项一',targets=event[lose?'loses':'recovers'];
						player.logSkill('dczhenze',targets);
						for(var i of targets){
							i[lose?'loseHp':'recover']();
						}
					}
				}
			},
			dcanliao:{
				audio:2,
				enable:'phaseUse',
				filter:function(event,player){
					if((player.getStat().skill.dcanliao||0)>=game.countPlayer(current=>current.group=='qun')) return false;
					return true;
				},
				filterTarget:function(card,player,target){
					return target.countCards('he');
				},
				content:function(){
					'step 0'
					player.choosePlayerCard(target,'he',true).set('filterButton',function(button){
						var card=button.link,owner=get.owner(card);
						return !owner||owner.canRecast(card,_status.event.player);
					}).set('ai',function(card){
						if(get.attitude(_status.event.player,_status.event.getParent().target)>=0) return -get.buttonValue(card);
						return get.buttonValue(card);
					});
					'step 1'
					if(result.bool) target.recast(result.links);
				},
				ai:{
					expose:0.1,
					result:{
						target:function(player,target){
							if(target.hasCard(card=>get.value(card)>=6,'e')&&get.attitude(player,target)<0) return -1;
							return 1;
						}
					}
				}
			},
			//王烈
			dcchongwang:{
				audio:2,
				trigger:{global:'useCard'},
				direct:true,
				filter:function(event,player){
					if(player==event.player) return false;
					var type=get.type(event.card);
					if(type!='basic'&&type!='trick') return false;
					var history=game.getAllGlobalHistory('useCard');
					var index=history.indexOf(event);
					if(index>0) return history[index-1].player==player;
					return false;
				},
				content:function(){
					'step 0'
					var source=trigger.player;
					var list=[['exclude','令'+get.translation(trigger.card)+'无效']];
					var cards=trigger.cards.filterInD();
					if(source.isIn()&&cards.length>0) list.push(['gain','令'+get.translation(source)+'收回'+get.translation(cards)]);
					player.chooseButton([
						get.prompt('dcchongwang',source),
						[list,'textbutton'],
						'noforcebutton',
					]).set('ai',function(button){
						var player=_status.event.player,choice=button.link;
						var evt=_status.event.getTrigger();
						if(choice=='exclude'){
							var effect=0;
							if(!evt.targets.length&&get.info(evt.card,false).notarget) effect-=get.effect(evt.player,evt.card,evt.player,player);
							for(var i of evt.targets){
								effect-=get.effect(i,evt.card,evt.player,player);
							}
							return effect;
						}
						else{
							var cards=evt.cards.filterInD();
							return get.value(cards,evt.player)*get.attitude(player,evt.player);
						}
					})
					'step 1'
					if(result.bool){
						if(!event.isMine()&&!event.isOnline()) game.delayx();
					}
					else event.finish();
					'step 2'
					if(result.bool){
						player.logSkill('dcchongwang',trigger.player);
						if(result.links[0]=='gain'){
							player.addTempSkill('dcchongwang_gain');
							trigger._dcchongwang=true;
						}
						else{
							trigger.targets.length=0;
							trigger.all_excluded=true;
							game.log(trigger.card,'被无效了');
						}
					}
				},
				ai:{
					threaten:3.5,
					directHit_ai:true,
				},
				subSkill:{
					gain:{
						trigger:{global:'useCardAfter'},
						charlotte:true,
						forced:true,
						popup:false,
						filter:function(event,player){
							return event._dcchongwang;
						},
						content:function(){
							trigger.player.gain(trigger.cards.filterInD(),'gain2');
						}
					}
				}
			},
			dchuagui:{
				audio:2,
				trigger:{player:'phaseUseBegin'},
				direct:true,
				filter:function(event,player){
					return game.hasPlayer(function(current){
						return current!=player&&current.countCards('he')>0;
					});
				},
				content:function(){
					'step 0'
					var min=Math.max.apply(Math,game.filterPlayer().map(function(current){
						return 1+current.getFriends().length;
					}));
					var max=Math.min(min,game.countPlayer(function(current){
						return current!=player&&current.countCards('he')>0;
					}));
					player.chooseTarget(get.prompt('dchuagui'),'令至多'+get.cnNumber(max)+'名角色进行囚徒困境选择',[1,max],function(card,player,target){
						return target!=player&&target.countCards('he')>0;
					}).set('animate',false).set('ai',function(target){
						return -get.attitude(_status.event.player,target);
					});
					'step 1'
					if(result.bool){
						player.logSkill('dchuagui');
						event.players=result.targets.slice(0);
						event._global_waiting=true;
					}
					else event.finish();
					'step 2'
					var send=function(source){
						var next=game.createEvent('dchuagui_choose',false);
						next.player=game.me;
						next.source=source;
						next.setContent(lib.skill.dchuagui.contentx);
						game.resume();
					};
					var sendback=function(result,player){
						if(!Array.isArray(result)){
							result=[
								Math.random()<0.5?'仅展示牌':'交出牌',
								player.getCards('he').randomGet()
							];
						}
						event.results.push([player,result]);
					};
					event.ai_targets=[];
					event.results=[];
					var players=game.filterPlayer(function(current){
						return current!=player;
					}).sortBySeat();
					var time=10000;
					if(lib.configOL&&lib.configOL.choose_timeout) time=parseInt(lib.configOL.choose_timeout)*1000;
					for(var i=0;i<players.length;i++){
						players[i].showTimer(time);
						if(!event.players.contains(players[i])) continue;
						if(players[i].isOnline()){
							event.withol=true;
							players[i].send(send,player);
							players[i].wait(sendback);
						}
						else if(players[i]==game.me){
							event.withme=true;
							var next=game.createEvent('dchuagui_choose',false);
							next.player=game.me;
							next.source=player;
							next.setContent(lib.skill.dchuagui.contentx);
							if(_status.connectMode) game.me.wait(sendback);
						}
						else{
							event.ai_targets.push(players[i]);
						}
					}
					if(event.ai_targets.length){
						event.ai_targets.randomSort();
						setTimeout(function(){
							event.interval=setInterval(function(){
								var target=event.ai_targets.shift();
								var att=get.attitude(target,player),hs=target.getCards('he');
								hs.sort((b,a)=>get.value(b,target)-get.value(a,target));
								var choice='仅展示牌',card=hs[0];
								if(att<-2&&Math.random()>((get.value(card,target)-3)/5)) choice='交出牌';
								sendback([choice,card],target);
								if(!event.ai_targets.length){
									clearInterval(event.interval);
									if(event.withai) game.resume();
								}
							},_status.connectMove?750:75);
						},500)
					}
					'step 3'
					if(event.withme){
						if(_status.connectMode) game.me.unwait(result,game.me);
						else{
							if(!Array.isArray(result)){
								result=[
									Math.random()<0.5?'仅展示牌':'交出牌',
									player.getCards('he').randomGet()
								];
							}
							event.results.push([player,result]);
						}
					}
					'step 4'
					if(event.withol&&!event.resultOL){
						game.pause();
					}
					'step 5'
					if(event.ai_targets.length>0){
						event.withai=true;
						game.pause();
					}
					'step 6'
					delete event._global_waiting;
					for(var i of game.players) i.hideTimer();
					event.videoId=lib.status.videoId++;
					game.broadcastAll(function(name,id,results){
						var dialog=ui.create.dialog(name+'发动了技能【化归】','hidden','forcebutton');
						dialog.videoId=id;
						dialog.classList.add('scroll1');
						dialog.classList.add('scroll2');
						dialog.classList.add('fullwidth');
						dialog.classList.add('fullheight');
						dialog.buttonss=[];
						
						var list=['仅展示牌的玩家','交出牌的玩家']
						for(var i=0;i<list.length;i++){
							dialog.add('<div class="text center">'+list[i]+'</div>');
							var buttons=ui.create.div('.buttons',dialog.content);
							dialog.buttonss.push(buttons);
							buttons.classList.add('popup');
							buttons.classList.add('guanxing');
						}
						dialog.open();
						
						var getx=function(){
							var item=results.shift();
							var card=item[1][1],index=item[1][0]=='仅展示牌'?0:1;
							var button=ui.create.button(card,'card',dialog.buttonss[index]);
								button.querySelector('.info').innerHTML=(function(target){
								if(target._tempTranslate) return target._tempTranslate;
								var name=target.name;
								if(lib.translate[name+'_ab']) return lib.translate[name+'_ab'];
								return get.translation(name);
							}(item[0]));
							if(results.length>0) setTimeout(getx,500);
						}
						setTimeout(getx,500);
					},get.translation(player),event.videoId,event.results.slice(0));
					game.delay(0,2000+event.results.length*500)
					'step 7'
					game.broadcastAll('closeDialog',event.videoId);
					var shown=[],given=[];
					for(var i of event.results){
						(i[1][0]=='仅展示牌'?shown:given).push(i);
					}
					var list=given.length>0?given:shown;
					var cards=[],targets=[];
					for(var i of list){
						cards.push(i[1][1]);
						targets.push(i[0]);
						//i[0].$give(i[1][1],player);
					}
					player.line(targets);
					player.gain(cards,'give');
					//step 8
					//game.delayx();
				},
				contentx:function(){
					'step 0'
					event._global_waiting=true;
					event.result=['仅展示牌',player.getCards('he').randomGet()];
					var str=get.translation(source);
					player.chooseControl('仅展示牌','交出牌').set('choiceList',[
						'仅展示一张牌。但如果所有人都选择了仅展示,则'+str+'获得这张牌',
						'将一张牌交给'+str,
					]).set('_global_waiting',true);
					'step 1'
					event.result[0]=result.control;
					player.chooseCard('he',true).set('_global_waiting',true);
					'step 2'
					event.result[1]=result.cards[0];
				},
			},
			//陈珪
			dcyingtu:{
				audio:2,
				trigger:{
					global:['gainAfter','loseAsyncAfter'],
				},
				usable:1,
				filter:function(event,player){
					return lib.skill.dcyingtu.filterx(event,player,player.getNext())||lib.skill.dcyingtu.filterx(event,player,player.getPrevious());
				},
				filterx:function(event,player,target){
					var evt=event.getParent('phaseDraw');
					if(evt&&target==evt.player) return false;
					return event.getg(target).length>0&&target.hasCard(function(card){
						return lib.filter.canBeGained(card,target,player)
					},'he');
				},
				logTarget:'player',
				direct:true,
				checkx:function(player,source){
					var target=(source==player.getNext()?player.getPrevious():player.getNext());
					return Math.min(0,get.attitude(player,target))>=get.attitude(player,source);
				},
				content:function(){
					'step 0'
					var targets=[];
					event.targets=targets;
					if(lib.skill.dcyingtu.filterx(trigger,player,player.getNext())) targets.add(player.getNext());
					if(lib.skill.dcyingtu.filterx(trigger,player,player.getPrevious())) targets.add(player.getPrevious());
					'step 1'
					var target=targets.shift();
					event.target=target;
					player.chooseBool(
						get.prompt('dcyingtu',target),
						'获得该角色的一张牌,然后将一张牌交给该角色的对位角色。若你给出的是装备牌,则其使用其得到的牌。'
					).set('goon',lib.skill.dcyingtu.checkx(player,target)).set('ai',function(){
						return _status.event.goon;
					});
					'step 2'
					if(result.bool){
						player.logSkill('dcyingtu',target);
						var next=game.createEvent('dcyingtu_insert');
						next.player=player;
						next.target=target;
						next.setContent(lib.skill.dcyingtu.contentx);
						event.finish();
					}
					else if(targets.length>0) event.goto(1);
					else player.storage.counttrigger.dcyingtu--;
				},
				contentx:function(){
					'step 0'
					event.side=(target==player.getPrevious()?'getNext':'getPrevious');
					player.gainPlayerCard(target,true,'he');
					'step 1'
					var he=player.getCards('he');
					if(he.length>0){
						var target=player[event.side]();
						event.target=target;
						if(he.length==1) event._result={bool:true,cards:he};
						else player.chooseCard('he',true,'交给'+get.translation(target)+'一张牌')
					}
					else event.finish();
					'step 2'
					if(result.bool){
						var card=result.cards[0];
						event.card=card;
						player.line(target);
						player.give(card,target);
					}
					else event.finish();
					'step 3'
					if(target.getCards('h').contains(card)&&get.type(card,null,target)=='equip'&&target.canUse(card,target)) target.chooseUseTarget(card,true,'nopopup');
				},
			},
			dccongshi:{
				audio:2,
				trigger:{global:'useCardAfter'},
				forced:true,
				locked:false,
				filter:function(event,player){
					return get.type(event.card,null,false)=='equip'&&event.player.isMaxEquip();
				},
				content:function(){
					player.draw();
				},
			},
			//黄权
			dcquanjian:{
				audio:2,
				enable:'phaseUse',
				usable:2,
				filter:function(event,player){
					return game.hasPlayer(current=>current!=player);
				},
				chooseButton:{
					dialog:function(event,player){
						var dialog=ui.create.dialog('劝谏:令一名其他角色…','hidden');
						dialog.add([[
							['damage','对其攻击范围内的一名角色造成1点伤害'],
							['draw','将其手牌数调整至体力上限(至多摸至五张),且其本回合内不能使用手牌']
						],'textbutton']);
						return dialog;
					},
					filter:function(button,player){
						return !player.hasSkill('dcquanjian_'+button.link,null,null,false);
					},
					check:()=>1+Math.random(),
					backup:function(links){
						return get.copy(lib.skill['dcquanjian_'+links[0]]);
					},
					prompt:function(links){
						if(links[0]=='damage') return '令一名其他角色对攻击范围内的另一名角色造成1点伤害';
						return '令一名其他角色将手牌数调整至体力上限(至多摸至五张)且本回合内不能使用手牌';
					},
				},
				ai:{
					order:2,
					result:{player:1},
				},
				subSkill:{
					backup:{audio:'dcquanjian'},
					damage:{
						audio:'dcquanjian',
						selectTarget:2,
						filterTarget:function(card,player,target){
							if(!ui.selected.targets.length) return target!=player;
							return ui.selected.targets[0].inRange(target);
						},
						complexTarget:true,
						complexSelect:true,
						filterCard:()=>false,
						selectCard:-1,
						targetprompt:['造成伤害','受到伤害'],
						multitarget:true,
						content:function(){
							'step 0'
							player.addTempSkill('dcquanjian_damage','phaseUseAfter');
							targets[0].chooseControl().set('choiceList',[
								'对'+get.translation(targets[1])+'造成1点伤害',
								'本回合下次受到的伤害+1',
							]).set('ai',function(){
								return _status.event.eff>=0?0:1;
							}).set('eff',get.damageEffect(targets[1],targets[0],targets[0]));
							'step 1'
							if(result.index==0){
								targets[1].damage(targets[0]);
							}
							else{
								target.addMark('dcquanjian_effect',1,false);
								target.addTempSkill('dcquanjian_effect');
							}
						},
						ai:{
							result:{
								player:function(player,target){
									if(ui.selected.targets.length==0){
										if(!game.hasPlayer((current)=>current.inRangeOf(target)&&get.damageEffect(current,target,player)>0)) return 0;
										if(get.attitude(player,target)>0) return 2;
										return 1;
									}
									return get.damageEffect(target,ui.selected.targets[0],player,player);
								},
							},
						},
					},
					draw:{
						audio:'dcquanjian',
						filterTarget:function(card,player,target){
							if(target==player) return false;
							var num=target.countCards('h');
							if(num>target.maxHp) return true;
							return num<Math.min(5,target.maxHp);
						},
						filterCard:()=>false,
						selectCard:-1,
						content:function(){
							'step 0'
							player.addTempSkill('dcquanjian_draw','phaseUseAfter');
							var num1=target.countCards('h'),num2=target.maxHp;
							var num=0;
							if(num1>num2){
								event.index=0;
								num=num1-num2;
								target.chooseControl().set('choiceList',[
									'弃置'+get.cnNumber(num)+'张手牌',
									'本回合下次受到的伤害+1',
								]).set('ai',function(){
									var player=_status.event.player;
									if(_status.event.number==1&&player.hasCard(function(card){
										return lib.filter.cardDiscardable(card,player,'dcquanjian_draw')&&get.value(card)<5;
									},'h')) return 0;
									return 1;
								}).set('number',num);
							}
							else{
								event.index=1;
								num=Math.min(num2,5)-num1;
								if(num<=0) event.finish();
								else target.chooseControl().set('choiceList',[
									'摸'+get.cnNumber(num)+'张牌,且本回合内不能使用或打出手牌',
									'本回合下次受到的伤害+1',
								]).set('ai',function(){
									return 0;
								});
							}
							event.num=num;
							'step 1'
							if(result.index==0){
								if(event.index==0) target.chooseToDiscard('h',true,num);
								else target.draw(num);
							}
							else{
								target.addMark('dcquanjian_effect',1,false);
								target.addTempSkill('dcquanjian_effect');
								event.finish();
							}
							'step 2'
							target.addTempSkill('dcquanjian_disable');
						},
						ai:{
							result:{
								target:function(player,target){
									var num1=target.countCards('h'),num2=target.maxHp;
									if(num1>num2) return -1;
									return Math.min(5,num2)-num1;
								},
							},
						},
					},
					effect:{
						charlotte:true,
						trigger:{player:'damageBegin3'},
						forced:true,
						onremove:true,
						marktext:'谏',
						content:function(){
							trigger.num+=player.countMark(event.name);
							player.removeSkill(event.name);
						},
						intro:{content:'下次受到的伤害+#'},
						ai:{threaten:2.5},
					},
					disable:{
						charlotte:true,
						mod:{
							cardEnabled2:function(card){
								if(get.position(card)=='h') return false;
							},
						},
						mark:true,
						marktext:'禁',
						intro:{content:'不能使用或打出手牌'},
						ai:{threaten:2.5},
					},
				},
			},
			dctujue:{
				audio:2,
				trigger:{player:'dying'},
				direct:true,
				limited:true,
				skillAnimation:true,
				animationColor:'gray',
				filter:function(event,player){
					return player.countCards('he')>0;
				},
				content:function(){
					'step 0'
					player.chooseTarget(lib.filter.notMe,get.prompt2('dctujue')).set('ai',function(target){
						if(_status.event.skip) return 0;
						return 200+get.attitude(_status.event.player,target);
					}).set('skip',player.countCards('hs',{name:['tao','jiu']})+player.hp>0);
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('dctujue',target);
						player.awakenSkill('dctujue');
						var cards=player.getCards('he');
						player.give(cards,target);
						player.recover(cards.length);
						player.draw(cards.length);
					}
				},
			},
			//尹夫人
			dcyingyu:{
				audio:2,
				trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']},
				direct:true,
				filter:function(event,player){
					if(event.name=='phaseJieshu'&&!player.storage.dcyingyu) return false;
					return game.countPlayer(function(current){
						return current.countCards('h')>0;
					})>1;
				},
				content:function(){
					'step 0'
					player.chooseTarget(2,get.prompt('dcyingyu'),'展示两名角色的各一张手牌。若这两张牌花色不同,则你可以令其中一名角色获得另一名角色的展示牌。',function(card,player,target){
						return target.countCards('h')>0;
					}).set('ai',function(target){
						var player=_status.event.player;
						if(!ui.selected.targets.length) return get.attitude(player,target);
						return 1-get.attitude(player,target);
					});
					'step 1'
					if(result.bool){
						var targets=result.targets.sortBySeat();
						event.targets=targets;
						event.cards=[];
						player.logSkill('dcyingyu',targets);
						player.choosePlayerCard(targets[0],true,'h');
					}
					else event.finish();
					'step 2'
					var card=result.cards[0];
					player.line(targets[0]);
					player.showCards(card,get.translation(player)+'对'+get.translation(targets[0])+'发动了【媵予】')
					event.cards.push(card);
					player.choosePlayerCard(targets[1],true,'h');
					'step 3'
					var card=result.cards[0];
					player.line(targets[1]);
					player.showCards(card,get.translation(player)+'对'+get.translation(targets[1])+'发动了【媵予】')
					event.cards.push(card);
					if(get.suit(cards[0],targets[0])==get.suit(cards[1],targets[1])) event.finish();
					'step 4'
					var str1=get.translation(targets[0]),str2=get.translation(targets[1]);
					player.chooseControl('cancel2').set('choiceList',[
						'令'+str1+'获得'+str2+'的'+get.translation(cards[1]),
						'令'+str2+'获得'+str1+'的'+get.translation(cards[0]),
					]).set('goon',get.attitude(player,targets[0])>0?0:1).set('ai',()=>_status.event.goon);
					'step 5'
					if(result.control!='cancel2'){
						var i=result.index;
						targets[1-i].give(cards[1-i],targets[i],'give');
					}
				},
				onremove:true,
			},
			dcyongbi:{
				audio:2,
				enable:'phaseUse',
				filter:function(event,player){
					return player.countCards('h')>0&&game.hasPlayer((current)=>lib.skill.dcyongbi.filterTarget(null,player,current));
				},
				filterTarget:function(card,player,target){
					return target!=player&&target.hasSex('male');
				},
				selectCard:-1,
				filterCard:true,
				position:'h',
				limited:true,
				skillAnimation:true,
				animationColor:'fire',
				discard:false,
				lose:false,
				content:function(){
					'step 0'
					player.awakenSkill('dcyongbi');
					if(player.hasSkill('dcyingyu',null,null,false)) player.storage.dcyingyu=true;
					player.give(cards,target);
					'step 1'
					var list=[];
					for(var i of cards){
						list.add(get.suit(i,player));
						if(list.length>=3) break;
					}
					if(list.length>=2){
						player.addMark('dcyongbi_eff1',2,false);
						player.addSkill('dcyongbi_eff1');
						target.addMark('dcyongbi_eff1',2,false);
						target.addSkill('dcyongbi_eff1');
					}
					if(list.length>=3){
						player.addMark('dcyongbi_eff2',1,false);
						player.addSkill('dcyongbi_eff2');
						target.addMark('dcyongbi_eff2',1,false);
						target.addSkill('dcyongbi_eff2');
					}
				},
				ai:{
					order:1,
					result:{
						target:function(player,target){
							if(player.hasUnknown()) return 0;
							var zhu=get.zhu(player);
							if(zhu&&get.attitude(player,zhu)>0){
								if(target==zhu) return 4;
							}
							return 1;
						},
					},
				},
				subSkill:{
					eff1:{
						mod:{
							maxHandcard:(player,num)=>num+player.countMark('dcyongbi_eff1'),
						},
						charlotte:true,
						onremove:true,
						marktext:'拥',
						intro:{content:'手牌上限+#'},
					},
					eff2:{
						trigger:{player:'damageBegin4'},
						forced:true,
						filter:function(event,player){
							return event.num>1;
						},
						content:function(){
							trigger.num-=player.countMark('dcyongbi_eff2');
						},
						charlotte:true,
						onremove:true,
						marktext:'嬖',
						intro:{content:'受到大于1的伤害时,此伤害-#'},
					},
				},
			},
			//吕旷吕翔
			dcshuhe:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filter:function(event,player){
					return player.countCards('h')>0;
				},
				filterCard:true,
				position:'h',
				discard:false,
				lose:false,
				delay:false,
				check:function(cardx){
					var player=_status.event.player;
					var num1=get.number(cardx),players=game.filterPlayer();
					var goon=false,effect=0;
					for(var current of players){
						var cards=current.getCards('ej',function(card){
							var num=get.number(card);
							return num==num1;
						});
						if(cards.length){
							goon=true;
							var att=get.attitude(player,current);
							for(var card of cards){
								if(get.position(card)=='e'){
									var val=get.value(card,current);
									if(att<=0) effect+=val;
									else effect-=val/2;
								}
								else{
									var eff=get.effect(current,{name:card.viewAs||card.name},player,player);
									effect-=get.sgn(att)*eff;
								}
							}
						}
					}
					if(goon){
						if(effect>0) return 6+effect-get.value(cardx);
						return 0;
					}
					return game.hasPlayer(function(current){
						return current!=player&&get.attitude(player,current)>0;
					})?(6-get.value(cardx)):0;
				},
				content:function(){
					'step 0'
					player.showCards(cards,get.translation(player)+'发动了【数合】');
					'step 1'
					event.cards2=[];
					var num1=get.number(cards[0],player);
					var lose_list=[],players=game.filterPlayer();
					for(var current of players){
						var cards=current.getCards('ej',function(card){
							var num=get.number(card);
							return num==num1;
						});
						if(cards.length>0){
							player.line(current,'thunder');
							current.$throw(cards);
							lose_list.push([current,cards]);
							event.cards2.addArray(cards);
						}
					}
					if(lose_list.length){
						event.lose_list=lose_list;
						game.loseAsync({
							lose_list:lose_list,
						}).setContent('chooseToCompareLose');
					}
					else{
						event.goto(3);
						player.chooseTarget(true,lib.filter.notMe,'将'+get.translation(event.cards[0])+'交给一名其他角色').set('ai',function(target){
							return get.attitude(_status.event.player,target);
						});
					}
					'step 2'
					var cards=event.cards2;
					if(cards.length>0){
						if(event.lose_list) game.delayx();
						player.gain(cards,'gain2');
					}
					event.finish();
					'step 3'
					if(result.bool){
						var target=result.targets[0];
						player.line(target,'green');
						player.give(cards,target);
						player.addMark('dcliehou',1);
					}
				},
				ai:{
					order:2,
					result:{
						player:1,
					},
				},
			},
			dcliehou:{
				audio:2,
				trigger:{player:'phaseDrawBegin2'},
				forced:true,
				filter:function(event,player){
					return !event.numFixed;
				},
				content:function(){
					var num=Math.min(5,1+player.countMark('dcliehou'));
					trigger.num+=num;
					trigger._dcliehou=num;
				},
				group:'dcliehou_discard',
				subSkill:{
					discard:{
						trigger:{player:'phaseDrawEnd'},
						forced:true,
						filter:function(event,player){
							return typeof event._dcliehou=='number';
						},
						content:function(){
							'step 0'
							var num=trigger._dcliehou;
							player.chooseToDiscard(num,'he','弃置'+get.cnNumber(num)+'张牌,或失去1点体力').set('ai',function(card){
								if(_status.event.goon) return 6-get.value(card);
								return 26-get.value(card);
							}).set('goon',player.hp>Math.max(1,4-num)||get.effect(player,{name:'losehp'},player,player)>0);
							'step 1'
							if(!result.bool) player.loseHp();
						},
					},
				},
				marktext:'爵',
				intro:{
					name:'列侯(爵)',
					name2:'爵',
					content:'〖列侯〗的摸牌数+#',
				},
			},
			//管亥
			suoliang:{
				audio:2,
				trigger:{source:'damageSource'},
				logTarget:'player',
				usable:1,
				filter:function(event,player){
					return event.player!=player&&event.player.maxHp>0&&event.player.countCards('he')>0;
				},
				check:function(event,player){
					return get.attitude(player,event.player)<=0;
				},
				content:function(){
					'step 0'
					var target=trigger.player;
					event.target=target;
					player.choosePlayerCard(target,true,'he',[1,target.maxHp],'选择'+get.translation(target)+'的至多'+get.cnNumber(target.maxHp)+'张牌');
					'step 1'
					if(result.bool){
						player.showCards(result.cards,get.translation(player)+'对'+get.translation(target)+'发动了【索粮】')
						var cards=result.cards.filter(function(card){
							var suit=get.suit(card,target);
							if(suit!='heart'&&suit!='club') return false;
							return lib.filter.canBeGained(card,target,player)
						});
						if(cards.length) player.gain(cards,target,'giveAuto','bySelf');
						else{
							var cards=result.cards.filter(function(card){
								return lib.filter.canBeDiscarded(card,target,player)
							});
							if(cards.length) target.discard(cards,'notBySelf');
						}
					}
				},
			},
			qinbao:{
				audio:2,
				trigger:{player:'useCard'},
				forced:true,
				filter:function(event,player){
					return (event.card.name=='sha'||get.type(event.card,null,false)=='trick')&&game.hasPlayer(function(current){
						return current!=player&&current.countCards('h')>=player.countCards('h');
					});
				},
				content:function(){
					var hs=player.countCards('h');
					trigger.directHit.addArray(game.filterPlayer(function(current){
						return current!=player&&current.countCards('h')>=hs;
					}));
				},
				ai:{
					threaten:1.4,
					directHit_ai:true,
					skillTagFilter:function(player,tag,arg){
						return player.countCards('h',function(card){
							return !ui.selected.cards.contains(card);
						})<=arg.target.countCards('h');
					},
				},
			},
			//胡昭
			midu:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				chooseButton:{
					dialog:function(event,player){
						var dialog=ui.create.dialog('弥笃:选择要废除或恢复的装备栏或判定区','hidden');
						dialog.classList.add('withbg');
						dialog.noforcebutton=true;
						var list1=[],list2=[];
						for(var i=1;i<6;i++){
							for(var j=0;j<player.countEnabledSlot(i);j++){
								list1.push(i);
							}
							if(player.hasDisabledSlot(i)) list2.push(i);
						}
						(player.isDisabledJudge()?list2:list1).push(-1);
						var addTable=function(list,bool){
							const adds=[];
							for(var i of list){
								adds.push([[i,bool],(i>0?get.translation('equip'+i)+'栏':'判定区')]);
							}
							dialog.add([adds,'tdnodes'])
						}
						if(list1.length){
							dialog.addText('未废除');
							addTable(list1,true);
						}
						if(list2.length){
							dialog.addText('已废除');
							addTable(list2,false);
						}
						return dialog;
					},
					filter:function(button,player){
						if(!ui.selected.buttons.length) return true;
						if(!ui.selected.buttons[0].link[1]) return false;
						return button.link[1]
					},
					check:function(button){
						var player=_status.event.player;
						if(!button.link[1]){
							if(button.link[0]<=0) return -10;
							if(player.hasCard(function(card){
								return get.subtype(card)==('equip'+button.link[0]);
							},'hs')) return 15;
							return 10;
						}
						if(button.link[0]<=0||player.hasEmptySlot(button.link[0])&&!player.hasCard(function(card){
							return get.subtype(card)==('equip'+button.link[0])&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
						},'hs')) return 5;
						return 0;
					},
					select:[1,Infinity],
					backup:function(links,player){
						if(!links[0][1]){
							return {
								audio:'midu',
								selectCard:-1,
								selectTarget:-1,
								filterCard:()=>false,
								filterTarget:()=>false,
								equip:links[0][0],
								content:function(){
									var pos=lib.skill.midu_backup.equip;
									if(pos<=0) player.enableJudge();
									else player.enableEquip(pos);
									player.addTempSkill('rehuomo',{player:'phaseBegin'});
								},
							}
						}
						else{
							return {
								audio:'midu',
								selectCard:-1,
								filterCard:()=>false,
								filterTarget:true,
								equip:links.map(i=>i[0]).sort(),
								content:function(){
									var list=lib.skill.midu_backup.equip,num=list.length,bool=false;
									if(list.contains(-1)){
										list.remove(-1);
										bool=true;
									}
									if(list.length>0) player.disableEquip(list);
									if(bool) player.disableJudge();
									target.draw(num)
								},
								ai:{
									tag:{
										draw:1,
									},
									result:{
										target:2,
									},
								},
							}
						}
					},
					prompt:function(links,player){
						if(!links[0][1]){
							return '恢复一个装备栏或判定区并获得〖活墨〗';
						}
						var numc=get.cnNumber(links.length);
						return '废除'+numc+'个区域并令一名角色摸'+numc+'张牌';
					},
				},
				derivation:'rehuomo',
				ai:{
					order:8,
					result:{player:1},
				},
				subSkill:{backup:{}},
			},
			xianwang:{
				mod:{
					globalTo:function(source,player,distance){
						var num=player.countDisabledSlot();
						if(num>0) return distance+(num>2?2:1);
					},
					globalFrom:function(source,player,distance){
						var num=source.countDisabledSlot();
						if(num>0) return distance-(num>2?2:1);
					},
				},
			},
			//刘巴
			dczhubi:{
				audio:2,
				trigger:{
					global:['loseAfter','loseAsyncAfter'],
				},
				filter:function(event,player){
					if(event.type!='discard'||event.getlx===false) return false;
					for(var i of event.cards){
						if(get.suit(i,event.player)=='diamond') return true;
					}
					return false;
				},
				prompt2:'检索一张【无中生有】并置于牌堆顶',
				content:function(){
					var card=get.cardPile(function(card){
						return card.name=='wuzhong'&&get.suit(card)!='diamond';
					});
					if(card){
						game.log(player,'将',card,'置于牌堆顶');
						card.fix();
						ui.cardPile.insertBefore(card,ui.cardPile.firstChild);
						game.updateRoundNumber();
						game.delayx();
					}
				},
			},
			dcliuzhuan:{
				audio:2,
				group:['dcliuzhuan_mark','dcliuzhuan_gain'],
				mod:{
					targetEnabled:function(card){
						if(card.cards){
							for(var i of card.cards){
								if(i.hasGaintag('dcliuzhuan_tag')) return false;
							}
						}
						else if(get.itemtype(card)=='card'){
							if(card.hasGaintag('dcliuzhuan_tag')) return false;
						}
					},
				},
				subSkill:{
					gain:{
						audio:'dcliuzhuan',
						trigger:{global:['loseAfter','loseAsyncAfter','cardsDiscardAfter']},
						forced:true,
						logTarget:()=>_status.currentPhase,
						filter:function(event,player){
							var current=_status.currentPhase;
							if(!current) return false;
							if(event.name=='cardsDiscard'){
								var evtx=event.getParent();
								if(evtx.name!='orderingDiscard') return false;
								var evtx2=(evtx.relatedEvent||evtx.getParent());
								return current.hasHistory('lose',function(evtx3){
									var evtx4=evtx3.relatedEvent||evtx3.getParent();
									if(evtx2!=evtx4) return false;
									for(var i in evtx3.gaintag_map){
										if(evtx3.gaintag_map[i].contains('dcliuzhuan_tag')) return true;
									}
								});
								//return false;
							}
							else if(event.name=='lose'){
								if(event.player!=current||event.position!=ui.discardPile) return false;
								for(var i in event.gaintag_map){
									if(event.gaintag_map[i].contains('dcliuzhuan_tag')) return true;
								}
								return false;
							}
							return current.hasHistory('lose',function(evt){
								if(evt.getParent()!=event||evt.position!=ui.discardPile) return false;
								for(var i in evt.gaintag_map){
									if(evt.gaintag_map[i].contains('dcliuzhuan_tag')) return true;
								}
							});
						},
						content:function(){
							var cards,current=_status.currentPhase;
							if(trigger.name=='lose') cards=trigger.hs.filter(function(i){
								return trigger.gaintag_map[i.cardid]&&trigger.gaintag_map[i.cardid].contains('dcliuzhuan_tag')&&get.position(i,true)=='d';
							});
							else if(trigger.name=='cardsDiscard'){
								var evtx=trigger.getParent();
								var evtx2=(evtx.relatedEvent||evtx.getParent());
								var bool=false;
								var history=current.getHistory('lose',function(evtx3){
									var evtx4=evtx3.relatedEvent||evtx3.getParent();
									if(evtx2!=evtx4) return false;
									for(var i in evtx3.gaintag_map){
										if(evtx3.gaintag_map[i].contains('dcliuzhuan_tag')) return true;
									}
								});
								cards=trigger.cards.filter(function(i){
									for(var evt of history){
										if(evt.gaintag_map[i.cardid]&&evt.gaintag_map[i.cardid].contains('dcliuzhuan_tag')&&get.position(i,true)=='d') return true;
									}
									return false;
								});
							}
							else{
								cards=[];
								current.getHistory('lose',function(evt){
									if(evt.getParent()!=trigger||evt.position!=ui.discardPile) return false;
									for(var card of evt.hs){
										if(get.position(card,true)!='d') continue;
										var i=card.cardid;
										if(evt.gaintag_map[i]&&evt.gaintag_map[i].contains('dcliuzhuan_tag')) cards.push(card);
									}
								});
							}
							if(cards&&cards.length>0) player.gain(cards,'gain2');
						},
					},
					mark:{
						trigger:{global:'gainBegin'},
						forced:true,
						popup:false,
						silent:true,
						lastDo:true,
						filter:function(event,player){
							if(player==event.player||event.player!=_status.currentPhase) return false;
							var evt=event.getParent('phaseDraw');
							if(evt&&evt.name=='phaseDraw') return false;
							return true;
						},
						content:function(){
							trigger.gaintag.add('dcliuzhuan_tag');
							trigger.player.addTempSkill('dcliuzhuan_tag');
						},
					},
					tag:{
						charlotte:true,
						onremove:(player,skill)=>player.removeGaintag(skill),
					},
				},
			},
			//张勋
			suizheng:{
				audio:2,
				trigger:{player:'phaseJieshuBegin'},
				direct:true,
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt('suizheng'),'令一名角色下回合内获得〖随征〗效果').set('',function(target){
						var player=_status.event.player,att=get.attitude(player,target);
						if(target.hasJudge('lebu')) return att/2;
						return att*get.threaten(target)*Math.sqrt(2+player==target?(player.countCards('h','sha')*2):target.countCards('h'))
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('suizheng',target);
						target.addMark('suizheng_effect',1,false);
						target.markAuto('suizheng_source',[player]);
						target.addTempSkill('suizheng_effect',{player:player==target?'phaseJieshuBefore':'phaseAfter'});
					}
				},
				subSkill:{
					effect:{
						audio:'suizheng',
						charlotte:true,
						mod:{
							targetInRange:function(card){
								if(card.name=='sha') return true;
							},
							cardUsable:function(card,player,num){
								if(card.name=='sha') return num+player.countMark('suizheng_effect');
							},
						},
						trigger:{player:'phaseUseEnd'},
						forced:true,
						popup:false,
						filter:function(event,player){
							var list=player.getStorage('suizheng_source');
							if(!list.filter((i)=>i.isIn().length)) return false;
							return player.hasHistory('sourceDamage',function(evt){
								return evt.player.isIn()&&evt.getParent('phaseUse')==event;
							});
						},
						content:function(){
							'step 0'
							var targets=player.getStorage('suizheng_source').slice(0).sortBySeat();
							event.targets=targets;
							'step 1'
							var target=targets.shift();
							event.target=target;
							var list=[];
							player.getHistory('sourceDamage',function(evt){
								if(evt.player.isIn()&&evt.getParent('phaseUse')==trigger) list.add(evt.player);
							});
							if(!list.length) event.finish();
							else if(target.isIn()){
								list=list.filter(function(i){
									return target.canUse('sha',i,false);
								});
								if(list.length>0) target.chooseTarget('随征:是否对一名角色使用【杀】?',function(card,player,target){
									return _status.event.targets.contains(target);
								}).set('targets',list).set('ai',function(target){
									var player=_status.event.player;
									return get.effect(target,{name:'sha'},player,player);
								});
							}
							else event._result={bool:false};
							'step 2'
							if(result.bool){
								target.useCard({
									name:'sha',
									isCard:true,
								},result.targets,false,'suizheng_effect');
							}
							if(targets.length>0) event.goto(1);
						},
						onremove:function(player){
							delete player.storage.suizheng_effect;
							delete player.storage.suizheng_source;
						},
						intro:{content:'使用【杀】无距离限制且次数上限+#'},
					},
				},
			},
			//纪灵
			dcshuangren:{
				audio:2,
				trigger:{player:'phaseUseBegin'},
				direct:true,
				preHidden:true,
				filter:function(event,player){
					return player.countCards('h')>0&&game.hasPlayer(function(current){
						return current!=player&&player.canCompare(current);
					})
				},
				content:function(){
					'step 0'
					var goon;
					if(player.needsToDiscard()>1){
						goon=player.hasCard(function(card){
							return card.number>10&&get.value(card)<=5;
						});
					}
					else if(player.hasSha()){
						goon=player.hasCard(function(card){
							return (card.number>=9&&get.value(card)<=5)||get.value(card)<=3;
						});
					}
					else{
						goon=player.hasCard(function(card){
							return get.value(card)<=5;
						});
					}
					player.chooseTarget(get.prompt2('dcshuangren'),function(card,player,target){
						return player.canCompare(target);
					}).set('ai',function(target){
						var player=_status.event.player;
						if(_status.event.goon&&get.attitude(player,target)<0){
							return get.effect(target,{name:'sha'},player,player);
						}
						return 0;
					}).set('goon',goon).setHiddenSkill(event.name);
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						event.target=target;
						player.logSkill('dcshuangren',target);
						player.chooseToCompare(target);
					}
					else{
						event.finish();
					}
					'step 2'
					if(result.bool){
						var target=event.target;
						if(game.hasPlayer(function(current){
							if(target==current||target.group!=current.group) return false;
							return player.canUse('sha',current,false);
						})){
							var str='请选择视为使用【杀】的目标';
							var str2='操作提示:选择一名角色B,或选择包含A('+get.translation(target)+')在内的两名角色A和B(B的势力需为'+get.translation(target.group)+'势力)';
							player.chooseTarget([1,2],str,str2,true,function(card,player,target){
								if(!player.canUse('sha',target,false)) return false;
								var current=_status.event.target;
								if(target==current) return true;
								if(target.group!=current.group) return false;
								if(!ui.selected.targets.length) return true;
								return ui.selected.targets[0]==current;
								//return current==target;
							}).set('ai',function(target){
								var player=_status.event.player;
								return get.effect(target,{name:'sha'},player,player);
							}).set('target',target).set('complexTarget',true);
						}
						else{
							player.useCard({name:'sha',isCard:true},target,false);
							event.finish();
						}
					}
					else{
						player.addTempSkill('dcshuangren_debuff','phaseUseAfter');
						event.finish();
					}
					'step 3'
					if(result.bool&&result.targets&&result.targets.length){
						player.useCard({name:'sha',isCard:true},result.targets,false);
					}
				},
				subSkill:{
					debuff:{
						charlotte:true,
						mod:{
							cardEnabled:function(card){
								if(card.name=='sha') return false;
							},
						},
					},
				},
			},
			//羊祜
			dcdeshao:{
				audio:2,
				usable:2,
				trigger:{target:'useCardToTargeted'},
				filter:function(event,player){
					return player!=event.player&&get.color(event.card)=='black';
				},
				logTarget:'player',
				check:function(event,player){
					var eff=get.effect(player,{name:'draw'},player,player);
					if(player.countCards('h')+1<=event.player.countCards('h')&&event.player.countCards('he')>0) eff+=get.effect(event.player,{name:'guohe_copy2'},player,player);
					return eff;
				},
				content:function(){
					'step 0'
					player.draw();
					'step 1' 
					var target=trigger.player;
					if(player.countCards('h')<=target.countCards('h')&&target.countCards('he')>0){
						player.discardPlayerCard(target,true,'he');
						player.addExpose(0.2);
					}
				},
			},
			dcmingfa:{
				audio:2,
				trigger:{player:'useCardAfter'},
				direct:true,
				filter:function(event,player){
					return player.isPhaseUsing()&&(event.card.name=='sha'||get.type(event.card)=='trick')&&event.cards.filterInD().length>0&&!player.getExpansions('dcmingfa').length;
				},
				content:function(){
					'step 0'
					var str,cards=trigger.cards.filterInD(),card=trigger.card;
					if(cards.length==1&&card.name==cards[0].name&&(card.nature||false)==(cards[0].nature||false)) str=get.translation(cards[0]);
					else str=(get.translation(trigger.card)+'('+get.translation(cards)+')');
					var cardx={
						name:trigger.card.name,
						nature:trigger.card.nature,
						isCard:true,
					};
					player.chooseTarget(lib.filter.notMe,get.prompt('dcmingfa'),'将'+str+'作为“明伐”牌置于武将牌上,并选择一名其他角色。该角色下回合结束时对其执行〖明伐〗的后续效果。').set('card',cardx).set('goon',function(){
						var getMax=function(card){
							return Math.max.apply(Math,game.filterPlayer(function(current){
								return current!=player&&lib.filter.targetEnabled2(card,player,current);
							}).map(function(i){
								return get.effect(i,card,player,player)*Math.sqrt(Math.min(i.getHandcardLimit(),1+i.countCards('h')));
							}).concat([0]));
						}
						var eff1=getMax(cardx);
						if(player.hasCard(function(card){
							if((card.name!='sha'&&get.type(card)!='trick')||!player.hasValueTarget(card,null,true)) return false;
							return getMax({
								name:get.name(card),
								nature:get.nature(card),
								isCard:true,
							})>=eff1;
						},'hs')) return false;
						return true;
					}()).set('ai',function(target){
						if(!_status.event.goon) return 0;
						var player=_status.event.player,card=_status.event.card;
						if(!lib.filter.targetEnabled2(card,player,target)) return 0;
						return get.effect(target,card,player,player)*Math.sqrt(Math.min(target.getHandcardLimit(),1+target.countCards('h')));
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('dcmingfa',target);
						var card={
							name:trigger.card.name,
							nature:trigger.card.nature,
							isCard:true,
						};
						player.storage.dcmingfa_info=[card,target];
						player.addToExpansion(trigger.cards.filterInD(),'gain2').gaintag.add('dcmingfa');
					}
				},
				group:'dcmingfa_use',
				ai:{expose:0.2},
				intro:{
					mark:function(dialog,storage,player){
						var cards=player.getExpansions('dcmingfa');
						if(!cards.length) return '没有“明伐”牌';
						else dialog.add(cards);
						var info=player.storage.dcmingfa_info;
						if(info){
							dialog.addText('记录牌:'+get.translation(info[0])+'<br>记录目标:'+get.translation(info[1]));
						}
					},
					content:'expansion',
				},
				onremove:function(player,skill){
					var cards=player.getExpansions(skill);
					if(cards.length) player.loseToDiscardpile(cards);
					delete player.storage.dcmingfa_info;
				},
				subSkill:{
					use:{
						audio:'dcmingfa',
						trigger:{global:['phaseEnd','die']},
						forced:true,
						filter:function(event,player){
							if(!player.storage.dcmingfa_info||!player.getExpansions('dcmingfa').length) return false;
							return event.player==player.storage.dcmingfa_info[1];
						},
						content:function(){
							'step 0'
							var target=trigger.player;
							event.target=target;
							var card=player.storage.dcmingfa_info[0];
							delete player.storage.dcmingfa_info;
							event.card=card;
							event.count=Math.max(1,Math.min(5,target.countCards('h')));
							if(!event.player.isIn()) event.goto(2);
							'step 1'
							event.count--;
							if(target.isIn()&&lib.filter.targetEnabled2(card,player,target)){
								player.useCard(get.copy(card),target);
								if(event.count>0) event.redo();
							}
							'step 2'
							var cards=player.getExpansions('dcmingfa');
							if(cards.length>0) player.loseToDiscardpile(cards);
						},
					},
				},
			},
			//蔡瑁张允
			lianzhou:{
				audio:2,
				trigger:{player:'phaseZhunbeiBegin'},
				forced:true,
				filter:function(event,player){
					if(!player.isLinked()) return true;
					return game.hasPlayer(function(current){
						return current!=player&&current.hp==player.hp&&!current.isLinked();
					});
				},
				content:function(){
					'step 0'
					if(!player.isLinked()) player.link();
					'step 1'
					var num=game.countPlayer(function(current){
						return current!=player&&current.hp==player.hp&&!current.isLinked();
					});
					if(num>0){
						player.chooseTarget([1,num],'选择横置任意名体力值等于你的角色',function(card,player,current){
							return current!=player&&current.hp==player.hp&&!current.isLinked();
						}).set('ai',function(target){
							var player=_status.event.player;
							return get.effect(target,{name:'tiesuo'},player,player);
						});
					}
					else event.finish();
					'step 2'
					if(result.bool){
						var targets=result.targets.sortBySeat();
						player.line(targets,'green');
						for(var i of targets) i.link();
					}
				},
				ai:{halfneg:true},
			},
			jinglan:{
				audio:2,
				trigger:{source:'damageSource'},
				forced:true,
				content:function(){
					var delta=player.countCards('h')-player.hp;
					if(delta>0) player.chooseToDiscard('h',4,true);
					else if(delta==0){
						player.chooseToDiscard('h',true);
						player.recover();
					}
					else{
						player.damage('fire','nosource');
						player.draw(5);
					}
				},
				ai:{halfneg:true},
			},
			//滕公主
			xingchong:{
				audio:2,
				trigger:{global:'roundStart'},
				direct:true,
				filter:function(event,player){
					return player.maxHp>0;
				},
				content:function(){
					'step 0'
					var list=[];
					for(var i=0;i<=Math.min(5,player.maxHp);i++){
						list.push(get.cnNumber(i)+'张');
					}
					list.push('cancel2');
					player.chooseControl(list).set('prompt',get.prompt('xingchong')).set('prompt2','请首先选择摸牌的张数').set('ai',function(){
						var player=_status.event.player,num1=player.maxHp,num2=player.countCards('h');
						if(num1<=num2) return 0;
						return Math.ceil((num1-num2)/2);
					});
					'step 1'
					if(result.control!='cancel2'){
						player.logSkill('xingchong');
						var num2=result.index;
						if(num2>0) player.draw(num2);
						var num=Math.min(5,player.maxHp)-num2;
						if(num==0) event.finish();
						else event.num=num;
					}
					else event.finish();
					'step 2'
					if(player.countCards('h')>0){
						player.chooseCard('h',[1,Math.min(player.countCards('h'),event.num)],'请选择要展示的牌').set('ai',()=>1+Math.random());
					}
					else event.finish();
					'step 3'
					if(result.bool){
						var cards=result.cards;
						player.showCards(cards,get.translation(player)+'发动了【幸宠】');
						player.addGaintag(cards,'xingchong');
						player.addTempSkill('xingchong_effect','roundStart');
					}
				},
				subSkill:{
					effect:{
						audio:'xingchong',
						trigger:{
							player:['loseAfter'],
							global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
						},
						filter:function(event,player){
							var evt=event.getl(player);
							if(!evt||!evt.cards2||!evt.cards2.length) return false;
							if(event.name=='lose'){
								for(var i in event.gaintag_map){
									if(event.gaintag_map[i].contains('xingchong')) return true;
								}
								return false;
							}
							return player.hasHistory('lose',function(evt){
								if(event!=evt.getParent()) return false;
								for(var i in evt.gaintag_map){
									if(evt.gaintag_map[i].contains('xingchong')) return true;
								}
								return false;
							});
						},
						forced:true,
						popup:false,
						charlotte:true,
						onremove:function(player){
							player.removeGaintag('xingchong');
						},
						content:function(){
							'step 0'
							if(trigger.delay===false) game.delayx();
							'step 1'
							player.logSkill('xingchong_effect');
							var num=0;
							if(trigger.name=='lose'){
								for(var i in trigger.gaintag_map){
									if(trigger.gaintag_map[i].contains('xingchong')) num++;
								}
							}
							else player.getHistory('lose',function(evt){
								if(trigger!=evt.getParent()) return false;
								for(var i in evt.gaintag_map){
									if(evt.gaintag_map[i].contains('xingchong')) num++;
								}
							});
							player.draw(2*num);
						},
					},
				},
			},
			liunian:{
				audio:2,
				trigger:{global:'phaseEnd'},
				forced:true,
				filter:function(event,player){
					return game.hasGlobalHistory('cardMove',function(evt){
						return evt.washCard&&(evt.shuffleNumber==1||evt.shuffleNumber==2);
					});
				},
				content:function(){
					'step 0'
					if(game.hasGlobalHistory('cardMove',function(evt){
						return evt.washCard&&evt.shuffleNumber==1;
					})){
						player.gainMaxHp();
						game.delayx();
					}
					'step 1'
					if(game.hasGlobalHistory('cardMove',function(evt){
						return evt.washCard&&evt.shuffleNumber==2;
					})){
						player.recover();
						game.delayx();
					}
					else event.finish();
					'step 2'
					player.addSkill('liunian_effect');
					player.addMark('liunian_effect',10,false);
				},
				subSkill:{
					effect:{
						charlotte:true,
						mod:{
							maxHandcard:function(player,num){
								return num+player.countMark('liunian_effect');
							},
						},
						marktext:'年',
						intro:{
							content:'手牌上限+#',
						},
					},
				},
			},
			//黄承彦
			dcjiezhen:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filterTarget:function(card,player,target){
					return target!=player;
				},
				content:function(){
					var skills=target.getSkills(null,false,false).filter(function(i){
						if(i=='bazhen') return;
						var info=get.info(i);
						return info&&!get.is.locked(i)&&!info.limited&&!info.juexingji&&!info.zhuSkill&&!info.charlotte;
					});
					target.addAdditionalSkill('dcjiezhen_blocker','bazhen');
					target.addSkill('dcjiezhen_blocker');
					target.markAuto('dcjiezhen_blocker',skills);
					player.addSkill('dcjiezhen_clear');
					player.markAuto('dcjiezhen_clear',[target]);
				},
				ai:{
					order:1,
					result:{
						target:function(player,target){
							var skills=target.getSkills(null,false,false).filter(function(i){
								if(i=='bazhen') return;
								var info=get.info(i);
								return info&&!get.is.locked(i)&&!info.limited&&!info.juexingji&&!info.zhuSkill&&!info.charlotte;
							});
							if(!skills.length&&target.hasEmptySlot(2)) return 1;
							return -0.5*skills.length;
						},
					},
				},
				subSkill:{
					blocker:{
						init:function(player,skill){
							player.addSkillBlocker(skill);
						},
						onremove:function(player,skill){
							player.removeSkillBlocker(skill);
							player.removeAdditionalSkill(skill);
							delete player.storage.dcjiezhen_blocker;
						},
						charlotte:true,
						locked:true,
						skillBlocker:function(skill,player){
							return skill!='bazhen'&&skill!='dcjiezhen_blocker'&&!lib.skill[skill].charlotte&&player.getStorage('dcjiezhen_blocker').contains(skill);
						},
						mark:true,
						marktext:'阵',
						intro:{
							content:function(storage,player,skill){
								if(storage.length) return '失效技能:'+get.translation(storage);
								return '无失效技能';
							}
						}
					},
					clear:{
						audio:'dcjiezhen',
						charlotte:true,
						trigger:{
							global:['judgeAfter','die'],
							player:'phaseBegin',
						},
						forced:true,
						forceDie:true,
						onremove:true,
						filter:function(event,player){
							if(event.name=='die'){
								return player==event.player||player.getStorage('dcjiezhen_clear').contains(event.player);
							}
							else if(event.name=='judge'){
								return event.skill=='bagua'&&player.getStorage('dcjiezhen_clear').contains(event.player);
							}
							return player.getStorage('dcjiezhen_clear').length>0;
						},
						logTarget:function(event,player){
							if(event.name!='phase') return event.player;
							return player.getStorage('dcjiezhen_clear');
						},
						content:function(){
							'step 0'
							var targets=player.getStorage('dcjiezhen_clear');
							if(trigger.name=='die'&&player==trigger.player){
								for(var target of targets){
									target.removeSkill('dcjiezhen_blocker');
								}
								player.removeSkill('dcjiezhen_clear');
								event.finish();
								return;
							}
							if(trigger.name=='phase') event.targets=targets.slice(0).sortBySeat();
							else event.targets=[trigger.player];
							'step 1'
							var target=targets.shift();
							var storage=player.getStorage('dcjiezhen_clear');
							if(storage.contains(target)){
								storage.remove(target);
								target.removeSkill('dcjiezhen_blocker');
								if(target.isIn()&&target.countGainableCards(player,'hej')>0) player.gainPlayerCard(target,'hej',true);
							}
							if(targets.length>0){
								event.redo();
							}
							else{
								player.removeSkill('dcjiezhen_clear');
							}
						},
					},
				},
				derivation:'bazhen',
			},
			dczecai:{
				audio:2,
				trigger:{global:'roundStart'},
				limited:true,
				skillAnimation:true,
				direct:true,
				animationColor:'soil',
				filter:function(event,player){
					return game.roundNumber>1;
				},
				getMax:function(){
					var getNum=function(current){
						var history=current.actionHistory;
						var num=0;
						for(var i=history.length-2;i>=0;i--){
							for(var j=0;j<history[i].useCard.length;j++){
								if(get.type2(history[i].useCard[j].card,false)=='trick') num++;
							}
							if(history[i].isRound) break;
						}
						return num;
					};
					var max=0,current=false,targets=game.filterPlayer();
					for(var target of targets){
						var num=getNum(target);
						if(num>max){
							max=num;
							current=target;
						}
						else if(num==max) current=false;
					}
					return current;
				},
				content:function(){
					'step 0'
					event.target=lib.skill.dczecai.getMax();
					var str='令一名其他角色于本轮内获得〖集智〗';
					if(event.target&&event.target!=player) str+=(';若选择的目标为'+get.translation(event.target)+',则其获得一个额外的回合');
					player.chooseTarget(lib.filter.notMe,get.prompt('dczecai'),str).set('maximum',event.target).set('ai',function(card,player,target){
						if(target!=_status.event.maximum) return 0;
						return get.attitude(_status.event.player,target);
					});
					'step 1'
					if(result.bool){
						player.awakenSkill('dczecai');
						var target=result.targets[0];
						player.logSkill('dczecai',target);
						target.addAdditionalSkill('dczecai_effect','rejizhi');
						target.addTempSkill('dczecai_effect','roundStart');
						if(target==event.target){
							var evt=trigger._trigger;
							target.insertPhase();
							if(evt.player!=target&&!evt._finished){
								evt.finish();
								evt._triggered=5;
								evt.player.insertPhase();
							}
						}
					}
				},
				derivation:'rejizhi',
				subSkill:{
					effect:{
						charlotte:true,
						mark:true,
						marktext:'才',
						intro:{content:'已拥有技能〖集智〗'},
					},
				},
			},
			dcyinshi:{
				audio:2,
				trigger:{player:'damageBegin'},
				usable:1,
				filter:function(event,player){
					return !event.card||get.color(event.card)=='none';
				},
				forced:true,
				content:function(){
					trigger.cancel();
				},
				group:'dcyinshi_gain',
				subSkill:{
					gain:{
						audio:'dcyinshi',
						trigger:{global:'judgeEnd'},
						forced:true,
						filter:function(event,player){
							return event.skill=='bagua'&&event.result.card&&get.position(event.result.card,true)=='o';
						},
						content:function(){
							player.gain(trigger.result.card,'gain2');
						},
					},
				},
			},
			//高览
			xizhen:{
				audio:2,
				trigger:{player:'phaseUseBegin'},
				direct:true,
				filter:function(event,player){
					return game.hasPlayer(function(current){
						return current!=player&&(player.canUse('sha',current,false)||player.canUse('juedou',current,false));
					})
				},
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt('xizhen'),'视为对一名角色使用【杀】或【决斗】',function(card,player,target){
						return target!=player&&(player.canUse('sha',target,false)||player.canUse('juedou',target,false));
					}).set('ai',function(target){
						var player=_status.event.player;
						var eff1=0,eff2=0;
						if(player.canUse('sha',target,false)) eff1=get.effect(target,{name:'sha'},player,player);
						if(player.canUse('juedou',target,false)) eff2=get.effect(target,{name:'juedou'},player,player);
						var effx=Math.max(eff1,eff2);
						if(effx<=0) return 0;
						if(target.isHealthy()) effx*=3;
						if(get.attitude(player,target)>0) effx*=1.6;
						return effx;
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						event.target=target;
						player.logSkill('xizhen',target);
						var list=[];
						if(player.canUse('sha',target,false)) list.push('sha');
						if(player.canUse('juedou',target,false)) list.push('juedou');
						if(list.length==1) event._result={control:list[0]};
						else player.chooseControl(list).set('prompt','视为对'+get.translation(target)+'使用…').set('ai',function(){
							var player=_status.event.player,target=_status.event.getParent().target;
							var eff1=get.effect(target,{name:'sha'},player,player),eff2=get.effect(target,{name:'juedou'},player,player);
							return eff1>eff2?0:1;
						});
					}
					else event.finish();
					'step 2'
					player.useCard({name:result.control,isCard:true},target,false);
					'step 3'
					if(target.isIn()){
						player.storage.xizhen_effect=target;
						player.addTempSkill('xizhen_effect','phaseUseAfter');
					}
				},
				subSkill:{
					effect:{
						audio:'xizhen',
						charlotte:true,
						onremove:true,
						trigger:{global:['useCard','respond']},
						logTarget:function(event,player){
							return player.storage.xizhen_effect;
						},
						forced:true,
						filter:function(event,player){
							return Array.isArray(event.respondTo)&&event.respondTo[0]==player&&player.storage.xizhen_effect&&player.storage.xizhen_effect.isIn();
						},
						content:function(){
							'step 0'
							var target=player.storage.xizhen_effect;
							event.target=target;
							target.recover();
							'step 1'
							player.draw(target.isHealthy()?2:1);
						},
						mark:'character',
						intro:{content:'已指定$为目标'},
					},
				},
			},
			//管宁
			dunshi:{
				audio:2,
				enable:['chooseToUse','chooseToRespond'],
				usable:1,
				init:function(player,skill){
					if(!player.storage[skill]) player.storage[skill]=[['sha','shan','tao','jiu'],0];
				},
				hiddenCard:function(player,name){
					if(player.storage.dunshi&&player.storage.dunshi[0].contains(name)&&!player.getStat('skill').dunshi) return true;
					return false;
				},
				marktext:'席',
				mark:true,
				intro:{
					markcount:function(storage){
						return storage[1];
					},
					content:function(storage,player){
						if(!storage) return;
						var str='<li>';
						if(!storage[0].length){
							str+='已无可用牌';
						}
						else{
							str+='剩余可用牌:';
							str+=get.translation(storage[0]);
						}
						str+='<br><li>“席”标记数量:';
						str+=(storage[1]);
						return str;
					},
				},
				filter:function(event,player){
					if(event.type=='wuxie') return false;
					var storage=player.storage.dunshi;
					if(!storage||!storage[0].length) return false;
					for(var i of storage[0]){
						var card={name:i,isCard:true};
						if(event.filterCard(card,player,event)) return true;
					}
					return false;
				},
				chooseButton:{
					dialog:function(event,player){
						var list=[];
						var storage=player.storage.dunshi;
						for(var i of storage[0]) list.push(['基本','',i]);
						return ui.create.dialog('遁世',[list,'vcard'],'hidden');
					},
					filter:function(button,player){
						var evt=_status.event.getParent();
						return evt.filterCard({name:button.link[2],isCard:true},player,evt);
					},
					check:function(button){
						var card={name:button.link[2]},player=_status.event.player;
						if(_status.event.getParent().type!='phase') return 1;
						if(card.name=='jiu') return 0;
						if(card.name=='sha'&&player.hasSkill('jiu')) return 0;
						return player.getUseValue(card,null,true);
					},
					backup:function(links,player){
						return {
							audio:'dunshi',
							filterCard:function(){return false},
							popname:true,
							viewAs:{
								name:links[0][2],
								isCard:true,
							},
							selectCard:-1,
							precontent:function(){
								player.addTempSkill('dunshi_damage');
								player.storage.dunshi_damage=event.result.card.name;
							},
						}
					},
					prompt:function(links,player){
						return '选择【'+get.translation(links[0][2])+'】的目标';
					}
				},
				ai:{
					respondSha:true,
					respondShan:true,
					skillTagFilter:function(player,tag,arg){
						var storage=player.storage.dunshi;
						if(!storage||!storage[0].length) return false;
						if(player.getStat('skill').dunshi) return false;
						switch(tag){
							case 'respondSha':return (_status.event.type!='phase'||(player==game.me||player.isUnderControl()||player.isOnline()))&&storage[0].contains('sha');
							case 'respondShan':return storage[0].contains('shan');
							case 'save':
								if(arg==player&&storage[0].contains('jiu')) return true;
								return storage[0].contains('tao');
						}
					},
					order:2,
					result:{
						player:function(player){
							if(_status.event.type=='dying'){
								return get.attitude(player,_status.event.dying);
							}
							return 1;
						},
					},
				},
				initList:function(){
					var list,skills=[];
					var banned=['xunyi'];
					if(get.mode()=='guozhan'){
						list=[];
						for(var i in lib.characterPack.mode_guozhan) list.push(i);
					}
					else if(_status.connectMode) list=get.charactersOL();
					else{
						list=[];
						for(var i in lib.character){
							if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue;
							list.push(i);
						}
					}
					for(var i of list){
						if(i.indexOf('gz_jun')==0) continue;
						for(var j of lib.character[i][3]){
							var skill=lib.skill[j];
							if(!skill||skill.zhuSkill||banned.contains(j)) continue;
							if(skill.ai&&(skill.ai.combo||skill.ai.notemp||skill.ai.neg)) continue;
							var info=get.translation(j);
							for(var ix=0;ix<info.length;ix++){
								if(/仁|义|礼|智|信/.test(info[ix])==true){
									skills.add(j);
									break;
								}
							}
						}
					}
					_status.dunshi_list=skills;
				},
				subSkill:{
					backup:{audio:'dunshi'},
					damage:{
						audio:'dunshi',
						trigger:{global:'damageBegin2'},
						forced:true,
						charlotte:true,
						filter:function(event,player){
							return event.source==_status.currentPhase;
						},
						onremove:true,
						logTarget:'source',
						content:function(){
							'step 0'
							event.cardname=player.storage.dunshi_damage;
							player.removeSkill('dunshi_damage');
							event.target=trigger.source;
							var card=get.translation(trigger.source),card2=get.translation(event.cardname),card3=get.translation(trigger.player);
							var list=[
								'防止即将对'+card3+'造成的伤害,并令'+card+'获得一个技能名中包含“仁/义/礼/智/信”的技能',
								'从〖遁世〗中删除【'+card2+'】并获得一枚“席”',
								'减1点体力上限,然后摸等同于“席”数的牌',
							];
							var next=player.chooseButton([
								'遁世:请选择两项',
								[list.map((item,i)=>{
									return [i,item];
								}),'textbutton']
							]);
							next.set('forced',true);
							next.set('selectButton',2);
							next.set('ai',function(button){
								var player=_status.event.player;
								switch(button.link){
									case 0:
										if(get.attitude(player,_status.currentPhase)>0) return 3;
										return 0;
									case 1:
										return 1;
									case 2:
										var num=player.storage.dunshi[1];
										for(var i of ui.selected.buttons){
											if(i.link==1) num++;
										}
										if(num>0&&player.isDamaged()) return 2;
										return 0;
								}
							});
							'step 1'
							event.links=result.links.sort();
							for(var i of event.links){
								game.log(player,'选择了','#g【遁世】','的','#y选项'+get.cnNumber(i+1,true));
							}
							if(event.links.contains(0)){
								trigger.cancel();
								if(!_status.dunshi_list) lib.skill.dunshi.initList();
								var list=_status.dunshi_list.filter(function(i){
									return !target.hasSkill(i,null,null,false);
								}).randomGets(3);
								if(list.length==0) event.goto(3);
								else{
									event.videoId=lib.status.videoId++;
									var func=function(skills,id,target){
										var dialog=ui.create.dialog('forcebutton');
										dialog.videoId=id;
										dialog.add('令'+get.translation(target)+'获得一个技能');
										for(var i=0;i<skills.length;i++){
											dialog.add('<div class="popup pointerdiv" style="width:80%;display:inline-block"><div class="skill">【'+get.translation(skills[i])+'】</div><div>'+lib.translate[skills[i]+'_info']+'</div></div>');
										}
										dialog.addText(' <br> ');
									}
									if(player.isOnline()) player.send(func,list,event.videoId,target);
									else if(player==game.me) func(list,event.videoId,target);
									player.chooseControl(list).set('ai',function(){
										var controls=_status.event.controls;
										if(controls.contains('cslilu')) return 'cslilu';
										return controls[0];
									});
								}
							}
							else event.goto(3);
							'step 2'
							game.broadcastAll('closeDialog',event.videoId);
							target.addSkillLog(result.control);
							'step 3'
							var storage=player.storage.dunshi;
							if(event.links.contains(1)){
								storage[0].remove(event.cardname);
								storage[1]++;
								player.markSkill('dunshi');
							}
							if(event.links.contains(2)){
								player.loseMaxHp();
								if(storage[1]>0) player.draw(storage[1]);
							}
						},
					},
				},
			},
			//吉本
			xunli:{
				audio:2,
				trigger:{
					global:['loseAfter','loseAsyncAfter'],
				},
				forced:true,
				filter:function(event,player){
					if(event.type!='discard'||event.getlx===false||player.getExpansions('xunli').length>=9) return false;
					for(var i of event.cards){
						if(get.position(i,true)=='d'&&get.color(i,event.cards2&&event.cards2.contains(i)?event.player:false)=='black') return true;
					}
					return false;
				},
				content:function(){
					'step 0'
					var num=9-player.getExpansions('xunli').length;
					var cards=[];
					for(var i of trigger.cards){
						if(get.position(i,true)=='d'&&get.color(i,trigger.cards2&&trigger.cards2.contains(i)?trigger.player:false)=='black') cards.push(i);
					}
					if(cards.length<=num) event._result={
						bool:true,
						links:cards,
					}
					else player.chooseButton(true,num,['寻疠:将'+get.cnNumber(num)+'张牌置于武将牌上',cards]).set('forceAuto',true).set('ai',function(button){
						return get.value(button.link,_status.event.player);
					});
					'step 1'
					if(result.bool){
						player.addToExpansion('gain2',result.links).gaintag.add('xunli');
					}
				},
				marktext:'疠',
				intro:{
					content:'expansion',
					markcount:'expansion',
				},
				group:'xunli_exchange',
				subSkill:{
					exchange:{
						audio:'xunli',
						trigger:{player:'phaseUseBegin'},
						direct:true,
						filter:function(event,player){
							return player.getExpansions('xunli').length>0&&player.hasCard((card)=>get.color(card,player)=='black','h');
						},
						content:function(){
							"step 0"
							var cards=player.getExpansions('xunli');
							if(!cards.length||!player.countCards('h')){
								event.finish();
								return;
							}
							var next=player.chooseToMove('寻疠:是否交换“疠”和手牌?');
							next.set('list',[
								[get.translation(player)+'(你)的疠',cards],
								['手牌区',player.getCards('h',(card)=>get.color(card,player)=='black')],
							]);
							next.set('filterMove',function(from,to){
								return typeof to!='number';
							});
							next.set('processAI',function(list){
								var player=_status.event.player;
								var getv=function(card){
									if(get.info(card).toself) return 0;
									return player.getUseValue(card,false);
								};
								var cards=list[0][1].concat(list[1][1]).sort(function(a,b){
									return getv(b)-getv(a);
								}),cards2=cards.splice(0,player.getExpansions('xunli').length);
								return [cards2,cards];
							});
							"step 1"
							if(result.bool){
								var pushs=result.moved[0],gains=result.moved[1];
								pushs.removeArray(player.getExpansions('xunli'));
								gains.removeArray(player.getCards('h'));
								if(!pushs.length||pushs.length!=gains.length) return;
								player.logSkill('xunli_exchange');
								player.addToExpansion(pushs,player,'giveAuto').gaintag.add('xunli');
								game.log(player,'将',pushs,'作为“疠”置于武将牌上');
								player.gain(gains,'gain2');
							}
						},
					},
				},
			},
			zhishi:{
				audio:2,
				trigger:{player:'phaseJieshuBegin'},
				direct:true,
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt2('zhishi')).set('ai',function(target){
						var player=_status.event.player;
						var att=get.attitude(player,target);
						if(att<=4) return 0;
						if(target.hasSkillTag('nogain')) att/=10;
						return att;
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('zhishi',target);
						player.storage.zhishi_mark=target;
						player.addTempSkill('zhishi_mark',{player:'phaseBegin'});
					}
				},
				ai:{expose:0.3},
				subSkill:{
					mark:{
						trigger:{
							global:['dying','useCardToTargeted'],
						},
						direct:true,
						charlotte:true,
						filter:function(event,player){
							if(!player.getExpansions('xunli').length) return false;
							var target=player.storage.zhishi_mark;
							if(event.name=='dying') return event.player==target;
							return event.card.name=='sha'&&event.target==target;
						},
						content:function(){
							'step 0'
							var target=player.storage.zhishi_mark;
							event.target=target;
							player.chooseButton([get.prompt('zhishi',target),'<div class="text center">弃置任意张“疠”并令其摸等量的牌</div>',player.getExpansions('xunli')],[1,Infinity]).set('ai',function(button){
								var player=_status.event.player,target=player.storage.zhishi_mark;
								if(target.hp<1&&target!=get.zhu(player)) return 0;
								if(target.hasSkillTag('nogain')) return 0;
								return 3-player.getUseValue(card,false);
							});
							'step 1'
							if(result.bool){
								player.logSkill('zhishi',target);
								player.loseToDiscardpile(result.links);
								target.draw(result.links.length);
							}
						},
						mark:'character',
						intro:{
							content:'决定帮助$,具体帮不帮另说',
						},
					},
				},
			},
			lieyi:{
				enable:'phaseUse',
				usable:1,
				filter:function(event,player){
					return player.getExpansions('xunli').length>0;
				},
				filterTarget:lib.filter.notMe,
				content:function(){
					'step 0'
					var cards=player.getExpansions('xunli');
					var cards2=cards.filter(function(card){
						return target.isIn()&&player.canUse(card,target,false);
					});
					if(cards2.length){
						player.chooseButton(['对'+get.translation(target)+'使用一张牌',cards2],true).set('ai',function(button){
							return get.order(button.link);
						});
					}
					else{
						event.finish();
						if(cards.length) player.loseToDiscardpile(cards);
						if(target.isIn()&&!target.hasHistory('damage',function(evt){
							return evt.getParent('lieyi')==event&&evt._dyinged;
						})) player.loseHp();
					}
					'step 1'
					player.useCard(result.links[0],target,false);
					event.goto(0);
				},
				ai:{
					order:2,
					result:{
						target:function(player,target){
							var cards=player.getExpansions('xunli');
							var effect=0,damage=0;
							for(var i of cards){
								if(player.canUse(i,target,false)){
									effect+=get.effect(target,i,player,target);
									damage+=get.tag(i,'damage');
								}
							}
							if(damage>=target.hp) return effect;
							if(player.hp>2&&cards.length>3) return effect/3;
							return 0;
						},
					},
				},
			},
			//马日磾
			bingjie:{
				trigger:{player:'phaseUseBegin'},
				check:function(event,player){
					return player.maxHp>3&&player.isDamaged()&&player.hasCard(function(card){
						return game.hasPlayer(function(current){
							return current!=player&&get.attitude(player,current)<0&&player.canUse(card,current,null,true)&&get.effect(current,card,player,player)>0;
						})&&player.hasValueTarget(card);
					},'hs');
				},
				content:function(){
					'step 0'
					player.loseMaxHp();
					'step 1'
					player.addTempSkill('bingjie_effect');
					game.delayx();
				},
				subSkill:{
					effect:{
						audio:'bingjie',
						trigger:{player:'useCardToPlayered'},
						forced:true,
						charlotte:true,
						logTarget:'target',
						filter:function(event,player){
							return event.target!=player&&(event.card.name=='sha'||get.type(event.card,false)=='trick')&&event.target.countCards('he')>0;
						},
						content:function(){
							'step 0'
							trigger.target.chooseToDiscard('he',true);
							'step 1'
							if(result.bool&&result.cards.length&&get.color(result.cards[0],trigger.target)==get.color(trigger.card)){
								game.log(trigger.target,'不能响应',trigger.card);
								trigger.directHit.push(trigger.target);
							}
						},
						ai:{
							effect:{
								player:function(card,player,target){
									if(player!==target&&get.itemtype(target)==='player'&&(card.name==='sha'||get.type(card,false)==='trick')&&
										target.countCards('he')&&!target.hasSkillTag('noh')) return [1,0,1,-1];
								}
							}
						}
					},
				},
			},
			zhengding:{
				audio:2,
				trigger:{player:['useCard','respond']},
				forced:true,
				filter:function(event,player){
					if(player==_status.currentPhase) return false;
					if(!Array.isArray(event.respondTo)) return false;
					if(player==event.respondTo[0]) return false;
					var color=get.color(event.card);
					if(color=='none') return false;
					return color==get.color(event.respondTo[1]);
				},
				content:function(){
					player.gainMaxHp();
					player.recover();
				},
			},
			//孙茹
			xiecui:{
				audio:2,
				trigger:{global:'damageBegin1'},
				filter:function(event,player){
					var source=event.source;
					if(!source||source!=_status.currentPhase||event.getParent().type!='card') return false;
					return !source.hasHistory('sourceDamage',function(evt){
						return evt.getParent().type=='card';
					});
				},
				logTarget:'source',
				prompt2:function(event,player){
					var str=('令'+get.translation(event.player)+'即将受到的');
					str+=(''+event.num+'点');
					if(event.hasNature('linked')){
						str+=(get.translation(event.nature)+'属性');
					}
					str+='伤害+1';
					if(event.source.group=='wu'){
						var cards=event.cards.filterInD();
						if(cards.length){
							str+=(';然后'+get.translation(event.source)+'获得'+get.translation(cards)+',且本回合的手牌上限+1')
						}
					}
					return str;
				},
				check:function(event,player){
					var att=get.attitude(player,event.player);
					if(att<0){
						if(event.source.group!='wu'||!event.cards.filterInD().length) return true;
						return get.attitude(player,event.source)>0;
					}
					return false;
				},
				content:function(){
					trigger.num++;
					var source=trigger.source;
					if(source.group=='wu'){
						var cards=trigger.cards.filterInD();
						if(cards.length>0){
							source.gain(cards,'gain2');
							source.addMark('xiecui_effect',1,false);
							source.addTempSkill('xiecui_effect');
						}
					}
				},
				subSkill:{
					effect:{
						charlotte:true,
						mod:{
							maxHandcard:(player,num)=>num+player.countMark('xiecui_effect'),
						},
						marktext:'翠',
						onremove:true,
						intro:{content:'手牌上限+#'},
					},
				},
				ai:{threaten:1.75},
			},
			youxu:{
				audio:2,
				trigger:{global:'phaseEnd'},
				logTarget:'player',
				filter:function(event,player){
					return event.player.countCards('h')>event.player.hp;
				},
				check:function(event,player){
					if(get.attitude(player,event.player)<=0) return true;
					else return game.hasPlayer(function(current){
						return current!=event.player&&current.isDamaged()&&current.isMinHp()&&
							get.attitude(player,current)>0&&get.recoverEffect(current,player,player)>0;
					});
				},
				content:function(){
					'step 0'
					if(player==trigger.player){
						player.chooseCard('h',true,'请展示一张手牌');
					}
					else{
						player.choosePlayerCard(trigger.player,true,'h');
					}
					'step 1'
					if(result.bool){
						var card=result.cards[0];
						event.card=card;
						var str=get.translation(player);
						if(player!=trigger.player) str+=('对'+get.translation(trigger.player));
						str+='发动了【忧恤】';
						player.showCards(card,str);
						player.chooseTarget('令一名角色获得'+get.translation(card),'若其体力值为全场最少,则其回复1点体力',function(card,player,target){
							return target!=_status.event.getTrigger().player;
						}).set('ai',function(target){
							var player=_status.event.player,att=get.attitude(player,target);
							if(att<0) return 0;
							if(target.isDamaged()&&target.isMinHp&&get.recoverEffect(target,player,player)>0) return 4*att;
							return att;
						});
					}
					else event.finish();
					'step 2'
					if(result.bool){
						var target=result.targets[0];
						event.target=target;
						player.line(target,'green');
						target.gain(card,trigger.player,'give').giver=player;
					}
					else event.finish();
					'step 3'
					if(target.isMinHp()) target.recover();
				},
			},
			//夏侯令女
			fuping:{
				audio:2,
				hiddenCard:function(player,name){
					var list=player.getStorage('fuping').slice(0);
					list.removeArray(player.getStorage('fuping_round'));
					return list.contains(name)&&player.hasCard((card)=>(get.type(card)!='basic'),'ehs');
				},
				enable:'chooseToUse',
				locked:false,
				filter:function(event,player){
					var list=player.getStorage('fuping').slice(0);
					list.removeArray(player.getStorage('fuping_round'));
					if(!list.length) return false;
					if(!player.hasCard((card)=>(get.type(card)!='basic'),'ehs')) return false;
					for(var i of list){
						var type=get.type2(i,false);
						if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true;
					}
					return false;
				},
				chooseButton:{
					dialog:function(event,player){
						var list=player.getStorage('fuping').slice(0);
						list.removeArray(player.getStorage('fuping_round'));
						var list2=[];
						for(var i of list){
							var type=get.type2(i,false);
							if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) list2.push([type,'',i]);
						}
						return ui.create.dialog('浮萍',[list2,'vcard']);
					},
					check:function(button){
						if(_status.event.getParent().type!='phase') return 1;
						return _status.event.player.getUseValue({name:button.link[2]},null,true);
					},
					backup:function(links,player){
						return {
							audio:'fuping',
							filterCard:(card)=>get.type(card)!='basic',
							position:'he',
							popname:true,
							viewAs:{
								name:links[0][2],
								isCard:true,
							},
							check:function(card){
								return 8-get.value(card);
							},
							precontent:function(){
								player.addTempSkill('fuping_round');
								player.markAuto('fuping_round',[event.result.card.name]);
							},
						}
					},
					prompt:function(links,player){
						return '将一张非基本牌当做【'+get.translation(links[0][2])+'】使用';
					},
				},
				ai:{
					order:8,
					result:{player:1},
					respondSha:true,
					skillTagFilter:function(player){
						var list=player.getStorage('fuping').slice(0);
						list.removeArray(player.getStorage('fuping_round'));
						return list.contains('sha');
					},
				},
				mod:{
					targetInRange:function(card,player,target){
						if(!player.hasEnabledSlot()) return true;
					},
				},
				marktext:'萍',
				intro:{content:'已记录$'},
				group:'fuping_mark',
				subSkill:{
					mark:{
						trigger:{global:'useCardAfter'},
						filter:function(event,player){
							return player!=event.player&&event.targets.contains(player)&&
								player.hasEnabledSlot()&&!player.getStorage('fuping').contains(event.card.name);
						},
						logTarget:'player',
						prompt2:(event)=>('废除一个装备栏并记录【'+get.translation(event.card.name)+'】'),
						check:function(event,player){
							var list=['tao','juedou','guohe','shunshou','wuzhong','xietianzi','yuanjiao','wanjian','nanman','huoshaolianying','chuqibuyi','zhujinqiyuan','lebu','bingliang'];
							if(!list.contains(event.card.name)) return false;
							if(['nanman','wanjian'].contains(event.card.name)&&!player.hasValueTarget({name:event.card.name})) return false;
							var list=[3,5,4,1,2];
							for(var i of list){
								if(player.hasEnabledSlot(i)){
									var card=player.getEquip(i);
									if(!card||player.hasEmptySlot(i)) return true;
									if(get.value(card,player)<=0) return true;
								}
							}
							return false;
						},
						content:function(){
							player.markAuto('fuping',[trigger.card.name]);
							game.log(player,'记录了','#y'+get.translation(trigger.card.name));
							player.chooseToDisable().set('ai',function(event,player,list){
								var list=[3,5,4,1,2];
								for(var i of list){
									if(player.hasEnabledSlot(i)){
										var card=player.getEquip(i);
										if(!card||player.hasEmptySlot(i)) return 'equip'+i;
										if(get.value(card,player)<=0) return 'equip'+i;
									}
								}
								return list.randomGet();
							});
						},
					},
					backup:{audio:'fuping'},
					round:{charlotte:true,onremove:true},
				},
			},
			weilie:{
				audio:2,
				enable:'phaseUse',
				filter:function(event,player){
					return player.countMark('weilie')<=player.getStorage('fuping').length&&player.countCards('he')>0&&game.hasPlayer((current)=>current.isDamaged())
				},
				filterCard:true,
				position:'he',
				filterTarget:(card,player,target)=>target.isDamaged(),
				check:function(card){
					return 8-get.value(card);
				},
				content:function(){
					'step 0'
					player.addMark('weilie',1,false);
					target.recover();
					'step 1'
					if(target.isDamaged()) target.draw();
				},
				onremove:true,
				ai:{
					order:1,
					result:{
						player:function(player,target){
							var eff=get.recoverEffect(target,player,player);
							if(target.getDamagedHp()>1) eff+=get.effect(target,{name:'draw'},player,player);
							return eff;
						},
					},
				},
			},
			//张瑶
			//Partly powered by 烟雨墨染
			yuanyu:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				content:function(){
					'step 0'
					player.draw();
					'step 1'
					if(player.countCards('h')>0&&game.hasPlayer(current=>current!=player)){
						var suits=lib.suit.slice(0),cards=player.getExpansions('yuanyu');
						for(var i of cards) suits.remove(get.suit(i,false));
						var str='选择一张手牌,作为“怨”置于武将牌上;同时选择一名其他角色,令该角色获得〖怨语〗的后续效果。'
						if(suits.length){
							str+='目前“怨”中未包含的花色:';
							for(var i of suits) str+=get.translation(i);
						}
						player.chooseCardTarget({
							filterCard:true,
							filterTarget:lib.filter.notMe,
							position:'h',
							prompt:'怨语:选择置于武将牌上的牌和目标',
							prompt2:str,
							suits:suits,
							forced:true,
							ai1:function(card){
								var val=get.value(card),evt=_status.event;
								if(evt.suits.contains(get.suit(card,false))) return 8-get.value(card);
								return 5-get.value(card);
							},
							ai2:function(target){
								var player=_status.event.player;
								if(player.storage.yuanyu_damage&&player.storage.yuanyu_damage.contains(target)) return 0;
								return -get.attitude(player,target);
							},
						});
					}
					else event.finish();
					'step 2'
					var target=result.targets[0];
					player.addSkill('yuanyu_damage');
					player.markAuto('yuanyu_damage',result.targets);
					player.line(target,'green');
					if(!target.storage.yuanyu_mark){
						target.storage.yuanyu_mark=player;
						target.markSkillCharacter('yuanyu_mark',player,'怨语','已获得〖怨语〗效果');
						target.addSkill('yuanyu_mark');
					}
					player.addToExpansion(result.cards,player,'give').gaintag.add('yuanyu');
				},
				intro:{
					content:'expansion',
					markcount:'expansion',
				},
				onremove:function(player,skill){
					var cards=player.getExpansions(skill);
					if(cards.length) player.loseToDiscardpile(cards);
					player.removeSkill('yuanyu_damage');
				},
				ai:{
					order:7,
					result:{
						player:1,
					},
				},
				subSkill:{
					mark:{
						mark:'character',
						charlotte:true,
						intro:{
							content:'已获得〖怨语〗效果',
							onunmark:true,
						},
					},
					damage:{
						trigger:{global:['damageSource','phaseDiscardBegin']},
						forced:true,
						charlotte:true,
						onremove:function(player,skill){
							if(player.storage[skill]){
								for(var i of player.storage[skill]){
									if(i.storage.yuanyu_mark==player) i.unmarkSkill('yuanyu_mark');
								}
							}
							delete player.storage[skill];
						},
						filter:function(event,player){
							if(event.name=='damage'){
								var source=event.source;
								return source&&player.getStorage('yuanyu_damage').contains(source)&&source.countCards('h')>0;
							}
							else{
								if(player==event.player){
									return player.getStorage('yuanyu_damage').some(function(target){
										return target.isIn()&&target.countCards('h')>0;
									});
								}
								else if(player.getStorage('yuanyu_damage').contains(event.player)){
									return event.player.countCards('h')>0;
								}
								return false;
							}
						},
						content:function(){
							'step 0'
							if(trigger.name=='phaseDiscard'){
								if(trigger.player==player){
									event.targets=player.getStorage('yuanyu_damage').filter(function(target){
										return target.isIn()&&target.countCards('h')>0;
									}).sortBySeat();
								}
								else event.targets=[trigger.player];
							}
							else event.targets=[trigger.source];
							'step 1'
							event.target=event.targets.shift();
							event.count=trigger.name=='damage'?trigger.num:1;
							'step 2'
							event.count--;
							var suits=lib.suit.slice(0),cards=player.getExpansions('yuanyu');
							for(var i of cards) suits.remove(get.suit(i,false));
							var next=target.chooseCard('h',true,'将一张手牌置于'+get.translation(player)+'的武将牌上');
							next.set('suits',suits);
							next.set('ai',function(card){
								var val=get.value(card),evt=_status.event;
								if(evt.suits.contains(get.suit(card,false))) return 5-get.value(card);
								return 8-get.value(card);
							});
							if(suits.length){
								var str='目前未包含的花色:';
								for(var i of suits) str+=get.translation(i);
								next.set('prompt2',str);
							}
							'step 3'
							player.addToExpansion(result.cards,target,'give').gaintag.add('yuanyu');
							'step 4'
							if(!player.hasSkill('yuanyu_damage')) event.finish();
							else if(event.count>0&&target.countCards('h')>0) event.goto(2);
							else if(event.targets.length>0) event.goto(1);
						},
					},
				},
			},
			xiyan:{
				audio:2,
				trigger:{player:'addToExpansionAfter'},
				filter:function(event,player){
					if(!event.gaintag.contains('yuanyu')) return false;
					var cards=player.getExpansions('yuanyu');
					if(cards.length<lib.suit.length) return false;
					var suits=lib.suit.slice(0);
					for(var i of cards){
						suits.remove(get.suit(i));
						if(!suits.length) return true;
					}
					return false;
				},
				logTarget:()=>_status.currentPhase,
				prompt2:'获得所有“怨”',
				check:()=>true,
				content:function(){
					'step 0'
					player.removeSkill('yuanyu_damage');
					var cards=player.getExpansions('yuanyu');
					player.gain(cards,'gain2');
					'step 1'
					var target=_status.currentPhase;
					if(player==target){
						player.addMark('xiyan_buff',4,false);
						player.addTempSkill('xiyan_buff');
						delete player.getStat('skill').yuanyu;
						event.finish();
					}
					else{
						player.chooseBool('夕颜:是否令'+get.translation(target)+'本回合的手牌上限-4且不能使用基本牌?').set('ai',function(){
							return _status.event.bool;
						}).set('bool',get.attitude(player,target)<0);
					}
					'step 2'
					if(result.bool){
						var target=_status.currentPhase;
						target.addMark('xiyan_debuff',4,false);
						target.addTempSkill('xiyan_debuff');
					}
				},
				subSkill:{
					buff:{
						charlotte:true,
						mark:true,
						marktext:" +4 ",
						intro:{
							content:"本回合手牌上限+4且使用牌无次数限制",
						},
						mod:{
							maxHandcard:function(player,num){
								return num+player.countMark('xiyan_buff');
							},
							cardUsable:function(card,player){
								return Infinity;
							},
						},
						sub:true,
					},
					debuff:{
						charlotte:true,
						mark:true,
						marktext:" -4 ",
						intro:{
							content:"本回合手牌上限-#且不能使用基本牌",
						},
						mod:{
							maxHandcard:function(player,num){
								return num-player.countMark('xiyan_debuff');
							},
							cardEnabled:function(card){
								if(get.type(card)=='basic') return false;
							},
							cardSavable:function(card){
								if(get.type(card)=='basic') return false;
							},
						},
						sub:true,
					},
				},
			},
			//滕胤
			chenjian:{
				audio:2,
				trigger:{player:'phaseZhunbeiBegin'},
				prompt2:function(event,player){
					return '展示牌堆顶的'+get.cnNumber(3+player.countMark('chenjian'))+'张牌。然后你可依次执行以下两项中的任意项:⒈弃置一张牌,然后令一名角色获得与你弃置牌花色相同的牌。⒉使用其中剩余的一张牌。若你执行了所有选项,则你获得一枚“陈见”,然后重铸所有手牌。';
				},
				content:function(){
					'step 0'
					var cards=get.cards(3+player.countMark('chenjian'));
					event.cards=cards;
					game.cardsGotoOrdering(cards);
					game.log(player,'展示了',event.cards);
					event.videoId=lib.status.videoId++;
					game.broadcastAll(function(player,id,cards){
						var str=get.translation(player)+'发动了【陈见】';
						var dialog=ui.create.dialog(str,cards);
						dialog.videoId=id;
					},player,event.videoId,event.cards);
					game.addVideo('showCards',player,[get.translation(player)+'发动了【陈见】',get.cardsInfo(event.cards)]);
					game.delay(2);
					'step 1'
					if(!player.countCards('he')){
						game.broadcastAll('closeDialog',event.videoId);
						game.addVideo('cardDialog',null,event.videoId);
						event.goto(4);
					}
					else{
						player.chooseToDiscard('he').set('prompt',false).set('ai',function(card){
							var cards=_status.event.getParent().cards,val=-get.value(card),suit=get.suit(card);
							for(var i of cards){
								if(get.suit(i,false)==suit) val+=get.value(i,'raw');
							}
							return val;
						});
						var func=function(id){
							var dialog=get.idDialog(id);
							if(dialog) dialog.content.firstChild.innerHTML='是否弃置一张牌?';
						};
						if(player==game.me) func(event.videoId);
						else if(player.isOnline()) player.send(func,event.videoId);
					}
					'step 2'
					game.broadcastAll('closeDialog',event.videoId);
					game.addVideo('cardDialog',null,event.videoId);
					if(result.bool){
						event.goon1=true;
						var suit=get.suit(result.cards[0],player);
						var cards2=event.cards.filter(function(i){
							return get.suit(i,false)==suit;
						});
						if(cards2.length){
							event.cards2=cards2;
							player.chooseTarget(true,'选择一名角色获得'+get.translation(cards2)).set('ai',function(target){
								var att=get.attitude(_status.event.player,target);
								if(att>0){
									return att+Math.max(0,5-target.countCards('h'));
								}
								return att;
							});
						}
						else event.goto(4);
					}
					else event.goto(4);
					'step 3'
					if(result.bool){
						var target=result.targets[0];
						player.line(target,'green');
						target.gain(event.cards2,'gain2');
						event.cards.removeArray(event.cards2);
					}
					'step 4'
					var cards2=cards.filter(function(i){
						return player.hasUseTarget(i);
					});
					if(cards2.length) player.chooseButton(['是否使用其中的一张牌?',cards2]).set('ai',function(button){
						return player.getUseValue(button.link);
					});
					else event.finish();
					'step 5'
					if(result.bool){
						player.chooseUseTarget(true,result.links[0],false);
						event.goon2=true;
					}
					'step 6'
					if(event.goon1&&event.goon2){
						if(player.countMark('chenjian')<2) player.addMark('chenjian',1,false);
						player.recast(player.getCards('h',lib.filter.cardRecastable));
					}
				},
				marktext:'见',
				intro:{content:'展示牌数量+#'},
			},
			xixiu:{
				mod:{
					canBeDiscarded:function(card,player,target){
						if(player!=target&&get.position(card)=='e'&&target.countCards('e')==1) return false;
					},
				},
				audio:2,
				trigger:{target:'useCardToTargeted'},
				forced:true,
				filter:function(event,player){
					if(player==event.player||!player.countCards('e')) return false;
					var suit=get.suit(event.card,false);
					if(suit=='none') return false;
					return player.hasCard(function(card){
						return get.suit(card,player)==suit;
					},'e');
				},
				content:function(){
					player.draw();
				},
				ai:{
					effect:{
						target:function(card,player,target){
							if(typeof card=='object'&&player!=target){
								var suit=get.suit(card);
								if(suit=='none') return;
								if(player.hasCard(function(card){
									return get.suit(card,player)==suit;
								},'e')) return [1,0.08];
							}
						},
					},
				},
			},
			//张嫙
			tongli:{
				audio:2,
				trigger:{player:'useCardToPlayered'},
				filter:function(event,player){
					if(!event.isFirstTarget||(event.card.storage&&event.card.storage.tongli)) return false;
					var type=get.type(event.card);
					if(type!='basic'&&type!='trick') return false;
					var hs=player.getCards('h');
					if(!hs.length) return false;
					var evt=event.getParent('phaseUse');
					if(!evt||evt.player!=player) return false;
					var num1=player.getHistory('useCard',function(evtx){
						if(evtx.getParent('phaseUse')!=evt) return false;
						return !evtx.card.storage||!evtx.card.storage.tongli;
					}).length;
					if(hs.length<num1) return false;
					var list=[];
					for(var i of hs) list.add(get.suit(i,player));
					return list.length==num1;
				},
				prompt2:function(event,player){
					var evt=event.getParent('phaseUse');
					var num=player.getHistory('useCard',function(evtx){
						if(evtx.getParent('phaseUse')!=evt) return false;
						return !evtx.card.storage||!evtx.card.storage.tongli;
					}).length;
					//var str='视为额外使用'+get.cnNumber(num)+'张'
					var str='额外结算'+get.cnNumber(num)+'次'
					if(event.card.name=='sha'&&game.hasNature(event.card)) str+=get.translation(event.card.nature);
					return (str+'【'+get.translation(event.card.name)+'】');
				},
				check:function(event,player){
					return !get.tag(event.card,'norepeat')
				},
				content:function(){
					//player.addTempSkill('tongli_effect');
					var evt=trigger.getParent('phaseUse');
					var num=player.getHistory('useCard',function(evtx){
						if(evtx.getParent('phaseUse')!=evt) return false;
						return true;
						//return !evtx.card.storage||!evtx.card.storage.tongli;
					}).length;
					trigger.getParent().effectCount+=num;
				},
				/*subSkill:{
					effect:{
						trigger:{player:'useCardAfter'},
						forced:true,
						charlotte:true,
						filter:function(event,player){
							return event.tongli_effect!=undefined;
						},
						content:function(){
							'step 0'
							event.card=trigger.tongli_effect[0];
							event.count=trigger.tongli_effect[1];
							'step 1'
							event.count--;
							for(var i of trigger.targets){
								if(!i.isIn()||!player.canUse(card,i,false)) return;
							}
							if(trigger.addedTarget&&!trigger.addedTarget.isIn()) return;
							if(trigger.addedTargets&&trigger.addedTargets.length){
								for(var i of trigger.addedTargets){
									if(!i.isIn()) return;
								}
							}
							var next=player.useCard(get.copy(card),trigger.targets,false);
							if(trigger.addedTarget) next.addedTarget=trigger.addedTarget;
							if(trigger.addedTargets&&trigger.addedTargets.length) next.addedTargets=trigger.addedTargets.slice(0);
							if(event.count>0) event.redo();
						},
					},
				},*/
			},
			shezang:{
				audio:2,
				round:1,
				trigger:{global:'dying'},
				frequent:true,
				filter:function(event,player){
					return event.player==player||player==_status.currentPhase;
				},
				content:function(){
					var cards=[];
					for(var i of lib.suit){
						var card=get.cardPile2(function(card){
							return get.suit(card,false)==i;
						});
						if(card) cards.push(card);
					}
					if(cards.length) player.gain(cards,'gain2');
				},
			},
			//王桃王悦
			huguan:{
				audio:2,
				audioname:['wangyue'],
				init:function(player){
					game.addGlobalSkill('huguan_all');
				},
				trigger:{global:'useCard'},
				direct:true,
				filter:function(event,player){
					if(get.color(event.card,false)!='red') return false;
					var evt=event.getParent('phaseUse');
					if(!evt||evt.player!=event.player) return false;
					return event.player.getHistory('useCard',function(event){
						return event.getParent('phaseUse')==evt;
					}).indexOf(event)==0;
				},
				content:function(){
					'step 0'
					player.chooseControl(lib.suit,'cancel2').set('prompt',get.prompt('huguan',trigger.player)).set('prompt2','令某种花色的手牌不计入其本回合的手牌上限').set('ai',function(){
						var player=_status.event.player,target=_status.event.getTrigger().player,att=get.attitude(player,target);
						if(att <= 0){
							if (!player.hasSkill('yaopei') || player.hasAllHistory('useSkill',function(evt){
								return evt.skill=='huguan'&&evt.targets.includes(target);
							}) || target.needsToDiscard() - target.needsToDiscard(-target.countCards('h') / 4) > (att>-2?1.6:1)) return 'cancel2';
						}
						let list = lib.suit.slice(0);
						if(att <= 0 && target.getStorage('huguan_add')) for(let i of target.getStorage('huguan_add')){
							if (list.includes(i)) return i;
						}
						list.removeArray(target.getStorage('huguan_add'));
						if(list.length) return list.randomGet();
						return 'cancel2';
					});
					'step 1'
					if(result.control!='cancel2'){
						var target=trigger.player;
						player.logSkill('huguan',target);
						game.log(player,'选择了','#g'+get.translation(result.control),'花色')
						target.addTempSkill('huguan_add');
						target.markAuto('huguan_add',[result.control]);
					}
				},
				subSkill:{
					add:{
						charlotte:true,
						onremove:true,
						mod:{
							ignoredHandcard:function(card,player){
								if(player.getStorage('huguan_add').contains(get.suit(card,player))) return true;
							},
							cardDiscardable:function(card,player,name){
								if(name=='phaseDiscard'&&player.getStorage('huguan_add').contains(get.suit(card,player))) return false;
							}
						},
						intro:{content:'本回合$花色的牌不计入手牌上限'},
					},
					all:{
						mod:{
							aiValue:function(player, card, num){
								if(player && player.storage.huguan_all > 0 && get.itemtype(card) == 'card' && get.color(card, player) == 'red') return num + player.storage.huguan_all;
							}
						},
						trigger:{
							player:['phaseUseBegin', 'useCard']
						},
						filter:function(event, player){
							if(event.name === 'useCard') return player.storage.huguan_all;
							return true;
						},
						silent:true,
						charlotte:true,
						content:function(){
							'step 0'
							if(trigger.name === 'useCard'){
								player.storage.huguan_all = 0;
								event.finish();
							}
							'step 1'
							let num = -157;
							game.countPlayer(function (current){
								if(current.hasSkill('huguan')) num = Math.max(num, get.attitude(_status.event.player, current));
							}, true);
							if(num === -157) game.removeGlobalSkill('huguan_all');
							else if(num === 0) player.storage.huguan_all = 6;
							else if(num > 0) player.storage.huguan_all = 9;
						}
					}
				},
			},
			yaopei:{
				audio:2,
				trigger:{global:'phaseDiscardEnd'},
				direct:true,
				filter:function(event,player){
					if(player==event.player||!event.player.isIn()) return false;
					if(!player.hasAllHistory('useSkill',function(evt){
						return evt.skill=='huguan'&&evt.targets.contains(event.player);
					})) return false;
					var suits=[];
					event.player.getHistory('lose',function(evt){
						if(evt.type=='discard'&&evt.getParent('phaseDiscard')==event){
							for(var i of evt.cards2) suits.add(get.suit(i,evt.hs.contains(i)?evt.player:false));
						}
					});
					if(suits.length>=lib.suit.length) return false;
					if(_status.connectMode&&player.countCards('h')>0) return true;
					return player.hasCard(function(card){
						return !suits.contains(get.suit(card));
					},'he');
				},
				content:function(){
					'step 0'
					var suits=[];
					trigger.player.getHistory('lose',function(evt){
						if(evt.type=='discard'&&evt.getParent('phaseDiscard')==trigger){
							for(var i of evt.cards2) suits.add(get.suit(i,evt.hs.contains(i)?evt.player:false));
						}
					});
					player.chooseCardTarget({
						prompt:get.prompt('yaopei',trigger.player),
						prompt2:'操作提示:选择要弃置的牌,并选择执行摸牌选项的角色,另一名角色执行回复体力的选项。',
						suits:suits,
						position:'he',
						filterCard:function(card,player){
							return !_status.event.suits.contains(get.suit(card))&&lib.filter.cardDiscardable(card,player,'yaopei');
						},
						filterTarget:function(card,player,target){
							return target==player||target==_status.event.getTrigger().player;
						},
						ai1:function(card){
							let player = _status.event.player, source = _status.event.getTrigger().player;
							if(get.attitude(player, source) > 0 && (get.recoverEffect(player, player, player) > 0 || get.recoverEffect(source, player, player) > 0)) return 12 - get.value(card);
							return 8 - get.value(card);
						},
						ai2:function(target){
							let player = _status.event.player, source = _status.event.getTrigger().player;
							let recoverer = player === target ? source : player;
							if(recoverer.isHealthy()) return get.attitude(player, target);
							let att = get.attitude(player, recoverer), rec = get.recoverEffect(recoverer, player, player);
							if(rec > 0) return Math.abs(att) + get.attitude(player, target);
							return 0;
						}
					});
					'step 1'
					if(result.bool){
						var target=trigger.player;
						player.logSkill('yaopei',target);
						player.discard(result.cards);
						if(player==result.targets[0]){
							if(target.isDamaged()&&target.hp<player.hp&&(get.mode()!='identity'||player.identity!='nei')) player.addExpose(0.15);
							target.recover();
							player.draw(2);
						}
						else{
							if((player.isHealthy()||player.hp>target.hp)&&(get.mode()!='identity'||player.identity!='nei')) player.addExpose(0.15);
							target.draw(2);
							player.recover();
						}
					}
				},
			},
			mingluan:{
				audio:2,
				trigger:{global:'phaseJieshuBegin'},
				direct:true,
				filter:function(event,player){
					return player!=event.player&&event.player.isIn()&&player.hasSkill('mingluan_mark')&&player.countCards('he')>0;
				},
				content:function(){
					'step 0'
					let he = player.getCards('he'),
						disval = 0,
						dis = 0,
						spare = 30,
						use = true;
					for(let i of he){
						let val = get.value(i, player);
						if(val < 6 && get.position(i) == 'h'){
							dis++;
							disval += val;
						}
						else if(val < spare) spare = val;
					}
					if(!dis){
						dis = 1;
						disval = spare;
						spare = -1;
					}
					let draw = Math.min(trigger.player.countCards('h'), 5 + dis - player.countCards('h'));
					if(6 * draw < disval) use = false;
					player.chooseToDiscard('he',get.prompt('mingluan'),'弃置任意张牌,并摸等同于'+get.translation(trigger.player)+'手牌数的牌(至多摸至五张)',[1,Infinity]).set('ai',function(card){
						let val = get.value(card, player);
						if(val < 0 && card.name !== 'du') return 30;
						if(!_status.event.use) return 0;
						if(ui.selected.cards.length){
							if (get.position(card) !== 'h') return 0;
							return 6 - val;
						}
						if(_status.event.spare < 0 || get.position(card) === 'h') return 30 - val;
						return 0;
					}).set('spare',spare).set('use',use).logSkill=['mingluan',trigger.player];
					'step 1'
					if(result.bool){
						var num=trigger.player.countCards('h'),num2=5-player.countCards('h');
						if(num>0&&num2>0) player.draw(Math.min(num,num2));
					}
				},
				group:'mingluan_count',
				subSkill:{
					count:{
						charlotte:true,
						trigger:{global:'recoverEnd'},
						silent:true,
						popup:false,
						firstDo:true,
						filter:function(event,player){
							var current=_status.currentPhase;
							return current&&current!=player&&!player.hasSkill('mingluan_mark');
						},
						content:function(){
							player.addTempSkill('mingluan_mark');
						},
					},
					mark:{
						charlotte:true,
					},
				},
			},
			//赵嫣
			jinhui:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				content:function(){
					'step 0'
					var cards=[];
					while(cards.length<3){
						var card=get.cardPile2(function(card){
							for(var i of cards){
								if(i.name==card.name) return false;
							}
							var info=get.info(card,false);
							if(info.ai&&info.ai.tag&&info.ai.tag.damage) return false;
							return !info.notarget&&(info.toself||info.singleCard||!info.selectTarget||info.selectTarget==1);
						});
						if(card) cards.push(card);
						else break;
					}
					if(!cards.length) event.finish();
					else{
						player.showCards(cards,get.translation(player)+'发动了【锦绘】');
						event.cards=cards;
						game.cardsGotoOrdering(cards);
						if(game.hasPlayer((current)=>(current!=player))) player.chooseTarget('选择【锦绘】的目标',true,lib.filter.notMe).set('ai',function(target){
							var player=_status.event.player,cards=_status.event.getParent().cards.slice(0);
							var max_effect=0,max_effect_player=0;
							for(var i of cards){
								var targetx=lib.skill.jinhui.getUsableTarget(i,target,player);
								if(targetx){
									var effect2=get.effect(targetx,i,target,target);
									var effect3=get.effect(targetx,i,target,player);
									if(effect2>max_effect){
										max_effect=effect2;
										max_effect_player=effect3;
									}
								}
							}
							return max_effect_player;
						});
						else event.finish();
					}
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						event.target=target;
						player.line(target,'green');
						var cards=cards.filter(function(card){
							return lib.skill.jinhui.getUsableTarget(card,target,player);
						});
						if(cards.length){
							if(cards.length==1) event._result={bool:true,links:cards};
							else target.chooseButton(['选择按“锦绘”规则使用一张牌',cards],true).set('ai',function(button){
								var player=_status.event.player,target=_status.event.getParent().player,card=button.link;
								var targetx=lib.skill.jinhui.getUsableTarget(card,player,target);
								var effect=get.effect(targetx,card,player,player),cards=_status.event.getParent().cards.slice(0);
								var effect2=0,effect3=0;
								cards.remove(button.link);
								for(var i of cards){
									var targetx=lib.skill.jinhui.getUsableTarget(i,target,player);
									if(targetx){
										effect2+=get.effect(targetx,i,target,target);
										effect3+=get.effect(targetx,i,target,player);
									}
								}
								if(effect2>0) effect+=effect3;
								return effect;
							});
						}
						else event.goto(3);
					}
					else event.finish();
					'step 2'
					if(result.bool){
						var card=result.links[0];
						event.cards.remove(card);
						var targetx=lib.skill.jinhui.getUsableTarget(card,target,player);
						target.useCard(card,targetx,false,'noai');
					}
					'step 3'
					var cards=cards.filter(function(card){
						return lib.skill.jinhui.getUsableTarget(card,player,target);
					});
					if(cards.length){
						player.chooseButton(['是否按“锦绘”规则使用其中一张牌?',cards]).set('ai',function(button){
							var player=_status.event.player,target=_status.event.getParent().target;
							var card=button.link,targetx=lib.skill.jinhui.getUsableTarget(card,player,target);
							return get.effect(targetx,card,player,player)
						});
					}
					else event.finish();
					'step 4'
					if(result.bool){
						var card=result.links[0];
						cards.remove(card);
						var targetx=lib.skill.jinhui.getUsableTarget(card,player,target);
						if(targetx){
							player.useCard(card,targetx,false,'noai');
						}
						if(cards.length) event.goto(3);
					}
					else event.finish();
				},
				getUsableTarget:function(card,player,target){
					var info=get.info(card,false);
					if(info.toself) return player.canUse(card,player,false)?player:false;
					return (target.isIn()&&player.canUse(card,target,false))?target:false;
				},
				ai:{
					order:5,
					result:{player:1},
				},
			},
			qingman:{
				audio:2,
				trigger:{global:'phaseEnd'},
				forced:true,
				logTarget:'player',
				filter:function(event,player){
					if(!event.player.isIn()) return false;
					var num=player.countCards('h');
					if(num>=5) return false;
					var num2=0;
					for(var i=1;i<=5;i++){
						num2+=event.player.countEmptySlot(i);
					}
					return num<num2;
				},
				content:function(){
					var num2=0;
					for(var i=1;i<=5;i++){
						num2+=trigger.player.countEmptySlot(i);
					}
					player.drawTo(num2);
				},
			},
			//何晏
			yachai:{
				audio:2,
				trigger:{player:'damageEnd'},
				filter:function(event,player){
					return event.source&&event.source.isIn();
				},
				logTarget:'source',
				check:function(event,player){
					return get.attitude(player,event.source)<0;
				},
				content:function(){
					'step 0'
					var target=trigger.source,str=get.translation(player);
					event.target=target;
					var th=target.countCards('h');
					if(th>0){
						event.num=Math.ceil(th/2);
						var list=[
							'本回合不能使用或打出手牌,然后'+str+'摸两张牌',
							'展示所有手牌,并将其中一种花色的所有牌交给'+str,
							'弃置'+get.cnNumber(event.num)+'张手牌',
						];
						target.chooseControl().set('choiceList',list).set('ai',function(){
							return get.rand(0,2);
						});
					}
					else event._result={index:0};
					'step 1'
					switch(result.index){
						case 0:
							target.addTempSkill('yachai_block');
							player.draw(2);
							event.finish();
							break;
						case 1:target.showHandcards();break;
						case 2:event.goto(4);break;
					}
					'step 2'
					var map={},hs=target.getCards('h');
					for(var i of hs){
						map[get.suit(i,target)]=true;
					}
					var list=[];
					for(var i of lib.suit){
						if(map[i]) list.push(i);
					}
					if(!list.length) event.finish();
					else if(list.length==1) event._result={control:list[0]};
					else target.chooseControl(list).set('prompt','将一种花色的牌交给'+get.translation(player));
					'step 3'
					var cards=target.getCards('h',function(card){
						return get.suit(card,target)==result.control&&lib.filter.cardDiscardable(card,target,'yachai');
					});
					if(cards.length) target.give(cards,player,'give');
					event.finish();
					'step 4'
					target.chooseToDiscard('h',true,num);
				},
				subSkill:{
					block:{
						mark:true,
						intro:{content:'不能使用或打出手牌'},
						charlotte:true,
						mod:{
							cardEnabled2:function(card){
								if(get.position(card)=='h') return false;
							},
						},
					},
				},
			},
			qingtan:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filter:function(event,player){
					return game.hasPlayer((current)=>current.countCards('h')>0);
				},
				filterTarget:function(card,player,target){
					return target.countCards('h')>0;
				},
				selectTarget:-1,
				multitarget:true,
				multiline:true,
				content:function(){
					'step 0'
					targets.sortBySeat();
					var next=player.chooseCardOL(targets,'请选择要展示的牌',true).set('ai',function(card){
						return -get.value(card);
					}).set('source',player);
					next.aiCard=function(target){
						var hs=target.getCards('h');
						return {bool:true,cards:[hs.randomGet()]};
					};
					next._args.remove('glow_result');
					'step 1'
					var cards=[];
					event.videoId=lib.status.videoId++;
					for(var i=0;i<targets.length;i++) cards.push(result[i].cards[0]);
					event.cards=cards;
					game.log(player,'展示了',targets,'的',cards);
					game.broadcastAll(function(targets,cards,id,player){
						var dialog=ui.create.dialog(get.translation(player)+'发动了【清谈】',cards);
						dialog.videoId=id;
						var getName=function(target){
							if(target._tempTranslate) return target._tempTranslate;
							var name=target.name;
							if(lib.translate[name+'_ab']) return lib.translate[name+'_ab'];
							return get.translation(name);
						}
						for(var i=0;i<targets.length;i++){
							dialog.buttons[i].querySelector('.info').innerHTML=getName(targets[i])+get.translation(cards[i].suit);
						}
					},targets,cards,event.videoId,player);
					game.delay(4);
					'step 2'
					game.broadcastAll('closeDialog',event.videoId);
					var list=[],map={};
					for(var i of cards){
						var suit=get.suit(i);
						if(!map[suit]) map[suit]=[];
						map[suit].push(i);
					}
					var dialog=['选择获得一种花色的所有牌'];
					for(var suit of lib.suit){
						if(map[suit]){
							var targetsx=map[suit].map(function(card){
								return targets[cards.indexOf(card)];
							});
							dialog.push('<div class="text center">'+get.translation(targetsx)+'</div>');
							dialog.push(map[suit]);
							list.push(suit);
						}
					}
					if(list.length) player.chooseControl(list,'cancel2').set('dialog',dialog).set('list',list).set('map',map).set('ai',function(){
						let max=0,res='cancel2';
						for(let s of _status.event.list){
							let temp=0;
							for(let i of _status.event.map[s]){
								temp+=get.value(i,_status.event.player)+get.sgn(get.attitude(_status.event.player,get.owner(i)))*(6-get.value(i,get.owner(i)));
							}
							for(let i in _status.event.map){
								if(i===s) continue;
								for(let j of _status.event.map[i]){
									temp-=get.sgn(get.attitude(_status.event.player,get.owner(j)))*get.value(j,get.owner(j));
								}
							}
							if(temp>max){
								res=s;
								max=temp;
							}
						}
						return res;
					});
					else event.finish();
					'step 3'
					if(result.control!='cancel2'){
						event.cards2=cards.filter(function(i){
							return get.suit(i)==result.control;
						})
						for(var i=0;i<cards.length;i++){
							if(event.cards2.contains(cards[i])){
								targets[i].$give(cards[i],player,false);
							}
						}
						player.gain(event.cards2,'log');
					}
					else event.finish();
					'step 4'
					var draws=[];
					for(var i=0;i<cards.length;i++){
						if(!event.cards2.contains(cards[i])){
							targets[i].discard(cards[i]).delay=false;
						}
						else draws.push(targets[i]);
					}
					if(draws.length) game.asyncDraw(draws);
					'step 5'
					game.delayx();
				},
				ai:{
					order:7,
					result:{
						player:0.3,
						target:-1,
					},
				},
			},
			//邓芝
			jianliang:{
				audio:2,
				trigger:{player:'phaseDrawBegin2'},
				filter:function(event,player){
					return !player.isMaxHandcard();
				},
				direct:true,
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt('jianliang'),'令至多两名角色各摸一张牌',[1,2]).set('ai',function(target){
						return Math.sqrt(5-Math.min(4,target.countCards('h')))*get.attitude(_status.event.player,target);
					});
					'step 1'
					if(result.bool){
						var targets=result.targets.sortBySeat();
						player.logSkill('jianliang',targets);
						if(targets.length==1){
							targets[0].draw();
							event.finish();
						}
						else game.asyncDraw(targets);
					}
					else event.finish();
					'step 2'
					game.delayx();
				},
			},
			weimeng:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filterTarget:function(card,player,target){
					return player.hp>0&&target!=player&&target.countGainableCards(player,'h')>0;
				},
				content:function(){
					'step 0'
					player.gainPlayerCard(target,'h',true,[1,player.hp]);
					'step 1'
					if(result.bool&&target.isIn()){
						var num=result.cards.length,hs=player.getCards('he');
						var numx=0;
						for(var i of result.cards) numx+=get.number(i,player);
						event.num=numx;
						event.cards=result.cards;
						if(!hs.length) event.finish();
						else if(hs.length<=num) event._result={bool:true,cards:hs};
						else player.chooseCard('he',true,'选择交给'+get.translation(target)+get.cnNumber(num)+'张牌','(已得到牌的点数和:'+numx+')',num);
					}
					else event.finish();
					'step 2'
					player.give(result.cards,target);
					var numx=0;
					for(var i of result.cards) numx+=get.number(i,player);
					if(numx>num) player.draw();
					else if(numx<num) player.discardPlayerCard(target,true,'hej');
				},
				ai:{
					order:6,
					tag:{
						lose:1,
						loseCard:1,
						gain:1,
					},
					result:{
						target:function(player,target){
							return -Math.pow(Math.min(player.hp,target.countCards('h')),2)/4;
						},
					},
				},
			},
			//冯熙
			yusui:{
				audio:2,
				trigger:{target:'useCardToTargeted'},
				filter:function(event,player){
					return event.player!=player&&event.player.isIn()&&get.color(event.card)=='black';
				},
				logTarget:'player',
				check:function(event,player){
					var target=event.player;
					if(player.hp<3||get.attitude(player,target)>-3) return false;
					if(player.hp<target.hp) return true;
					if(Math.min(target.countCards('h')-player.countCards('h'),target.countCards('h'))>3) return true;
					return false;
				},
				preHidden:true,
				content:function(){
					'step 0'
					player.loseHp();
					event.target=trigger.player;
					'step 1'
					event.addIndex=0;
					var list=[],num=target.countCards('h')-player.countCards('h');
					event.num=num;
					if(num>0&&target.countCards('h')>0) list.push('令其弃置'+get.cnNumber(num)+'张手牌');
					else event.addIndex++;
					if(target.hp>player.hp) list.push('令其失去'+get.cnNumber(target.hp-player.hp)+'点体力');
					if(!list.length) event.finish();
					else if(list.length==1) event._result={index:0};
					else player.chooseControl().set('choiceList',list).set('prompt','令'+get.translation(target)+'执行一项').set('ai',function(){
						var player=_status.event.player,target=_status.event.getParent().target;
						return (target.hp-player.hp)>(Math.min(_status.event.getParent().num,target.countCards('h'))/2)?1:0;
					});
					'step 2'
					if(result.index+event.addIndex==0) target.chooseToDiscard(num,true,'h');
					else target.loseHp(target.hp-player.hp);
				},
			},
			boyan:{
				enable:'phaseUse',
				usable:1,
				filterTarget:function(card,player,target){
					return target!=player;
				},
				content:function(){
					'step 0'
					target.drawTo(Math.min(5,target.maxHp));
					'step 1'
					target.addTempSkill('boyan_block');
				},
				subSkill:{
					block:{
						mark:true,
						intro:{content:'不能使用或打出手牌'},
						charlotte:true,
						mod:{
							cardEnabled2:function(card){
								if(get.position(card)=='h') return false;
							},
						},
					},
				},
				ai:{
					order:4,
					result:{
						target:function(player,target){
							if(get.attitude(player,target)>0) return Math.max(0,Math.min(5,target.maxHp)-target.countCards('h'));
							if(Math.max(0,Math.min(5,target.maxHp)-target.countCards('h'))<=1&&target.countCards('h','shan')&&!target.hasSkillTag('respondShan',true,null,true)&&player.countCards('h',function(card){
								return get.tag(card,'respondShan')&&player.getUseValue(card,null,true)>0&&get.effect(target,card,player,player)>0;
							})) return -2;
						},
					},
				},
			},
			//祢衡
			rekuangcai:{
				audio:2,
				forced:true,
				trigger:{player:'phaseDiscardBegin'},
				filter:function(event,player){
					return !player.getHistory('useCard').length||!player.getHistory('sourceDamage').length;
				},
				content:function(){
					lib.skill.rekuangcai.change(player,player.getHistory('useCard').length?-1:1);
				},
				mod:{
					targetInRange:function(card,player){
						if(player==_status.currentPhase) return true;
					},
					cardUsable:function(card,player){
						if(player==_status.currentPhase) return Infinity;
					},
				},
				change:function(player,num){
					if(typeof player.storage.rekuangcai_change!='number') player.storage.rekuangcai_change=0;
					player.storage.rekuangcai_change+=num;
					player.addSkill('rekuangcai_change');
				},
				group:'rekuangcai_draw',
				subSkill:{
					draw:{
						audio:'rekuangcai',
						trigger:{player:'phaseJieshuBegin'},
						forced:true,
						filter:function(event,player){
							return player.getHistory('sourceDamage').length>0;
						},
						content:function(){
							player.draw(Math.min(5,player.getStat('damage')));
						},
					},
					change:{
						mod:{
							maxHandcard:function(player,num){
								if(typeof player.storage.rekuangcai_change=='number') return num+player.storage.rekuangcai_change;
							},
						},
						charlotte:true,
						mark:true,
						intro:{
							content:(num)=>('手牌上限'+(num<0?'':'+')+num),
						},
					},
				},
			},
			reshejian:{
				audio:2,
				trigger:{target:'useCardToTargeted'},
				filter:function(event,player){
					if(player==event.player||event.targets.length!=1) return false;
					return player.countCards('h')>=2;
				},
				direct:true,
				usable:2,
				content:function(){
					'step 0'
					player.chooseToDiscard('he',[2,Infinity],get.prompt('reshejian',trigger.player),'<div class="text center">弃置至少两张手牌,然后选择一项:<br>⒈弃置其等量的牌。⒉对其造成1点伤害。</div>').set('ai',function(card){
						if(_status.event.goon&&ui.selected.cards.length<2) return 5.6-get.value(card);
						return 0;
					}).set('goon',function(){
						var target=trigger.player;
						if(get.damageEffect(target,player,player)>0) return true;
						if(target.countCards('he',function(card){
							return get.value(card,target)>6;
						})>=2) return true;
						return false;
					}()).logSkill=['reshejian',trigger.player];
					'step 1'
					if(!result.bool){
						player.storage.counttrigger.reshejian--;
						event.finish();
						return;
					}
					var num=result.cards.length;
					event.num=num;
					var target=trigger.player,str=get.translation(target);
					event.target=target;
					if(!target.isIn()) event.finish();
					else if(!target.hasCard(function(card){
						return lib.filter.canBeDiscarded(card,player,target);
					},'he')) event._result={index:1};
					else player.chooseControl().set('choiceList',[
						'弃置'+str+'的'+get.cnNumber(num)+'张牌',
						'对'+str+'造成1点伤害',
					]).set('ai',function(){
						var player=_status.event.player;
						var eff0=get.effect(target,{name:'guohe_copy2'},player,player)*Math.min(1.7,target.countCards('he'));
						var eff1=get.damageEffect(target,player,player);
						return eff0>eff1?0:1;
					});
					'step 2'
					if(result.index==0) player.discardPlayerCard(target,num,true,'he');
					else target.damage();
				},
			},
			//陈登
			refuyuan:{
				audio:2,
				trigger:{global:'useCardToTargeted'},
				logTarget:'target',
				filter:function(event,player){
					return event.card.name=='sha'&&event.target.isIn()&&!game.hasPlayer2(function(current){
						return current.hasHistory('useCard',function(evt){
							return evt.card!=event.card&&get.color(evt.card,false)=='red'&&evt.targets&&evt.targets.contains(event.target);
						});
					});
				},
				check:function(event,player){
					return get.attitude(player,event.target)>0;
				},
				content:function(){
					trigger.target.draw();
				},
			},
			reyingshui:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filter:function(event,player){
					return player.countCards('he')>0&&game.hasPlayer((current)=>player.inRange(current));
				},
				position:'he',
				filterCard:true,
				filterTarget:function(card,player,target){
					return player.inRange(target);
				},
				discard:false,
				lose:false,
				delay:false,
				check:function(card){
					if(get.type(card)=='equip') return 3-get.value(card);
					return 6.5-get.value(card);
				},
				content:function(){
					'step 0'
					player.give(cards,target);
					'step 1'
					var next=target.chooseCard('he',[2,Infinity],'交给'+get.translation(player)+'至少两张装备牌,否则受到1点伤害',{type:'equip'});
					if(get.damageEffect(target,player,target)>=0) next.set('ai',()=>-1);
					else next.set('ai',(card)=>ui.selected.cards.length<2?(6-get.value(card)):0);
					'step 2'
					if(result.bool) target.give(result.cards,player);
					else target.damage('nocard');
				},
				ai:{
					order:5,
					tag:{
						damage:0.5,
					},
					result:{
						target:-1.5,
					},
				},
			},
			rewangzu:{
				audio:2,
				trigger:{player:'damageBegin1'},
				direct:true,
				filter:function(event,player){
					return event.source&&player!=event.source&&player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'rewangzu'),'h');
				},
				usable:1,
				content:function(){
					'step 0'
					var num=player.getFriends().length;
					if(!game.hasPlayer(function(current){
						return current!=player&&current.getFriends().length>num;
					})){
						player.chooseToDiscard('h',get.prompt('rewangzu'),'弃置一张牌并令伤害-1').set('ai',function(card){
							return 7-get.value(card);
						}).logSkill='rewangzu';
					}
					else{
						player.chooseBool(get.prompt('rewangzu'),'随机弃置一张牌并令伤害-1');
					}
					'step 1'
					if(result.bool){
						trigger.num--;
						if(!result.cards||!result.cards.length){
							player.logSkill('rewangzu');
							var cards=player.getCards('h',(card)=>lib.filter.cardDiscardable(card,player,'rewangzu'));
							if(cards.length) player.discard(cards.randomGet());
						}
					}
					else player.storage.counttrigger.rewangzu--;
				},
			},
			//万年公主
			zhenge:{
				audio:2,
				trigger:{player:'phaseZhunbeiBegin'},
				direct:true,
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt('zhenge'),'令一名角色的攻击范围+1').set('ai',function(target){
						var player=_status.event.player,att=get.attitude(player,target)
						if(att>0){
							if(!target.hasMark('zhenge_effect')) att*=1.5;
							if(!game.hasPlayer(function(current){
								return get.distance(target,current,'attack')>2;
							})){
								var usf=Math.max.apply(Math,game.filterPlayer().map(function(current){
									if(target.canUse('sha',current,false)) return get.effect(current,{name:'sha'},target,player);
									return 0;
								}));
								return att+usf;
							}
							return att;
						}
						return 0;
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						event.target=target;
						player.logSkill('zhenge',target);
						target.addSkill('zhenge_effect');
						if(target.countMark('zhenge_effect')<5) target.addMark('zhenge_effect',1,false);
						if(!game.hasPlayer(function(current){
							return current!=target&&!target.inRange(current);
						})){
							player.chooseTarget('是否令'+get.translation(target)+'视为对另一名角色使用【杀】?',function(card,player,target){
								return _status.event.source.canUse('sha',target);
							}).set('source',target).set('ai',function(target){
								var evt=_status.event;
								return get.effect(target,{name:'sha'},evt.source,evt.player);
							});
						}
						else{
							game.delayx();
							event.finish();
						}
					}
					else event.finish();
					'step 2'
					if(result.bool){
						target.useCard({name:'sha',isCard:true},result.targets[0],false);
					}
					'step 3'
					game.delayx();
				},
				subSkill:{
					effect:{
						charlotte:true,
						onremove:true,
						mod:{
							attackRange:function(player,num){
								return num+player.countMark('zhenge_effect');
							},
						},
						intro:{content:'攻击范围+#'},
					},
				},
			},
			xinghan:{
				audio:2,
				init:function(player){
					player.addSkill('xinghan_count');
				},
				onremove:function(player){
					player.removeSkill('xinghan_count');
				},
				trigger:{global:'damageSource'},
				forced:true,
				filter:function(event,player){
					return event.card&&event.card==player.storage.xinghan_temp&&event.source&&event.source.hasMark('zhenge_effect');
				},
				logTarget:'source',
				content:function(){
					player.draw(player.isMaxHandcard(true)?1:Math.min(5,trigger.source.getAttackRange()));
				},
				subSkill:{
					count:{
						trigger:{global:'useCard1'},
						forced:true,
						charlotte:true,
						popup:false,
						firstDo:true,
						filter:function(event,player){
							return event.card.name=='sha'&&!game.hasPlayer2(function(current){
								return current.hasHistory('useCard',function(evt){
									return evt!=event&&evt.card.name=='sha';
								})
							});
						},
						content:function(){
							player.addTempSkill('xinghan_temp');
							player.storage.xinghan_temp=trigger.card;
						},
					},
					temp:{onremove:true},
				},
				ai:{combo:'zhenge'},
			},
			//荀谌
			refenglve:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filter:function(event,player){
					return player.countCards('h')>0&&!player.hasSkillTag('noCompareSource')&&game.hasPlayer(function(current){
						return current!=player&&current.countCards('h')>0&&!current.hasSkillTag('noCompareTarget');
					});
				},
				filterTarget:function(card,player,target){
					return target!=player&&target.countCards('h')>0&&!target.hasSkillTag('noCompareTarget');
				},
				content:function(){
					'step 0'
					player.chooseToCompare(target);
					'step 1'
					if(result.bool){
						if(!target.countCards('hej')) event.finish();
						else{
							event.giver=target;
							event.gainner=player;
							target.choosePlayerCard(target,true,'hej',2,'交给'+get.translation(player)+'两张牌');
						}
					}
					else if(result.tie){
						delete player.getStat('skill').refenglve;
						event.finish();
					}
					else{
						if(get.position(result.player,true)=='d') target.gain(result.player,'gain2');
						event.finish();
						/*if(!player.countCards('he')) event.finish();
						else{
							event.giver=player;
							event.gainner=target;
							player.chooseCard(true,'he','交给'+get.translation(target)+'一张牌');
						}*/
					}
					'step 2'
					if(result.bool) event.giver.give(result.cards,event.gainner);
				},
				ai:{
					order:8,
					result:{
						target:function(player,target){
							if(!player.hasCard(function(card){
								if(get.position(card)!="h") return false;
								var val=get.value(card);
								if(val<0) return true;
								if(val<=5){
									return card.number>=11;
								}
								if(val<=6){
									return card.number>=13;
								}
								return false;
							})) return 0;
							return -Math.sqrt(1+target.countCards('he'))/(1+target.countCards('j'));
						},
					},
				},
			},
			anyong:{
				audio:2,
				trigger:{global:'damageSource'},
				direct:true,
				filter:function(event,player){
					return event.source&&event.source==_status.currentPhase&&event.num==1&&
					event.player!=event.source&&event.player.isIn()&&player.countCards('he')>0&&
					event.source.getHistory('sourceDamage',function(evt){
						return evt.player!=event.source;
					}).indexOf(event)==0;
				},
				content:function(){
					'step 0'
					player.chooseToDiscard('he',get.prompt('anyong',trigger.player),'弃置一张牌并对其造成1点伤害').set('goon',get.damageEffect(trigger.player,player,player)>0).set('ai',function(card){
						if(_status.event.goon) return 7-get.value(card);
						return 0;
					}).logSkill=['anyong',trigger.player];
					'step 1'
					if(result.bool) trigger.player.damage();
				},
			},
			//刘永
			zhuning:{
				audio:2,
				enable:'phaseUse',
				usable:2,
				filter:function(event,player){
					if(!player.countCards('he')) return false;
					return (!player.getStat('skill').zhuning||player.hasSkill('zhuning_double'));
				},
				filterCard:true,
				position:'he',
				filterTarget:lib.filter.notMe,
				selectCard:[1,Infinity],
				delay:false,
				lose:false,
				discard:false,
				check:function(card){
					if(ui.selected.cards.length&&ui.selected.cards[0].name=='du') return 0;
					if(!ui.selected.cards.length&&card.name=='du') return 20;
					var player=get.owner(card);
					if(ui.selected.cards.length>=Math.max(1,player.countCards('h')-player.hp)) return 0;
					return 10-get.value(card);
				},
				content:function(){
					'step 0'
					player.give(cards,target).gaintag.add('fengxiang_tag');
					'step 1'
					var list=[];
					for(var name of lib.inpile){
						var type=get.type(name);
						if(type!='basic'&&type!='trick') continue;
						var card={name:name,isCard:true};
						if(get.tag(card,'damage')>0&&player.hasUseTarget(card)){
							list.push([type,'',name]);
						}
						if(name=='sha'){
							for(var i of lib.inpile_nature){
								card.nature=i;
								if(player.hasUseTarget(card)) list.push([type,'',name,i]);
							}
						}
					}
					if(list.length){
						player.chooseButton(['是否视为使用一张伤害牌?',[list,'vcard']]).set('ai',function(button){
							return _status.event.player.getUseValue({name:button.link[2]});
						});
					}
					else event.finish();
					'step 2'
					if(result.bool){
						player.chooseUseTarget({name:result.links[0][2],nature:result.links[0][3],isCard:true},true,false);
					}
					else event.finish();
					'step 3'
					if(!player.hasHistory('sourceDamage',function(evt){
						if(!evt.card) return false;
						var evtx=evt.getParent('useCard');
						return evtx.card==evt.card&&evtx.getParent(2)==event;
					})) player.addTempSkill('zhuning_double');
				},
				subSkill:{
					double:{},
				},
				ai:{
					fireAttack:true,
					order:4,
					result:{
						target:function(player,target){
							if(target.hasSkillTag('nogain')) return 0;
							if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){
								if(target.hasSkillTag('nodu')) return 0;
								return -10;
							}
							if(target.hasJudge('lebu')) return 0;
							var nh=target.countCards('h');
							var np=player.countCards('h');
							if(player.hp==player.maxHp||player.storage.rerende<0||player.countCards('h')<=1){
								if(nh>=np-1&&np<=player.hp&&!target.hasSkill('haoshi')) return 0;
							}
							return Math.max(1,5-nh);
						}
					},
				}
			},
			fengxiang:{
				getMax:function(event){
					var max=0,max2=null,players=game.filterPlayer();
					for(var current of players){
						var num=0,cards=current.getCards('h',function(card){
							return card.hasGaintag('fengxiang_tag');
						});
						if(event){
							if(event.name=='gain'&&event.gaintag.contains('fengxiang_tag')) cards.removeArray(event.cards);
							var evt=event.getl(current);
							if(evt&&evt.gaintag_map){
								for(var i in evt.gaintag_map){
									if(evt.gaintag_map[i].contains('fengxiang_tag')) num++;
								}
							}
						}
						num+=cards.length;
						if(num>max){
							max=num;
							max2=current;
						}
						else if(num==max) max2=null;
					}
					return max2;
				},
				audio:2,
				init:function(player){
					game.addGlobalSkill('fengxiang_use');
				},
				onremove:function(player){
					if(!game.hasPlayer(current=>current.hasSkill('fengxiang'),true)) game.removeGlobalSkill('fengxiang_use');
				},
				trigger:{player:'damageEnd'},
				forced:true,
				filter:function(event,player){
					var target=lib.skill.fengxiang.getMax(); 
					return !target||target.isDamaged();
				},
				logTarget:function(event,player){
					return lib.skill.fengxiang.getMax()||player;
				},
				content:function(){
					var target=lib.skill.fengxiang.getMax();
					if(target) target.recover();
					else player.draw();
				},
				group:'fengxiang_draw',
				subSkill:{
					draw:{
						trigger:{
							global:['equipAfter','addJudgeAfter','loseAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
						},
						forced:true,
						filter:function(event,player){
							if(event.name=='lose'&&event.getlx===false) return false;
							return lib.skill.fengxiang.getMax()!=lib.skill.fengxiang.getMax(event);
						},
						content:function(){
							if(trigger.delay===false) game.delayx();
							player.draw();
						},
					},
					use:{
						mod:{
							aiOrder:function(player,card,num){
								if(num>0&&get.itemtype(card)==='card'&&card.hasGaintag('fengxiang_tag')&&game.hasPlayer(current=>{
									return current.hasSkill('fengxiang')&&get.attitude(player,current)>0;
								})) return num+10;
							}
						},
						trigger:{player:'dieAfter'},
						filter:function(event,player){
							return !game.hasPlayer(current=>current.hasSkill('fengxiang'),true);
						},
						silent:true,
						forceDie:true,
						charlotte:true,
						content:function(){
							game.removeGlobalSkill('fengxiang_use');
						}
					}
				},
			},
			//阚泽
			rekuanshi:{
				audio:'kuanshi',
				trigger:{player:'phaseJieshuBegin'},
				direct:true,
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt2('rekuanshi')).set('animate',false).set('ai',function(target){
						var att=get.attitude(player,target);
						if(target.hp<3) att/=1.5;
						return att;
					});
					'step 1'
					if(result.bool){
						player.logSkill('rekuanshi');
						player.addTempSkill('rekuanshi_effect',{player:'phaseBegin'});
						player.storage.rekuanshi_effect=result.targets[0];
						game.delayx();
					}
				},
				subSkill:{
					effect:{
						audio:'kuanshi',
						mark:true,
						intro:{
							content:'每回合限一次,当$于一回合内受到第2点伤害后,其回复1点体力。'
						},
						trigger:{global:'damageEnd'},
						forced:true,
						charlotte:true,
						logTarget:'player',
						usable:1,
						filter:function(event,player){
							if(event.player!=player.storage.rekuanshi_effect||event.player.isHealthy()) return false;
							var history=event.player.getHistory('damage',null,event),num=0;
							for(var i of history) num+=i.num;
							return num>1&&(num-event.num)<2;
						},
						content:function(){
							trigger.player.recover();
						}
					},
				},
			},
			//吕玲绮
			guowu:{
				trigger:{player:'phaseUseBegin'},
				filter:function(event,player){
					return player.countCards('h')>0;
				},
				preHidden:true,
				content:function(){
					'step 0'
					var hs=player.getCards('h');
					player.showCards(hs,get.translation(player)+'发动了【帼舞】');
					var list=[];
					for(var i of hs){
						list.add(get.type2(i,player));
						if(list.length>=3) break;
					}
					if(list.length>=1){
						var card=get.discardPile(function(i){
							return i.name=='sha';
						});
						if(card) player.gain(card,'gain2');
					}
					if(list.length>=2) player.addTempSkill('guowu_dist','phaseUseAfter');
					if(list.length>=3) player.addTempSkill('guowu_add','phaseUseAfter');
				},
				subSkill:{
					dist:{
						charlotte:true,
						mod:{targetInRange:()=>true},
					},
					add:{
						charlotte:true,
						trigger:{player:'useCard1'},
						direct:true,
						filter:function(event,player){
							var info=get.info(event.card,false);
							if(info.allowMultiple==false) return false;
							if(event.card.name!='sha'&&(info.type!='trick'||get.mode()=='guozhan')) 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 num=game.countPlayer(function(current){
								return !trigger.targets.contains(current)&&lib.filter.targetEnabled2(trigger.card,player,current)&&lib.filter.targetInRange(trigger.card,player,current);
							});
							player.chooseTarget('帼舞:是否为'+get.translation(trigger.card)+'增加'+(num>1?'至多两个':'一个')+'目标?',[1,Math.min(2,num)],function(card,player,target){
								var trigger=_status.event.getTrigger();
								var card=trigger.card;
								return !trigger.targets.contains(target)&&lib.filter.targetEnabled2(card,player,target)&&lib.filter.targetInRange(card,player,target);
							}).set('ai',function(target){
								var player=_status.event.player;
								var card=_status.event.getTrigger().card;
								return get.effect(target,card,player,player);
							});
							'step 1'
							if(result.bool){
								if(player!=game.me&&!player.isOnline()) game.delayx();
							}
							else event.finish();
							'step 2'
							var targets=result.targets.sortBySeat();
							player.logSkill('guowu_add',targets);
							trigger.targets.addArray(targets);
							//if(get.mode()=='guozhan') player.removeSkill('guowu_add');
						},
					},
				},
			},
			zhuangrong:{
				derivation:['llqshenwei','wushuang'],
				trigger:{global:'phaseEnd'},
				forced:true,
				juexingji:true,
				skillAnimation:true,
				animationColor:'gray',
				filter:function(event,player){
					return player.hp==1||player.countCards('h')==1;
				},
				content:function(){
					'step 0'
					player.awakenSkill('zhuangrong');
					player.loseMaxHp();
					'step 1'
					if(player.maxHp>player.hp) player.recover(player.maxHp-player.hp);
					'step 2'
					player.drawTo(Math.min(5,player.maxHp));
					player.addSkillLog('llqshenwei');
					player.addSkillLog('wushuang');
				},
			},
			llqshenwei:{
				audio:2,
				trigger:{player:'phaseDrawBegin2'},
				forced:true,
				filter:(event)=>!event.numFixed,
				content:function(){
					trigger.num+=2;
				},
				mod:{
					maxHandcard:(player,num)=>num+2,
				},
			},
			cuijian:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filter:function(event,player){
					return game.hasPlayer((current)=>lib.skill.cuijian.filterTarget(null,player,current));
				},
				filterTarget:function(card,player,target){
					return target!=player&&target.countCards('h')>0;
				},
				content:function(){
					'step 0'
					var hs=target.getCards('h','shan');
					if(hs.length){
						hs.addArray(target.getCards('he',function(card){
							return get.subtype(card)=='equip2';
						}))
						player.gain(hs,target,'give','bySelf');
						if(player.hasMark('zhtongyuan_basic')) event.finish();
						else event.num=hs.length;
					}
					else{
						if(player.hasMark('zhtongyuan_trick')) player.draw(2);
						event.finish();
					}
					'step 1'
					var hs=player.getCards('he');
					if(!hs.length||!target.isIn()) event.finish();
					else if(hs.length<=num) event._result={bool:true,cards:hs};
					else player.chooseCard('he',true,'选择交给'+get.translation(target)+get.cnNumber(num)+'张牌',num);
					'step 2'
					if(result.bool&&result.cards&&result.cards.length) player.give(result.cards,target);
				},
				ai:{
					order:4,
					result:{
						player:function(player,target){
							if(!target.countCards('h','shan')) return player.hasMark('zhtongyuan_trick')?2:0;
							return 0;
						},
						target:function(player,target){
							if(target.countCards('h','shan')){
								var num=-target.countCards('h')/2;
								var card=target.getEquip(2);
								if(card) num-=(get.value(card,target)/2);
								return num;
							}
							return -0.01;
						},
					},
				},
			},
			tongyuan:{audio:2},
			zhtongyuan:{
				audio:'tongyuan',
				trigger:{player:['useCardAfter','respondAfter']},
				forced:true,
				filter:function(event,player){
					var type=get.type2(event.card,false);
					return (type=='basic'||type=='trick')&&get.color(event.card,false)=='red'&&!player.hasMark('zhtongyuan_'+type);
				},
				content:function(){
					var type=get.type2(trigger.card,false);
					if(!player.hasMark('zhtongyuan_'+type)){
						player.addMark('zhtongyuan_'+type,1,false);
						game.log(player,'修改了技能','#g【摧坚】');
					}
				},
				group:['zhtongyuan_basic','zhtongyuan_trick'],
				subSkill:{
					basic:{
						trigger:{player:'useCard2'},
						direct:true,
						locked:true,
						filter:function(event,player){
							if(!player.hasMark('zhtongyuan_basic')||!player.hasMark('zhtongyuan_trick')) return false;
							var card=event.card;
							if(get.color(card,false)!='red'||get.type(card,null,true)!='basic') return false;
							var info=get.info(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(card,player,current);
								})){
									return true;
								}
							}
							return false;
						},
						content:function(){
							'step 0'
							var prompt2='为'+get.translation(trigger.card)+'增加一个目标'
							player.chooseTarget(get.prompt('zhtongyuan'),function(card,player,target){
								var player=_status.event.player;
								return !_status.event.targets.contains(target)&&lib.filter.targetEnabled2(_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);
							}).set('card',trigger.card).set('targets',trigger.targets);
							'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('zhtongyuan',event.targets);
								trigger.targets.addArray(event.targets);
							}
						},
					},
					trick:{
						audio:'zhtongyuan',
						trigger:{player:'useCard'},
						forced:true,
						filter:function(event,player){
							if(!player.hasMark('zhtongyuan_basic')||!player.hasMark('zhtongyuan_trick')) return false;
							var card=event.card;
							return (get.color(card,false)=='red'&&get.type(card,null,false)=='trick');
						},
						content:function(){
							trigger.directHit.addArray(game.filterPlayer());
							game.log(trigger.card,'不可被响应');
						},
					},
				},
			},
			//陆郁生
			zhente:{
				audio:2,
				trigger:{target:'useCardToTargeted'},
				logTarget:'player',
				usable:1,
				preHidden:true,
				filter:function(event,player){
					var color=get.color(event.card);
					if(player==event.player||event.player.isDead()||color=='none'||(get.mode()=='guozhan'&&color!='black')) return false;
					var type=get.type(event.card);
					return type=='basic'||type=='trick';
				},
				check:function(event,player){
					return !event.excluded.contains(player)&&get.effect(player,event.card,event.player,player)<0;
				},
				content:function(){
					'step 0'
					trigger.player.chooseControl().set('choiceList',[
						'本回合内不能再使用'+get.translation(get.color(trigger.card))+'牌',
						'令'+get.translation(trigger.card)+'对'+get.translation(player)+'无效',
					]).set('prompt',get.translation(player)+'发动了【贞特】,请选择一项').set('ai',function(){
						var player=_status.event.player;
						var target=_status.event.getParent().player;
						var card=_status.event.getTrigger().card,color=get.color(card);
						if(get.effect(target,card,player,player)<=0) return 1;
						var hs=player.countCards('h',function(card){
							return get.color(card,player)==color&&player.hasValueTarget(card,null,true);
						});
						if(!hs.length) return 0;
						if(hs>1) return 1;
						return Math.random()>0.5?0:1;
					});
					'step 1'
					if(result.index==0){
						trigger.player.addTempSkill('zhente2');
						trigger.player.storage.zhente2.add(get.color(trigger.card));
						trigger.player.markSkill('zhente2');
					}
					else trigger.excluded.add(player);
				},
			},
			zhente2:{
				mod:{
					cardEnabled:function(card,player){
						if(player.getStorage('zhente2').contains(get.color(card))) return false;
					},
					cardSavable:function(card,player){
						if(player.getStorage('zhente2').contains(get.color(card))) return false;
					},
				},
				charlotte:true,
				onremove:true,
				init:function(player,skill){
					if(!player.storage[skill]) player.storage[skill]=[];
				},
				intro:{content:'本回合内不能使用$牌'},
			},
			zhiwei:{
				audio:2,
				trigger:{
					player:['enterGame','showCharacterAfter','phaseBegin'],
					global:['phaseBefore'],
				},
				direct:true,
				filter:function(event,player,name){
					if(player.hasSkill('zhiwei2')) return false;
					if(!game.hasPlayer(current=>current!=player)) return false;
					if(get.mode()=='guozhan') return event.name=='showCharacter'&&(event.toShow.contains('gz_luyusheng')||event.toShow.contains('luyusheng'));
					return event.name!='showCharacter'&&(name!='phaseBefore'||game.phaseNumber==0);
				},
				content:function(){
					'step 0'
					player.chooseTarget('请选择【至微】的目标','选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。',true,lib.filter.notMe).set('ai',function(target){
						var att=get.attitude(_status.event.player,target);
						if(att>0) return 1+att;
						return Math.random();
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('zhiwei',target);
						player.storage.zhiwei2=target;
						player.addSkill('zhiwei2');
					}
				},
			},
			zhiwei2:{
				group:['zhiwei2_draw','zhiwei2_discard','zhiwei2_gain','zhiwei2_clear'],
				charlotte:true,
				onremove:true,
				mark:'character',
				intro:{content:'$造成伤害后你摸一张牌;$受到伤害后你弃置一张牌;你于弃牌阶段弃置牌后交给$'},
				subSkill:{
					draw:{
						audio:'zhiwei',
						trigger:{global:'damageSource'},
						forced:true,
						filter:function(event,player){
							return event.source==player.storage.zhiwei2;
						},
						logTarget:'source',
						content:function(){
							player.draw();
						},
					},
					discard:{
						audio:'zhiwei',
						trigger:{global:'damageEnd'},
						forced:true,
						filter:function(event,player){
							return event.player==player.storage.zhiwei2&&player.countCards('h',function(card){
								return lib.filter.cardDiscardable(card,player,'zhiwei2_discard');
							});
						},
						logTarget:'player',
						content:function(){
							player.discard(player.getCards('h',function(card){
								return lib.filter.cardDiscardable(card,player,'zhiwei2_discard');
							}).randomGet());
						},
					},
					gain:{
						audio:'zhiwei',
						trigger:{
							player:'loseAfter',
							global:'loseAsyncAfter',
						},
						forced:true,
						filter:function(event,player){
							if(event.type!='discard'||event.getlx===false||event.getParent('phaseDiscard').player!=player||!player.storage.zhiwei2||!player.storage.zhiwei2.isIn()) return false;
							var evt=event.getl(player);
							return evt&&evt.cards2.filterInD('d').length>0;
						},
						logTarget:function(event,player){
							return player.storage.zhiwei2;
						},
						content:function(){
							if(trigger.delay===false) game.delay();
							player.storage.zhiwei2.gain(trigger.getl(player).cards2.filterInD('d'),'gain2');
						},
					},
					clear:{
						audio:'zhiwei',
						trigger:{
							global:'die',
							player:['hideCharacterEnd','removeCharacterEnd'],
						},
						forced:true,
						filter:function(event,player){
							if(event.name=='die') return event.player==player.storage.zhiwei2;
							if(event.name=='removeCharacter') return event.toRemove=='luyusheng'||event.toRemove=='gz_luyusheng';
							return event.toHide=='luyusheng'||event.toHide=='gz_luyusheng';
						},
						content:function(){
							'step 0'
							player.removeSkill('zhiwei2');
							if(trigger.name!='die'||get.mode()!='guozhan') event.finish();
							'step 1'
							if(player.name1=='gz_luyusheng'||player.name1=='luyusheng') player.hideCharacter(0);
							if(player.name2=='gz_luyusheng'||player.name2=='luyusheng') player.hideCharacter(1);
						},
					},
				},
			},
			//华歆
			spwanggui:{
				audio:'wanggui',
				trigger:{source:'damageSource'},
				direct:true,
				usable:1,
				filter:function(event,player){
					return game.hasPlayer(function(current){
						return current.group!=player.group;
					});
				},
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt('spwanggui'),'对一名势力不同的其他角色造成1点伤害',function(card,player,target){
						return target.group!=player.group;
					}).set('ai',function(target){
						var player=_status.event.player;
						return get.damageEffect(target,player,player);
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('spwanggui',target);
						target.damage();
					}
					else player.storage.counttrigger.spwanggui--;
				},
				group:'spwanggui_draw',
				subSkill:{
					draw:{
						trigger:{player:'damageEnd'},
						direct:true,
						content:function(){
							'step 0'
							player.chooseTarget(get.prompt('spwanggui'),'令自己摸一张牌,或和一名势力相同的其他角色各摸一张牌',function(card,player,target){
								return target.group==player.group;
							}).set('ai',function(target){
								var player=_status.event.player,att=get.attitude(player,target);
								if(target!=player) att*=2;
								if(target.hasSkillTag('nogain')) att/=1.7;
								return att;
							});
							'step 1'
							if(result.bool){
								var target=result.targets[0];
								player.logSkill('spwanggui',target);
								if(player==target){
									player.draw();
									event.finish();
								}
								else{
									var list=[player,target].sortBySeat();
									game.asyncDraw(list);
								}
							}
							else event.finish();
							'step 2'
							game.delayx();
						},
					},
				},
			},
			wanggui:{
				audio:2,
				trigger:{
					player:'damageEnd',
					source:'damageSource',
				},
				direct:true,
				filter:function(event,player){
					return player.hasSkill('wanggui')&&!player.hasSkill('wanggui2');
				},
				preHidden:true,
				content:function(){
					'step 0'
					player.addTempSkill('wanggui2');
					var bool=player.isUnseen(2);
					if(bool){
						player.chooseTarget('望归:是否对一名势力不同的角色造成1点伤害?',function(card,player,target){
							return target.isEnemyOf(player);
						}).set('ai',function(target){
							var player=_status.event.player;
							return get.damageEffect(target,player,player);
						}).setHiddenSkill('wanggui');
					}
					else event.goto(2);
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('wanggui',target);
						target.damage();
					}
					event.finish();
					'step 2'
					player.chooseBool('望归:是否令所有与自己势力相同的角色各摸一张牌?').setHiddenSkill('wanggui');
					'step 3'
					if(result.bool){
						var targets=game.filterPlayer(function(current){
							return current.isFriendOf(player);
						});
						targets.sortBySeat();
						player.logSkill('wanggui',targets);
						game.asyncDraw(targets);
					}
					else event.finish();
					'step 4'
					game.delayx();
				},
			},
			wanggui2:{},
			xibing:{
				audio:2,
				trigger:{global:'useCardToPlayered'},
				filter:function(event,player){
					if(player==event.player||event.targets.length!=1||event.player.countCards('h')>=event.player.hp) return false;
					var bool=function(card){
						return (card.name=='sha'||get.type(card,false)=='trick')&&get.color(card,false)=='black';
					};
					if(!bool(event.card)) return false;
					var evt=event.getParent('phaseUse');
					if(evt.player!=event.player) return false;
					return get.mode()!='guozhan'||event.player.getHistory('useCard',function(evtx){
						return bool(evtx.card)&&evtx.getParent('phaseUse')==evt;
					})[0]==event.getParent();
				},
				logTarget:'player',
				check:function(event,player){
					var target=event.player;
					var att=get.attitude(player,target);
					var num2=Math.min(5,target.hp-target.countCards('h'));
					if(num2<=0) return att<=0;
					var num=target.countCards('h',function(card){
						return target.hasValueTarget(card,null,true);
					});
					if(!num) return att>0;
					return num>num2;
				},
				preHidden:true,
				content:function(){
					'step 0'
					var num=Math.min(5,trigger.player.hp-trigger.player.countCards('h'));
					if(num>0) trigger.player.draw(num);
					'step 1'
					trigger.player.addTempSkill('xibing2');
					player._xibing=true;
					if(get.mode()!='guozhan'||player.isUnseen(2)||trigger.player.isUnseen(2)) event.finish();
					'step 2'
					var target=trigger.player;
					var players1=[player.name1,player.name2];
					var players2=[target.name1,target.name2];
					player.chooseButton(2,[
						'是否暗置自己和'+get.translation(target)+'的各一张武将牌?',
						'<div class="text center">你的武将牌</div>',
						[players1,'character'],
						'<div class="text center">'+get.translation(target)+'的武将牌</div>',
						[players2,'character'],
					]).set('players',players1).set('complexSelect',true).set('filterButton',function(button){
						return !get.is.jun(button.link)&&(ui.selected.buttons.length==0)==(_status.event.players.contains(button.link));
					});
					'step 3'
					if(result.bool){
						var target=trigger.player;
						player.hideCharacter(player.name1==result.links[0]?0:1);
						target.hideCharacter(target.name1==result.links[1]?0:1);
						player.addTempSkill('xibing3');
						target.addTempSkill('xibing3');
					}
				},
			},
			xibing2:{
				mod:{
					cardEnabled2:function(card){
						if(get.position(card)=='h') return false;
					},
				},
			},
			xibing3:{
				ai:{nomingzhi:true},
			},
			//小虎
			remeibu:{
				audio:"meibu",
				trigger:{
					global:"phaseUseBegin",
				},
				filter:function(event,player){
					return event.player!=player&&event.player.isIn()&&event.player.inRange(player)&&player.countCards('he')>0;
				},
				direct:true,
				derivation:["rezhixi"],
				checkx:function(event,player){
					if(get.attitude(player,event.player)>=0) return false;
					return event.player.countCards('h')>event.player.hp;
				},
				content:function(){
					"step 0"
					var check=lib.skill.new_meibu.checkx(trigger,player);
					player.chooseToDiscard(get.prompt2('remeibu',trigger.player),'he').set('ai',function(card){
						if(_status.event.check) return 6-get.value(card);
						return 0;
					}).set('check',check).set('logSkill',['remeibu',trigger.player]);
					"step 1"
					if(result.bool){
						var target=trigger.player;
						var card=result.cards[0];
						player.line(target,'green');
						player.markAuto('remeibu_gain',[get.suit(card,player)]);
						player.addTempSkill('remeibu_gain');
						target.addTempSkill('rezhixi','phaseUseEnd');
					}
				},
				ai:{
					expose:0.2,
				},
				subSkill:{
					gain:{
						trigger:{global:'loseAfter'},
						forced:true,
						charlotte:true,
						popup:false,
						onremove:true,
						filter:function(event,player){
							return event.getParent(3).name=='rezhixi'&&player.getStorage('remeibu_gain').contains(get.suit(event.cards[0],event.player))&&get.position(event.cards[0])=='d';
						},
						content:function(){
							player.gain(trigger.cards[0],'gain2');
						},
					},
				},
			},
			remumu:{
				audio:"mumu",
				trigger:{
					player:"phaseUseBegin",
				},
				direct:true,
				filter:function(event,player){
					return game.hasPlayer(function(current){
						return current.countCards('e')>0;
					});
				},
				content:function(){
					'step 0'
					player.chooseTarget(get.prompt2('remumu'),function(card,player,target){
						return target.countCards('e')>0;
					}).set('ai',function(target){
						var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('e'),val=0;
						for(var i of es){
							var eff=-(get.value(i,target)-0.1)*att;
							if(eff>val) val=eff;
						}
						return eff;
					});
					'step 1'
					if(result.bool){
						var target=result.targets[0];
						event.target=target;
						player.logSkill('remumu',target);
						if(player==target) event._result={index:1};
						else{
							var str=get.translation(target);
							player.chooseControl().set('choiceList',[
								'弃置'+str+'装备区的一张牌且本阶段使用【杀】的次数上限+1',
								'获得'+str+'装备区的一张牌且本阶段使用【杀】的次数上限-1',
							]).set('ai',function(){
								var player=_status.event.player;
								if(player.countCards('hs',function(card){
									return get.name(card,player)=='sha'&&player.hasValueTarget(card);
								})<Math.max(1,player.getCardUsable('sha'))) return 1;
								return 0;
							});
						}
					}
					else event.finish();
					'step 2'
					if(result.index==0){
						player.addTempSkill('remumu3','phaseUseAfter');
						player.discardPlayerCard(target,'e',true);
					}
					else{
						player.addTempSkill('remumu2','phaseUseAfter');
						player.gainPlayerCard(target,'e',true);
					}
				},
			},
			remumu2:{
				mod:{
					cardUsable:function(card,player,num){
						if(card.name=='sha') return num-1;
					},
				},
			},
			remumu3:{
				mod:{
					cardUsable:function(card,player,num){
						if(card.name=='sha') return num+1;
					},
				},
			},
			rezhixi:{
				trigger:{
					player:"useCard",
				},
				forced:true,
				filter:function(event,player){
					return (event.card.name=='sha'||get.type(event.card)=='trick')&&player.countCards('h')>0;
				},
				content:function(){
					player.chooseToDiscard('h',true);
				},
			},
			//董白
			relianzhu:{
				audio:'lianzhu',
				enable:'phaseUse',
				usable:1,
				filter:function(event,player){
					return player.countCards('he')>0;
				},
				filterCard:true,
				discard:false,
				lose:false,
				delay:false,
				position:'he',
				filterTarget:lib.filter.notMe,
				check:function(card){
					var num=get.value(card);
					if(get.color(card)=='black'){
						if(num>=6) return 0;
						return 9-num;
					}
					else{
						return 7-num;
					}
				},
				content:function(){
					'step 0'
					player.give(cards,target);
					'step 1'
					if(get.color(cards[0],player)=='red'){
						player.draw();
						event.finish();
					}
					else{
						target.chooseToDiscard('he',2,'弃置两张牌,或令'+get.translation(player)+'摸两张牌').set('goon',get.attitude(target,player)<0).set('ai',function(card){
							if(!_status.event.goon) return -get.value(card);
							return 6-get.value(card);
						});
					}
					'step 2'
					if(!result.bool) player.draw(2);
				},
				ai:{
					order:3,
					expose:0.2,
					result:{
						target:function(player,target){
							if(ui.selected.cards.length&&get.color(ui.selected.cards[0])=='red'){
								if(target.countCards('h')<player.countCards('h')) return 1;
								return 0.5;
							}
							return -1;
						}
					}
				}
			},
			rexiahui:{
				audio:'xiahui',
				mod:{
					ignoredHandcard:function(card,player){
						if(get.color(card,player)=='black') return true;
					},
					cardDiscardable:function(card,player,name){
						if(name=='phaseDiscard'&&get.color(card,player)=='black') return false;
					}
				},
				trigger:{global:'phaseEnd'},
				forced:true,
				logTarget:'player',
				filter:function(event,player){
					var target=event.player;
					return target!=player&&target.countCards('h',function(card){
						return card.hasGaintag('rexiahui');
					})==0&&target.getHistory('lose',function(evt){
						for(var i in evt.gaintag_map){
							if(evt.gaintag_map[i].contains('rexiahui')) return true;
						}
					}).length>0;
				},
				content:function(){
					trigger.player.loseHp();
				},
				group:'rexiahui_gain',
				subSkill:{
					gain:{
						trigger:{global:'gainEnd'},
						forced:true,
						popup:false,
						filter:function(event,player){
							if(player==event.player) return false;
							var evt=event.getl(player);
							return evt&&evt.cards2&&evt.cards2.filter(function(card){
								return get.color(card,player)=='black';
							}).length>0;
						},
						content:function(){
							trigger.player.addSkill('rexiahui_block');
							var cards=trigger.getl(player).cards2.filter(function(card){
								return get.color(card,player)=='black';
							});
							trigger.player.addGaintag(cards,'rexiahui');
						},
					},
					block:{
						mod:{
							cardEnabled2:function(card){
								if(get.itemtype(card)=='card'&&card.hasGaintag('rexiahui')) return false;
							},
							cardDiscardable:function(card){
								if(card.hasGaintag('rexiahui')) return false;
							},
						},
						charlotte:true,
						forced:true,
						popup:false,
						trigger:{player:'changeHp'},
						filter:function(event,player){
							return event.num<0;
						},
						content:function(){
							player.removeSkill('rexiahui_block');
						},
						onremove:function(player){
							player.removeGaintag('rexiahui');
						},
					},
				},
			},
			//周善
			dcmiyun:{
				audio:2,
				trigger:{global:'roundStart'},
				forced:true,
				direct:true,
				group:'dcmiyun_lose',
				content:function(){
					'step 0'
					if(player.hasCard(card=>card.hasGaintag('dcmiyun_tag'),'h')){
						player.chooseCardTarget({
							prompt:'密运:将包括“安”在内的任意张手牌交给一名其他角色',
							forced:true,
							filterTarget:lib.filter.notMe,
							selectCard:[1,Infinity],
							filterOk:function(){
								for(var card of ui.selected.cards){
									if(card.hasGaintag('dcmiyun_tag')) return true;
								}
								return false;
							},
							goon:game.hasPlayer(current=>player!=current&&get.attitude(player,current)>0),
							ai1:function(card){
								if(get.itemtype(card)!='card') return 0;
								if(card.hasGaintag('dcmiyun_tag')) return 100;
								if(_status.event.goon) return 8-get.value(card);
								return -get.value(card);
							},
							ai2:function(target){
								return get.attitude(_status.event.player,target);
							}
						});
					}
					else event.goto(3);
					'step 1'
					if(result.bool){
						var target=result.targets[0],cards=result.cards;
						player.logSkill('dcmiyun',target);
						player.give(cards,target);
					}
					else event.goto(3);
					'step 2'
					player.drawTo(player.maxHp);
					'step 3'
					if(game.hasPlayer(current=>current!=player&&current.countGainableCards(player,'he'))){
						player.chooseTarget('密运:获得一名其他角色的一张牌,称为“安”',true,(card,player,target)=>{
							return target!=player&&target.countGainableCards(player,'he');
						}).set('ai',target=>{
							return get.effect(target,{name:'shunshou'},_status.event.player,_status.event.player);
						})
					}
					else event.finish();
					'step 4'
					if(result.bool){
						var target=result.targets[0];
						player.logSkill('dcmiyun',target);
						player.gainPlayerCard(target,true,'visibleMove').chooseonly=true;
					}
					else event.finish();
					'step 5'
					if(result.bool){
						player.gain(result.cards).gaintag.add('dcmiyun_tag');
					}
				},
				mod:{
					aiValue:function(player,card,num){
						if(get.itemtype(card)=='card'&&card.hasGaintag('dcmiyun_tag')) return Math.abs(num)*10;
					},
					aiUseful:function(){
						return lib.skill.dcmiyun.mod.aiValue.apply(this,arguments);
					},
					aiOrder:function(player,card,num){
						if(get.itemtype(card)=='card'&&card.hasGaintag('dcmiyun_tag')) return 0;
					}
				},
				subSkill:{
					lose:{
						audio:'dcmiyun',
						trigger:{
							player:'loseAfter',
							global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
						},
						forced:true,
						filter:function(event,player){
							if(event.getParent().name=='dcmiyun') return false;
							var evt=event.getl(player);
							if(!evt||!evt.cards2||!evt.cards2.length) return false;
							if(event.name=='lose'){
								for(var i in event.gaintag_map){
									if(event.gaintag_map[i].contains('dcmiyun_tag')) return true;
								}
								return false;
							}
							return player.hasHistory('lose',evt=>{
								if(event!=evt.getParent()) return false;
								for(var i in evt.gaintag_map){
									if(evt.gaintag_map[i].contains('dcmiyun_tag')) return true;
								}
								return false;
							});
						},
						content:function(){
							player.loseHp();
						}
					}
				}
			},
			dcdanying:{
				audio:2,
				mod:{
					aiOrder:function(player,card,num){
						if(num<=0 || card.name!=='sha'&&card.name!=='shan' || !player.hasCard(i=>i.hasGaintag('dcmiyun_tag'),'h')) return;
						return Math.max(0.12,num/25);
					}
				},
				locked:false,
				enable:['chooseToUse','chooseToRespond'],
				usable:1,
				hiddenCard:function(player,name){
					if(!_status.connectMode&&!player.hasCard(card=>card.hasGaintag('dcmiyun_tag'),'h')) return false;
					return name=='sha'||name=='shan';
				},
				filter:function(event,player){
					if(event.type=='wuxie'||!player.hasCard(card=>card.hasGaintag('dcmiyun_tag'),'h')) return false;
					for(var name of ['sha','shan']){
						if(event.filterCard({name:name,isCard:true},player,event)) return true;
					}
					return false;
				},
				chooseButton:{
					dialog:function(event,player){
						var vcards=[];
						for(var name of ['sha','shan']){
							var card={name:name,isCard:true};
							if(event.filterCard(card,player,event)) vcards.push(['基本','',name]);
						}
						var dialog=ui.create.dialog('胆迎',[vcards,'vcard'],'hidden');
						dialog.direct=true;
						return dialog;
					},
					backup:function(links,player){
						return {
							filterCard:()=>false,
							selectCard:-1,
							viewAs:{
								name:links[0][2],
								isCard:true,
							},
							popname:true,
							precontent:function(){
								player.logSkill('dcdanying');
								player.showCards(player.getCards('h',card=>card.hasGaintag('dcmiyun_tag')),get.translation(player)+'的“安”');
								player.addTempSkill('dcdanying_discard');
							},
						}
					},
					prompt:function(links,player){
						return '展示“安”,然后视为使用【'+get.translation(links[0][2])+'】';
					}
				},
				ai:{
					order:function(item,player){
						var o1=get.order({name:'sha'}),o2=get.order({name:'shan'});
						if(player.countCards('h')>3||player==_status.currentPhase) return Math.max(o1,o2)+0.1;
						return Math.min(o1,o2)-0.1;
					},
					respondSha:true,
					respondShan:true,
					skillTagFilter:function(player,tag,arg){
						if(!player.hasCard(card=>card.hasGaintag('dcmiyun_tag'),'h')) return false;
					},
					result:{
						player:1
					}
				},
				subSkill:{
					discard:{
						trigger:{target:'useCardToTargeted'},
						charlotte:true,
						forced:true,
						filter:function(event,player){
							return player.countDiscardableCards(event.player,'he');
						},
						content:function(){
							trigger.player.discardPlayerCard(player,'he',true);
							player.removeSkill('dcdanying_discard');
						},
						ai:{
							effect:{
								target:function(card,player,target){
									if(_status._dcdanying_aiChecking) return;
									_status._dcdanying_aiChecking=true;
									let eff=get.effect(target,{name:'guohe_copy2'},player,player);
									delete _status._dcdanying_aiChecking;
									return [1,get.sgn(eff)];
								}
							}
						}
					}
				},
			},
			//蔡阳
			dcxunji:{
				audio:2,
				enable:'phaseUse',
				usable:1,
				filterTarget:function(card,player,target){
					return target!=player&&!player.getStorage('dcxunji_effect').contains(target);
				},
				content:function(){
					player.markAuto('dcxunji_effect',[target]);
					player.addTempSkill('dcxunji_effect',{player:'die'});
					target.markSkill('dcxunji_mark');
				},
				ai:{
					order:1,
					result:{
						player:function(player,target){
							if(player.hp<2) return 0;
							return get.effect(target,{name:'juedou'},player,player);
						},
					},
				},
				subSkill:{
					mark:{
						marktext:'嫉',
						intro:{content:'你已经被盯上了!'},
					},
					effect:{
						audio:'dcxunji',
						charlotte:true,
						trigger:{global:'phaseJieshuBegin'},
						forced:true,
						popup:false,
						onremove:true,
						filter:function(event,player){
							return player.getStorage('dcxunji_effect').contains(event.player);
						},
						content:function(){
							'step 0'
							var target=trigger.player;
							event.target=target;
							if(target.getHistory('sourceDamage').length>0&&player.canUse('juedou',target)){
								player.useCard({name:'juedou',isCard:true},target,'dcxunji_effect');
							}
							'step 1'
							player.unmarkAuto('dcxunji_effect',[target]);
							if(!player.storage.dcxunji_effect.length) player.removeSkill('dcxunji_effect');
						},
						group:'dcxunji_loseHp',
					},
					loseHp:{
						trigger:{source:'damageSource'},
						forced:true,
						popup:false,
						filter:function(event,player){
							return event.card&&event.card.name=='juedou'&&event.getParent().skill=='dcxunji_effect';
						},
						content:function(){
							player.loseHp(trigger.num);
						},
					},
				},
			},
			dcjiaofeng:{
				audio:2,
				trigger:{source:'damageBegin1'},
				forced:true,
				usable:1,
				filter:function(event,player){
					return player.isDamaged()&&!player.getHistory('sourceDamage').length;
				},
				content:function(){
					var num=player.getDamagedHp();
					if(num>0) player.draw();
					if(num>1) trigger.num++;
					if(num>2) player.recover();
				},
			},
			//夏侯杰
			liedan:{
				audio:2,
				trigger:{global:'phaseZhunbeiBegin'},
				forced:true,
				filter:function(event,player){
					return (player!=event.player||player.countMark('liedan')>4)&&!player.hasSkill('zhuangdan_mark');
				},
				logTarget:'player',
				content:function(){
					if(player==trigger.player){
						player.die();
						return;
					}
					var num=0;
					if(player.hp>trigger.player.hp) num++;
					if(player.countCards('h')>trigger.player.countCards('h')) num++;
					if(player.countCards('e')>trigger.player.countCards('e')) num++;
					if(num){
						player.draw(num);
						if(num==3&&player.maxHp<8) player.gainMaxHp();
					}
					else{
						player.addMark('liedan',1);
						player.loseHp();
					}
				},
				intro:{content:'mark'},
			},
			zhuangdan:{
				audio:2,
				trigger:{global:'phaseEnd'},
				forced:true,
				filter:function(event,player){
					return player!=event.player&&player.isMaxHandcard(true);
				},
				content:function(){
					player.addTempSkill('zhuangdan_mark',{player:'phaseEnd'})
				},
			},
			zhuangdan_mark:{
				mark:true,
				marktext:'胆',
				intro:{content:'我超勇的'},
			},
			//乌巢酒仙
			recangchu:{
				audio:2,
				trigger:{global:'phaseBefore',player:'enterGame'},
				marktext:'粮',
				forced:true,
				filter:function(event,player){
					if(event.name=='phase'&&game.phaseNumber!=0) return false;
					return player.countMark('recangchu')<game.countPlayer();
				},
				content:function(){
					player.addMark('recangchu',Math.min(3,game.countPlayer()-player.countMark('recangchu')));
				},
				intro:{content:'mark',name:'粮'},
				mod:{
					maxHandcard:function(player,num){
						return num+player.countMark('recangchu');
					},
				},
				group:['recangchu2','recangchu3'],
			},
			recangchu2:{
				audio:'recangchu',
				trigger:{
					player:'gainAfter',
					global:'loseAsyncAfter',
				},
				forced:true,
				usable:1,
				filter:function(event,player){
					return player!=_status.currentPhase&&player.countMark('recangchu')<game.countPlayer()&&event.getg(player).length>0;
				},
				content:function(){
					player.addMark('recangchu',1);
				},
			},
			recangchu3:{
				audio:'recangchu',
				trigger:{global:'die'},
				forced:true,
				filter:function(event,player){
					return player.countMark('recangchu')>game.countPlayer();
				},
				content:function(){
					player.removeMark('recangchu',player.countMark('recangchu')-game.countPlayer());
				},
			},
			reliangying:{
				audio:2,
				trigger:{player:'phaseDiscardBegin'},
				direct:true,
				content:function(){
					'step 0'
					var map={};
					var list=[];
					for(var i=1;i<=player.countMark('recangchu');i++){
						var cn=get.cnNumber(i,true);
						map[cn]=i;
						list.push(cn);
					}
					list.push('cancel2');
					event.map=map;
					player.chooseControl(list).set('prompt',get.prompt('reliangying')).set('prompt2','摸至多'+get.cnNumber(player.countMark('recangchu'))+'张牌,然后交给等量的角色各一张牌').set('ai',function(){
						var player=_status.event.player;
						var num=Math.min(player.countMark('recangchu'),game.countPlayer(function(current){
							return get.attitude(player,current)>0;
						}));
						if(num>0) return get.cnNumber(num,true);
						return 'cancel2';
					});
					'step 1'
					if(result.control=='cancel2'){event.finish();return;}
					player.logSkill('reliangying');
					var num=event.map[result.control]||1;
					event.num=num;
					player.draw(num);
					'step 2'
					var num=Math.min(event.num,player.countCards('he'),game.countPlayer(function(target){
						return target!=player;
					}));
					if(num){
						player.chooseCardTarget({
							prompt:'将'+get.cnNumber(num)+'张牌交给其他角色',
							prompt2:'操作提示:先按顺序选中所有要给出的牌,然后再按顺序选择等量的目标角色。可少选一张牌,并将此牌留给自己',
							selectCard:[num-1,num],
							selectTarget:function(){
								return ui.selected.cards.length;
							},
							filterTarget:function(card,player,target){
								return target!=player;
							},
							filterOk:function(){
								return ui.selected.cards.length==ui.selected.targets.length;
							},
							complexSelect:true,
							position:'he',
							ai1:function(card){
								if(game.countPlayer(function(current){
									return target!=_status.event.player&&get.attitude(_status.event.player,target)>0;
								})<=ui.selected.cards.length) return 0;
								if(card.name=='shan') return 1;
								return Math.random();
							},
							ai2:function(target){
								if(!target) return 1;
								return Math.sqrt(5-Math.min(4,target.countCards('h')))*get.attitude(_status.event.player,target);
							},
							forced:true,
						});
					}
					else event.finish();
					'step 3'
					if(result.bool&&result.cards.length>0){
						var list=[];
						for(var i=0;i<result.targets.length;i++){
							var target=result.targets[i];
							var card=result.cards[i];
							list.push([target,card]);
							player.line(target);
						}
						game.loseAsync({
							gain_list:list,
							player:player,
							cards:result.cards,
							giver:player,
							animate:'giveAuto',
						}).setContent('gaincardMultiple');
					}
				},
			},
			reshishou:{
				audio:2,
				trigger:{player:['useCard','damageEnd']},
				forced:true,
				filter:function(event,player){
					if(!player.countMark('recangchu')) return false;
					return (event.name=='damage')?event.hasNature('fire'):(event.card&&event.card.name=='jiu');
				},
				content:function(){
					player.removeMark('recangchu',Math.min(player.countMark('recangchu'),trigger.num||1));
				},
				group:'reshishou2',
			},
			reshishou2:{
				audio:'reshishou',
				trigger:{player:'phaseZhunbeiBegin'},
				forced:true,
				filter:function(event,player){
					return !player.countMark('recangchu');
				},
				content:function(){
					player.loseHp();
				},
			},
			//曹性
			cxliushi:{
				audio:2,
				enable:'phaseUse',
				filter:function(event,player){
					return player.countCards('he',{suit:'heart'})>0;
				},
				filterCard:{suit:'heart'},
				position:'he',
				filterTarget:function(card,player,target){
					return player.canUse('sha',target,false);
				},
				check:function(card){
					var player=_status.event.player;
					var next=player.getNext();
					var att=get.attitude(player,next);
					if(att>0){
						var js=next.getCards('j');
						if(js.length) return get.judge(js[0])+10-get.value(card);
						return 9-get.value(card)
					}
					return 6-get.value(card);
				},
				discard:false,
				prepare:'throw',
				loseTo:'cardPile',
				visible:true,
				insert:true,
				content:function(){
					game.log(player,'将',cards,'置于牌堆顶'); 
					player.useCard({name:'sha',isCard:true},false,targets).card.cxliushi=true;
				},
				group:'cxliushi_damage',
				subSkill:{
					damage:{
						trigger:{source:'damageSource'},
						forced:true,
						popup:false,
						filter:function(event,player){
							return event.card&&event.card.cxliushi==true&&event.player.isIn()&&event.getParent(3).name=='cxliushi';
						},
						content:function(){
							trigger.player.addMark('cxliushi2',1);
							trigger.player.addSkill('cxliushi2');
						},
					},
				},
				ai:{
					order:function(){
						return get.order({name:'sha'})-0.4;
					},
					result:{
						target:function(player,target){
							var eff=get.effect(target,{name:'sha'},player,target);
							var damageEff=get.damageEffect(target,player,player);
							if(eff>0) return damageEff>0?0:eff;
							if(target.hasSkill('bagua_skill')||target.hasSkill('rw_bagua_skill')||target.hasSkill('bazhen')) return 0;
							return eff;
						},
					},
				},
			},
			cxliushi2:{
				mod:{
					maxHandcard:function(player,num){
						return num-player.countMark('cxliushi2');
					},
				},
				onremove:true,
				charlotte:true,
				intro:{
					name2:'流',
					content:'手牌上限-#',
				},
			},
			zhanwan:{
				audio:2,
				trigger:{global:'phaseDiscardEnd'},
				forced:true,
				filter:function(event,player){
					return event.player.hasSkill('cxliushi2')&&event.player.getHistory('lose',function(evt){
						if(evt.type=='discard'&&evt.getParent('phaseDiscard')==event) return true;
					}).length>0;
				},
				logTarget:'player',
				content:function(){
					trigger.player.removeSkill('cxliushi2');
					var num=0;
					trigger.player.getHistory('lose',function(evt){
						if(evt.type=='discard'&&evt.getParent('phaseDiscard')==trigger) num+=evt.cards2.length;
					});
					player.draw(num);
				},
			},
			//说出吾名吓汝一跳
			xuxie:{
				audio:2,
				trigger:{player:'phaseUseBegin'},
				logTarget:function(event,player){
					return game.filterPlayer(function(current){
						return get.distance(player,current)<=1;
					}).sortBySeat();
				},
				check:function(event,player){
					if(player.isHealthy()) return false;
					var list=game.filterPlayer(function(current){
						return get.distance(player,current)<=1;
					});
					var draw=0;
					var discard=0;
					var num=2/player.getDamagedHp();
					while(list.length){
						var target=list.shift();
						var att=get.attitude(player,target);
						if(att>0){
							draw++;
							if(target.countDiscardableCards(player,'he')>0) discard--;
						}
						if(att==0){
							draw--;
							if(target.countDiscardableCards(player,'he')>0) discard--;
						}
						if(att<0){
							draw--;
							if(target.countDiscardableCards(player,'he')>0) discard++;
						}
					}
					return draw>=num||discard>=num;
				},
				content:function(){
					'step 0'
					player.loseMaxHp();
					'step 1'
					var targets=game.filterPlayer(function(current){
						return get.distance(player,current)<=1;
					}).sortBySeat();
					if(!targets.length) event.finish();
					else{
						event.targets=targets;
						player.chooseControl().set('choiceList',[
							'弃置'+get.translation(targets)+'的各一张牌',
							'令'+get.translation(targets)+'各摸一张牌',
						]).set('ai',function(){
							var player=_status.event.player;
							var list=_status.event.getParent().targets.slice(0);
							var draw=0;
							var discard=0;
							while(list.length){
								var target=list.shift();
								var att=get.attitude(player,target);
								if(att>0){
									draw++;
									if(target.countDiscardableCards(player,'he')>0) discard--;
								}
								if(att<0){
									draw--;
									if(target.countDiscardableCards(player,'he')>0) discard++;
								}
							}
							if(draw>discard) return 1;
							return 0;
						});
					}
					'step 2'
					event.index=result.index;
					if(result.index==1){
						game.asyncDraw(targets);
					}
					else event.goto(4);
					'step 3'
					game.delay();
					event.finish();
					'step 4'
					var target=targets.shift();
					if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true);
					if(targets.length) event.redo();
				},
				group:'xuxie_add',
			},
			xuxie_add:{
				audio:'xuxie',
				trigger:{player:'phaseUseEnd'},
				forced:true,
				locked:false,
				filter:function(event,player){
					return game.hasPlayer(function(current){
						return current.maxHp>player.maxHp;
					});
				},
				content:function(){
					player.gainMaxHp();
					player.chooseDrawRecover(2,true);
				},
			},
			//新潘凤
			xinkuangfu:{
				enable:'phaseUse',
				usable:1,
				audio:2,
				delay:false,
				filterTarget:function(card,player,target){
					if(player==target) return player.countCards('e',function(card){
						return lib.filter.cardDiscardable(card,player);
					})>0;
					return target.countDiscardableCards(player,'e')>0;
				},
				filter:function(event,player){
					return game.hasPlayer(function(current){
						return current.countCards('e')>0;
					});
				},
				content:function(){
					'step 0'
					if(player==target) player.chooseToDiscard('e',true);
					else player.discardPlayerCard(target,'e',true);
					'step 1'
					player.chooseUseTarget('sha',true,false,'nodistance');
					'step 2'
					var bool=game.hasPlayer2(function(current){
						return current.getHistory('damage',function(evt){
							return evt.getParent('xinkuangfu')==event;
						}).length>0
					});
					if(player==target&&bool) player.draw(2);
					else if(player!=target&&!bool) player.chooseToDiscard('h',2,true);
				},
				ai:{
					order:function(){
						return get.order({name:'sha'})+0.3;
					},
					result:{
						target:function(player,target){
							var att=get.attitude(player,target);
							var max=0;
							var min=1;
							target.countCards('e',function(card){
								var val=get.value(card,target);
								if(val>max) max=val;
								if(val<min) min=val;
							});
							if(att>0&&min<=0) return target.hasSkillTag('noe')?3:1;
							if(att<=0&&max>0){
								if(target.hasSkillTag('noe')) return max>6?(-max/3):0;
								return -max;
							}
							if(player===target&&!player.hasSha()){
								let ph=player.countCards('h');
								if(game.hasPlayer(i=>{
									if(!player.canUse('sha',i,true,true)||get.effect(i,{name:'sha'},player,player)<=0) return false;
									return !ph||!i.mayHaveShan(player,'use');
								})) return 1;
							}
							return 0;
						},
					},
				},
			},
		},
		card:{
		},
		characterIntro:{
			xingdaorong:'邢道荣是《三国演义》中虚构的人物,为零陵太守刘度手下武将,被评价有万夫不当之勇,于《三国演义》第五十二回登场,被赵云刺死。',
			caoxing:'曹性,东汉末年吕布部将,史载他曾与身为自己上司的反叛者郝萌交战,并砍去郝萌一臂,受到吕布的嘉奖。在罗贯中所著古典小说《三国演义》中,也有关于曹性箭射夏侯惇左目的描述,而曹性也随即被暴怒的夏侯惇所杀。在穿越小说《三国之银河射手》中,主角穿越成为曹性,经过一番闯荡之后,被封为“银河射手”。',
			xiahoujie:'夏侯杰(?—208年),是罗贯中的小说《三国演义》中曹操的部将,征战时常常带在身边。在第42回长坂坡之战中,张飞大吼,从马儿受惊跌下马来而死。',
			huaxin:'华歆(157年-232年1月30日),字子鱼,汉族。平原郡高唐县人(今山东省高唐县)。汉末至三国曹魏初年名士、重臣。华歆早年拜太尉陈球为师,与卢植、郑玄、管宁等为同门,又与管宁、邴原共称一龙,华歆为龙头。汉灵帝时华歆被举为孝廉,任郎中,因病去官。又被大将军何进征召为尚书郎。后任豫章太守,甚得民心。孙策率军南下,华歆举郡投降,被奉为上宾。官渡之战时,被征为议郎、参司空军事。入为尚书、侍中,又代荀彧为尚书令。丞相曹操讨孙权时,授华歆为军师。后为魏王国的御史大夫。曹丕即王位,拜华歆为相国,封安乐乡侯。曹魏建立后,其相国职名改称司徒。魏明帝即位,升任太尉,晋封博平侯。太和五年十二月(232年1月),华歆去世,年七十五,谥号“敬”。有文集三十卷,今佚失,其余见《全三国文》。',
			luyusheng:'陆郁生(?年-?),三国时期吴国官员陆绩之女。陆郁生的父亲陆绩是吴郡公认的才子,又是当时吴郡陆氏的领袖。陆绩赴任担任郁林太守,遂取此名。陆郁生年少的时候就定下坚贞的志向。建安二十四年(219年),陆绩早亡,她与两个兄弟陆宏、陆睿当时都只有几岁,一起返回吴县,被他们的从兄陆瑁接回抚养。13周岁的陆郁生嫁给同郡出身的张白为妻。出嫁3个月后,张白因为其兄张温一族的案件遭到连坐,被处以流刑,后死于流放地,陆郁生成为了寡妇,其后公开宣言不再改嫁,困难于生计但拒绝了所有提亲,在艰苦中从未停止服侍、照顾张白的姐妹。事情传到朝廷,皇帝褒奖陆郁生,号其为“义姑”。她的表侄姚信在文集中称赞她的义举。',
			fengxi:'冯熙(?—223年),字子柔,颍川郡父城县(今河南省平顶山市宝丰县)人。汉末三国时期吴国官员,东汉初年名将冯异的后人。孙权担任车骑将军时,冯熙担任其幕府东曹掾,后迁立信都尉。刘备去世时,奉命进入蜀汉吊丧,返回后,任中大夫。后奉命出使魏国,受到魏文帝曹丕和尚书令陈群招揽,宁死不从,自尽未果。孙权闻之流泪,称其“东吴苏武”。最终在曹魏死去。',
			heyan:'何晏(?-249年),字平叔。南阳郡宛县(今河南省南阳市)人。三国时期曹魏大臣、玄学家,东汉大将军何进之孙(一称何进弟何苗之孙)。何晏之父早逝,司空曹操纳其母尹氏为妾,他因而被收养,为曹操所宠爱。少年时以才秀知名,喜好老庄之学,娶曹操之女金乡公主。魏文帝在位时,未被授予官职。魏明帝认为何晏虚浮不实,也只授其冗官之职。大将军曹爽秉政时,何晏与之共事,得以累官至侍中、吏部尚书,典选举,封列侯。高平陵之变后,与大将军曹爽同为太傅司马懿所杀,被夷灭三族。何晏有文集十一卷,并曾与郑冲等共撰《论语集解》,今已佚。钟嵘《诗品》称“平叔鸿鹄之篇,风规见矣。”将何晏诗列入中品。袁宏在《名士传》中将何晏等称为正始名士。他与夏侯玄、王弼等倡导玄学,竞事清谈,遂开一时风气,为魏晋玄学的创始者之一。',
			zhaoyan:'赵嫣,生卒年不详。东吴方士(一说是丞相)赵达之妹,吴大帝孙权之妃,人称赵夫人。她心灵手巧,多才多艺,有“三绝”之称。孙权曾经想要找擅长绘画之人绘制山川地势军阵之图。赵达举荐了自己的妹妹。赵嫣认为水墨容易褪色,不方便在军旅之中保存。自己擅长刺绣,可以在锦帛上绣出孙权所需之图。待制作完成后献于孙权,只见方帛锦绣之上有五岳河海城邑行阵之形,孙权大为赞叹。时人谓之“针绝”。除刺绣之外,赵嫣还擅长绘画织锦,她能用彩丝织成云霞龙蛇之锦,大则盈尺,小则方寸,宫中谓之“机绝”。孙权在昭阳宫居住之时,饱受暑气之扰,以紫绡制成帷帐缓解暑气。赵嫣认为此物不足为贵,她削下自己的头发剖为细丝,以郁夷国出产的神胶连接,花了数月功夫将其制成一顶幔帐,打开之后薄如蝉翼,轻赛寒烟。放下帐帷能笼罩一丈之地,帐内清风自生暑意顿消。收起来则可纳入枕中,携带方便。时人谓之“丝绝”。',
			wangtao:'王桃是在《花关索传》中登场的虚拟人物,盗贼王令公的两个女儿之一,王悦的姐姐,与妹妹都是关索之妻。姐妹俩原为卢塘寨山贼,以武艺与美貌而闻名,被众多男性求婚却皆不与理睬。她们在关索回西川认父途中与关索交手时不敌,因意气投合而一齐下嫁。虽为架空之人物,但四川省内有记述夫妻三人共同守护葭萌关一事,民间亦流传如夫妻三人曾共同参与诸葛亮之南蛮征伐等轶事。',
			wangyue:'王悦是在《花关索传》中登场的虚拟人物,盗贼王令公的两个女儿之一,王桃的妹妹,与姐姐都是关索之妻。姐妹俩原为卢塘寨山贼,以武艺与美貌而闻名,被众多男性求婚却皆不与理睬。她们在关索回西川认父途中与关索交手时不敌,因意气投合而一齐下嫁。虽为架空之人物,但四川省内有记述夫妻三人共同守护葭萌关一事,民间亦流传如夫妻三人曾共同参与诸葛亮之南蛮征伐等轶事。',
			zhangxuan:'张嫙,三国时期孙吴将领张布之女,孙皓后妃张媱的姐姐。初为卫尉冯朝之子冯纯的妻子,后为孙皓后妃,册封左夫人。因孙皓诛灭张布,张媱口吐怨言,被暴怒的孙皓下令棒杀。后来孙皓怀念她的容颜,于是询问侍从:“张布还有女儿吗?”侍从回答:“张布的大女儿嫁给了已故卫尉冯朝的儿子冯纯。”于是孙皓夺走了冯纯的妻子张嫙,纳入宫中。孙皓颇为宠爱张嫙,册封其为左夫人。昼夜嬉戏,纸醉金迷,不理朝政。后来张嫙也去世了,孙皓非常悲伤,下令以最高的规格埋葬张嫙。因为悲伤过度,孙皓一度半年都不出宫门,甚至由于葬礼太过奢华被宫外之人认为孙皓已经死了。',
			tengyin:'滕胤(?-256年),字承嗣,三国时期吴国重臣,北海郡剧县(今山东省昌乐县)人。滕胤仪表堂堂,少时有节操,后娶公主为妻。孙权称王后,滕胤被封都亭侯。其后历任丹杨太守、吴郡太守、会稽太守。孙亮继位后,出任太常、卫将军。诸葛恪被杀后,群臣推举滕胤为司徒,但遭权臣孙峻党羽所阻挠,滕胤也有意避嫌,最终只晋爵高密侯。孙峻死后,由其堂弟孙綝执政。滕胤的连襟、骠骑将军吕据联系北伐前线诸将推举滕胤为相,希望分割孙綝权力,但并未成功,滕胤被改任大司马,镇守武昌。不久,滕胤与吕据密谋推翻孙綝,因计划泄露而被杀,惨遭灭族。孙綝被杀后,景帝孙休为滕胤平反。',
			zhangyao:'张美人,三国东吴末帝孙皓后妃,张布之女。另有张布女,张美人姊被孙皓立为左夫人。《吴书五妃嫔传第五》:江表传曰:皓以张布女为美人,有宠,皓问曰:“汝父所在?”答曰:“贼以杀之。”皓大怒,棒杀之。后思其颜色,使巧工刻木作美人形象,恒置座侧。问左右:“布复有女否?”答曰:“布大女适故卫尉冯朝子纯。”即夺纯妻入宫,大有宠,拜为左夫人,昼夜与夫人房宴,不听朝政,使尚方以金作华燧、步摇、假髻以千数。令宫人著以相扑,朝成夕败,辄出更作,工匠因缘偷盗,府藏为空。会夫人死,皓哀愍思念,葬于苑中,大作冢,使工匠刻柏作木人,内冢中以为兵卫,以金银珍玩之物送葬,不可称计。已葬之后,皓治丧於内,半年不出。国人见葬太奢丽,皆谓皓已死,所葬者是也。皓舅子何都颜状似皓,云都代立。临海太守奚熙信讹言,举兵欲还诛都,都叔父植时为备海督,击杀熙,夷三族,讹言乃息,而人心犹疑。',
			xiahoulingnv:'夏侯令女,字令女,名不详。生卒年不详,三国时期人物。夏侯文宁之女(《三国演义》中为夏侯令之女),曹文叔之妻。其事迹见于《三国志·魏书·诸夏侯曹传第九》裴松之注引皇甫谧《列女传》。而在《三国演义》中,由于作者断句错误,便认为“夏侯令女”是“夏侯令之女”之意(见《三国演义》第107回:“乃夏侯令女也”,由其语气可推断)。',
			lvlingqi:'吕玲绮,虚拟人物,源于日本光荣株式会社(现光荣特库摩公司)旗下游戏《真·三国无双》系列,初次登场于《真三国无双7:猛将传》。吕布的女儿,寂寥而威风凛凛的战姬,发挥着不亚于父亲的武艺,非常勇敢地身先士卒立于前线。虽然有着能够直面困难的坚强意志,却由于过去的经历而有着非常害怕孤独的一面。',
			liuyong:'刘永,字公寿,涿郡涿县(今河北涿州)人,三国时期蜀汉昭烈帝刘备之子,蜀汉后主刘禅之弟。章武元年(221年)六月,封鲁王。建兴八年(230年),改封甘陵王。咸熙元年(264年),蜀汉灭亡,刘永被迁往洛阳,被任命为奉车都尉,封乡侯。',
			wanniangongzhu:'刘氏(生卒年不详),河南郡雒阳县(今河南省洛阳市)人,汉灵帝刘宏之女,汉少帝刘辩与汉献帝刘协的姐妹,封万年公主。',
			mamidi:'马日磾(?~194年),字翁叔。扶风茂陵(今陕西省兴平市)人。东汉中后期大臣,经学大师马融之族孙(一作族子)。马日磾年轻时即继承马融学说,以才学入仕。曾任谏议大夫,与蔡邕、卢植等人东观典校官藏的《五经》记传,并参与续写《东观汉记》。后历任射声校尉、太尉、太常等职。初平三年(192年),掌权的李傕任命马日磾为太傅、录尚书事,与太仆赵岐共同出使关东。他到寿春袁术处后,对其多有所求,遭袁术轻鄙,袁术遂夺其符节,来随意征辟将士,并企图强迫马日磾任其军师,马日磾求去不能,忧愤发病,兴平元年(194年),卒于寿春。',
			guanning:'管宁(158年—241年),字幼安。北海郡朱虚县(今山东省安丘、临朐东南)人。汉末三国时期著名隐士。管宁与华歆、邴原并称为“一龙”。汉末天下大乱时,与邴原及王烈等人避于辽。在当地只谈经典而不问世事,做讲解《诗经》《书经》,谈祭礼、整治威仪、陈明礼让等教化工作,人们都很乐于接受他的教导。直到魏文帝黄初四年(公元223年)才返乡,辽东太守公孙恭亲自送别。此后曹魏几代帝王数次征召管宁,他都没有应命。正始二年(公元241年),管宁逝世,年八十四。著有《氏姓论》。',
			tenggongzhu:'滕公主,名讳不详,三国人物,吴大帝孙权之女。一说为养女,生父为孙权堂弟孙奂。黄武年间(222年—228年),以公主身份下嫁功臣滕胄之子滕胤,当时滕胤年仅20岁。滕胤皮肤白皙,容貌俊美,每逢入朝大臣们没有不惊叹称羡的。滕胤仕官后,上书言及时局,又对政策多有匡弼。孙权对公主也特别宠爱,因为滕胤的缘故,又格外增加对公主的赏赐,又几次探望慰劳。少帝孙亮时期,孙綝以宗室身份独揽大权作恶多端,引发群臣不满。五凤三年(256年)滕胤与连襟吕据密谋推翻孙綝,事败遭到夷三族 。公主则被亲兄孙壹救出,携其逃亡曹魏。',
			caimaozhangyun:'蔡瑁,字德珪,生卒年不详。襄阳蔡州人,东汉末年荆州名士。少年时与曹操交好。初平元年(公元190年),刘表为荆州刺史。时宗贼猖獗,蔡瑁协助刘表诛杀宗贼,平定荆州之地,蔡瑁因此得刘表重用,并在刘表任镇南将军时担任他的军师。刘表病亡后,蔡瑁拥护刘表幼子刘琮继位,并逼迫他投降南征的曹操。蔡瑁在曹操麾下历任从事中郎、司马、长水校尉,受封汉阳亭侯。张允,生卒年不详,荆州牧刘表的外甥,与蔡瑁一样是刘表幼子刘琮的党羽。刘表病重之时,张允害怕刘表会把州牧之位传给长子刘琦,于是将远赴而来的刘琦阻于门外,不准他与刘表相见。曹操大军到达新野时,张允也随蔡瑁一同投降曹操。之后便隐没于历史之中,并无记载。在《三国演义》中,蔡瑁张允擅长水战,是东吴心腹大患。周瑜用反间计诱骗曹操除掉二人,使得曹军再无能够统领水军的大将。',
			zhangxun:'张勋,东汉末年军阀袁术帐下大将,袁术称帝后受封大将军。初平四年(公元193年),袁术引兵入陈留,被曹操、袁绍合力击败,逃至雍丘。后入九江,杀死扬州刺史陈温而自领之,并任命张勋、桥蕤为大将。时孙策依附于袁术,被表为怀义校尉,张勋对其倾心敬服。袁术称帝后,任命张勋为大将军,攻打吕布,大败而还。其后曹操又以袁术称帝为名南下进攻,袁术闻之大惊,即走度淮,留张勋、桥蕤守蕲阳以拒曹。曹操破其军,斩桥蕤,张勋退走。建安四年(公元199年),袁术病死,张勋率残军欲南投孙策,途中被袁术旧部刘勋俘虏,其后下落不明。',
			huzhao:'胡昭(162年-250年),字孔明,颍川(治今河南禹州)人。汉末三国时期隐士、书法家。胡昭善长隶书,与钟繇、邯郸淳、卫觊、韦诞齐名。有“钟氏小巧,胡氏豪放”之说,世人并称“钟胡”。',
			guanhai:'管亥(生卒年不详),青州黄巾军渠帅,率军侵略北海,围北海相孔融于都昌。孔融派遣太史慈突围而出,前往平原向刘备求援,刘备率军来到,击退管亥。《三国演义》中管亥在单挑中为关羽斩杀。',
			yinfuren:'尹夫人,原汉大将军何进的儿媳,丈夫早逝,生有一子何晏。曹操任司空时娶尹氏为妾,一并收养何晏,并生有一子曹矩。',
			chengui:'陈珪(生卒年不详),一作圭,字汉瑜。徐州下邳(治今江苏睢宁西北)人,广汉太守陈亹之孙,太尉陈球之侄,吴郡太守陈瑀(一作陈璃)、汝阴太守陈琮的从兄,陈登、陈应之父。官至沛相。',
			wanglie:'王烈,字彦方(141-219),平原县(今山东德州平原)人。生于永和六年(公元141年),卒于建安二十三年(公元218年)。王烈少时师从陈寔,闻名遐迩。董卓作乱时避乱辽东,并多次拒绝曹操的聘请。七十八岁时病死于辽东。',
			panghui:'庞会,(214—?),三国时期曹魏名将,庞德之子。曹丕即位后,思庞德忠烈,遂赐庞会等兄弟四人爵关内侯,邑各百户。庞会勇烈,有先父之风,官至中尉将军,封列侯。',
			chenjiao:'陈矫(?-237年7月11日),字季弼,广陵郡东阳县(治今安徽省天长市西北,今地属江苏省如皋市)人。三国时期曹魏名臣。陈矫本姓刘,因过继与母族而改姓陈。早年避乱江东,后广陵太守陈登请为功曹。曹操辟为丞相掾属,迁任相县令,转任征南长史。又为彭城、乐陵太守,迁任魏郡西部都尉。曹操东征,拜丞相长史,转西曹属、尚书。曹丕称帝,领吏部事,封高陵亭侯,迁尚书令。明帝继位后,进爵东乡侯,后转侍中,加光禄大夫,又拜司徒。景初元年(237年),陈矫去世,谥贞侯。',
			gongsundu:'公孙度 (?-204年),字升济,辽东襄平(今辽宁辽阳)人,东汉末年辽东太守。少随父迁居玄菟郡。初为玄菟小吏,建宁二年(169年),继升尚书郎、冀州刺史,后被免官。初平元年(190年),经同乡徐荣推荐,被董卓任命为辽东太守。公孙度到任后,厉行严刑峻法,打击豪强势力,使令行政通,羽翼渐丰。不久,中原地区董卓乱起,各地军阀无暇东顾。公孙度趁机自立为辽东侯、平州牧。继则东伐高句丽,西击乌桓,南取辽东半岛,越海取胶东半岛北部东莱诸县,开疆扩土;又招贤纳士,设馆开学,广招流民,威行海外,俨然以辽东王自居。建安九年(204年)病逝,子公孙康继承其位由于公孙度的锐意进取和苦心经营,使辽东地区在汉末三国的战乱年代,获得了暂时的安宁,推动了当地生产技术和封建文化的发展。',
			leibo:'雷薄(生卒年不详),本为东汉末年袁术麾下部将。离开称帝后昏庸奢侈的袁术,与陈兰一起占据嵩山为山贼。后来袭击兵败的袁术,抢夺财宝。同时在《三国演义》中也有出场。',
			liupi:'刘辟,东汉末年黄巾起义军将领。黄巾军将领。黄巾之乱后,与龚都一起率军盘踞在汝南。欲追随刘备,将汝南让给刘备。《三国演义》中,在与曹操的部将高览交战时,为保护刘备而战死。',
			zhenghun:'郑浑(生卒年不详),字文公。开封(今河南省开封市)人。汉末及三国时期曹魏大臣,东汉名儒郑众曾孙、名士郑泰之弟。郑浑早年避乱淮南,后转投豫章太守华歆。又被曹操辟为掾属,历任下蔡县长、邵陵县令,任内颇有政绩,深得民心。任左冯翊时,击杀扰乱郡县的梁兴,又击败作乱的山贼。历任上党太守、京兆尹、丞相掾属等职。曹丕称帝后,拜侍御史,加驸马都尉。先后任阳平、沛郡太守,任内兴修水利,使农田常年丰收,被百姓称为“郑陂”。后转任山阳和魏郡太守。魏明帝曹叡听闻郑浑的事迹之后,下诏将其政绩布告天下。官至将作大匠。卒年不详。',
			furongfuqian:'傅肜(?-222年),义阳(今湖北枣阳)人,三国时蜀汉将领。刘备攻伐吴国时,傅肜为别督。后刘备被陆逊击败,傅肜率部断后,奋战至死。死前怒斥道:“吴狗!何有汉将军降者!”<br>傅佥[qiān] ( ? ~263年),义阳(治今湖北省枣阳市)人,蜀汉将领傅彤之子,三国时期蜀汉名将。金长于谋略,并颇有胆勇,姜维甚爱之。傅佥官至关中都督。魏国攻伐蜀汉时,傅佥和蒋舒防守阳安关,兵败战死。',
			qinlang:'秦朗(生卒年不详),字元明,小字阿蘇(一作阿鳔),新兴(治今山西忻州)云中人。三国时期曹魏将领,官至骁骑将军、给事中,曾率兵讨伐鲜卑轲比能和步度根的叛军。',
			xianglang:'向朗(约167年—247年),字巨达。襄阳郡宜城县(今湖北宜城)人,三国时期蜀汉官员、藏书家、学者。向朗早年师从于司马徽,并被荆州牧刘表任命为临沮县长。后随刘备入蜀,历任巴西、牂牁、房陵太守,并拜步兵校尉,领丞相长史,随丞相诸葛亮北伐。因包庇马谡被免职,后为光禄勋,转左将军、特进,封显明亭侯。曾代理丞相册封张皇后及太子刘璿。晚年专心研究典籍,诱导青年学习,家中藏书丰富,受到举国尊重。延熙十年(247年),向朗去世。《全三国文》收录有一篇《遗言戒子》',
			yuantanyuanxiyuanshang:'袁谭袁尚介绍请移步「袁谭袁尚」,此处为袁熙的介绍。<br>袁熙(?-207年),字显奕(《后汉书》、《东光世系》作显雍),汝南郡汝阳县(今河南商水)人,是东汉末年占据河北的军阀袁绍次子,袁绍打败公孙瓒后,令袁熙为幽州刺史。袁绍官渡兵败后不久病死,其兄长袁谭、弟弟袁尚各自独立,互相攻伐,曹操趁机进攻袁谭、袁尚,并逐渐占河北。袁熙接纳兵败的袁尚后,因为属下叛变而逃往乌桓,被曹操击败后,逃往辽东太守公孙康帐下,却被公孙康杀死,二人首级被献给曹操。',
			zhanghu:'张虎,生卒年不详,雁门马邑(今山西朔城区大夫庄)人。张辽之子,三国时期曹魏武将。官至偏将军,封晋阳侯,有一子张统。',
			mengjie:'孟节,南中蛮王孟获之兄。是小说《三国演义》中杜撰的人物,史上并无记载。诸葛亮南征孟获之时,帐下军士因误饮哑泉之水失语。当地山神告知诸葛亮,言万安溪畔有一高士隐居彼处,号“万安隐者”。其草庵后有一泉,名安乐泉,可解哑泉之毒。庵前生有一草,名薤叶芸香,可防瘴气之染。诸葛亮于是带人连夜前往其隐居之处,求得泉水草叶解毒防瘴,拜求隐士姓名,方知其名为孟节,由此而叹:“方信盗跖、下惠之事,今亦有之。”诸葛亮欲申奏刘禅,立其为王,孟节辞之。又以金帛赠之,孟节坚辞不受。诸葛亮嗟叹不已,拜别而回。',
			peiyuanshao:'裴元绍,《三国演义》人物,原黄巾军之武将。黄巾起义失败之后,与周仓一同率领残部在山中落草当山贼。公元200年,在关羽欲返刘备旗下,在突破曹操的五道关卡后路过其落草之地,与周仓一同向关羽要求能以期成为关羽家臣。但此时仅周仓同行,其他弟兄则于山中等待。不久后,因其欲夺偶然路过的赵云之马,反遭讨伐战败身死。',
			zhangchu:'张楚,《阵面对决》第九弹“燎原”中登场的一个原创人物。她是张角的女儿,张宁的姐姐,在逃亡途中被刘备捕获。之后在诸葛亮的建议下,张楚被囚禁。在《阵面对决》的“怒焰”故事线中,张楚随着刘备入了西川,并被软禁在成都。夷陵之战后,刘备大败,全国主力外出用以支援刘备,朝内空虚,张楚趁机逃跑。',
			dongwan:'董绾,袁术老婆,嫉妒冯芳女的美貌,与冯方女有矛盾。',
			yuanyin:'袁胤(生卒年不详),东汉末期人物,据说是袁隗之子,是袁术从弟。兴平二年(公元195年)被袁术任命为丹杨太守,后因孙策平定江东被逐。建安四年(公元199年),袁术卒,袁胤因畏惧曹操,遂率领袁术部曲并带着其灵柩及妻子到皖城并投奔庐江太守刘勋。6个月后皖城被孙策所破,袁胤等人迁居吴郡,此后事迹不详。',
			gaoxiang:'高翔(又作高详、高祥)(生卒年不详),荆州南郡(治今湖北省公安县)人,三国时期蜀汉将领。曾随刘备攻打汉中,后又随蜀汉丞相诸葛亮参加北伐曹魏的战争。建兴九年(公元231年)的北伐中大破司马懿。官至杂号大将军(即某杂号将军加大,但无考何杂号将军),封玄乡侯。此后,关于高翔的记载不详。',
			zhoushan:'周善,《三国演义》中人物,不见于正史记载。为吴侯孙权的家将,此人最有胆量,自幼穿房入户,多随孙策。权为骗其妹回吴,遣善将五百人,扮为商人,分作五船;更诈修国书,以备盘诘;船内暗藏兵器。周善领命,往荆州。正骗得孙夫人带刘禅上船,赵云前来抢走禅,周善在后梢挟住舵,只顾放船下水。正僵持时张飞赶到,周善见张飞上船,提刀来迎,被张飞手起一剑砍倒,提头掷于孙夫人前。',
			zhangkai:'张闿,陶谦的手下都尉。奉命截杀曹操之父曹嵩,杀死曹嵩,夺去财宝逃往淮南投奔袁术,并担任刺杀陈王刘宠和陈国相骆俊的任务。',
			mengyou:'孟优,《三国演义》里的人物,南蛮王孟获之弟。与诸葛亮的南征军交战,向败战的兄长推荐朵思大王,劝兄长借助朵思之力与蜀汉军对抗。后来与兄长一起发誓归顺蜀汉。',
			liuchongluojun:'刘宠(?~197年),汉明帝刘庄玄孙,陈敬王刘羡曾孙,陈顷王刘崇之孙,陈孝王刘承之子,陈国第六位国君,也是东汉陈国的最后一位国君。骆俊(?-197),字孝远,东汉末年扬州会稽郡乌伤县(今浙江义乌)人。宗室陈王刘宠的国相,在任期间励精图治,深得民众爱戴。刘宠勇猛过人,善使弓弩,箭法高超。在其父刘承死后,继承陈王爵位。中平年间,黄巾军起义,郡县官兵都弃城逃走,刘宠于是征兵自守卫。当时天下饥荒,诸王侯都已不再享有租赋,反屡遭抢掠,有的甚至流离在外,死于荒野。只有陈国仍很富强,邻郡百姓纷纷前去投靠,陈国拥有部众达十余万人。初平元年(190年),各州郡起兵讨伐董卓,刘宠率军屯驻阳夏,自称辅汉大将军。建安二年(197年),袁术向陈国求取粮草,遭陈国国相骆俊拒绝,袁术大为生气,便派刺客张闿假装路过陈国,乘机杀死骆俊和刘宠。',
			yuechen:'乐綝(195~257年),字号不详,阳平郡卫国县(今河南省清丰县)人。三国时期曹魏将领,右将军乐进的儿子。果毅坚毅,袭封广昌亭侯,累迁扬州刺史。甘露二年,为叛乱的征东大将军诸葛诞所杀,追赠卫尉。',
			kuaiqi:'蒯祺(?~219年),南郡中卢人,荆州望族子弟,与荆州牧刘表帐下谋士蒯良、蒯越为同族,东汉末年房陵太守。建安二十四年(219年),汉中王刘备遣宜都太守孟达从秭归北攻房陵,蒯祺于战斗中被孟达所部士兵所杀。清朝任兆麟《心斋十种》中的《襄阳记》辑本引用《万历襄阳府志》“(蒯)钦从祖祺妇,即诸葛孔明之姊也”,称蒯祺娶故兖州泰山郡丞诸葛珪长女,即他是知名政治家、蜀汉丞相诸葛亮的姐夫。但在任兆麟之前的《襄阳记》辑本中,并没有这一条。',
		},
		characterTitle:{
		},
		characterFilter:{
		},
		dynamicTranslate:{
			cuijian:function(player){
				return '出牌阶段限一次,你可以选择一名有手牌的其他角色。若其手牌中有【闪】,则其将所有【闪】和防具牌交给你'+(player.hasMark('zhtongyuan_basic')?'':',然后你交给其等量的牌')+'。'+(player.hasMark('zhtongyuan_trick')?'若其手牌中没有【闪】,则你摸两张牌。':'');
			},
			dunshi:function(player){
				var info=player.storage.dunshi;
				var str='每回合限一次。你可以视为使用或打出一张';
				var list=['sha','shan','tao','jiu'];
				for(var i of list){
					var strx='【'+get.translation(i)+'】';
					if(!info||!info[0].contains(i)) strx=('<span style="text-decoration:line-through;">'+strx+'</span>');
					str+=strx;
					if(i!='jiu') str+='/';
				}
				str+=',然后当前回合角色于本回合内下一次造成伤害时,你选择两项:⒈防止此伤害。系统从技能名中包含“仁/义/礼/智/信”字样的技能中随机选择三个其未拥有的技能,然后你令当前回合角色获得其中一个技能。⒉从〖遁世〗中删除你本次使用或打出的牌并获得一个“席”。⒊减1点体力上限并摸X张牌(X为你的“席”数)。';
				return str;
			},
			dcporui:function(player){
				return '每轮限'+(player.hasMark('dcgonghu_basic')?'两':'一')+'次。其他角色的结束阶段,你可以弃置一张牌并选择另一名于此回合内失去过牌的其他角色,你视为对其依次使用X+1张【杀】'+(player.hasMark('dcgonghu_damage')?'':',然后你交给其X张手牌')+'(X为其本回合失去的牌数且至多为5)。';
			},
		},
		perfectPair:{},
		characterReplace:{
			dongbai:['dongbai','re_dongbai','jsrg_dongbai'],
			chunyuqiong:['chunyuqiong','re_chunyuqiong','jsrg_chunyuqiong'],
			kanze:['kanze','re_kanze'],
			chendeng:['ol_chendeng','re_chendeng','chendeng','jsrg_chendeng'],
			miheng:['re_miheng','miheng'],
			liuba:['ol_liuba','dc_liuba','liuba'],
			lvkuanglvxiang:['lvkuanglvxiang','dc_lvkuanglvxiang'],
			dc_huangquan:['xf_huangquan','dc_huangquan'],
			yuejiu:['dc_yuejiu','yuejiu'],
			jiling:['dc_jiling','tw_jiling','jiling'],
			sp_jiaxu:['sp_jiaxu','dc_sp_jiaxu','yj_jiaxu'],
			qiaorui:['qiaorui','tw_qiaorui'],
			mamidi:['mamidi','xin_mamidi'],
			mengyou:['mengyou','ns_mengyou'],
			zhangchu:['zhangchu','jsrg_zhangchu'],
			xianglang:['xianglang','mb_xianglang'],
		},
		translate:{
			re_panfeng:'潘凤',
			xinkuangfu:'狂斧',
			xinkuangfu_info:'出牌阶段限一次,你可选择:1,弃置装备区里的一张牌,你使用无对应实体牌的普【杀】。若此【杀】造成伤害,你摸两张牌。2,弃置一名其他角色装备区里的一张牌,你使用无对应实体牌的普【杀】。若此【杀】未造成伤害,你弃置两张手牌。',
			xingdaorong:'邢道荣',
			xuxie:'虚猲',
			xuxie_info:'出牌阶段开始时,你可以减1点体力上限并选择所有与你距离为1的角色,弃置这些角色的各一张牌或令这些角色各摸一张牌。出牌阶段结束时,若你的体力上限不为全场最多,则你加1点体力上限,然后回复1点体力或摸两张牌。',
			caoxing:'曹性',
			cxliushi:'流矢',
			cxliushi2:'流矢',
			cxliushi_info:'出牌阶段,你可以将一张红桃牌置于牌堆顶,视为对一名角色使用一张【杀】(无距离限制且不计入使用次数)。当此【杀】造成伤害后,受到伤害的角色获得一个“流”。有“流”的角色手牌上限-X(X为其“流”数)。',
			zhanwan:'斩腕',
			zhanwan_info:'锁定技,有“流”的角色于弃牌阶段弃牌后,你摸等量的牌,然后其移去所有的“流”。',
			re_chunyuqiong:'淳于琼',
			recangchu:'仓储',
			recangchu2:'仓储',
			recangchu3:'仓储',
			recangchu_info:'锁定技,游戏开始时,你获得3个“粮”。你的手牌上限+X(X为“粮”数)。当你于回合外得到后时,你获得一个“粮”。(你的“粮”数不能超过存活角色数)',
			reliangying:'粮营',
			reliangying_info:'弃牌阶段开始时,你可以摸至多X张牌,然后交给等量的角色各一张牌。(X为你的“粮”数)',
			reshishou:'失守',
			reshishou2:'失守',
			reshishou_info:'锁定技,当你使用【酒】时或受到1点火焰伤害后,你移去一个“粮”。准备阶段,若你没有“粮”,你失去1点体力。',
			xiahoujie:'夏侯杰',
			liedan:'裂胆',
			liedan_info:'锁定技,其他角色的准备阶段开始时,若X大于0,则你摸X张牌。若X等于3,则你加1点体力上限(至多加到8)。若X为0,则你失去1点体力并获得一枚“裂”(X为你的手牌数,体力值,装备区牌数中大于其的数量)。准备阶段,若“裂”数大于4,则你死亡。',
			zhuangdan:'壮胆',
			zhuangdan_mark:'壮胆',
			zhuangdan_info:'锁定技,其他角色的回合结束时,若你的手牌数为全场唯一最多,则你令〖裂胆〗失效直到你下回合结束。',
			dc_caiyang:'蔡阳',
			dcxunji:'寻嫉',
			dcxunji_info:'出牌阶段限一次,你可以选择一名其他角色。该角色的下个结束阶段开始时,若其于该回合内造成过伤害,则你视为对其使用一张【决斗】,且当此【决斗】对其造成伤害后,你失去等量的体力。',
			dcjiaofeng:'交锋',
			dcjiaofeng_info:'锁定技。每回合限一次,当你造成伤害时,若你本回合内未造成过其他伤害且你已损失的体力值:大于0,则你摸一张牌;大于1,则此伤害+1;大于2,则你回复1点体力。',
			zhoushan:'周善',
			dcmiyun:'密运',
			dcmiyun_tag:'安',
			dcmiyun_info:'锁定技。①一轮游戏开始时,你依次执行:1.若你有“安”,你将包括“安”的在内的任意张手牌交给一名其他角色,然后你将手牌补至体力上限;2.你正面向上获得一名其他角色的一张牌,称为“安”。②当你不因〖密运①〗失去“安”后,你失去1点体力。',
			dcdanying:'胆迎',
			dcdanying_info:'每回合限一次。你可以展示“安”,然后视为使用或打出一张【杀】或【闪】。然后当你于本回合下一次成为牌的目标后,使用者弃置你的一张牌。',
			re_sunluyu:'孙鲁育',
			remeibu:'魅步',
			remeibu_info:'其他角色的出牌阶段开始时,若你在其攻击范围内,你可以弃置一张牌A,该角色于本阶段内拥有〖止息〗,且当其因〖止息〗弃置与牌A花色相同的牌时,你获得之。',
			rezhixi:'止息',
			rezhixi_info:'锁定技,当你使用【杀】或普通锦囊牌时,你弃置一张手牌。',
			remumu:'穆穆',
			remumu_info:'出牌阶段开始时,你可以选择一项:1.弃置一名其他角色装备区里的一张牌,然后你本回合可使用【杀】的次数+1;2.获得一名角色装备区里的一张牌,然后你本回合可使用【杀】的次数-1。',
			re_dongbai:'董白',
			relianzhu:'连诛',
			relianzhu_info:'出牌阶段限一次,你可将一张牌正面朝上交给一名其他角色。若此牌为:红色,你摸一张牌;黑色,对方弃置两张牌或令你摸两张牌。',
			rexiahui:'黠慧',
			rexiahui_info:'锁定技,①你的黑色牌不计入手牌上限。②当有其他角色获得你的黑色牌后,其于下次扣减体力前不能使用,打出,弃置这些牌。③一名其他角色的回合结束时,若其本回合失去过其所有“黠慧”牌,则其失去1点体力。',
			heyan:'何晏',
			yachai:'崖柴',
			yachai_info:'当你受到伤害后,你可令伤害来源选择一项:①其本回合不能再使用手牌,然后你摸两张牌;②其展示所有手牌,然后将其手牌中一种花色的所有牌交给你;③弃置一半数量的手牌(向上取整)。',
			qingtan:'清谈',
			qingtan_info:'出牌阶段限一次,你可令所有有手牌的角色同时选择一张手牌并同时展示。你可以获得其中一种花色的牌,然后展示此花色牌的角色各摸一张牌。若如此做,弃置其他的牌。',
			zhaoyan:'赵嫣',
			jinhui:'锦绘',
			jinhui_info:'出牌阶段限一次,你可以随机展示牌堆中的三张不具有“伤害”标签且使用目标范围为“自己”或“一名角色”的牌,然后选择一名其他角色。该角色选择并按如下“锦绘”规则使用其中一张,然后你可以按如下“锦绘”规则使用剩余的任意张牌:若此牌的使用目标为“自己”,则对自己使用该牌,否则对对方使用该牌(无距离限制且不计入次数限制)。',
			qingman:'轻幔',
			qingman_info:'锁定技。一名角色的回合结束时,你将手牌摸至X张(X为其装备区中空栏的数量)。',
			wangtao:'王桃',
			wangyue:'王悦',
			huguan:'护关',
			huguan_info:'一名角色于出牌阶段内使用第一张牌时,若此牌为红色,则你可以声明一种花色。该花色的牌不计入其本回合的手牌上限。',
			yaopei:'摇佩',
			yaopei_info:'其他角色的弃牌阶段结束时,若你本局游戏内对其发动过〖护关〗,则你可以弃置一张与其于此阶段弃置的牌花色均不相同的牌。然后你选择一项:①其摸两张牌,你回复1点体力。②其回复1点体力,你摸两张牌。',
			mingluan:'鸣鸾',
			mingluan_info:'其他角色的结束阶段开始时,若有角色于本回合内回复过体力,则你可以弃置任意张牌,然后摸X张牌(X为当前角色的手牌数,且至多摸至5张)。',
			zhangxuan:'张嫙',
			tongli:'同礼',
			//tongli_info:'当你于出牌阶段内不因〖同礼〗而使用基本牌或普通锦囊牌指定第一个目标后,若你手牌中的花色数和你于本阶段内不因〖同礼〗而使用过的牌数相等,则你可以于此牌结算结束后依次视为对此牌的所有目标使用X张名称和属性相同的牌(X为你手牌中的花色数)。',
			tongli_info:'当你于出牌阶段内使用基本牌或普通锦囊牌指定第一个目标后,若你手牌中的花色数和你于本阶段内使用过的牌数相等,则你可以令此牌额外结算X次(X为你手牌中的花色数)。',
			shezang:'奢葬',
			shezang_info:'每轮限一次。当你或你回合内的其他角色进入濒死状态时,你可以从牌堆中获得每种花色的牌各一张。',
			tengyin:'滕胤',
			chenjian:'陈见',
			chenjian_info:'准备阶段,你可展示牌堆顶的3+X张牌(X为你“陈见”标记的数量且至多为2)。然后你可依次执行以下两项中的任意项:⒈弃置一张牌,然后令一名角色获得与你弃置牌花色相同的牌。⒉使用其中剩余的一张牌。若你执行了所有选项,则你获得一枚“陈见”,然后重铸所有手牌。',
			xixiu:'皙秀',
			xixiu_info:'锁定技。①当你成为其他角色使用牌的目标时,若你的装备区内有和此牌花色相同的牌,则你摸一张牌。②若你装备区内的牌数为1,则其他角色不能弃置你装备区内的牌。',
			zhangyao:'张媱',
			yuanyu:"怨语",
			yuanyu_info:"出牌阶段限一次。你可以摸一张牌,然后选择一张手牌和一名其他角色。该角色获得如下效果直到你发动〖夕颜〗:{你与该角色的弃牌阶段开始时,或当该角色造成1点伤害后,其须将一张手牌作为“怨”置于你的武将牌上}。然后你将你选择的手牌作为“怨”置于你的武将牌上。",
			xiyan:"夕颜",
			xiyan_info:"当有牌作为“怨”移动到你的武将牌上后,若“怨”中的花色数达到4种,则你可以获得所有“怨”。然后若当前回合角色:是你,你本回合手牌上限+4且使用牌无次数限制且重置你的〖怨语〗于此阶段的发动次数;不是你,你可令当前回合角色本回合手牌上限-4且不能使用基本牌。",
			xiahoulingnv:'夏侯令女',
			fuping:'浮萍',
			fuping_info:'①其他角色对你使用的牌结算结束后,若你未因此技能记录过此牌的名称且你有未废除的装备栏,则你可以废除一个装备栏,记录此牌的名称。②每回合每种牌名限一次。你可以将一张非基本牌当做〖浮萍①〗记录过的基本牌或锦囊牌使用或打出。③若你的所有装备栏均已被废除,则你使用牌无距离限制。',
			weilie:'炜烈',
			weilie_info:'每局游戏限X次。出牌阶段,你可以弃置一张牌并选择一名已受伤的角色,令该角色回复1点体力。然后若其体力值小于体力上限,则其摸一张牌(X为你〖浮萍①〗中的记录数+1)。',
			dc_sunru:'孙茹',
			xiecui:'撷翠',
			xiecui_info:'当有角色于回合内第一次因执行牌的效果而造成伤害时,你可以令此伤害+1。若其势力为吴,则该角色获得此伤害牌对应的实体牌,且其本回合的手牌上限+1。',
			youxu:'忧恤',
			youxu_info:'一名角色A的回合结束时,若其手牌数大于体力值,则你可以展示A的一张牌,然后将此牌交给另一名角色B。若B的体力值为全场最少,则B回复1点体力。',
			huaxin:'华歆',
			wanggui:'望归',
			wanggui_info:'每回合限触发一次,当你造成或受到伤害后,若你:仅明置了此武将牌,则你可对与你势力不同的一名角色造成1点伤害;武将牌均明置,则你可令与你势力相同的角色各摸一张牌。',
			spwanggui:'望归',
			spwanggui_info:'①当你受到伤害后,你可以摸一张牌,或和一名势力相同的其他角色各摸一张牌;②每回合限一次,当你造成伤害后,你可以对一名与你势力不同的角色造成1点伤害。',
			xibing:'息兵',
			xibing_info:'当一名其他角色在其出牌阶段内使用黑色【杀】或黑色普通锦囊牌指定唯一角色为目标后,你可令该角色将手牌摸至当前体力值(至多摸五张)且本回合不能再使用手牌。',
			xibing_info_guozhan:'当一名其他角色在其出牌阶段内使用第一张黑色【杀】或黑色普通锦囊牌指定唯一角色为目标后,你可令该角色将手牌摸至当前体力(至多摸五张)值且本回合不能再使用手牌。若你与其均明置了所有武将牌,则你可以暗置你与其各一张武将牌且本回合不能再明置此武将牌。',
			luyusheng:'陆郁生',
			zhente:'贞特',
			zhente2:'贞特',
			zhente_info:'每回合限一次,当你成为其他角色使用基本牌或普通锦囊牌的目标后,你可令使用者选择一项:1.本回合不能再使用与此牌颜色相同的牌;2.此牌对你无效。',
			zhente_info_guozhan:'每回合限一次,当你成为其他角色使用黑色基本牌或黑色普通锦囊牌的目标后,你可令使用者选择一项:1.本回合不能再使用黑色牌;2.此牌对你无效。',
			zhiwei:'至微',
			zhiwei2:'至微',
			zhiwei_info:'游戏开始时/你的回合开始时,若场上没有因此法被选择过的角色存活,则你选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。',
			zhiwei_info_guozhan:'你明置此武将牌时,选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。该角色死亡时,若你的两个武将牌均明置,你暗置此武将牌。',
			zhanghu:'张虎',
			cuijian:'摧坚',
			cuijian_info:'出牌阶段限一次,你可以选择一名有手牌的其他角色。若其手牌中有【闪】,则其将所有【闪】和防具牌交给你,然后你交给其等量的牌。',
			zhtongyuan:'同援',
			zhtongyuan_info:'锁定技。①当你使用红色锦囊牌后,你于〖摧坚〗后增加“若其手牌中没有【闪】,则你摸两张牌”;②当你使用或打出红色基本牌后,你删除〖摧坚〗中的“,然后你交给其等量的牌”。③当你使用红色的普通锦囊牌/基本牌时,若你已发动过〖摧坚①〗和〖摧坚②〗,则此牌不可被响应/可额外增加一个目标。',
			lvlingqi:'吕玲绮',
			guowu:'帼舞',
			guowu_info:'出牌阶段开始时,你可以展示全部手牌,根据你展示的类型数,你获得对应效果:至少一类,从弃牌堆获得一张【杀】;至少两类,此阶段使用牌无距离限制;至少三类,此阶段使用【杀】或普通锦囊牌可以多指定两个目标。',
			guowu_info_guozhan:'出牌阶段开始时,你可以展示全部手牌,根据你展示的类型数,你获得对应效果:至少一类,从弃牌堆获得一张【杀】;至少两类,此阶段使用牌无距离限制;至少三类,此阶段使用【杀】可以多指定两个目标。',
			zhuangrong:'妆戎',
			zhuangrong_info:'觉醒技,一名角色的回合结束时,若你的体力值或手牌数为1,你减1点体力上限并回复体力至上限,将手牌摸至体力上限,然后获得〖神威〗和〖无双〗。',
			llqshenwei:'神威',
			llqshenwei_info:'锁定技,摸牌阶段开始时,你令额定摸牌数+2;你的手牌上限+2。',
			re_kanze:'阚泽',
			rekuanshi:'宽释',
			rekuanshi_info:'结束阶段,你可以选择一名角色。你获得如下效果直到你下回合开始:每回合限一次,当其于一回合内受到第2点伤害后,其回复1点体力。',
			liuyong:'刘永',
			zhuning:'诛佞',
			zhuning_info:'出牌阶段限一次。你可将任意张牌交给一名其他角色(称为“隙”),然后可视为使用一张具有伤害标签的基本牌/锦囊牌(不计入次数限制)。若你以此法使用的牌未造成伤害,则你将〖诛佞〗于本回合内改为“限两次”。',
			fengxiang:'封乡',
			fengxiang_info:'锁定技。①当你受到伤害后,若场上:存在“隙”唯一最多的角色,则其回复1点体力;不存在,则你摸一张牌。②当有角色的手牌移动后,若场上“隙”最多的角色因此发生变化,则你摸一张牌。',
			fengxiang_tag:'隙',
			re_xunchen:'荀谌',
			refenglve:'锋略',
			refenglve_info:'出牌阶段限一次,你可以和一名其他角色进行拼点。若你赢,其将区域内的两张牌交给你;若平局,则你令此技能于本阶段内的发动次数上限+1;若你输,其获得你的拼点牌。',
			anyong:'暗涌',
			anyong_info:'当一名角色于其回合内第一次对其他角色造成伤害后,若伤害值为1,则你可弃置一张牌,并对受伤角色造成1点伤害。',
			wanniangongzhu:'万年公主',
			zhenge:'枕戈',
			zhenge_info:'准备阶段,你可以选择一名角色。该角色本局游戏的攻击范围+1(至多+5)。然后若所有其他角色都在该角色的攻击范围内,则你可以令其视为对另一名角色使用一张【杀】。',
			xinghan:'兴汉',
			xinghan_info:'锁定技,每回合的第一张【杀】造成伤害后,若此【杀】的使用者成为过〖枕戈〗的目标,则你摸一张牌。若你的手牌数不是全场唯一最多的,则改为摸X张牌(X为该角色的攻击范围且最多为5)。',
			re_chendeng:'陈登',
			refuyuan:'扶援',
			refuyuan_info:'一名角色成为【杀】的目标后,若其本回合内没有成为过其他红色牌的目标,则你可以令其摸一张牌。',
			reyingshui:'营说',
			reyingshui_info:'出牌阶段限一次,你可将一张牌交给攻击范围内的一名其他角色,然后其选择一项:①交给你至少两张装备牌。②受到1点伤害。',
			rewangzu:'望族',
			rewangzu_info:'每回合限一次。当你受到其他角色造成的伤害时,你可随机弃置一张手牌,令此伤害-1。若你所在阵营的存活角色数是全场最多的,则你可以自行选择弃置的牌。',
			re_miheng:'祢衡',
			rekuangcai:'狂才',
			rekuangcai_info:'锁定技。①你于回合内使用牌无距离和次数限制。②弃牌阶段开始时,若你本回合内:未使用过牌,则你本局游戏的手牌上限+1;使用过牌但未造成过伤害,则你本局游戏的手牌上限-1。③结束阶段开始时,你摸X张牌(X为你本回合内造成的伤害且至多为5)。',
			reshejian:'舌箭',
			reshejian_info:'当你成为其他角色使用牌的唯一目标后,你可以弃置至少两张手牌。若如此做,你选择一项:⒈弃置其等量的牌。⒉对其造成1点伤害。',
			fengxi:'冯熙',
			yusui:'玉碎',
			yusui_info:'当你成为其他角色使用黑色牌的目标后,你可以失去1点体力,然后选择一项:⒈令其将手牌数弃置至与你相同;⒉令其失去Y点体力(Y为其的体力值减去你的体力值,不为正时不可选择)。',
			boyan:'驳言',
			boyan_info:'出牌阶段限一次,你可选择一名其他角色。其将手牌摸至体力上限(至多摸至五张),然后其本回合不能使用或打出手牌。',
			re_dengzhi:'邓芝',
			jianliang:'简亮',
			jianliang_info:'摸牌阶段开始时,若你的手牌数不为全场最多,则你可以令至多两名角色各摸一张牌。',
			weimeng:'危盟',
			weimeng_info:'出牌阶段限一次,你可以获得一名其他角色的至多X张手牌,然后交给其等量的牌(X为你的体力值)。若你给出的牌点数之和:大于得到的牌,则你摸一张牌;小于得到的牌,弃置该角色区域内的一张牌。',
			mamidi:'马日磾',
			bingjie:'秉节',
			bingjie_info:'出牌阶段开始时,你可减1点体力上限,然后当你于本阶段内使用【杀】或普通锦囊牌指定其他角色为目标后,其弃置一张牌。若其弃置的牌与你使用的牌颜色相同,其无法响应此牌。',
			zhengding:'正订',
			zhengding_info:'锁定技。当你于回合外使用或打出牌响应其他角色使用的牌时,若这两张牌颜色相同,则你加1点体力上限并回复1点体力。',
			dc_jiben:'吉本',
			xunli:'寻疠',
			xunli_info:'锁定技。①当有黑色牌因弃置而进入弃牌堆后,若X大于0,则你将其中的X张牌置于武将牌上作为“疠”(X=min(这些牌的数量,9-Y),Y=你的“疠”数)。②出牌阶段开始时,你可以用任意张黑色手牌交换等量的“疠”。',
			zhishi:'指誓',
			zhishi_info:'结束阶段,你可选择一名角色。当该角色于你的下回合开始前{成为【杀】的目标后或进入濒死状态时},你可移去任意张“疠”,然后其摸等量的牌。',
			lieyi:'烈医',
			lieyi_info:'出牌阶段限一次。你可以展示所有“疠”并选择一名其他角色,对其使用其中的一张可对其使用的牌(无距离和次数限制)并重复此流程,并将其余的牌置于弃牌堆。然后若其存活且未于此流程中因受到伤害而进入过濒死状态,则你失去1点体力。',
			guanning:'管宁',
			dunshi:'遁世',
			dunshi_info:'每回合限一次。你可以视为使用或打出一张【杀】/【闪】/【桃】/【酒】,然后当前回合角色于本回合内下一次造成伤害时,你选择两项:⒈防止此伤害。系统从技能名中包含“仁/义/礼/智/信”字样的技能中随机选择三个其未拥有的技能,然后你令当前回合角色获得其中一个技能。⒉从〖遁世〗中删除你本次使用或打出的牌并获得一个“席”。⒊减1点体力上限并摸X张牌(X为你的“席”数)。',
			dc_gaolan:'高览',
			xizhen:'袭阵',
			xizhen_info:'出牌阶段开始时,你可选择一名其他角色,视为对其使用【杀】或【决斗】。然后当有角色于本阶段内使用或打出牌响应你时,该角色回复1点体力,你摸一张牌(若其满体力,改为两张)。',
			dc_huangchengyan:'黄承彦',
			dcjiezhen:'解阵',
			dcjiezhen_info:'出牌阶段限一次,你可选择一名其他角色。该角色获得〖八阵〗,且其所有不为{锁定技、限定技、觉醒技、主公技、带有Charlotte标签}的技能失效。你的下回合开始时,或其因〖八卦阵〗发起的判定结算结束后,你令其恢复其以此法失效的所有技能并失去以此法获得的〖八阵〗,然后获得其区域内的一张牌。',
			dczecai:'择才',
			dczecai_info:'限定技。一轮游戏开始时,若游戏轮数大于1,则你可令一名其他角色获得〖集智〗直到下一轮游戏开始;若其是上一轮内使用过锦囊牌数量唯一最多的角色,则其获得一个额外的回合。',
			dcyinshi:'隐世',
			dcyinshi_info:'锁定技。①每回合限一次,当你受到伤害时,若此伤害的渠道不为有颜色的牌,则你防止此伤害。②当有因〖八卦阵〗发起的判定的判定牌生效时,你获得此判定牌。',
			tenggongzhu:'滕公主',
			xingchong:'幸宠',
			xingchong_info:'一轮游戏开始时,你可声明两个自然数X和Y,且(X+Y)≤min(5, 你的体力上限)。你摸X张牌并展示Y张手牌。若如此做,当你于本轮内失去一张以此法展示的牌后,你摸两张牌。',
			liunian:'流年',
			liunian_info:'锁定技。回合结束时,若本回合内进行了本次游戏的第一次洗牌,则你加1点体力上限;若本回合内进行了本次游戏的第二次洗牌,则你于本回合结束时回复1点体力,且本局游戏内的手牌上限+10。',
			caimaozhangyun:'蔡瑁张允',
			lianzhou:'连舟',
			lianzhou_info:'锁定技。准备阶段,你横置你的武将牌。然后你可横置任意名体力值等于你的角色。',
			jinglan:'惊澜',
			jinglan_info:'锁定技。当你造成伤害后,若你的手牌数:大于体力值,你弃置四张手牌;等于体力值,你弃置一张手牌并回复1点体力;小于体力值,你受到1点无来源火焰伤害并摸五张牌。',
			dc_yanghu:'羊祜',
			dcdeshao:'德劭',
			dcdeshao_info:'每回合限两次。当你成为其他角色使用的黑色牌的目标后,你可以摸一张牌,然后若其手牌数不小于你,则你弃置其一张牌。',
			dcmingfa:'明伐',
			dcmingfa_info:'①出牌阶段限一次。当你使用【杀】或普通锦囊牌结算结束后,若你的武将牌上没有“明伐”牌,则你可以将此牌作为“明伐”牌置于武将牌上并选择一名其他角色,记录该角色和此牌的名称。②一名角色的回合结束时,若其是你〖明伐①〗记录的角色,则你视为对其依次使用X张〖明伐①〗记录的牌,然后移去“明伐”牌(X为其手牌数且至少为1,至多为5)。③一名角色死亡时,若其是你〖明伐①〗记录的角色,则你移去“明伐”牌。',
			dc_jiling:'纪灵',
			dcshuangren:'双刃',
			dcshuangren_info:'出牌阶段开始时,你可以和一名其他角色A进行拼点。若你赢,你选择一名角色B,或选择包含A在内的两名角色A和B(B的势力需与A相同),然后视为对被选择的角色使用一张【杀】(不计入次数限制);若你没赢,则你本阶段内不能使用【杀】。',
			zhangxun:'张勋',
			suizheng:'随征',
			suizheng_info:'结束阶段,你可以选择一名角色A,获得如下效果直到其下回合结束:①A于下回合出牌阶段内使用【杀】的次数上限+1且无距离限制;②A下回合的出牌阶段结束时,你可以选择一名此阶段内受到过A造成的伤害的角色B,视为对B使用一张【杀】。',
			dc_liuba:'刘巴',
			dczhubi:'铸币',
			dczhubi_info:'当有♦牌因弃置而进入弃牌堆后,你可以令系统从牌堆/弃牌堆中检索一张【无中生有】,并将此牌置于牌堆顶。',
			dcliuzhuan:'流转',
			dcliuzhuan_tag:'转',
			dcliuzhuan_info:'锁定技。①其他角色于其回合内不于摸牌阶段而得到的牌称为“转”。②你不能成为实体牌中包含“转”的牌的目标。③当有“转”直接进入弃牌堆或经由处理区进入弃牌堆后,你获得之。',
			huzhao:'胡昭',
			midu:'弥笃',
			midu_info:'出牌阶段限一次。你可以选择一项:⒈废除任意个装备栏或判定区,并令一名角色摸等量的牌。⒉恢复一个已经被废除的装备栏或判定区,然后你获得〖活墨〗直到下回合开始。',
			xianwang:'贤望',
			xianwang_info:'锁定技。若你有被废除的装备栏,则其他角色至你的距离+1,你至其他角色的距离-1;若废除的装备栏数大于2,则改为距离+2/-2。',
			guanhai:'管亥',
			suoliang:'索粮',
			suoliang_info:'每回合限一次。当你对其他角色造成伤害后,你可以选择并展示其的至多X张牌(X为其体力上限且至多为5)。若这些牌中有♥或♣牌,则你获得这些牌;否则你弃置这些牌。',
			qinbao:'侵暴',
			qinbao_info:'锁定技。当你使用【杀】或普通锦囊牌时,你令所有手牌数不小于你的角色不能响应此牌。',
			dc_lvkuanglvxiang:'吕旷吕翔',
			dcshuhe:'数合',
			dcshuhe_info:'出牌阶段限一次,你可以展示一张手牌。若场上有与此牌点数相同的牌,则你获得这些牌;否则你将此牌交给一名其他角色并获得一枚“爵”。',
			dcliehou:'列侯',
			dcliehou_info:'锁定技。摸牌阶段开始时,你令额定摸牌数+X;然后此摸牌阶段结束时,你选择一项:⒈弃置X张牌。⒉失去1点体力(X为你的“爵”数+1且至多为5)。',
			yinfuren:'尹夫人',
			dcyingyu:'媵予',
			dcyingyu_info:'准备阶段开始时,你可以展示两名角色的各一张手牌。若这两张牌的花色不同,则你可以令一名角色获得另一名角色的展示牌。',
			dcyongbi:'拥嬖',
			dcyongbi_info:'限定技。出牌阶段,你可以将所有手牌交给一名其他男性角色。你将〖媵予〗的发动时机改为“准备阶段和结束阶段开始时”。然后若这些牌中包含的花色数:大于1,则你与其本局游戏的手牌上限+2;大于2,则当你或其于本局游戏内受到大于1的伤害时,此伤害-1。',
			dc_huangquan:'黄权',
			dcquanjian:'劝谏',
			dcquanjian_info:'出牌阶段每项各限一次。你可以选择一项流程并选择一名其他角色A:⒈令A对其攻击范围内的另一名角色B造成1点伤害。⒉令A将手牌数调整至体力上限(至多摸至五张),且其本回合内不能使用或打出手牌。然后A选择一项:⒈执行此流程。⒉本回合下次受到的伤害+1。',
			dctujue:'途绝',
			dctujue_info:'限定技。当你进入濒死状态时,你可以将所有牌交给一名其他角色。然后你回复等量的体力并摸等量的牌。',
			chengui:'陈珪',
			dcyingtu:'营图',
			dcyingtu_info:'每回合限一次。当你的上家/下家于摸牌阶段外得到牌后,你可以获得其一张牌,然后将一张牌交给你的下家/上家。若你给出的牌为装备牌,则其使用之。',
			dccongshi:'从势',
			dccongshi_info:'一名角色使用的装备牌结算结束后,若其装备区内的牌数为全场最多,则你摸一张牌。',
			wanglie:'王烈',
			dcchongwang:'崇望',
			dcchongwang_info:'其他角色使用基本牌或普通锦囊牌时,若你是本局游戏内上一张被使用的牌的使用者,则你可以选择一项:⒈令其于此牌结算结束后收回此牌对应的所有实体牌;⒉取消此牌的所有目标。',
			dchuagui:'化归',
			dchuagui_info:'出牌阶段开始时,你可以选择至多X名有牌的其他角色(X为场上每个阵营中最大阵营的人数,且你的选择结果不展示)。这些角色同时选择一项:⒈交给你一张牌,⒉展示一张牌。若这些角色均选择选项二,则你获得所有展示牌。',		 
			gongsundu:'公孙度',
			dczhenze:'震泽',
			dczhenze_info:'弃牌阶段开始时,你可以选择一项:1.令所有手牌数与体力值大小关系与你不同的角色失去1点体力;2.令所有手牌数和体力值关系与你相同的角色回复1点体力。',
			dcanliao:'安辽',
			dcanliao_info:'出牌阶段限X次(X为群势力角色数)。你可以重铸一名角色的一张牌。',
			dc_yuejiu:'乐就',
			dccuijin:'催进',
			dccuijin_info:'当你或你攻击范围内的角色使用【杀】时,你可以弃置一张牌,令此【杀】的伤害基数+1。然后当此杀被目标角色抵消或无效或防止伤害后,你摸一张牌,对使用者造成1点伤害。',
			panghui:'庞会',
			dcyiyong:'异勇',
			dcyiyong_info:'当你对其他角色造成伤害时,若你有牌,你可以与其同时弃置至少一张牌。若你以此法弃置的牌的点数之和:不大于其,你摸X张牌;不小于其,此伤害+1(X为其以此法弃置的牌数)。',
			chenjiao:'陈矫',
			dcxieshoux:'协守/清严',
			dcxieshou:'协守',
			dcxieshou_info:'每回合限一次。当一名角色受到伤害后,若你至其的距离不大于2,你可以令你的手牌上限-1,然后其选择一项:1.回复1点体力;2.复原,摸两张牌。',
			dcqingyan:'清严',
			dcqingyan_info:'每回合限两次。当你成为其他角色使用黑色牌的目标后,若你的手牌数:小于体力值,你可以将手牌补至体力上限;不小于体力值,你可以弃置一张牌令你的手牌上限+1。',
			dcqizi:'弃子',
			dcqizi_info:'锁定技。你不能对至其的距离大于2且正在进行濒死流程的角色使用【桃】。',
			leibo:'雷薄',
			dcsilve:'私掠',
			dcsilve_info:'游戏开始时,你选择一名其他角色(对其他角色不可见),称为“私掠”角色。然后你获得以下效果:①当“私掠”角色造成伤害后,若你本回合未因此效果得到过受伤角色的牌,你可以获得受伤角色一张牌;②当“私掠”角色受到其他角色造成的伤害后,若伤害来源存活,你须对伤害来源使用一张【杀】(无距离限制),否则你弃置一张手牌。',
			dcshuaijie:'衰劫',
			dcshuaijie_info:'限定技。出牌阶段,若你的体力值与装备区里的牌数均大于“私掠”角色,或没有角色有“私掠”,你可以减1点体力上限,然后选择一项:1.获得“私掠”角色至多三张牌;2.从牌堆随机获得三张类型各不同的牌。最后将你的“私掠”角色改为你。',
			dc_sp_jiaxu:'新杀SP贾诩',
			dc_sp_jiaxu_prefix:'新杀SP',
			dcjianshu:'间书',
			dcjianshu_info:'出牌阶段限一次。你可以将一张黑色手牌交给一名其他角色,并选择另一名其他角色,你令前者与后者拼点。赢的角色随机弃置一张牌,没赢的角色失去1点体力。若有角色因此死亡,你令你〖间书〗于此阶段发动的次数上限+1。',
			dcyongdi:'拥嫡',
			dcyongdi_info:'限定技。出牌阶段,你可以选择一名男性角色,若其:体力上限最少,其加1点体力上限;体力值最少,其回复1点体力;手牌数最少,其摸X张牌(X为其体力上限且至多为5)。',
			liupi:'刘辟',
			dcjuying:'踞营',
			dcjuying_info:'出牌阶段结束时,若你于此阶段内使用【杀】的次数未达到上限,你可以选择任意项:1.下回合使用【杀】的次数上限+1;2.本回合手牌上限+2;3.摸三张牌。若你选择的项数超过了你的体力值,你弃置一张牌。',
			dc_huanghao:'新杀黄皓',
			dc_huanghao_prefix:'新杀',
			dcqinqing:'寝情',
			dcqinqing_info:'结束阶段,你可以弃置一名攻击范围内包含一号位的其他角色一张牌。然后若其手牌数大于一号位,你摸一张牌。',
			dccunwei:'存畏',
			dccunwei_info:'锁定技。当你成为其他角色使用的锦囊牌的目标后,若你是唯一目标,你摸一张牌;否则你弃置一张牌。',
			dc_zhaotongzhaoguang:'赵统赵广',
			dcqingren:'青刃',
			dcqingren_info:'结束阶段,你可以摸X张牌(X为你本回合发动〖翊赞〗的次数)。',
			dclongyuan:'龙渊',
			dclongyuan_info:'锁定技。一名角色的回合结束时,若你本局游戏已发动过至少三次〖翊赞〗,你摸两张牌并回复1点体力,修改〖翊赞〗。',
			zhenghun:'郑浑',
			dcqiangzhi:'强峙',
			dcqiangzhi_info:'出牌阶段限一次。你可以弃置你和一名其他角色的共计三张牌。然后若你与其之中有角色因此失去了三张牌,该角色对另一名角色造成1点伤害。',
			dcpitian:'辟田',
			dcpitian_info:'①当你的牌被弃置后,或当你受到伤害后,你的手牌上限+1。②结束阶段,若你的手牌数小于手牌上限,你可以摸至手牌上限(至多摸五张),然后重置因〖辟田①〗增加的手牌上限。',
			furongfuqian:'傅肜傅佥',
			dcxuewei:'血卫',
			dcxuewei_info:'结束阶段,你可以选择一名体力值不大于你的角色,然后你获得如下效果直到你的下回合开始时:当其受到伤害时,防止此伤害,然后你失去1点体力,你与其各摸一张牌(若该角色为你,则改为你摸一张牌)。',
			dcyuguan:'御关',
			dcyuguan_info:'一名角色的回合结束时,若你已损失的体力值为全场最多,你可以减1点体力上限,然后令X名角色将手牌摸至体力上限(X为你已损失的体力值)。',
			qinlang:'秦朗',
			dchaochong:'昊宠',
			dchaochong_info:'当你使用牌后,你可以将手牌摸至或弃置至你的手牌上限数(至多摸五张)。然后若你以此法:得到牌,你的手牌上限-1;失去牌,你的手牌上限+1。',
			dcjinjin:'矜谨',
			dcjinjin_info:'每回合限一次。当你造成或受到伤害后,你可以重置因〖昊宠〗增加或减少的手牌上限,令伤害来源弃置至多X张牌,然后你摸Y张牌(X为你以此法变化的手牌上限且至少为1,Y为X减其以此法弃置的牌数)。',
			xianglang:'向朗',
			dckanji:'勘集',
			dckanji_info:'出牌阶段限两次。你可以展示所有手牌,若花色均不同,你摸两张牌。然后若你的手牌因此包含了四种花色,你跳过下一个弃牌阶段。',
			dcqianzheng:'愆正',
			dcqianzheng_info:'每回合限两次。当你成为其他角色使用【杀】或普通锦囊牌的目标后,你可以重铸两张牌。若你以此法重铸的牌中没有与指定你为目标的牌类别相同的牌,你于此牌对应的实体牌进入弃牌堆后获得此牌对应的所有实体牌。',
			qiaorui:'桥蕤',
			dcaishou:'隘守',
			dcaishou_tag:'隘',
			dcaishou_info:'①结束阶段,你可以摸X张牌,称为“隘”(X为你的体力上限)。②准备阶段,你弃置所有“隘”,若你以此法弃置的牌数大于体力值且你的体力上限小于9,你加1点体力上限。③当你于回合外失去最后一张“隘”后,你减1点体力上限。',
			dcsaowei:'扫围',
			dcsaowei_info:'当一名其他角色使用【杀】结算结束后,若此牌的目标角色不包含你且均在你的攻击范围内,你可以将一张“隘”当做【杀】对所有目标角色使用。以此法转化的【杀】结算完毕后,若此【杀】造成过伤害,你获得此【杀】对应的实体牌。',
			yuantanyuanxiyuanshang:'袁谭袁尚袁熙',
			dcneifa:'内伐',
			dcneifa_info:'出牌阶段开始时,你可以摸三张牌,然后弃置一张牌。若你弃置的牌类型为:基本牌,本阶段你不能使用锦囊牌,且【杀】的使用次数上限+X且可以额外指定一名目标;锦囊牌,本阶段你不能使用基本牌,且使用普通锦囊牌选择目标时可以增加或减少一个目标(X为你发动〖内伐〗弃牌后手牌中因〖内伐〗而不能使用的牌的数量且最多为5。你以此法选择的额外目标均无距离限制)。',
			dc_sunziliufang:'新杀孙资刘放',
			dc_sunziliufang_prefix:'新杀',
			dcqinshen:'勤慎',
			dcqinshen_info:'弃牌阶段结束时,你可以摸X张牌(X为本回合未进入过弃牌堆的花色数)。',
			dcweidang:'伪谠',
			dcweidang_info:'其他角色的结束阶段,你可以将一张字数为X的牌置于牌堆底,然后获得牌堆里一张字数为X的牌(X为本回合未进入过弃牌堆的花色数)。若你能使用此牌,你使用之。',
			mengjie:'孟节',
			dcyinlu:'引路',
			dcyinlu_info:'①游戏开始时,你令三名角色依次分别获得“乐泉”、“藿溪”、“瘴气”标记(若场上角色数为2则改为令一名其他角色获得其中2枚,你获得剩余标记),然后你获得“芸香”标记并获得1点“芸香”值。②准备阶段/有〖引路〗标记的角色死亡时,你可以移动一名角色的1枚/其的所有〖引路〗标记。',
			dcyinlu_lequan:'乐泉',
			dcyinlu_lequan_info:'结束阶段,你可以弃置一张♦牌并回复1点体力。',
			dcyinlu_huoxi:'藿溪',
			dcyinlu_huoxi_info:'结束阶段,你可以弃置一张♥牌并摸两张牌。',
			dcyinlu_zhangqi:'瘴气',
			dcyinlu_zhangqi_info:'锁定技。结束阶段,你须弃置一张♠牌,否则失去1点体力。',
			dcyinlu_yunxiang:'芸香',
			dcyinlu_yunxiang_info:'①结束阶段,你可以弃置一张♣牌,获得1点“芸香”值。②当你受到伤害时,你可以扣减所有“芸香”值,减少等量的伤害。',
			dcyouqi:'幽栖',
			dcyouqi_info:'锁定技。当其他角色因〖引路〗标记弃置牌后,你有一定概率获得此牌。',
			dcyouqi_faq:'〖幽栖〗概率<br>',
			dcyouqi_faq_info:'当满足〖幽栖〗条件时,系统生成一个随机数X∈[0,1)。若X小于(1.25-0.25Y),或幸运星模式已开启,你获得此牌(Y为你至该角色的距离)。',
			dc_sunhanhua:'孙寒华',
			dchuiling:'汇灵',
			dchuiling_info:'锁定技。当你使用牌时,若此牌颜色为弃牌堆中数量较少的颜色,你获得1枚“灵”标记。若弃牌堆中:红色牌数大于黑色牌数,你回复1点体力;黑色牌数大于红色牌数,你可以弃置一名其他角色的一张牌。',
			dcchongxu:'冲虚',
			dcchongxu_info:'限定技。出牌阶段,若“灵”数不小于4,你可以失去〖汇灵〗,增加等同于“灵”数的体力上限(至多增加场上人数的体力上限),然后获得〖踏寂〗和〖清荒〗。',
			dctaji:'踏寂',
			dctaji_info:'当你失去手牌后,根据你失去牌的原因执行以下效果:1.使用:你弃置其他角色一张牌;2.打出:你摸一张牌;3.弃置:你回复1点体力;4.其他:你下一次对其他角色造成伤害时,此伤害+1。',
			dcqinghuang:'清荒',
			dcqinghuang_info:'出牌阶段开始时,你可以减1点体力上限,然后你于本回合发动〖踏寂〗时额外随机执行一种效果。',
			dc_huojun:'霍峻',
			dcgue:'孤扼',
			dcgue_info:'每回合限一次。当你需要使用或打出【杀】或【闪】时,若你有手牌,你可以展示之。若其中【杀】和【闪】的数量之和不超过1,你视为使用或打出此牌。',
			dcsigong:'伺攻',
			dcsigong_info:'其他角色的回合结束时,若其于本回合内使用牌被响应过,你可以将手牌摸至或弃置至1,视为对其使用一张需使用X张【闪】抵消的【杀】,且此【杀】的伤害基数+1(X为你以此法弃置的牌数且至少为1)。当你以此法造成伤害后,该技能于本轮失效。',
			peiyuanshao:'裴元绍',
			dcmoyu:'没欲',
			dcmoyu_info:'出牌阶段每名角色限一次。你可以获得一名其他角色区域里的一张牌,然后其可以对你使用一张无距离限制的【杀】,且此【杀】伤害基数为X(X为你于本回合发动此技能的次数)。若此【杀】对你造成了伤害,你令此技能于本回合失效。',
			zhangchu:'张楚',
			dcjizhong:'集众',
			dcjizhong_info:'出牌阶段限一次。你可以令一名其他角色摸两张牌,然后其选择一项:1.若其没有“信众”标记,其获得“信众”标记;2.交给你三张手牌。',
			dcrihui:'日彗',
			dcrihui_info:'每回合限一次。当你使用普通锦囊牌或黑色基本牌结算结束后,若此牌的目标数为1且目标不为你,且其:没有“信众”,则所有有“信众”的角色依次视为对其使用一张与此牌牌名和属性相同的牌;有“信众”,则你可以获得其区域里的一张牌。',
			dcguangshi:'光噬',
			dcguangshi_info:'锁定技。准备阶段,若所有其他角色均有“信众”,你摸两张牌并失去1点体力。',
			dongwan:'董绾',
			dcshengdu:'生妒',
			dcshengdu_info:'回合开始时,你可以选择一名其他角色。当其于其的下个摸牌阶段得到牌后,你摸等量的牌。',
			dcjieling:'介绫',
			dcjieling_info:'出牌阶段限一次。你可以将两张颜色不同的手牌当无距离限制且无任何次数限制的【杀】使用。然后若此【杀】:造成了伤害,所有目标角色失去1点体力;未造成伤害,你对所有目标角色依次发动一次〖生妒〗。',
			yuanyin:'袁胤',
			dcmoshou:'墨守',
			dcmoshou_info:'当你成为其他角色使用的黑色牌的目标后,你可以摸X张牌(X为你本局游戏此前发动过此技能的次数÷3的余数+1)。',
			dcyunjiu:'运柩',
			dcyunjiu_info:'一名角色死亡后,你可以弃置等同于其因死亡事件的规则而弃置的牌数,将其此次弃置的牌交给一名其他角色。然后你加1点体力上限并回复1点体力。',
			gaoxiang:'高翔',
			dcchiying:'驰应',
			dcchiying_info:'出牌阶段限一次。你可以选择一名体力不大于你的角色,令其攻击范围内的其他角色依次弃置一张牌。然后若你选择的角色不为你,其获得以此法弃置的牌中所有的基本牌。',
			zhangkai:'张闿',
			dcxiangshu:'相鼠',
			dcxiangshu_info:'其他角色的出牌阶段开始时,若其手牌数不小于其体力值,你可以选择一个不大于5的非负整数,然后你弃置一张牌或声明此数字。若如此做,此阶段结束时,若其手牌数与你选择的数字:差值不大于1,你获得其一张牌;相等,你对其造成1点伤害。',
			mengyou:'孟优',
			dcmanzhi:'蛮智',
			dcmanzhi_info:'①准备阶段,你可以选择一名其他角色并选择一项:1.令其交给你两张牌,然后其视为使用一张无距离限制的【杀】;2.获得其区域内至多两张牌,然后交给其等量的牌并摸一张牌。②结束阶段,若你的体力值与本回合准备阶段时的体力值相等,你可以执行你未于本回合执行过的〖蛮智①〗的分支。',
			dc_sunchen:'孙綝',
			dczigu:'自固',
			dczigu_info:'出牌阶段限一次。你可以弃置一张牌,然后获得场上的一张装备牌。若你没有因此获得其他角色的牌,你摸一张牌。',
			dczuowei:'作威',
			dczuowei_info:'当你于回合内使用牌时,你可以根据你的手牌数执行对应效果:大于X,令此牌不可被响应;等于X,对一名其他角色造成1点伤害;小于X,摸两张牌且不能于本回合再触发该选项(X为你装备区里牌的数量且至少为1)。',
			liuchongluojun:'刘宠骆俊',
			dcminze:'悯泽',
			dcminze_info:'①出牌阶段每名角色限一次。你可以将至多两张牌名不同的牌交给一名手牌数小于你的角色,若其因此手牌数大于你,〖悯泽①〗于此阶段失效。②结束阶段,你将手牌摸至X张(X为你本回合因〖悯泽①〗失去过的牌的牌名数且至多为5)。',
			dcjini:'击逆',
			dcjini_info:'当你受到伤害后,你可以重铸至多Y张手牌(Y为你的体力上限减本回合你以此法重铸过的牌数)。若你以此法获得了【杀】,你可以对伤害来源使用一张无视距离且不可被响应的【杀】。',
			yuechen:'乐綝',
			dcporui:'破锐',
			dcporui_info:'每轮限一次。其他角色的结束阶段,你可以弃置一张牌并选择另一名于此回合内失去过牌的其他角色,你视为对其依次使用X+1张【杀】,然后你交给其X张手牌(X为其本回合失去的牌数且至多为5)。',
			dcgonghu:'共护',
			dcgonghu_info:'锁定技。①当你于回合外失去基本牌后,若你本回合内失去基本牌的数量大于1,你将〖破锐〗改为每轮限两次。②当你造成或受到伤害后,若你本回合内造成或受到的总伤害大于1,你删除〖破锐〗中的“,然后你交给其X张手牌”。③当你使用红色基本牌/红色普通锦囊牌时,若你已发动过〖共护①〗和〖共护②〗,则此牌不可被响应/可额外增加一个目标。',
			yue_caiwenji:'乐蔡琰',
			yue_caiwenji_prefix:'乐',
			dcshuangjia:'霜笳',
			dcshuangjia_tag:'胡笳',
			dcshuangjia_info:'锁定技。①游戏开始,你将你的手牌标记为“胡笳”。②你的“胡笳”牌不计入手牌上限。③其他角色至你的距离+X(X为你的“胡笳”数且至多为5)。',
			dcbeifen:'悲愤',
			dcbeifen_info:'锁定技。①当你失去牌后,若这些牌中有“胡笳”牌,你获得与你手牌中“胡笳”牌花色均不同的每种花色的牌各一张。②若你手牌中“胡笳”牌数小于不为“胡笳”牌的牌数,你使用牌无距离和次数限制。',
			dc_wuban:'吴班',
			dcyouzhan:'诱战',
			dcyouzhan_info:'锁定技。当其他角色于你的回合内失去牌后,你摸一张牌(不计入本回合的手牌上限),且其获得如下效果:1.其于此回合下一次受到的伤害+1;2.结束阶段,若其于此回合未受到过伤害,其摸X张牌(X为其此回合失去过牌的次数且至多为3)。',
			yue_zhoufei:'乐周妃',
			yue_zhoufei_prefix:'乐',
			dclingkong:'灵箜',
			dclingkong_tag:'箜篌',
			dclingkong_info:'锁定技。①游戏开始时,你将所有手牌标记为“箜篌”。②你的“箜篌”牌不计入手牌上限。③当你于一回合内首次于摸牌阶段外得到牌后,系统随机将其中的一张牌标记为“箜篌”。',
			dcxianshu:'贤淑',
			dcxianshu_info:'出牌阶段,你可以将一张“箜篌”正面向上交给一名其他角色,然后你摸X张牌(X为你与其的体力值之差且至多为5)。若此牌为红色,且该角色的体力值不大于你,则其回复1点体力;若此牌为黑色,且该角色的体力值不小于你,则其失去1点体力。',
			dc_zhangmancheng:'张曼成',
			dclvecheng:'掠城',
			dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用当前手牌中的【杀】无任何次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。',
			dczhongji:'螽集',
			dczhongji_info:'当你使用牌时,若此牌无花色或你手牌区里没有与此牌花色相同的手牌,你可以将手牌摸至体力上限并弃置X张牌(X为本回合发动〖螽集〗的次数)。',
			dc_jiachong:'贾充',
			dcbeini:'悖逆',
			dcbeini_info:'出牌阶段限一次。你可以将手牌调整至体力上限,然后令一名角色视为对另一名角色使用一张【杀】,且这些角色的非锁定技失效直到回合结束。',
			dcshizong:'恃纵',
			dcshizong_info:'当你需要使用一张基本牌时,你可以交给一名其他角色X张牌,然后其可以将一张牌置于牌堆底,视为你使用之。若其不为当前回合角色,此技能失效直到回合结束(X为你本回合发动〖恃纵〗的次数)。',
			pangshanmin:'庞山民',
			dccaisi:'才思',
			dccaisi_info:'当你于回合内/回合外使用基本牌结算结束后,若你本回合以此法得到的牌数不大于你的体力上限,你可以从牌堆/弃牌堆随机获得一张非基本牌。',
			dczhuoli:'擢吏',
			dczhuoli_info:'锁定技。一名角色的回合结束时,若你本回合使用的牌数大于体力上限,你加1点体力上限(不能超过存活角色数),回复1点体力。',
			yue_caiyong:'乐蔡邕',
			yue_caiyong_prefix:'乐',
			dcjiaowei:'焦尾',
			dcjiaowei_tag:'弦',
			dcjiaowei_info:'锁定技。①游戏开始时,你将所有手牌标记为“弦”。②你的“弦”牌不计入手牌上限。③当你受到伤害时,若来源的手牌数不大于你的“弦”牌数,防止此伤害。',
			dcfeibai:'飞白',
			dcfeibai_info:'每回合限一次。当你使用牌结算结束后,若你本回合使用过至少两张牌,你可以随机获得一张字数为X的牌。若你的“弦”数不大于X,你重置〖飞白〗(X为此牌与你使用的上一张牌的字数之和)。',
			kuaiqi:'蒯祺',
			dcliangxiu:'良秀',
			dcliangxiu_info:'出牌阶段,你可以弃置两张不同类型的牌,然后从两张与你弃置的牌类型均不同的牌中选择一张获得之(每阶段每种类型限一次)。',
			dcxunjie:'殉节',
			dcxunjie_info:'每轮每项限一次。一名角色的回合结束时,若你本回合于摸牌阶段外得到过牌,你可以选择一项:1.令一名角色将手牌数摸或弃置至与其体力值相同;2.令一名角色将体力回复或失去至与其手牌数相同。',
			dc_dongzhao:'董昭',
			dcyijia:'移驾',
			dcyijia_info:'一名角色受到伤害后,若你至其的距离不大于1,你可以将场上一张装备牌移动至其对应装备栏(替换原装备)。若其因此脱离了一名角色的攻击范围,你摸一张牌。',
			dcdingji:'定基',
			dcdingji_info:'准备阶段,你可以令一名角色将手牌摸或弃置至五张,然后其展示手牌。若牌名均不同,则其可以视为使用其中一张基本或普通锦囊牌。',

			sp_baigei:'无双上将',
			sp_caizijiaren:'才子佳人',
			sp_zhilan:'芝兰玉树',
			sp_zongheng:'纵横捭阖',
			sp_guixin:'天下归心',
			sp_jianghu:'江湖之远',
			sp_daihan:'代汉涂高',
			sp_taiping:'太平甲子',
			sp_yanhan:'匡鼎炎汉',
			sp_jishi:'悬壶济世',
			sp_raoting:'绕庭之鸦',
			sp_yijun:'异军突起',
			sp_zhengyin:'正音雅乐',
		},
	};
});