c1_lua/lua/app/server/server_data_manager.lua
2023-04-15 14:45:42 +08:00

158 lines
5.2 KiB
Lua

local ServerGameData = require "app/server/server_game_data"
local ServerDataManager = {}
function ServerDataManager:init()
self.ServerFormationManager = require("app/server/manager/server_formation_manager")
self.ServerHeroManager = require("app/server/manager/server_hero_manager")
self.ServerChapterManager = require("app/server/manager/server_chapter_manager")
end
function ServerDataManager:saveData()
ServerGameData:saveData()
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,
[GConst.ServerDataConst.DATA_OP_BEHAVIOR.UPGRADE_HERO] = function (...) ServerDataManager.ServerHeroManager:onUpgradeHero(...) end,
[GConst.ServerDataConst.DATA_OP_BEHAVIOR.END_FIGHT] = function(...) ServerDataManager.ServerChapterManager:endFight(...) end,
[GConst.ServerDataConst.DATA_OP_BEHAVIOR.OPEN_CHAPTER_BOX] = function(...) ServerDataManager.ServerChapterManager:openBox(...) 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)
ServerGameData.BagData.ItemData:saveLocalData()
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
elseif args[1] == "add_hero" then
local id = tonumber(args[2])
if not id then
return
end
local hero = ServerGameData.HeroData:getHeroByCfgId(id)
if hero == nil or hero.lv <= 0 then
local heroCfg = ConfigManager:getConfig("hero")
local heroLvCfg = ConfigManager:getConfig("hero_level")
local heroInfo = heroCfg[id]
if heroInfo then
local costKey = "cost_" .. heroInfo.qlt
for k, v in ipairs(heroLvCfg) do
if v[costKey] then -- 第一个有值的就是解锁所需的数量
ServerGameData.HeroData:addHero(id, k)
break
end
end
end
end
end
ServerGameData:saveData()
if callback then
callback()
end
end
function ServerDataManager:getServerGameData()
return ServerGameData
end
return ServerDataManager