EventManager = { Language = 1 } -- 兼容 Lua 5.1 和 5.2+ local unpack = unpack or table.unpack function EventManager:Init() EventManager._events = {} end -- 注册事件监听器 function EventManager:EventAdd(eventName, callback) if not self._events[eventName] then self._events[eventName] = {} end -- 防止重复添加 for _, listener in ipairs(self._events[eventName]) do if listener == callback then return false end end table.insert(self._events[eventName], callback) return true end -- 取消注册 function EventManager:EventRemove(eventName, callback) if not self._events[eventName] then return false end for i, listener in ipairs(self._events[eventName]) do if listener == callback then table.remove(self._events[eventName], i) return true end end return false end -- 触发事件(使用兼容的 unpack) function EventManager:Call(eventName, ...) if not self._events[eventName] then return 0 end local count = 0 -- 使用兼容的 unpack 函数 local listeners = { unpack(self._events[eventName]) } for _, callback in ipairs(listeners) do if type(callback) == "function" then local success, result = pcall(callback, ...) if not success then print("事件回调错误:", result) end count = count + 1 end end return count end -- 替代方案:使用更安全的方式(推荐) function EventManager:CallSafe(eventName, ...) if not self._events[eventName] then return 0 end local count = 0 -- 安全复制数组 local listeners = {} for i, v in ipairs(self._events[eventName]) do listeners[i] = v end for _, callback in ipairs(listeners) do if type(callback) == "function" then local success, result = pcall(callback, ...) if not success then print("事件回调错误:", result) end count = count + 1 end end return count end -- 清空事件 function EventManager:clear(eventName) if eventName then self._events[eventName] = nil else self._events = {} end end -- 获取监听器数量 function EventManager:getListenerCount(eventName) if not self._events[eventName] then return 0 end return #self._events[eventName] end