diff --git a/extension.js b/extension.js index e5dc69b..a74ba55 100644 --- a/extension.js +++ b/extension.js @@ -1,6 +1,6 @@ import content from "./content.js"; import _miaoTool from "./miaoTool.js"; -import { skillFactory } from "./miaoTool.js"; +import miaoTool, { skillFactory } from "./miaoTool.js"; game.import("extension", function (lib, game, ui, get, ai, _status) { const _mt = _miaoTool(lib, game, ui, get, ai, _status); return { @@ -80,6 +80,7 @@ game.import("extension", function (lib, game, ui, get, ai, _status) { zioy_kongwu: ["male", "qun", "0/0", ['zioy_kong', 'zioy_wu']], zioy_buluohong: ["male", "shu", "3", ['zioy_chiqi', 'zioy_aici', 'zioy_zongwanqianshenglingshengmie']], zioy_lingfeng: ["female", "qun", "4", ['zioy_bolian', 'zioy_fengzhen']], + zioy_huahuo: ["female", "shu", "2/5", ['zioy_shenji', 'zioy_huahuo']], }, translate: { "zioy_xixuegui": "弗拉基米尔", @@ -144,6 +145,7 @@ game.import("extension", function (lib, game, ui, get, ai, _status) { zioy_kongwu: '空无', zioy_buluohong: '不落红', zioy_lingfeng: '凌风', + zioy_huahuo: '花火', } }, card: { @@ -10445,7 +10447,154 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true; player.addSkill('zioy_bolian') } } - } + }, + zioy_shenji: { + autoTranslate: { + name: "神机", + info: `
①锁定技。当有牌于〖神机〗结算期间外被装备或进入弃牌堆时,你有20%的概率将其置于武将牌上,称为“花火”。若此时为你的回合内,则概率提升至100%。“花火”至多为5张,当“花火”牌超过5张时,你弃置最早获得的“花火”。
②出牌阶段,你可以依次使用所有的“花火”,以此法使用的牌无距离与次数限制。` + }, + trigger: { + global:["loseAfter","loseAsyncAfter"], + }, + filter(event, player){ + console.log(event.type, {event}) + // if(event.getParent(2).name = 'zioy_shenji') return false + if(event.name=='lose'&&event.parent.name=='equip') return false; + if(player.storage.forbidShenji === true) return false + return true; + }, + mark: true, + marktext:"花火", + intro:{ + content:"expansion", + markcount:"expansion", + }, + locked: true, + forced: true, + async content(event, trigger, player){ + player.storage.forbidShenji = true + if(!trigger.cards) return; + for (const c of trigger.cards) { + const randRes = _status.currentPhase === player ? true : Math.random() < .2; + if(!randRes) continue; + const next = player.addToExpansion(c, 'gain2'); + next.gaintag.add('zioy_shenji'); + await next; + if(player.getExpansions('zioy_shenji').length > 5) { + player.storage.forbidShenji = true + await player.discard(player.getExpansions('zioy_shenji').pop()) + player.storage.forbidShenji = false + } + } + player.storage.forbidShenji = false + }, + autoSubSkill: { + use: { + enable: "phaseUse", + usable: Infinity, + check: function () { + return true; + }, + mod:{ + cardUsable:function(card,player,num){ + if(player.storage.zioy_shenji_unlimit) return Infinity; + }, + targetInRange(card,player,target,now){ + if(player.storage.zioy_shenji_unlimit) return true; + }, + }, + filter: function (event, player) { + return player.getExpansions('zioy_shenji').length > 0; + }, + async content(event, trigger, player) { + player.storage.forbidShenji = true + player.storage.zioy_shenji_unlimit = true + const cards = player.getExpansions('zioy_shenji') + + for(let card of cards.reverse()) { + console.log({ + card, + canuse: _mt.player.canUse(player, card) + }) + if (_mt.player.canUse(player, card)) { + await player.chooseUseTarget( + card, + // "视为使用一张【" + get.translation(card) + "】", + true + ); + if(player.hasCard(card)) { + await player.discard(card); + } + } else { + await player.discard(card); + player.storage.shenjiDamage = (player.storage.shenjiDamage || 0) + 1 + } + } + player.storage.shenjiDamage = 0 + player.storage.zioy_shenji_unlimit = false + player.storage.forbidShenji = false + }, + ai: { + order: 9, + result: { + // target: function (player, target) { + // return target.hp - target.maxHp - 1; + // return get.damageEffect(target, player); + // }, + player: 1 + }, + threaten: 2 + }, + "_priority": 0 + }, + damage1:{ + trigger:{ + source:"damageBegin1", + }, + filter(event, player){ + return player.storage.shenjiDamage; + }, + forced:true, + async content(event,trigger,player){ + trigger.num += player.storage.shenjiDamage || 0; + }, + ai:{ + damageBonus:true, + }, + "_priority":245446556 + } + }, + ai: { + threaten: 1 + }, + _priority: 564564564, + }, + zioy_huahuo: { + autoTranslate: { + name: "花火", + info: `出牌阶段限一次,你可以随机获得并弃置场上手牌区内的5张基本牌。` + }, + enable: "phaseUse", + usable: 1, + check: function () { + return true; + }, + async content(event, trigger, player) { + const cards = [] + game.players.forEach(p => { + cards.push(...p.getCards('h')) + }) + const bcs = cards.filter(c => get.type(c) === 'basic') + console.log({ + bcs, + cards + }) + const t = _mt.loadash.arrRandomGet(bcs, 5) + await player.gain(t) + await player.discard(t) + }, + _priority: 1, + }, }, translate: { "zioy_xixue": "汲血", diff --git a/miaoTool.js b/miaoTool.js index f8d7f73..9990783 100644 --- a/miaoTool.js +++ b/miaoTool.js @@ -109,6 +109,17 @@ export default (lib, game, ui, get, ai, _status) => { } dom.classList.add(CSSS[styleName].className); } + }, + /** + * Description 判断玩家是否可以使用卡牌 + * @param {Player} player 玩家对象 + * @param {Card} card 卡牌对象 + * @returns {boolean} 如果玩家可以使用卡牌,则返回true,否则返回false + */ + canUse(player, card) { + return game.filterPlayer(current => { + return lib.filter.targetEnabled2(card, player, current); + }).length != 0 } }, loadash: { @@ -125,6 +136,23 @@ export default (lib, game, ui, get, ai, _status) => { return { ...target }; } return target; + }, + /** + * Description 从数组中随机获取指定数量的元素 + * @param {Array} arr 原始数组 + * @param {number} count 需要获取的元素数量,默认为1 + * @returns {Array} 返回一个包含随机元素的新数组 + */ + arrRandomGet(arr, count) { + arr = [...arr]; + count = count || 1; + const result = []; + for (let i = 0; i < count; i++) { + const index = Math.floor(Math.random() * arr.length); + result.push(arr[index]); + arr.splice(index, 1); + } + return result; } }, // 提供一些便捷的math功能 diff --git a/zioy_huahuo.jpg b/zioy_huahuo.jpg new file mode 100644 index 0000000..249fe82 Binary files /dev/null and b/zioy_huahuo.jpg differ