酷代码 AI
菜单
服务商

无名杀“夺技”技能开发:三大注意点护航游戏逻辑!

// 无名杀自定义技能:夺技 // 技能描述:当你使用牌指定其他角色为目标时,你可以选择该角色当前拥有的一个非锁定技, // 获得该技能直到此回合结束,或选择让其交给你一张手牌。 "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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]