修复技能CD减少

This commit is contained in:
admin 2026-06-13 02:28:45 +08:00
parent 8e68921ead
commit 55d6525971

View file

@ -114,6 +114,14 @@ end
---* ========== 技能CD事件系统 ========== ---* ========== 技能CD事件系统 ==========
MagicOBJ.SkillCD_handlers = {} MagicOBJ.SkillCD_handlers = {}
---* 技能ID→技能名映射(供getskillcscd查询原始CD用)
MagicOBJ.SkillNameMap = {
[66] = "开天斩",
[26] = "烈火剑法",
[56] = "逐日剑法",
[12] = "刺杀剑术",
}
---* 注册技能CD减少源 ---* 注册技能CD减少源
---* key: 唯一标识(如"套装_xxx") ---* key: 唯一标识(如"套装_xxx")
---* callback: function(actor) -> {{skillId, cdMs}, ...} or nil ---* callback: function(actor) -> {{skillId, cdMs}, ...} or nil
@ -131,33 +139,39 @@ function MagicOBJ:unregSkillCD(key)
end end
---* 推送技能CD刷新事件(外部统一入口) ---* 推送技能CD刷新事件(外部统一入口)
---* 回调返回的是减少量(reductionMs)此函数用原始CD减去减少量
function MagicOBJ:pushSkillCD(actor) function MagicOBJ:pushSkillCD(actor)
local cdMap = {} local reduceMap = {} -- {skillId = totalReductionMs}
for key, callback in pairs(self.SkillCD_handlers or {}) do for key, callback in pairs(self.SkillCD_handlers or {}) do
local ok, ret = pcall(callback, actor) local ok, ret = pcall(callback, actor)
if ok and ret then if ok and ret then
for _, v in ipairs(ret) do for _, v in ipairs(ret) do
local skillId, cdMs = v[1], v[2] local skillId, reductionMs = v[1], v[2]
if skillId and cdMs and cdMs > 0 then if skillId and reductionMs and reductionMs > 0 then
if not cdMap[skillId] or cdMs < cdMap[skillId] then ---* 多个来源减同一技能CD累加减少量
cdMap[skillId] = cdMs reduceMap[skillId] = (reduceMap[skillId] or 0) + reductionMs
end
end end
end end
end end
end end
for skillId, cdMs in pairs(cdMap) do ---* 遍历所有映射技能先恢复原始CD再减(防止脱装备后CD不恢复)
LOGDump(cdMs) for skillId, skillName in pairs(MagicOBJ.SkillNameMap) do
SetSkillMaxCD(actor, skillId, cdMs) local originalCD = getskillcscd(skillName) or 0
if originalCD > 0 then
local totalReduce = reduceMap[skillId] or 0
local finalCD = math.max(0, originalCD - totalReduce)
SetSkillMaxCD(actor, skillId, finalCD)
end
end end
end end
---* 套装技能CD配置 ---* 套装技能CD配置
---* value = {{skillId, reductionMs}, ...} 减少量(毫秒)
MagicOBJ.SuitSkillCD = { MagicOBJ.SuitSkillCD = {
[2001] = {{66, 1000},{26, 1000},{56, 1000}}, -- 开天斩/烈火剑法/逐日剑法 CD=1秒 [2001] = {{66, 1000},{26, 1000},{56, 1000}}, -- 1秒
[2002] = {{66, 2000},{26, 2000},{56, 2000}}, -- 开天斩/烈火剑法/逐日剑法 CD=2秒 [2002] = {{66, 2000},{26, 2000},{56, 2000}}, -- 2秒
[2003] = {{66, 3000},{56, 3000},{26, 3000}}, -- 开天斩/烈火剑法/逐日剑法 CD=3秒 [2003] = {{66, 3000},{56, 3000},{26, 3000}}, -- 3秒
[2004] = {{66, 4000},{56, 4000},{26, 4000}}, -- 刺杀剑术/开天斩/烈火剑法 CD=4秒 [2004] = {{66, 4000},{56, 4000},{26, 4000}}, -- 4秒
} }