c1_lua/lua/app/userdata/summon/summon_data.lua
2023-08-03 09:47:21 +08:00

156 lines
4.2 KiB
Lua

local SummonData = class("SummonData", BaseData)
function SummonData:ctor()
self.data.isDirty = false
end
function SummonData:clear()
DataManager:unregisterCrossDayFunc("SummonData")
end
function SummonData:setDirty()
self.data.isDirty = not self.data.isDirty
end
function SummonData:initCrossDay()
DataManager:registerCrossDayFunc("SummonData", function()
self:setDirty()
end)
end
function SummonData:init(summon, isInit)
-- if EDITOR_MODE then
-- Logger.logHighlight("召唤初始化")
-- Logger.printTable(summon)
-- end
local lastLv = self.level
summon = summon or {}
self.level = summon.level or 1
self.exp = summon.exp or 0
if not isInit then
if lastLv and lastLv < self.level then
self:markNeedPopBoxLvUpUI()
end
end
self:setDirty()
end
function SummonData:getSummonLevel()
return self.level
end
function SummonData:getSummonExp()
return self.exp
end
function SummonData:getSummonConfig()
return ConfigManager:getConfig("summon")
end
function SummonData:getSummonExpConfig()
return ConfigManager:getConfig("summon_exp")
end
-- 读表获取宝箱消耗
function SummonData:getSummonCost(summonType)
local cfgInfo = self:getSummonConfig()[summonType]
return cfgInfo.item_cost, cfgInfo.cost
end
-- 读表获取宝箱经验
function SummonData:getSummonAddExp(summonType)
local cfgInfo = self:getSummonConfig()[summonType]
return cfgInfo.summon_exp
end
-- 读表获取召唤奖励
function SummonData:getSummonRewardByLv(summonType, level)
level = level or self:getSummonLevel()
local cfgInfo = self:getSummonConfig()[summonType]
if level == 1 then
return cfgInfo.box_lv_base
else
if not self.cacheSummonRewardByLv then
self.cacheSummonRewardByLv = {}
end
self.cacheSummonRewardByLv[level] = {}
local rewards = cfgInfo["box_lv_" .. tostring(level)]
for _, reward in ipairs(rewards) do
local find = false
for index, rewardBase in ipairs(cfgInfo.box_lv_base) do
if reward.type == rewardBase.type and reward.id == rewardBase.id and reward.num >= rewardBase.num then
local num = reward.num - rewardBase.num
if num ~= 0 then
table.insert(self.cacheSummonRewardByLv[level], {
id = reward.id,
type = reward.type,
num = num
})
end
find = true
break
end
end
if not find then
table.insert(self.cacheSummonRewardByLv[level], {
id = reward.id,
type = reward.type,
num = reward.num
})
end
end
return self.cacheSummonRewardByLv[level]
end
end
function SummonData:getSummonTotalRewardByLv(summonType, level)
level = level or self:getSummonLevel()
local rewards = {}
local baseRewards = self:getSummonRewardByLv(summonType, 1) -- 基础奖励
for _, reward in ipairs(baseRewards) do
table.insert(rewards, reward)
end
if level > 1 then
local addRewards = self:getSummonRewardByLv(summonType, level)
for _, reward in ipairs(addRewards) do
table.insert(rewards, reward)
end
end
rewards = GFunc.mergeRewards(rewards)
return rewards
end
function SummonData:getSummonMaxLv()
return #self:getSummonExpConfig()
end
-- 读表获取特定等级的最大经验值
function SummonData:getSummonMaxExp(level)
level = level or self:getSummonLevel()
local cfg = self:getSummonExpConfig()
for lv, data in ipairs(cfg) do
if lv == level then
return data.exp or 0
end
end
return cfg[#cfg].exp or 0
end
-- 如果宝箱等级提升了 则标记
function SummonData:markNeedPopBoxLvUpUI()
self.needPopBoxLvUpUI = true
end
function SummonData:clearNeedPopBoxLvUpUI()
self.needPopBoxLvUpUI = false
end
function SummonData:checkNeedPopBoxLvUpUI()
return self.needPopBoxLvUpUI
end
return SummonData