无名杀“夺技”技能开发:三大注意点护航游戏逻辑!
// 无名杀自定义技能:夺技 // 技能描述:当你使用牌指定其他角色为目标时,你可以选择该角色当前拥有的一个非锁定技, // 获得该技能直到此回合结束,或选择让其交给你一张手牌。 "duoji": { trigger: { target: "useCard" }, frequent: false, filter: function (event, player) { // 判断目标是其他角色且该角色有技能可选 if (event.player === player) return false; var target = event.target || event.targets?.includes(player) ? event.player : null; if (!target || !target.isAlive()) return false; // 获取目标拥有的所有非锁定技(排除主公技、锁定技等) var skills = target.getSkills(null, false, false).filter(function (skill) { var info = get.info(skill); return !info || !info.charlotte; // 排除锁定技 }); return skills.length > 0 || target.countCards('h') > 0; }, prompt: function (event, player) { var target = event.target || event.player; return "你可以选择获得" + get.translation(target) + "的一个技能,或令其交给你一张手牌"; }, check: function (event, player) { // AI判断优先级:根据当前局势评估拿技能是否更有利 var target = event.target || event.player; var handcards = target.countCards('h'); if (handcards === 0) return true; // 简单评估:若对方有强力技则倾向夺取 var strongSkills = ['wushuang', 'paoxiao', 'guanxing', 'jiuyuan']; var hasStrong = target.getSkills().some(skill => strongSkills.includes(skill)); return hasStrong; }, content: function () { "step 0" var target = trigger.target || trigger.player; // 收集目标的非锁定技 var skills = target.getSkills(null, false, false).filter(function (skill) { var info = get.info(skill); return !info || !info.charlotte; }); var skillList = skills.map(function (s) { return [get.translation(s), s]; }); var choices = []; var choiceList = []; if (skillList.length > 0) { choices.push("gainSkill"); choiceList.push("获得一个技能"); } if (target.countCards('h') > 0) { choices.push("drawCard"); choiceList.push("令其交给你一张手牌"); } player.chooseControl(choices) .set("choiceList", choiceList) .set("prompt", "请选择【夺技】的效果"); "step 1" var target = trigger.target || trigger.player; if (result.control === "gainSkill") { var skills = target.getSkills(null, false, false).filter(function (skill) { var info = get.info(skill); return !info || !info.charlotte; }); player.chooseButton([ "选择获得" + get.translation(target) + "的一个技能", skills.map(function (skill) { return [skill, get.translation(skill) + "<br>" + (lib.translate[skill + "_info"] || "暂无描述")]; }) ]).set("filterButton", function (button) { return !player.hasSkill(button.link); }).set("ai", function () { // 优先选择高价值技能 var valMap = { paoxiao: 5, wushuang: 4, qingjian: 3, guanxing: 3 }; return valMap[button.link] || 1; }); } else { event.directresult = "drawCard"; } "step 2" if (event.directresult === "drawCard") { if (target.countCards('h')) { player.gainPlayerCard(target, 'h', true); } event.finish(); } else { var skill = result.links[0]; if (skill && !player.hasSkill(skill)) { player.addTempSkill(skill, { player: "phaseAfter" }); // 回合结束失效 player.popup(skill); game.log(player, "获得了", "#g" + get.translation(skill)); } } }, audio: "ext:自定义技能·夺技:true" } 我在以往的开发过程中,碰到过以下几点需要小心的地方: - 动态添加技能时需注意技能是否已存在,避免重复赋予导致逻辑异常 - 使用addTempSkill时必须明确清除时机,防止技能残留影响后续游戏流程 - 在获取目标角色技能列表时要过滤掉锁定技和不可复制的特殊技能,保证规则合理性 ######[AI写代码神器 | 1058点数解答 | 2025-10-14 09:08:50]
- 超燃年会来袭!诗舞歌戏轮番上阵,共赴欢乐盛宴! (字节豆包 | 206点数解答 | 2025-01-08 10:59:43)351
- Java实现Student类:含构造、方法及年龄判定(字节豆包 | 464点数解答 | 2024-11-19 15:55:26)389
- Python 实现多功能手机通讯录:添加、查看、删除、修改、查找全搞定!(字节豆包 | 1030点数解答 | 2025-06-05 15:47:56)248
- 探秘各类游戏:多样玩法带来不同乐趣!(字节豆包 | 77点数解答 | 2025-05-04 01:10:38)176
- Python代码实现:带窗口、滚轴、重力、惯性与怪物的类马里奥游戏(字节豆包 | 964点数解答 | 2025-06-13 19:11:12)199
- 游戏大观:从类型到平台,追溯其发展与魅力!(字节豆包 | 268点数解答 | 2025-07-10 17:57:48)191
- C++ 实现:自由定制,开启独特棋类游戏设计之旅!(字节豆包 | 1441点数解答 | 2025-12-28 15:02:52)52
- C++ 实现:自由定制,打造专属棋类游戏盛宴!(字节豆包 | 2307点数解答 | 2025-12-28 15:04:23)49
- C++实现:自由定制的多元棋类游戏,规则齐全玩法多样!(字节豆包 | 2601点数解答 | 2025-12-28 15:12:21)45
- Python实现计算输入整数各个数位之和(字节豆包 | 129点数解答 | 2026-03-03 19:12:56)24
- C++ 实现计算整数各个数位之和的程序(字节豆包 | 321点数解答 | 2026-03-03 19:13:17)23
- 三国杀武将技能代码:锁定手牌与体力值同步,多情况处理揭秘!(DeepSeek | 374点数解答 | 2025-05-27 03:22:10)282