'use strict';
game.import('card',function(lib,game,ui,get,ai,_status){
	return {
		name:'yongjian',
		connect:true,
		card:{
			du:{
				type:'basic',
				fullskin:true,
				global:['g_du','g_du_give'],
				content:function(){},
				ai:{
					value:-5,
					useful:6,
					result:{
						player:function(player,target){
							if(player.hasSkillTag('usedu')) return 5;
							return -1;
						}
					},
					order:7.5
				},
			},
			guaguliaodu:{
				type:'trick',
				fullskin:true,
				enable:true,
				filterTarget:function(card,player,target){
					return target.isDamaged();
				},
				content:function(){
					'step 0'
					target.recover(event.baseDamage||1);
					'step 1'
					if(target.hasCard(function(card){
						return _status.connectMode||get.name(card,target)=='du';
					},'h')) target.chooseToDiscard('h',{name:'du'},'是否弃置一张【毒】?(不失去体力)').set('ai',()=>1);
				},
				ai:{
					order:2,
					tag:{
						recover:1,
					},
					result:{
						target:1.5,
					}
				},
			},
			chenghuodajie:{
				type:'trick',
				fullskin:true,
				enable:true,
				filterTarget:function(card,player,target){
					return target!=player&&target.countCards('h')>0;
				},
				content:function(){
					'step 0'
					if(typeof event.baseDamage!='number') event.baseDamage=1;
					if(!target.countCards('h')||!player.isIn()) event.finish();
					else player.choosePlayerCard(target,'h',true);
					'step 1'
					if(result.bool){
						event.show_card=result.cards[0];
						var str=get.translation(player);
						player.showCards(event.show_card);
						target.chooseControl().set('choiceList',[
							'令'+str+'获得'+get.translation(event.show_card),
							'受到'+str+'造成的'+event.baseDamage+'点伤害',
						]).set('ai',function(){
							var evt=_status.event.getParent(),player=evt.target,source=evt.player,card=evt.show_card;
							if(get.damageEffect(player,source,player)>0) return 1;
							if(get.attitude(player,source)*get.value(card,source)>=0) return 0;
							if(card.name=='tao') return 1;
							return get.value(card,player)>(6+(Math.max(player.maxHp,3)-player.hp)*1.5)?1:0;
						});
					}
					else event.finish();
					'step 2'
					if(result.index==0) target.give(event.show_card,player);
					else target.damage();
				},
				ai:{
					order:6,
					tag:{
						damage:1,
						loseCard:1,
						gain:1,
					},
					result:{
						player:0.1,
						target:-1.2,
					},
				},
			},
			tuixinzhifu:{
				type:'trick',
				fullskin:true,
				enable:true,
				filterTarget:function(card,player,target){
					return target!=player&&target.countGainableCards(player,'hej')>0;
				},
				range:{global:1},
				content:function(){
					'step 0'
					player.gainPlayerCard(target,'hej',true,[1,2]);
					'step 1'
					if(result.bool&&target.isIn()){
						var num=result.cards.length,hs=player.getCards('h');
						if(!hs.length) event.finish();
						else if(hs.length<num) event._result={bool:true,cards:hs};
						else player.chooseCard('h',true,num,'交给'+get.translation(target)+get.cnNumber(num)+'张牌');
					}
					else event.finish();
					'step 2'
					if(result.bool) player.give(result.cards,target);
				},
				ai:{
					order:5,
					tag:{
						loseCard:1,
						gain:0.5,
					},
					wuxie:function(target,card,player,viewer){
						if(get.attitude(player,target)>0&&get.attitude(viewer,player)>0){
							return 0;
						}
					},
					result:{
						target:function(player,target){
							if(get.attitude(player,target)<=0) return ((target.countCards('he',function(card){
								return get.value(card,target)>0&&card!=target.getEquip('jinhe');
							})>0)?-0.3:0.3)*Math.sqrt(player.countCards('h'));
							return ((target.countCards('ej',function(card){
								if(get.position(card)=='e') return get.value(card,target)<=0;
								var cardj=card.viewAs?{name:card.viewAs}:card;
								return get.effect(target,cardj,target,player)<0;
							})>0)?1.5:-0.3)*Math.sqrt(player.countCards('h'));
						},
					},
				},
			},
			yitianjian:{
				type:'equip',
				subtype:'equip1',
				fullskin:true,
				distance:{attackFrom:-1},
				skills:['yitianjian'],
				ai:{
					equipValue:1.5,
					basic:{
						equipValue:1.5,
					},
				}
			},
			qixingbaodao:{
				type:'equip',
				subtype:'equip1',
				distance:{attackFrom:-1},
				fullskin:true,
				global:'qixingbaodao',
				ai:{
					order:9,
					value:function(card,player){
						if(player.getEquips(1).contains(card)) return 0;
						return 4;
					},
					equipValue:function(card,player){
						if(player.getCards('e').contains(card)) return 0;
						return -get.value(player.getCards('e'));
					},
					basic:{
						equipValue:5,
					},
					result:{
						keepAI:true,
						target:function(player,target){
							var cards=target.getCards('e'),js=target.getCards('j');
							var val=get.value(cards,target);
							for(var card of js) val-=get.effect(target,card.viewAs?{name:card.viewAs}:card,target,player);
							return -val;
						},
					},
				},
			},
			duanjian:{
				type:'equip',
				subtype:'equip1',
				fullskin:true,
				distance:{attackFrom:1},
				selectTarget:[-1,-2],
				ai:{
					order:9,
					equipValue:function(card,player){
						if(get.position(card)=='e') return -2;
						return 2;
					},
					value:function(card,player){
						if(player.getEquips(1).contains(card)) return -3;
						return 3;
					},
					basic:{
						equipValue:5,
					},
					result:{
						keepAI:true,
						target:function(player,target){
							var val=2.5;
							var val2=0;
							var card=target.getEquip(1);
							if(card){
								val2=get.value(card,target);
								if(val2<0) return 0;
							}
							return -val-val2;
						},
					},
				},
			},
			serafuku:{
				type:'equip',
				subtype:'equip2',
				fullskin:true,
				skills:['serafuku'],
				selectTarget:[-1,-2],
				ai:{
					order:9,
					equipValue:function(card,player){
						if(get.position(card)=='e') return -2;
						return 2;
					},
					value:function(card,player){
						if(player.getEquips(2).contains(card)) return -3;
						return 3;
					},
					basic:{
						equipValue:5,
					},
					result:{
						keepAI:true,
						target:function(player,target){
							var val=(target.hasSex('male')?2.5:0);
							var val2=0;
							var card=target.getEquip(1);
							if(card){
								val2=get.value(card,target);
								if(val2<0) return 0;
							}
							return -val-val2;
						},
					},
				},
			},
			yinfengyi:{
				type:'equip',
				subtype:'equip2',
				fullskin:true,
				skills:['yinfengyi'],
				selectTarget:[-1,-2],
				ai:{
					order:9,
					equipValue:function(card,player){
						if(get.position(card)=='e') return -1;
						return 1;
					},
					value:function(card,player){
						if(player.getEquips(2).contains(card)) return -2.5;
						return 2.5;
					},
					basic:{
						equipValue:5,
					},
					result:{
						keepAI:true,
						target:function(player,target){
							var val=2;
							var val2=0;
							var card=target.getEquip(2);
							if(card){
								val2=get.value(card,target);
								if(val2<0) return 0;
							}
							return -val-val2;
						},
					},
				},
			},
			yonglv:{
				type:'equip',
				subtype:'equip4',
				fullskin:true,
				selectTarget:[-1,-2],
				distance:{
					globalFrom:-1,
					globalTo:-Infinity,
				},
				ai:{
					order:9,
					equipValue:0,
					value:function(card,player){
						if(player.getEquips(2).contains(card)) return 0;
						return 0.5;
					},
					basic:{
						equipValue:0,
					},
				},
			},
			zhanxiang:{
				type:'equip',
				subtype:'equip3',
				fullskin:true,
				distance:{globalTo:1},
				skills:['zhanxiang'],
				ai:{
					equipValue:3.5,
					basic:{
						equipValue:3.5,
					},
				}
			},
			xinge:{
				type:'equip',
				subtype:'equip5',
				fullskin:true,
				skills:['xinge'],
				ai:{
					equipValue:2,
					basic:{
						equipValue:2,
					},
				}
			},
		},
		skill:{
			yitianjian:{
				audio:true,
				trigger:{source:'damageSource'},
				direct:true,
				equipSkill:true,
				filter:function(event,player){
					return event.card&&event.card.name=='sha'&&event.getParent().name=='sha'&&player.isDamaged()&&player.countCards('h')>0;
				},
				content:function(){
					'step 0'
					player.chooseToDiscard('h',get.prompt('yitianjian'),'弃置一张手牌并回复1点体力').set('ai',(card)=>7-get.value(card)).logSkill='yitianjian';
					'step 1'
					if(result.bool) player.recover();
				},
			},
			serafuku:{
				audio:true,
				trigger:{target:'useCardToTargeted'},
				forced:true,
				equipSkill:true,
				filter:function(event,player){
					if(player.hasSkillTag('unequip2')) return false;
					if(event.player.hasSkillTag('unequip',false,{
						name:event.card?event.card.name:null,
						target:player,
						card:event.card
					})) return false;
					return event.card.name=='sha'&&player.hasSex('male');
				},
				content:function(){
					'step 0'
					player.judge(function(card){
						return get.color(card)=='black'?-2:0;
					}).judge2=function(result){
						return result.bool==false?true:false;
					};
					'step 1'
					if(result.bool===false){
						var map=trigger.customArgs,id=player.playerid;
						if(!map[id]) map[id]={};
						if(!map[id].extraDamage) map[id].extraDamage=0;
						map[id].extraDamage++;
						game.log(trigger.card,'对',player,'的伤害+1');
					}
				},
			},
			yinfengyi:{
				audio:true,
				equipSkill:true,
				forced:true,
				trigger:{player:['damageBegin3','loseHpBegin']},
				filter:function(event,player){
					if(player.hasSkillTag('unequip2')) return false;
					if(event.name=='damage'){
						if(event.source&&event.source.hasSkillTag('unequip',false,{
							name:event.card?event.card.name:null,
							target:player,
							card:event.card
						})) return false;
						return event.card&&get.type2(event.card)=='trick';
					}
					return event.type=='du';
				},
				content:function(){
					trigger.num++;
				},
			},
			zhanxiang:{
				audio:true,
				equipSkill:true,
				forced:true,
				trigger:{target:'gift'},
				filter:(event,player)=>event.target!=player,
				logTarget:'player',
				content:()=>{
					trigger.deniedGift.add(trigger.card);
				},
				ai:{
					refuseGifts:true
				}
			},
			xinge:{
				audio:true,
				enable:'phaseUse',
				usable:1,
				filter:function(event,player){
					return player.countCards('h')>0;
				},
				filterCard:true,
				position:'h',
				filterTarget:lib.filter.notMe,
				check:function(card){
					var player=_status.event.player;
					var val=5;
					if(player.needsToDiscard()) val=15;
					return val-get.value(card);
				},
				discard:false,
				lose:false,
				delay:false,
				equipSkill:true,
				content:function(){
					player.give(cards,target);
				},
				ai:{
					expose:0.1,
					order:1,
					result:{
						target:function(player,target){
							if(!ui.selected.cards.length) return 0;
							if(get.value(ui.selected.cards[0],false,'raw')<0) return -1;
							return 1;
						}
					}
				}
			},
			qixingbaodao:{
				trigger:{player:'equipBegin'},
				forced:true,
				equipSkill:true,
				filter:function(event,player){
					return event.card.name=='qixingbaodao'&&player.hasCard(function(card){
						return card!=event.card;
					},'ej');
				},
				content:function(){
					var cards=player.getCards('ej',function(card){
						return card!=trigger.card&&lib.filter.cardDiscardable(card,player,'qixingbaodao');
					});
					if(cards.length) player.discard(cards);
				},
			},
			g_du:{
				trigger:{
					player:['loseAfter','compare'],
					global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
					target:'compare',
				},
				cardSkill:true,
				filter:function(event,player,name){
					if(name=='compare'){
						if(player==event.player){
							if(event.iwhile>0) return false;
							return event.card1.name=='du';
						}
						return event.card2.name=='du';
					}
					if(event.name!='equip'&&event.name!='addJudge'&&!event.visible) return false;
					var evt=event.getl(player);
					if(!evt||!evt.hs||!evt.hs.filter(function(i){
						return get.name(i,player)=='du';
					}).length) return false;
					for(var i of lib.skill.g_du.whiteListFilter){
						if(i(event,player)) return false;
					}
					return true;
				},
				whiteListFilter:[
					(event)=>event.getParent().name=='g_du_give',
					(event)=>event.getParent(3).name=='guaguliaodu',
				],
				forced:true,
				popup:false,
				content:function(){
					'step 0'
					if(trigger.delay===false) game.delayx();
					'step 1'
					game.log(player,'触发了','#g【毒】','的效果');
					var num=1;
					if(typeof trigger.getl=='function'){
						num=trigger.getl(player).hs.filter(function(i){
							return get.name(i,player)=='du';
						}).length;
					}
					player.loseHp(num).type='du';
				},
			},
			g_du_give:{
				trigger:{
					player:'gainAfter',
					global:'phaseBefore',
				},
				cardSkill:true,
				direct:true,
				filter:function(event,player){
					if(event.name=='phase'){
						if(game.phaseNumber!=0) return false;
						if(!player._start_cards) return false;
						var hs=player.getCards('h');
						for(var card of player._start_cards){
							if(get.name(card,player)=='du'&&hs.contains(card)) return true;
						}
					}
					else{
						if(event.getParent().name!='draw') return false;
						var hs=player.getCards('h');
						for(var card of event.cards){
							if(get.name(card,player)=='du'&&hs.contains(card)) return true;
						}
					}
					return false;
				},
				content:function(){
					'step 0'
					var hs=player.getCards('h');
					if(trigger.name=='phase'){
						event.cards=player._start_cards.filter(function(card){
							return (get.name(card,player)=='du'&&hs.contains(card));
						});
					}
					else{
						event.cards=trigger.cards.filter(function(card){
							return (get.name(card,player)=='du'&&hs.contains(card));
						});
					}
					if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
					event.given_map={};
					'step 1'
					player.chooseCardTarget({
						filterCard:function(card){
							return _status.event.cards.contains(card);
						},
						filterTarget:lib.filter.notMe,
						selectCard:[1,cards.length],
						cards:event.cards,
						prompt:'是否发动【赠毒】?',
						prompt2:'将本次获得的【毒】交给其他角色',
						ai1:function(card){
							if(!ui.selected.cards.length) return 1;
							return 0;
						},
						ai2:function(target){
							return -get.attitude(_status.event.player,target)+0.01;
						},
					});
					'step 2'
					if(result.bool){
						event.given=true;
						var res=result.cards,target=result.targets[0].playerid;
						player.addGaintag(res,'du_given');
						cards.removeArray(res);
						if(!event.given_map[target]) event.given_map[target]=[];
						event.given_map[target].addArray(res);
						if(cards.length) event.goto(1);
					}
					else if(!event.given){
						if(_status.connectMode){
							game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
						}
						event.finish();
					}
					'step 3'
					if(_status.connectMode){
						game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
					}
					var logs=[];
					var map=[],cards=[];
					for(var i in event.given_map){
						var source=(_status.connectMode?lib.playerOL:game.playerMap)[i];
						logs.push(source);
						map.push([source,event.given_map[i]]);
						cards.addArray(event.given_map[i]);
					}
					player.showCards(cards,`${get.translation(player)}对${(targets=>{
						if(get.itemtype(targets)=='player') targets=[targets];
						if(targets[0]!=player) return get.translation(targets);
						const selfTargets=targets.slice();
						selfTargets[0]='自己';
						return get.translation(selfTargets);
					})(logs)}发动了【${get.skillTranslation(event.name,player)}】`);
					game.loseAsync({
						gain_list:map,
						player:player,
						cards:cards,
						giver:player,
						animate:'giveAuto',
					}).setContent('gaincardMultiple');
					player.logSkill('g_du_give',logs);
				},
				ai:{expose:0.1},
			},
			_gifting:{
				enable:'phaseUse',
				forceLoad:true,
				filter:(event,player)=>player.hasCard(card=>lib.skill._gifting.filterCard(card,player),lib.skill._gifting.position),
				filterCard:(card,player)=>game.hasPlayer(current=>player.canGift(card,current,true)),
				filterTarget:(card,player,target)=>ui.selected.cards.every(value=>player.canGift(value,target,true)),
				position:'he',
				discard:false,
				lose:false,
				delay:false,
				check:card=>{
					const player=_status.event.player;
					if(game.hasPlayer(current=>player.canGift(card,current,true)&&!current.refuseGifts(card,player)&&get.effect(current,card,player,player)>0)) return 2;
					if(!player.needsToDiscard()&&get.position(card)=='h') return 0;
					return 1+Math.random();
				},
				content:()=>{
					player.gift(cards,target);
				},
				ai:{
					order:(item,player)=>player.hasCard(card=>game.hasPlayer(current=>player.canGift(card,current,true)&&!current.refuseGifts(card,player)&&get.effect(current,card,player,player)>0),'h')?7:0.51,
					result:{
						target:(player,target)=>{
							const result=ui.selected.cards.map(value=>player.getGiftAIResultTarget(value,target));
							return result.reduce((previousValue,currentValue)=>previousValue+currentValue,0)/result.length;
						}
					}
				}
			}
		},
		translate:{
			gifts_tag:'赠',
			du:'毒',
			du_info:'①当此牌正面向上离开你的手牌区,或作为你的拼点牌而亮出时,你失去1点体力。②当你因摸牌或分发起始手牌而获得【毒】后,你可展示之并交给其他角色(不触发〖毒①〗)。',
			g_du:'毒',
			g_du_give:'赠毒',
			du_given:'已分配',
			guaguliaodu:'刮骨疗毒',
			guaguliaodu_info:'出牌阶段,对一名已受伤的角色使用。目标角色回复1点体力,然后其可以弃置一张【毒】(不触发〖毒①〗失去体力的效果)。',
			chenghuodajie:'趁火打劫',
			chenghuodajie_info:'出牌阶段,对一名有手牌的其他角色使用。你展示其一张手牌,然后令其选择一项:①将此牌交给你。②你对其造成1点伤害。',
			tuixinzhifu:'推心置腹',
			tuixinzhifu_info:'出牌阶段,对一名距离为1的其他角色使用。你获得其区域内的至多两张牌,然后交给其等量的牌。',
			yitianjian:'倚天剑',
			yitianjian_info:'当你因执行【杀】的效果而造成伤害后,若你已受伤,则你可弃置一张手牌,然后回复1点体力。',
			qixingbaodao:'七星宝刀',
			qixingbaodao_info:'锁定技。当此牌进入你的装备区时,你弃置装备区和判定区内的所有其他牌。',
			duanjian:'断剑',
			duanjian_info:'这是一把坏掉的武器…',
			duanjian_append:'<span class="text" style="font-family: yuanli">不要因为手快而装给自己。</span>',
			serafuku:'水手服',
			serafuku_info:'锁定技。当你成为【杀】的目标后,若你的性别包含男性,则你进行判定:若结果为黑色,则此牌对你的伤害值基数+1。',
			serafuku_append:'<span class="text" style="font-family: yuanli">セーラー服だからです、<br>結論! </span>',
			yinfengyi:'引蜂衣',
			yinfengyi_info:'锁定技。当你受到渠道为锦囊牌的伤害时,此伤害+1。当你因〖毒①〗而失去体力时,失去体力的量值+1。',
			yonglv:'庸驴',
			yonglv_info:'锁定技。①你至其他角色的距离-1。②其他角色至你的距离视为1。',
			yonglv_append:'<span class="text" style="font-family: yuanli">它旁边的就是王仲宣。</span>',
			zhanxiang:'战象',
			zhanxiang_info:'锁定技。①其他角色至你的距离+1。②其他角色对你赠予的牌视为赠予失败。',
			xinge:'信鸽',
			xinge_info:'出牌阶段限一次。你可以将一张手牌交给一名其他角色。',
			xinge_append:'<span class="text" style="font-family: yuanli">咕咕咕。</span>',
			
			_gifting:'赠予',
			_gifting_info:'出牌阶段,你可将一张拥有“赠”标签的手牌区装备牌置于一名其他角色的装备区内,或将一张拥有“赠”标签的手牌区非装备牌正面朝上交给一名其他角色。',
		},
		list:[
			['spade',1,'guaguliaodu'],
			['spade',2,'qixingbaodao',null,['gifts']],
			['spade',3,'shunshou',null,['gifts']],
			['spade',4,'du',null,['gifts']],
			['spade',5,'du',null,['gifts']],
			['spade',6,'sha','stab'],
			['spade',7,'sha','stab'],
			['spade',8,'sha','stab'],
			['spade',9,'du',null,['gifts']],
			['spade',10,'du',null,['gifts']],
			['spade',11,'wuxie'],
			['spade',12,'chenghuodajie'],
			['spade',13,'chenghuodajie'],
			
			['heart',1,'guaguliaodu'],
			['heart',2,'shan',null,['gifts']],
			['heart',3,'wugu',null,['gifts']],
			['heart',4,'xinge',null,['gifts']],
			['heart',5,'sha',null,['gifts']],
			['heart',6,'chenghuodajie'],
			['heart',7,'tao'],
			['heart',8,'tao'],
			['heart',9,'serafuku',null,['gifts']],
			['heart',10,'sha',null,['gifts']],
			['heart',11,'sha',null,['gifts']],
			['heart',12,'sha',null,['gifts']],
			['heart',13,'zhanxiang',null,['gifts']],
			
			['club',1,'duanjian',null,['gifts']],
			['club',2,'sha','stab'],
			['club',3,'yinfengyi',null,['gifts']],
			['club',4,'du'],
			['club',5,'yitianjian'],
			['club',6,'sha','stab'],
			['club',7,'sha','stab'],
			['club',8,'sha','stab'],
			['club',9,'sha','stab'],
			['club',10,'sha','stab'],
			['club',11,'wuxie'],
			['club',12,'wuxie'],
			['club',13,'yonglv',null,['gifts']],
			
			['diamond',1,'juedou',null,['gifts']],
			['diamond',2,'shan'],
			['diamond',3,'kaihua',null,['gifts']],
			['diamond',4,'kaihua',null,['gifts']],
			['diamond',5,'shan'],
			['diamond',6,'shan'],
			['diamond',7,'shan'],
			['diamond',8,'shan'],
			['diamond',9,'tuixinzhifu'],
			['diamond',10,'tuixinzhifu'],
			['diamond',11,'tao',null,['gifts']],
			['diamond',12,'shan'],
			['diamond',13,'sha','stab'],
		],
	}
});