diff --git a/extension.js b/extension.js index 4ac5d30..3ee71b0 100644 --- a/extension.js +++ b/extension.js @@ -12,14 +12,16 @@ game.import("extension", function (lib, game, ui, get, ai, _status) { "sup2_caopi": ["male", "wei", "3/4", ["sup2_xingshang", "sup2_fangzhu", "songwei"], []], "sup2_weiyan": ["male", "shu", "2/4/3", ["sup2_kuanggu", "sup2_qimou"], []], "sup_caiwenji": ["female", "qun", 3, ["sup_beige", "sup_duanchang"], []], - "sup2_yuanshu": ["male", "qun", 5, ["sup2_yongsi", "sup2_weidi"], []] + "sup2_yuanshu": ["male", "qun", 5, ["sup2_yongsi", "sup2_weidi"], []], + "sup2_machao": ["male", "shu", 5, ["sup2_tieji", "sup2_mashu"], []], }, translate: { "sup2_luxun": "超陆逊", "sup2_caopi": "超曹丕", "sup2_weiyan": "超魏延", "sup_caiwenji": "超蔡琰", - "sup2_yuanshu": "超袁术" + "sup2_yuanshu": "超袁术", + "sup2_machao": "超马超" } }, card: { @@ -520,7 +522,7 @@ game.import("extension", function (lib, game, ui, get, ai, _status) { }, charlotte: true, skillBlocker: function (skill, player) { - return skill !== "sup_duanchang_baiban"; + return skill !== "sup_duanchang_baiban"&&!lib.skill[skill].charlotte; }, mark: true, intro: { @@ -680,6 +682,241 @@ game.import("extension", function (lib, game, ui, get, ai, _status) { if (player.needsToDiscard() > 0) event.goto(0); }, "_priority": 0 + }, + sup2_mashu:{ + trigger:{ + global:"phaseBefore", + player:"enterGame", + }, + forced:true, + filter(event,player){ + return (event.name!='phase'||game.phaseNumber==0); + }, + content(){ + player.disableEquip(2); + player.disableEquip(1); + let cards = [] + for(let i = 0;i < 1;++i){ + var card=get.cardPile2(function(c){ + var type=get.subtype(c); + if(!['equip4'].includes(type)) return false; + if(cards.includes(c))return false + return true; + }); + cards.push(card) + if(card){ + player.useCard(card,player) + } + } + }, + mod:{ + canBeDiscarded:function(card){ + if(get.position(card)=='e'&&['equip3','equip4'].includes(get.subtype(card))) return false; + }, + canBeGained:function(card){ + if(get.position(card)=='e'&&['equip3','equip4'].includes(get.subtype(card))) return false; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.getCards('e',c=>get.subtype(c)==='equip4').length; + }, + cardDiscardable:function(card,player,name){ + if(get.position(card)=='e'&&['equip3','equip4'].includes(get.subtype(card))){ + return false; + } + }, + // cardEnabled2(card,player){ + // if(get.position(card)=='e'&&['equip3','equip4'].includes(get.subtype(card))){ + // return false; + // } + // }, + }, + "_priority":0, + group:['sup2_mashu_use','sup2_mashu_draw','sup2_mashu_loseBefore'], + subSkill:{ + 'loseBefore':{ + trigger:{ + player:['loseBefore'], + }, + direct:true, + slient:true, + filter:function(event,player){ + for(let card of event.cards){ + if(get.position(card)=='e'&&['equip3','equip4'].includes(get.subtype(card))){ + return true; + } + } + return false + }, + content(){ + trigger.cards = trigger.cards.filter(card=>!(get.position(card)=='e'&&['equip3','equip4'].includes(get.subtype(card)))) + } + }, + 'use':{ + trigger:{ + player:['useCard'], + }, + filter:function(event,player){ + return ['equip3','equip4'].includes(get.subtype(event.card)) + }, + slient:true, + forced:true, + init:function(player){ + player.storage.sup2_mashu_cCardA=[] + }, + content:function(){ + player.draw() + var card = trigger.card + if(player.storage.sup2_mashu_cCardA.filter(c=>get.name(c)===get.name(card)).length === 0){ + var new_card = game.createCard(card) + new_card.discard() + player.storage.sup2_mashu_cCardA.push(new_card) + } + if(get.subtype(card) === 'equip4'){ + player.expandEquip(1); + player.expandEquip(4); + }else{ + player.expandEquip(2); + player.expandEquip(3); + } + } + }, + 'draw':{ + trigger:{ + player:"phaseDrawBegin2", + }, + frequent:true, + filter(event,player){ + return !event.numFixed; + }, + async content(event,trigger,player){ + trigger.num+=player.getCards('e',c=>get.subtype(c)==='equip3').length; + }, + ai:{ + threaten:1.3, + }, + "_priority":0, + }, + } + }, + sup2_tieji:{ + shaRelated:true, + audio:2, + audioname:["boss_lvbu3"], + trigger:{ + player:"useCardToPlayered", + }, + check:function(event,player){ + return get.attitude(player,event.target)<=0; + }, + init:function(p){ + p.storage.sup2_tieqi_pArray=[] + p.storage.sup2_tieqi_dHArray=[] + }, + filter:function(event,player){ + return event.card.name=='sha'&&!player.storage.sup2_tieqi_pArray.includes(event.target) + }, + logTarget:"target", + content:function(){ + "step 0" + player.storage.sup2_tieqi_pArray.push(trigger.target) + let num = player.countCards('e',c=>['equip3','equip4'].includes(get.subtype(c))) + if(trigger.target.getCards('hej').length === 0){ + player.storage.sup2_tieqi_dHArray.push(trigger.target) + trigger.target.addTempSkill('sup2_tieji_baiban') + event.finish() + }else{ + player.chooseButton([`使用其中至多${num}张牌`,trigger.target.getCards('hej')],[0,num],true) + .set("filterButton",(button)=>{ + let card = button.link + return player.hasUseTarget({name:get.name(card)}) + }).set('ai',button=>{ + var player=_status.event.player,card=button.link + var val=player.getUseValue(card)+0.01; + if(['equip3','equip4'].includes(get.subtype(card)))return 10 + return val; + }); + } + 'step 1' + event.cards = result.links + let f1=event.cards.filter(c=>get.type(c)==='basic'),f2=event.cards.filter(c=>get.type(c)==='trick') + if(f1){ + player.storage.sup2_tieqi_dHArray.push(trigger.target) + } + if(f2){ + trigger.target.addTempSkill('sup2_tieji_baiban') + } + if(event.cards.length === 0){ + player.storage.sup2_tieqi_dHArray.push(trigger.target) + trigger.target.addTempSkill('sup2_tieji_baiban') + } + 'step 2' + for(let c of event.cards){ + player.chooseUseTarget(true,c) + } + }, + group:['sup2_tieji_phaseEnd','sup2_tieji_directHit'], + subSkill:{ + phaseEnd:{ + trigger:{ + player:"phaseEnd", + }, + direct:true, + slient:true, + content(){ + player.storage.sup2_tieqi_pArray=[] + } + }, + directHit:{ + trigger:{ + player:"useCardToPlayered", + }, + direct:true, + filter:function(event,player){ + // game.log( player.storage.sup2_tieqi_dHArray.includes(event.player)) + return player.storage.sup2_tieqi_dHArray.includes(event.target) + }, + content(){ + trigger.directHit.push(trigger.target); + }, + "_priority":9684462, + }, + baiban:{ + init: function (player, skill) { + player.addSkillBlocker(skill); + }, + onremove: function (player, skill) { + player.removeSkillBlocker(skill); + }, + charlotte: true, + skillBlocker: function (skill, player) { + return skill !== "sup2_tieji_baiban"&&!lib.skill[skill].charlotte; + }, + mark: true, + intro: { + content: function (storage, player, skill) { + var list = player.getSkills(null, false, false).filter(function (i) { + return lib.skill.sup_duanchang_baiban.skillBlocker(i, player); + }); + if (list.length) return "失效技能:" + get.translation(list); + return "无失效技能"; + } + }, + "_priority": 0 + } + }, + ai:{ + ignoreSkill:true, + skillTagFilter:function(player,tag,arg){ + if(tag=='directHit_ai'){ + return get.attitude(player,arg.target)<=0; + } + if(!arg||arg.isLink||!arg.card||arg.card.name!='sha') return false; + if(!arg.target||get.attitude(player,arg.target)>=0) return false; + if(!arg.skill||!lib.skill[arg.skill]||lib.skill[arg.skill].charlotte||get.is.locked(arg.skill)||!arg.target.getSkills(true,false).includes(arg.skill)) return false; + }, + "directHit_ai":true, + }, + "_priority":9684463, } }, translate: { @@ -703,7 +940,12 @@ game.import("extension", function (lib, game, ui, get, ai, _status) { "锁定技,摸牌阶段,你额外摸X张牌(X为当时场上人数);出牌阶段结束时,若你本回合:1.没有造成伤害,将手牌摸至当前体力值;2.造成的伤害超过1点,本回合手牌上限改为已损失体力值。", "sup2_weidi": "伪帝", "sup2_weidi_info": - "弃牌阶段开始时,若你的手牌数大于手牌上限,则你可以将至多X张手牌交给1名其他角色。然后若X大于0,你可重复此流程(X为你的手牌数与手牌上限之差)。" + "弃牌阶段开始时,若你的手牌数大于手牌上限,则你可以将至多X张手牌交给1名其他角色。然后若X大于0,你可重复此流程(X为你的手牌数与手牌上限之差)。", + 'sup2_tieji':"铁骑", + 'sup2_tieji_info':"每回合每名角色限1次。当你使用【杀】指定一名角色为目标时,你可以观看其区域内的牌并选择其中至多X张使用之(X为你坐骑栏内的牌数量)。若你以此法选择:基本牌:其无法响应你使用的牌直到回合结束;锦囊牌:其所有技能失效直到回合结束。若你未选择任何牌,你依次令其获得以上两种效果。", + "sup2_mashu":"马术", + "sup2_mashu_info": + "①游戏开始时,你废除你的武器栏与防具栏并使用牌堆中的1张进攻坐骑牌。
②当你使用坐骑牌时,你摸一张牌并复制一张相同的坐骑牌置入弃牌堆(复制牌每种牌名限一次)。若此牌为进攻/防御坐骑牌,你获得一个额外的武器栏与进攻马栏/防具栏与防御马栏。
③你坐骑栏内的牌无法被其他角色弃置或获得。
④摸牌阶段你摸牌数+X,出牌阶段你可以额外使用Y张【杀】(X/Y为你的装备栏的防御马/进攻马数量)。" } }, intro: "", diff --git a/sup2_machao.jpg b/sup2_machao.jpg new file mode 100644 index 0000000..99d0e53 Binary files /dev/null and b/sup2_machao.jpg differ