c1_lua/lua/app/userdata/fund/growth_fund_data.lua
2023-05-29 10:54:10 +08:00

294 lines
7.1 KiB
Lua

local GrowthFundData = class("GrowthFundData", BaseData)
local ACT_GIFT_FUND_BASE_ID_1 = 60202
local ACT_GIFT_FUND_BASE_ID_2 = 60402
local ACT_GIFT_FUND_ADVANCE_ID_1 = 60102
local ACT_GIFT_FUND_ADVANCE_ID_2 = 60302
function GrowthFundData:ctor()
self.data.dirty = false
self.isClaimAll = false
end
function GrowthFundData:init(data)
data = data or GConst.EMPTY_TABLE
self.freeClaimed = {}
self.freeClaimedCount = 0
if data.free_awarded then
for _, v in ipairs(data.free_awarded) do
self.freeClaimed[v] = true
self.freeClaimedCount = self.freeClaimedCount + 1
end
end
self.baseClaimed = {}
self.baseClaimedCount = 0
if data.pay_low_awarded then
for _, v in ipairs(data.pay_low_awarded) do
self.baseClaimed[v] = true
self.baseClaimedCount = self.baseClaimedCount + 1
end
end
self.advanceClaimed = {}
self.advanceClaimedCount = 0
if data.pay_high_awarded then
for _, v in ipairs(data.pay_high_awarded) do
self.advanceClaimed[v] = true
self.advanceClaimedCount = self.advanceClaimedCount + 1
end
end
self:initGrowthInfo()
self:initFundGrade()
end
function GrowthFundData:initGrowthInfo()
if not self.growthInfoMap then
self.growthInfoMap = {}
local cfg = self:getLevelFundCfg()
for id, info in pairs(cfg) do
if not self.growthInfoMap[info.stage] then
self.growthInfoMap[info.stage] = {}
end
table.insert(self.growthInfoMap[info.stage], id)
end
for grade, _ in pairs(self.growthInfoMap) do
table.sort(self.growthInfoMap[grade], function(a, b)
return a < b
end)
end
end
end
function GrowthFundData:initFundGrade()
local fundGrade = 1
local totalCount = 0
while true do
local growInfoIds = self.growthInfoMap[fundGrade]
if growInfoIds == nil then
fundGrade = fundGrade - 1
break
end
totalCount = totalCount + #growInfoIds
if self.freeClaimedCount >= totalCount and
self.baseClaimedCount >= totalCount and
self.advanceClaimedCount >= totalCount then
fundGrade = fundGrade + 1
else
break
end
end
if fundGrade < 1 then
fundGrade = 1
end
self.data.fundGrade = fundGrade
if self.data.fundGrade == 2 then
self.fundBaseId = ACT_GIFT_FUND_BASE_ID_2
self.fundAdvanceId = ACT_GIFT_FUND_ADVANCE_ID_2
if self.freeClaimedCount >= totalCount and self.baseClaimedCount >= totalCount and self.advanceClaimedCount >= totalCount then
self.isClaimAll = true
end
else
self.fundBaseId = ACT_GIFT_FUND_BASE_ID_1
self.fundAdvanceId = ACT_GIFT_FUND_ADVANCE_ID_1
end
end
function GrowthFundData:markDirty()
self.data.dirty = not self.data.dirty
end
function GrowthFundData:getIsOpen()
if self.isClaimAll then
return false
end
return ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.FUND, true)
end
function GrowthFundData:getFundGrade()
return self.data.fundGrade
end
function GrowthFundData:getFundBaseId()
return self.fundBaseId
end
function GrowthFundData:getFundAdvanceId()
return self.fundAdvanceId
end
function GrowthFundData:getCurrGradeBaseRechargeId()
local info = self:getActGiftCfg()[self.fundBaseId]
return info.recharge_id
end
function GrowthFundData:getCurrGradeAdvanceRechargeId()
local info = self:getActGiftCfg()[self.fundAdvanceId]
return info.recharge_id
end
function GrowthFundData:getActGiftCfg()
if self.cfg == nil then
self.cfg = ConfigManager:getConfig("act_gift")
end
return self.cfg
end
function GrowthFundData:getLevelFundCfg()
if self.levelFundCfg == nil then
self.levelFundCfg = ConfigManager:getConfig("act_level_fund")
end
return self.levelFundCfg
end
function GrowthFundData:getCurrGradeInfoList()
return self.growthInfoMap[self.data.fundGrade] or GConst.EMPTY_TABLE
end
function GrowthFundData:getNeedLevel(id)
local levelFundInfo = self:getLevelFundCfg()[id]
if levelFundInfo == nil then
return 9999
end
return levelFundInfo.level
end
function GrowthFundData:getAllStepFundRewards(id)
local levelFundInfo = self:getLevelFundCfg()[id]
if levelFundInfo == nil then
return nil, nil, nil
end
return levelFundInfo.reward_free, levelFundInfo.reward_small, levelFundInfo.reward
end
function GrowthFundData:getFreeFundRewards(id)
local levelFundInfo = self:getLevelFundCfg()[id]
if levelFundInfo == nil then
return nil
end
return levelFundInfo.reward_free
end
function GrowthFundData:getBaseFundRewards(id)
local levelFundInfo = self:getLevelFundCfg()[id]
if levelFundInfo == nil then
return nil
end
return levelFundInfo.reward_small
end
function GrowthFundData:getAdvanceFundRewards(id)
local levelFundInfo = self:getLevelFundCfg()[id]
if levelFundInfo == nil then
return nil
end
return levelFundInfo.reward
end
function GrowthFundData:getIsBoughtBase()
return DataManager.ShopData:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, self.fundBaseId) > 0
end
function GrowthFundData:getIsBoughtAdvance()
return DataManager.ShopData:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, self.fundAdvanceId) > 0
end
function GrowthFundData:getFreeClaimedMap()
return self.freeClaimed
end
function GrowthFundData:getIsClaimedFree(id)
return self.freeClaimed[id]
end
function GrowthFundData:getBaseClaimedMap()
return self.baseClaimed
end
function GrowthFundData:getIsClaimedBase(id)
return self.baseClaimed[id]
end
function GrowthFundData:getAdvanceClaimedMap()
return self.advanceClaimed
end
function GrowthFundData:getIsClaimedAdvance(id)
return self.advanceClaimed[id]
end
function GrowthFundData:getMinUnclaimedRewardIndex()
local playerLevel = DataManager.PlayerData:getLv()
local growInfoIds = self:getCurrGradeInfoList()
local minIndex = 0
local isBoughtBase = self:getIsBoughtBase()
local isBoughtAdvance = self:getIsBoughtAdvance()
for k, id in ipairs(growInfoIds) do
local levelFundInfo = self:getLevelFundCfg()[id]
if levelFundInfo then
if playerLevel >= levelFundInfo.level then -- 等级到了
if not self.freeClaimed[id] then -- 能领但是没有领
minIndex = k
break
end
if isBoughtBase then
if not self.baseClaimed[id] then -- 能领但是没有领
minIndex = k
break
end
end
if isBoughtAdvance then
if not self.advanceClaimed[id] then -- 能领但是没有领
minIndex = k
break
end
end
else
break
end
end
end
return minIndex
end
-- 是否有未领取的奖励
function GrowthFundData:getIfCanClaimReward()
if not self:getIsOpen() then
return false
end
return self:getMinUnclaimedRewardIndex() > 0
end
function GrowthFundData:onClaimFundRewards(list)
if list == nil then
return
end
if #list <= 0 then
return
end
for _, v in ipairs(list) do
if v.grade == 0 then
if not self.freeClaimed[v.id] then
self.freeClaimed[v.id] = true
self.freeClaimedCount = self.freeClaimedCount + 1
end
elseif v.grade == 1 then
if not self.baseClaimed[v.id] then
self.baseClaimed[v.id] = true
self.baseClaimedCount = self.baseClaimedCount + 1
end
elseif v.grade == 2 then
if not self.advanceClaimed[v.id] then
self.advanceClaimed[v.id] = true
self.advanceClaimedCount = self.advanceClaimedCount + 1
end
end
end
self:initFundGrade()
self:markDirty()
end
function GrowthFundData:onBoughtFund()
self:markDirty()
end
return GrowthFundData