import { game } from '../noname.js';
game.import('character',function(lib,game,ui,get,ai,_status){
	return {
		name:'mtg',
		character:{
			mtg_jiding:['male','qun',4,['mbaizhan','msilian']],
			// mtg_qianzhuo:['female','shu',3,[]],
			mtg_jiesi:['male','wei',3,['mtongnian','msuoling','mhuanyi']],
			mtg_lilianna:['female','qun',3,['lingyong','mduohun']],
			// mtg_nisha:['female','wu',3,[]],
			// mtg_ayeni:['male','qun',4,[]],
		},
		characterIntro:{
			mtg_jiding:'这名白色魔法的使用者极其注重忠诚,正义和荣誉。他曾全力追捕茜卓纳拉,如今已不可思议地与这位火焰法师成为伙伴。',
			mtg_qianzhuo:'茜卓纳拉是使用红色法术力的旅法师。她擅长使用火焰:除了火焰,还是火焰。茜卓性格冲动、易怒、富有激情,不断增长的火焰法术能力随时都准备爆发。她的火花在还很年轻时便已点燃,如今已是相当有经验的烈焰术士和旅法师。',
			mtg_jiesi:'杰斯贝连是使用蓝色法术的鹏洛客。他擅长心灵法术:读取心灵,幻影,知识,以及欺瞒的咒语。',
			mtg_lilianna:'莉莲娜维斯是一位精通死灵术的旅法师,她擅长用黑色法术力来复活死者,腐化生者,并从死亡中召唤力量。',
			mtg_nisha:'赞迪卡妖精部落玖瑞加的一名战士,做事倾尽全力,与大地有密切的联系,还擅使元素魔法。她能够引导时空的魔法生机地脉,为土地赋予生命。',
			mtg_ayeni:'金鬃阿耶尼是使用白色法术的鹏洛客。他长于净化身体与心灵的法术:用咒语来治疗、强化盟友,以及唤醒他人内在的心灵精华。',
		},
		skill:{
			mduohun:{
				trigger:{player:'dyingAfter'},
				forced:true,
				filter:function(event,player){
					return event.source&&event.source.isIn()&&event.source.hp>0;
				},
				logTarget:'source',
				content:function(){
					trigger.source.loseHp();
				},
				ai:{
					threaten:function(player,target){
						if(target.hp==1) return 0.6;
						return 1;
					},
					effect:{
						target:function(card,player,target,current){
							if(!target.hasFriend()) return;
							if(target.hp<=1&&get.tag(card,'damage')) return [1,0,0,-1];
						}
					}
				}
			},
			lingyong:{
				enable:'phaseUse',
				filter:function(event,player){
					return !player.hasSkill('subplayer')&&player.getSubPlayers('lingyong_get').length>0;
				},
				nosub:true,
				group:'lingyong_get',
				direct:true,
				delay:0,
				skillAnimation:true,
				animationColor:'thunder',
				content:function(){
					player.callSubPlayer().set('tag','lingyong_get');
				},
				ai:{
					order:1,
					result:{
						player:function(player,target){
							return 1;
							// if(player.hp<=1) return 1;
							// if(!player.needsToDiscard(player.hp-1)) return 1;
							// return 0;
						}
					}
				},
				subSkill:{
					get:{
						trigger:{global:'dieAfter'},
						forced:true,
						filter:function(event,player){
							return !event.player.isMin()&&![player.name,player.name1,player.name2].includes(event.player.name);
						},
						content:function(){
							var skills=lib.character[trigger.player.name][3].slice(0);
							for(var i=0;i<skills.length;i++){
								if(lib.skill[skills[i]].nosub){
									skills.splice(i--,1);
								}
							}
							player.addSubPlayer({
								name:trigger.player.name,
								skills:skills,
								hs:get.cards(2),
								intro:'出牌阶段,你可以调遣此随从(直到随从死亡不可再次切换)'
							});
						}
					}
				}
			},
			mhuanyi:{
				round:2,
				trigger:{player:'phaseEnd'},
				direct:true,
				addintro:function(storage,player){
					if(player.hasSkill('mhuanyi_target')){
						return '直到下一回合开始,当成为某类型的卡牌的惟一目标时,将目标转移给某名其他角色;'
					}
					return '';
				},
				content:function(){
					'step 0'
					var rand=Math.random();
					player.chooseTarget(get.prompt2('mhuanyi'),function(card,player,target){
						return target!=player;
					}).set('ai',function(target){
						if(get.attitude(player,target)<0){
							return rand;
						}
						return 0;
					});
					'step 1'
					if(result.bool){
						event.target=result.targets[0];
						if(player.isUnderControl(true)){
							player.line(event.target,'green');
						}
						player.chooseControl('基本牌','非基本牌','cancel2',function(){
							return Math.floor(Math.random()*2);
						}).set('prompt','选择一种卡牌类型');
					}
					else{
						event.finish();
					}
					'step 2'
					if(result.control&&result.control!='cancel2'){
						player.logSkill('mhuanyi');
						player.storage.mhuanyi_target=[event.target,result.index];
						player.addTempSkill('mhuanyi_target',{player:'phaseBegin'});
					}
				},
				subSkill:{
					target:{
						trigger:{target:'useCardToBefore'},
						priority:6,
						forced:true,
						onremove:true,
						group:'mhuanyi_die',
						filter:function(event,player){
							if(!player.storage.mhuanyi_target) return false;
							if(event.player==player.storage.mhuanyi_target[0]) return false;
							if(get.type(event.card)=='basic'){
								if(player.storage.mhuanyi_target[1]!=0) return false;
							}
							else{
								if(player.storage.mhuanyi_target[1]!=1) return false;
							}
							if(!lib.filter.targetEnabled2(event.card,event.player,player.storage.mhuanyi_target[0])){
								return false;
							}
							return true;
						},
						logTarget:function(event,player){
							return player.storage.mhuanyi_target[0];
						},
						content:function(){
							trigger.target=player.storage.mhuanyi_target[0];
							player.removeSkill('mhuanyi_target');
						}
					},
					die:{
						trigger:{global:'dieAfter'},
						silent:true,
						filter:function(event,player){
							if(!player.storage.mhuanyi_target) return false;
							return event.player==player.storage.mhuanyi_target[0];
						},
						content:function(){
							player.removeSkill('mhuanyi_target');
						}
					}
				}
			},
			msuoling:{
				trigger:{global:'useCard'},
				direct:true,
				priority:5.5,
				round:1,
				filter:function(event,player){
					if(get.type(event.card)=='trick'&&event.card.isCard){
						if(event.player==player) return false;
						if(!player.countCards('he',{suit:get.suit(event.card)})) return false;
						return true;
					}
					return false;
				},
				content:function(){
					'step 0'
					var att=get.attitude(player,trigger.player);
					var suit=get.suit(trigger.card);
					player.chooseToDiscard('he',get.prompt2('msuoling',trigger.player),function(card){
						return get.suit(card)==suit;
					}).set('autodelay',true).set('logSkill',['msuoling',trigger.player]).ai=function(card){
						if(att<0){
							return 8-get.value(card);
						}
						return 0;
					};
					'step 1'
					if(result.bool){
						trigger.cancel();
						player.chooseUseTarget(true,trigger.card);
					}
				}
			},
			msuoling_old:{
				enable:'phaseUse',
				usable:1,
				subSkill:{
					ai:{
						onremove:true
					}
				},
				filter:function(event,player){
					var nh=player.countCards('h');
					if(nh<=1||nh>=5) return false;
					return lib.skill.msuoling.getc(player).number>0;
				},
				getc:function(player){
					var hs=player.getCards('h');
					for(var i=0;i<hs.length;i++){
						if(hs[i].mtongnian_link){
							return hs[i];
						}
					}
					return -1;
				},
				getn:function(player){
					var hs=player.getCards('h');
					var ns=[];
					for(var i=0;i<hs.length;i++){
						if(!hs[i].mtongnian_link){
							ns.push(hs[i].number);
						}
					}
					return ns;
				},
				test:function(player){
					var cs=lib.skill.msuoling.getc(player).number;
					var ns=lib.skill.msuoling.getn(player);
					return lib.skill.msuoling.calc(ns,cs);
				},
				calc:function(arr, num){
					for(var i=0;i<arr.length;i++){
						if(arr[i]==num){
							return true;
						}
					}
					if(arr.length>1){
						for(var i=0;i<arr.length-1;i++){
							for(var j=i+1;j<arr.length;j++){
								var brr=[];
								for(var k=0;k<arr.length;k++){
									if(k!=i&&k!=j){
										brr.push(arr[k]);
									}
								}
								if(lib.skill.msuoling.calc(brr.concat([arr[i]+arr[j]]),num)) return true;
								if(lib.skill.msuoling.calc(brr.concat([arr[i]-arr[j]]),num)) return true;
								if(lib.skill.msuoling.calc(brr.concat([arr[i]*arr[j]]),num)) return true;
								if(lib.skill.msuoling.calc(brr.concat([arr[i]/arr[j]]),num)) return true;
							}
						}
					}
					return false;
				},
				check:function(card){
					// if(player.isUnderControl(true)) return 0;
					var player=_status.event.player;
					if(player.hasSkill('msuoling_ai')){
						return false;
					}
					if(lib.skill.msuoling.test(player)){
						return true;
					}
					else{
						player.addTempSkill('msuoling_ai',{player:['gainAfter','phaseAfter']});
						return false;
					}
				},
				content:function(){
					'step 0'
					player.showHandcards();
					'step 1'
					if(lib.skill.msuoling.test(player)){
						var card=lib.skill.msuoling.getc(player);
						card.classList.remove('glow');
						delete card.mtongnian_link;
						delete card._destroy;

						var list=lib.skill.mtongnian.getList(player);
						if(list.length){
							var card=list.randomGet();
							var fake=game.createCard(card);
							fake.mtongnian_link=card;
							player.gain(fake,'draw')._triggered=null;
							fake.classList.add('glow');
							fake._destroy='mtongnian';
						}
					}
				},
				selectCard:[1,Infinity],
				ai:{
					order:11
				}
			},
			mtongnian:{
				trigger:{player:'phaseUseBegin'},
				forced:true,
				filter:function(event,player){
					var enemies=player.getEnemies();
					for(var i=0;i<enemies.length;i++){
						if(enemies[i].countCards('h')) return true;
					}
					return false;
				},
				getList:function(player){
					var list=[];
					var enemies=player.getEnemies();
					for(var i=0;i<enemies.length;i++){
						list.addArray(enemies[i].getCards('h'));
					}
					return list;
				},
				content:function(){
					var list=lib.skill.mtongnian.getList(player);
					if(list.length){
						var card=list.randomGet();
						var fake=game.createCard(card);
						fake.mtongnian_link=card;
						player.gain(fake,'draw')._triggered=null;
						fake.classList.add('glow');
						fake._destroy='mtongnian';
					}
				},
				group:['mtongnian_change','mtongnian_use','mtongnian_lose'],
				subSkill:{
					change:{
						trigger:{player:'useCard'},
						silent:true,
						filter:function(event,player){
							return player.hasCard(function(card){
								return card.mtongnian_link?true:false;
							},'h');
						},
						content:function(){
							var list=lib.skill.mtongnian.getList(player);
							var hs=player.getCards('h',function(card){
								return card.mtongnian_link?true:false;
							});
							for(var i=0;i<hs.length;i++){
								var current=hs[i].mtongnian_link;
								hs[i].mtongnian_link=list.randomGet(current);
								if(!hs[i].mtongnian_link){
									hs[i].mtongnian_link=current;
								}
								hs[i].init(hs[i].mtongnian_link);
							}
						}
					},
					use:{
						trigger:{player:'useCardBefore'},
						silent:true,
						filter:function(event,player){
							return event.card.mtongnian_link?true:false;
						},
						content:function(){
							var link=trigger.card.mtongnian_link;
							var target=get.owner(link);
							if(target&&target!=player){
								trigger.cards.add(trigger.card);
								player.lose(trigger.cards,ui.discardPile);
								trigger.card=link;
								trigger.cards.length=0;
								trigger.cards.push(link);
								target.lose(link,ui.discardPile);
								player.logSkill('mtongnian',target);
								game.log(target,'失去了',link);
								game.delayx();
							}
							else{
								player.lose(trigger.card);
								trigger.cancel();
							}
						}
					},
					lose:{
						trigger:{player:'phaseUseEnd',global:'loseEnd'},
						silent:true,
						filter:function(event,player){
							if(event.name=='lose'){
								return lib.skill.mtongnian.getList(player).length==0;
							}
							return true;
						},
						content:function(){
							var hs=player.getCards('h',function(card){
								return card.mtongnian_link?true:false;
							});
							if(hs.length){
								player.lose(hs)._triggered=null;
							}
						}
					}
				},
				ai:{
					threaten:1.3
				}
			},
			mbaizhan:{
				trigger:{source:'damageEnd'},
				forced:true,
				filter:function(event){
					return event.num>0;
				},
				content:function(){
					player.changeHujia(trigger.num);
				},
				ai:{
					damageBonus:true
				}
			},
			msilian:{
				trigger:{player:'phaseEnd'},
				filter:function(event,player){
					return player.hujia>0;
				},
				check:function(event,player){
					return player.hujia>1&&player.hp>1;
				},
				content:function(){
					player.storage.msilian=player.hujia;
					player.changeHujia(-player.hujia);
					player.insertPhase();
				},
				group:['msilian_hp','msilian_draw'],
				subSkill:{
					hp:{
						trigger:{player:'phaseAfter'},
						silent:true,
						filter:function(event,player){
							return event.skill=='msilian'&&!player.getStat('damage');
						},
						content:function(){
							player.loseHp();
						}
					},
					draw:{
						trigger:{player:'phaseDrawBegin'},
						filter:function(event){
							return event.getParent('phase').skill=='msilian';
						},
						silent:true,
						content:function(){
							trigger.num+=player.storage.msilian-2;
						}
					}
				}
			}
		},
		translate:{
			mtg_jiding:'基定',
			mtg_qianzhuo:'茜卓',
			mtg_jiesi:'杰斯',
			mtg_lilianna:'莉莲娜',
			mtg_nisha:'妮莎',
			mtg_ayeni:'阿耶尼',

			mduohun:'夺魂',
			mduohun_info:'锁定技,当你解除濒死状态后,令你进入濒死状态的角色失去1点体力。',
			lingyong:'灵俑',
			lingyong2:'灵俑',
			lingyong3:'灵俑',
			lingyong3_bg:'俑',
			lingyong_info:'锁定技,每当一名其他角色死亡,你获得一个与该角色同名且体力上限为1、初始手牌为2的随从;出牌阶段,你可以调遣以此法获得的随从(直到随从死亡不可再次切换)。',
			mbaizhan:'百战',
			mbaizhan_info:'锁定技,每当你造成1点伤害,你获得1点护甲。',
			msilian:'祀炼',
			msilian_info:'结束阶段,若你有护甲,你可以移去全部护甲,然后进行一个额外回合;在额外回合中,你的摸牌阶段摸牌基数为你移去的护甲数;额外回合结束后,若你未造成伤害,你失去1点体力。',
			mtongnian:'通念',
			mtongnian_info:'锁定技,出牌阶段开始时,你获得一张替身牌,此牌对应一名随机敌人的一张随机手牌;每当你使用一张非替身牌,随机更换替身牌对应的牌;当你使用替身牌时,改为使用替身牌对应的牌;当出牌阶段结束,或替身牌离开手牌区,或敌方角色没有手牌时,销毁替身牌。',
			msuoling:'塑灵',
			msuoling_info:'每轮限一次,当一名其他角色使用一张非转化的普通锦囊牌时,你可以弃置一张与之花色相同的牌取消之,然后你视为使用该锦囊牌。',
			msuoling_old_info:'出牌阶段限一次,若你手牌中有替身牌且手牌数不超过5,你可以展示手牌,若其中的非替身手牌能通过四则运算得到你的替身牌的点数,你将替身牌转化为非替身牌,然后获得一张新的替身牌(此技能托管无效)。',
			mhuanyi:'幻逸',
			mhuanyi_info:'每两轮限一次,结束阶段,你可以选择一名其他角色和一种卡牌类型(选择结果对其他角色不可见),直到下一回合开始,当你首次成为该类型卡牌的惟一目标时,你将目标转移给你指定的角色(目标须合法)。',
		},
	};
});