--- - 管理数据配置 do local mdb = {} -- 原始数据 local mMaps4ID = {} DBCfgTool = {}; -- 把json数据转成对象 function DBCfgTool.getDatas(cfgPath, isParseWithID) local list = mdb[cfgPath]; local map4ID = {}; if (list == nil) then list = {}; local _list = Utl.fileToObj(cfgPath); if (_list == nil or _list.Count < 2) then mdb[cfgPath] = list; return list, map4ID; end local count = _list.Count; local n = 0; local keys = _list[0]; local cellList = nil; local cell = nil; local value = 0; for i = 1, count - 1 do cellList = _list[i]; n = cellList.Count; cell = {}; for j = 0, n - 1 do value = cellList[j]; if (type(value) == "number") then cell[keys[j]] = int2Bio(value); else cell[keys[j]] = value; end end if (isParseWithID) then map4ID[bio2Int(cell.ID)] = cell; end table.insert(list, cell); end mdb[cfgPath] = list; mMaps4ID[cfgPath] = map4ID; else map4ID = mMaps4ID[cfgPath]; end return list, map4ID; end -- 取得角色的数据 function DBCfgTool.getRoleData(cfgRolePath, cfgRoleLevPath) local tmp, roleBaseData = DBCfgTool.getDatas(cfgRolePath, true); local roleLevData = DBCfgTool.getDatas(cfgRoleLevPath); local key = ""; local gid = 0; local lev = 0; local heros = {}; local list = {} for i, v in pairs(roleLevData) do gid = bio2Int(v.GID); lev = bio2Int(v.Lev); key = joinStr( gid , "_" , lev); local m = {} m.base = roleBaseData[gid]; m.vals = v; list[key] = m; if (m.base.IsHero and lev == 1) then table.insert(heros, m); end end list.heros = heros; return list; end -- 通用取得有base数据和lev数据的表 function DBCfgTool.pubGetBaseAndLevData(baseDataPath, levDataPath) local tmp, baseData = DBCfgTool.getDatas(baseDataPath, true); local levData = DBCfgTool.getDatas(levDataPath); local key = ""; local gid = 0; local lev = 0; local list = {} for i, v in pairs(levData) do gid = bio2Int(v.GID); lev = bio2Int(v.Lev); key = joinStr(gid , "_" , lev); local m = {} m.base = baseData[gid]; m.vals = v; list[key] = m; end return list; end function DBCfgTool.pubGetList4GID(dataPath, gidKey) local datas, map = DBCfgTool.getDatas(dataPath, true); local gid; local m = {}; local list = {} gidKey = gidKey or "GID"; for i, v in ipairs(datas) do gid = bio2Int(v[gidKey]); list = m[gid]; if(list == nil) then list = {}; end table.insert(list, v); m[gid] = list; end return m, map; end function DBCfgTool.pubGet4GIDLev(dataPath) local datas = DBCfgTool.getDatas(dataPath); local gid; local lev; local key = ""; local m = {}; local list = {} local count = 0; for i, v in pairs(datas) do gid = bio2Int(v.GID); lev = bio2Int(v.Lev); key = PStr.b():a(tostring(gid)):a("_"):a(tostring(lev)):e(); m[key] = v; end return m; end return DBCfgTool; end --module("DBCfgTool", package.seeall)