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:'每两轮限一次,结束阶段,你可以选择一名其他角色和一种卡牌类型(选择结果对其他角色不可见),直到下一回合开始,当你首次成为该类型卡牌的惟一目标时,你将目标转移给你指定的角色(目标须合法)。', }, }; });