From 71a932d6db32c1e6fc2efa183cd26c40cac9e3f3 Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 13 Jun 2026 02:08:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8A=80=E8=83=BDCD=E5=87=8F?= =?UTF-8?q?=E5=B0=91=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Envir/QuestDiary/系统类/属性刷新.lua | 5 +- .../Envir/QuestDiary/系统类/技能触发.lua | 74 +++++++++++++++++++ .../Envir/QuestDiary/系统类/穿戴触发.lua | 6 ++ 3 files changed, 84 insertions(+), 1 deletion(-) diff --git a/Mirserver/Mir200/Envir/QuestDiary/系统类/属性刷新.lua b/Mirserver/Mir200/Envir/QuestDiary/系统类/属性刷新.lua index fd9d0035..b7acc766 100644 --- a/Mirserver/Mir200/Envir/QuestDiary/系统类/属性刷新.lua +++ b/Mirserver/Mir200/Envir/QuestDiary/系统类/属性刷新.lua @@ -47,6 +47,9 @@ function ReloadAttOBJ.main(actor) ---* ReloadAttOBJ:MagicPower(actor) + ---* ټCD + MagicOBJ:pushSkillCD(actor) + local sever_time = Sys.getint(VarCfg.sys.int["ʱ"]) or 0 if os.time() < sever_time + 86400 then Player.setint(actor, VarCfg.Player.int["а"], getbaseinfo(actor, ConstCfg.gbase.custom_attr, 4)) @@ -233,7 +236,7 @@ function ReloadAttOBJ:MagicPower(actor) end end -----* ½ˢ +----* ½ˢ----* ½ˢ GameEvent.add(EventCfg.onLogin, function(actor) ReloadAttOBJ.main(actor) end, ReloadAttOBJ, 2) diff --git a/Mirserver/Mir200/Envir/QuestDiary/系统类/技能触发.lua b/Mirserver/Mir200/Envir/QuestDiary/系统类/技能触发.lua index fc0b0955..667d259a 100644 --- a/Mirserver/Mir200/Envir/QuestDiary/系统类/技能触发.lua +++ b/Mirserver/Mir200/Envir/QuestDiary/系统类/技能触发.lua @@ -109,4 +109,78 @@ function magselffunc2014(actor) end end + + +---* ========== CD¼ϵͳ ========== +MagicOBJ.SkillCD_handlers = {} + +---* עἼCDԴ +---* key: Ψһʶ("װ_xxx") +---* callback: function(actor) -> {{skillId, cdMs}, ...} or nil +function MagicOBJ:regSkillCD(key, callback) + if not key or not callback then + LOGPrint("regSkillCD עʧ: keycallbackΪ") + return + end + MagicOBJ.SkillCD_handlers[key] = callback +end + +---* עCDԴ +function MagicOBJ:unregSkillCD(key) + MagicOBJ.SkillCD_handlers[key] = nil +end + +---* ͼCDˢ¼(ⲿͳһ) +function MagicOBJ:pushSkillCD(actor) + local cdMap = {} + for key, callback in pairs(self.SkillCD_handlers or {}) do + local ok, ret = pcall(callback, actor) + if ok and ret then + for _, v in ipairs(ret) do + local skillId, cdMs = v[1], v[2] + if skillId and cdMs and cdMs > 0 then + if not cdMap[skillId] or cdMs < cdMap[skillId] then + cdMap[skillId] = cdMs + end + end + end + end + end + for skillId, cdMs in pairs(cdMap) do + SetSkillMaxCD(actor, skillId, cdMs) + end +end + +---* װCD +MagicOBJ.SuitSkillCD = { + [2001] = {{66, 1000},{26, 1000},{56, 1000}}, -- ն/һ𽣷/ս CD=1 + [2002] = {{66, 2000},{26, 2000},{56, 2000}}, -- ն/һ𽣷/ս CD=2 + [2003] = {{66, 3000},{56, 3000},{26, 3000}}, -- ն/һ𽣷/ս CD=3 + [2004] = {{66, 4000},{56, 4000},{26, 4000}}, -- ɱ/ն/һ𽣷 CD=4 +} + + +---* ע᣺ѼװټCD +MagicOBJ:regSkillCD("װCD", function(actor) + local suits = GetActiveEquipSuits(actor) or {} + local result = {} + for _, suitId in ipairs(suits) do + local cfg = MagicOBJ.SuitSkillCD[suitId] + if cfg then + for _, v in ipairs(cfg) do + table.insert(result, v) + end + end + end + if #result > 0 then + return result + end + return nil +end) + +---* ¼ʱͼCD +GameEvent.add(EventCfg.onLogin, function(actor) + MagicOBJ:pushSkillCD(actor) +end, MagicOBJ) + return MagicOBJ diff --git a/Mirserver/Mir200/Envir/QuestDiary/系统类/穿戴触发.lua b/Mirserver/Mir200/Envir/QuestDiary/系统类/穿戴触发.lua index eb0f8943..fa0d30d1 100644 --- a/Mirserver/Mir200/Envir/QuestDiary/系统类/穿戴触发.lua +++ b/Mirserver/Mir200/Envir/QuestDiary/系统类/穿戴触发.lua @@ -18,6 +18,7 @@ function takeoffbeforeex(actor, makeIndex, where) GameEvent.push(EventCfg.onTakebeforOffEx, actor, makeIndex, where, Info) + return Info.bool end @@ -25,13 +26,18 @@ end function takeonex(actor, makeIndex, where, itemName) local Info = {} GameEvent.push(EventCfg.onTakeOnEx, actor, makeIndex, where, itemName) + + MagicOBJ:pushSkillCD(actor) end ---* ɫװ󴥷 function takeoffex(actor, makeIndex, where, itemName) GameEvent.push(EventCfg.onTakeOffEx, actor, makeIndex, where, itemName) + + MagicOBJ:pushSkillCD(actor) end + return TakeOBJ