# 界权计技能代码实现 ```javascript // 无名杀技能代码实现 - 界权计 { name: "界权计", skills: { "界权计": { enable: true, filter: function(event, player) { return player.hasSkill(this.name); }, trigger: { player: "damagedEnd", player: "phaseEnd", player: "cardsGot", player: "cardsLost" }, content: function() { // 触发摸牌并放置"权" player.draw(1); const card = player.chooseCard("hand", "请选择一张牌作为'权'"); if (card) { player.storage.权 = player.storage.权 || []; player.storage.权.push(card); player.lose(card, "storage"); game.log(player, "将一张牌作为'权'置于武将牌上"); } }, forced: true }, "界权计_手牌上限": { enable: true, filter: function(event, player) { return player.hasSkill("界权计"); }, content: function() { // 手牌上限增加X(X为"权"的数量) const x = player.storage.权 ? player.storage.权.length : 0; player.storage.handcardMax += x; } }, "界权计_使用": { enable: "phaseUse", usable: 2, filter: function(event, player) { return player.hasSkill("界权计") && player.storage.权 && player.storage.权.length > 0; }, selectTarget: function(card, player, targets) { const x = player.storage.权.length; return targets.length <= x; }, content: function() { // 选择一张"权"弃置 const cards = player.storage.权; const card = player.chooseCard(cards, "请选择一张'权'弃置"); if (card) { // 移除"权" player.storage.权.splice(player.storage.权.indexOf(card), 1); player.discard(card); const x = player.storage.权.length + 1; // 因为还未移除当前这张 // 摸X张牌 player.draw(x); // 对X名角色各造成1点伤害 const targets = player.chooseTargets(x, "请选择" + x + "名角色各造成1点伤害"); targets.forEach(target => { player.damage(target, 1); }); } } } } } ``` ## 代码说明 1. 技能分为三个部分实现: - 主技能"界权计":处理触发条件(受伤、结束阶段、牌被获得或弃置) - "界权计_手牌上限":动态计算并增加手牌上限 - "界权计_使用":处理出牌阶段使用"权"的效果 2. 关键实现点: - 使用player.storage.权数组存储"权"牌 - 每次触发条件时摸1牌并选择1牌作为"权" - 手牌上限动态计算为X("权"的数量) - 出牌阶段限两次,可以弃1"权"摸X牌并伤害X角色 3. 注意事项: - 使用player.storage持久化存储"权"牌 - 伤害目标选择时确保不超过X个 - 计算X值时注意当前"权"牌还未被移除 ## 三条额外需要注意的逻辑点 1. 技能触发条件中的"牌被获得或弃置"需要明确是主动还是被动,代码中默认处理所有情况 2. "权"牌的数量X在弃置时计算需要注意时序,因为当前"权"牌还未从数组中移除 3. 手牌上限的动态计算需要在游戏适当阶段更新,避免上限计算不准确 [2025-04-13 17:57:13 | AI写代码神器 | 895点数解答]