local ConfigManager = { configs = {} } local CONFIG_PATH = "app/config/" function ConfigManager:_getConfig(configName) local config = require(CONFIG_PATH .. configName) self.configs[configName] = config return config end function ConfigManager:getConfig(configName) local config = self.configs[configName] if config == nil then config = self:_getConfig(configName) end return config.data end function ConfigManager:getItemConfig() if self.itemCfg == nil then self.itemCfg = self:getConfig("item") end return self.itemCfg end if NOT_PUBLISH then ConfigManager.__getConfig = ConfigManager.getConfig function ConfigManager:getConfig(configName) if string.lower(configName) ~= configName then Logger.logFatal("ConfigManager:getConfig 传入的表名不能有大写 " .. configName) end return self:__getConfig(configName) end end function ConfigManager:reloadConfig(configName) self:clearConfigCache(configName) self.configs[configName] = nil self:getConfig(configName) end function ConfigManager:getConfigNum(configName) local config = self.configs[configName] if config == nil then config = self:_getConfig(configName) end return config.count end function ConfigManager:getConfigWithOtherKey(configName, keyName) local config = self.configs[configName] if config == nil then config = self:_getConfig(configName) end if config.keys == nil then return nil end return config.keys[keyName] end function ConfigManager:getMainKeyWithOtherKey(configName, keyName, keyValue) local config = self.configs[configName] if config == nil then config = self:_getConfig(configName) end if config.keys == nil then return nil end local kv = config.keys[keyName] if kv[keyValue] then return kv[keyValue]._id end return nil end function ConfigManager:reloadAllConfig() for configName, v in pairs(self.configs) do self:reloadConfig(configName) end self:preLoadConfig() end function ConfigManager:preLoadConfig() local monsterBase = self:_getConfig("monster_base") self:clearConfigCache("monster_base") local baseData = monsterBase.data local monsterFullData = {} local count = 0 local function handleMonsterGrow(name) local monsterGrowConfig = self:_getConfig(name) local growData = monsterGrowConfig.data for k, v in pairs(growData) do monsterFullData[k] = v local data = baseData[v.monster_base] if data then monsterFullData[k].model_id = data.model_id monsterFullData[k].hurt_num = data.hurt_num monsterFullData[k].body = data.body monsterFullData[k].model_ui = data.model_ui -- else -- Logger.logHighlight("not data monster_baseid = " .. v.monster_baseid) end count = count + 1 end self:clearConfigCache(name) end handleMonsterGrow("monster_chapter") handleMonsterGrow("monster_daily_challenge") self.configs["monster"] = { data = monsterFullData, count = count } if EDITOR_MODE then local realCount = 0 for k, v in pairs(monsterFullData) do realCount = realCount + 1 end if count ~= realCount then Logger.logFatal("same id in monster config") end end end function ConfigManager:getChapterConfig(id) if not id then return end local idx = math.ceil(id/5000) local cfg = ConfigManager:getConfig("chapter" .. idx) return cfg[id], cfg end function ConfigManager:clearConfigCache(configName) package.loaded[CONFIG_PATH .. configName] = nil end return ConfigManager