local ServerGameData = require "app/server/server_game_data" local ServerDataManager = {} function ServerDataManager:init() self.ServerFormationManager = require("app/server/manager/server_formation_manager") end function ServerDataManager:randomReward(weightArr, callback) local maxWeight = 0 for i, v in ipairs(weightArr) do maxWeight = maxWeight + v end local randomWeight if callback then randomWeight = callback(1, maxWeight) else randomWeight = math.random(1, maxWeight) end local idx for i, v in ipairs(weightArr) do if randomWeight <= v then idx = i break else randomWeight = randomWeight - v end end return idx end function ServerDataManager:dataOperate(behavior, params, callback) local opFunc = ServerDataManager.OP_FUNC[behavior] if opFunc then opFunc(params, function(result) if callback then callback(result) end end) -- TODO临时处理 ServerGameData:saveData() else Logger.logError("Undefined data operation function, please check :%s", behavior) end end function ServerDataManager:onSyncData(params, callback) -- 初始化本地数据 ServerGameData:initData() local data = ServerGameData:getData() if callback then callback(data) end end ServerDataManager.OP_FUNC = { [GConst.ServerDataConst.DATA_OP_BEHAVIOR.SYNC_DATA] = function (...) ServerDataManager:onSyncData(...) end, [GConst.ServerDataConst.DATA_OP_BEHAVIOR.UPDATE_FORMATION] = function (...) ServerDataManager.ServerFormationManager:updateFormation(...) end, } function ServerDataManager:dealGM(params, callback) if IS_PUBLISH then return end if not params or not params.args then return end local args = params.args if args[1] == "add_item" then local id = tonumber(args[2]) local count = tonumber(args[3]) if not id or not count then return end ServerGameData.BagData.ItemData:addItem(id, count) if id == GConst.ItemConst.ITEM_ID_EXP then ServerGameData.PlayerData:addExp(count) end elseif args[1] == "add_items" then local cfg = ConfigManager:getConfig("item") local count = tonumber(args[2]) if not count then for k, v in pairs(cfg) do if k == GConst.ItemConst.ITEM_ID_GOLD then ServerGameData.BagData.ItemData:addItem(k, 99999999) else ServerGameData.BagData.ItemData:addItem(k, 2000) end if k == GConst.ItemConst.ITEM_ID_EXP then ServerGameData.PlayerData:addExp(1000) end end else for k, v in pairs(cfg) do ServerGameData.BagData:addItem(k, count) if k == GConst.ItemConst.ITEM_ID_EXP then ServerGameData.PlayerData:addExp(count) end end end elseif args[1] == "del_item" then local id = tonumber(args[2]) local count = tonumber(args[3]) if not id or not count then return end ServerGameData.BagData.ItemData:addItem(id, -count) if id == GConst.ItemConst.ITEM_ID_EXP then ServerGameData.PlayerData:addExp(-count) end elseif args[1] == "clear_item" then local items = ServerGameData.BagData.ItemData:getAllItems() for k, v in pairs(items) do v.count = 0 end end ServerGameData:saveData() if callback then callback() end end return ServerDataManager