158 lines
5.2 KiB
Lua
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 |