# 太阳神三国杀技能代码:干扰 ```lua local jian = sgs.General(extension, "jian", "god", 3) -- 假设角色名为"jian" jian:addSkill("ganrao") sgs.ai_skill_invoke.ganrao = function(self, data) return true -- 默认发动干扰技能 end local ganrao = sgs.CreateTriggerSkill{ name = "ganrao", events = {sgs.TargetSpecified}, -- 当使用牌指定目标时触发 frequency = sgs.Skill_Compulsory, -- 锁定技 on_trigger = function(self, event, player, data) local use = data:toCardUse() if use.card:isKindOf("Slash") or use.card:isKindOf("Duel") or use.card:isKindOf("FireAttack") then -- 伤害类牌 for _, p in sgs.qlist(use.to) do if p:objectName() ~= player:objectName() then -- 其他角色 local room = player:getRoom() room:setPlayerFlag(p, "Skill_Nullified") -- 设置技能失效标记 room:addPlayerMark(p, "@ganrao") -- 添加标记用于可视化 -- 在下回合开始时恢复 room:setPlayerProperty(p, "ganrao_source", sgs.QVariant(player:objectName())) local recover_skill = sgs.CreateTriggerSkill{ name = "#ganrao_recover", events = {sgs.EventPhaseStart}, global = true, on_trigger = function(self, event, target, data) if target:getPhase() == sgs.Player_Start then local room = target:getRoom() local source = room:findPlayer(room:getPlayerProperty(target, "ganrao_source"):toString()) if source and source:objectName() == player:objectName() then room:setPlayerFlag(target, "-Skill_Nullified") room:removePlayerMark(target, "@ganrao") room:setPlayerProperty(target, "ganrao_source", sgs.QVariant()) room:detachSkillFromPlayer(target, "#ganrao_recover") end end return false end, } room:attachSkillToPlayer(p, "#ganrao_recover") end end end return false end, } extension:insertRelatedSkills("ganrao", "#ganrao_recover") ``` ## 代码说明 1. 这是一个锁定技(Compulsory),当角色使用伤害类牌(如杀、决斗、火攻)时自动触发 2. 技能会使目标角色的非锁定技失效,直到其下回合开始 3. 使用标记系统实现技能失效效果 4. 添加了可视化标记"@ganrao"让玩家能看到谁扰了 ## 需要注意的逻辑点 1. 需要确保只在伤害类牌触发时生效,目前代码判断了杀、决斗和火攻,可能需要根据实际游戏扩展更多伤害类牌类型 2. 技能失效的恢复时机必须准确,代码中绑定到目标角色的回合开始阶段 3. 多目标处理时要确保每个目标都独立设置和恢复技能失效状态 [2025-08-01 11:28:23 | AI写代码神器 | 737点数解答]