local FundData = class("FundData", BaseData) local ACT_GIFT_FUND_BASE_ID_1 = 60202 local ACT_GIFT_FUND_BASE_ID_2 = 60102 local ACT_GIFT_FUND_ADVANCE_ID_1 = 60402 local ACT_GIFT_FUND_ADVANCE_ID_2 = 60302 function FundData:ctor() self.data.purcharseDirty = false self.data.dirty = false end function FundData: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:initLevelInfo() local fundLevel = 1 local totalCount = 0 while true do local levelInfoIds = self.levelInfoMap[fundLevel] if levelInfoIds == nil then fundLevel = fundLevel - 1 break end local firstLevelInfoId = levelInfoIds[1] local cfg = self:getLevelFundCfg() if DataManager.PlayerData:getLv() < cfg[firstLevelInfoId].level then -- 等级不够 fundLevel = fundLevel - 1 break end totalCount = totalCount + #levelInfoIds if self.freeClaimedCount == totalCount and self.freeClaimedCount == self.baseClaimedCount and self.freeClaimedCount == self.advanceClaimedCount then fundLevel = fundLevel + 1 else break end end if fundLevel < 1 then fundLevel = 1 end self.data.fundLevel = fundLevel if self.data.fundLevel == 2 then self.fundBaseId = ACT_GIFT_FUND_BASE_ID_2 self.fundAdvanceId = ACT_GIFT_FUND_ADVANCE_ID_2 else self.fundBaseId = ACT_GIFT_FUND_BASE_ID_1 self.fundAdvanceId = ACT_GIFT_FUND_ADVANCE_ID_1 end end function FundData:initLevelInfo() if not self.levelInfoMap then self.levelInfoMap = {} local cfg = self:getLevelFundCfg() for id, info in pairs(cfg) do if not self.levelInfoMap[info.stage] then self.levelInfoMap[info.stage] = {} end table.insert(self.levelInfoMap[info.stage], id) end for level, _ in pairs(self.levelInfoMap) do table.sort(self.levelInfoMap[level], function(a, b) return a < b end) end end end function FundData:markDirty() self.data.dirty = not self.data.dirty end function FundData:markPurcharseDirty() self.data.purcharseDirty = not self.data.purcharseDirty end function FundData:getIsOpen() return ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.FUND, true) end function FundData:getFundLevel() return self.data.fundLevel end function FundData:getFundBaseId() return self.fundBaseId end function FundData:getFundAdvanceId() return self.fundAdvanceId end function FundData:getCurrLevelBaseRechargeId() local info = self:getActGiftCfg()[self.fundBaseId] return info.recharge_id end function FundData:getCurrLevelAdvanceRechargeId() local info = self:getActGiftCfg()[self.fundAdvanceId] return info.recharge_id end function FundData:getActGiftCfg() if self.cfg == nil then self.cfg = ConfigManager:getConfig("act_gift") end return self.cfg end function FundData:getLevelFundCfg() if self.levelFundCfg == nil then self.levelFundCfg = ConfigManager:getConfig("act_level_fund") end return self.levelFundCfg end function FundData:getCurrLevelInfoList() return self.levelInfoMap[self.data.fundLevel] or GConst.EMPTY_TABLE end function FundData:getNeedLevel(id) local levelFundInfo = self:getLevelFundCfg()[id] if levelFundInfo == nil then return 9999 end return levelFundInfo.level end function FundData: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 FundData:getFreeFundRewards(id) local levelFundInfo = self:getLevelFundCfg()[id] if levelFundInfo == nil then return nil end return levelFundInfo.reward_free end function FundData:getBaseFundRewards(id) local levelFundInfo = self:getLevelFundCfg()[id] if levelFundInfo == nil then return nil end return levelFundInfo.reward_small end function FundData:getAdvanceFundRewards(id) local levelFundInfo = self:getLevelFundCfg()[id] if levelFundInfo == nil then return nil end return levelFundInfo.reward end function FundData:getIsBoughtBase() return DataManager.ShopData:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, self.fundBaseId) > 0 end function FundData:getIsBoughtAdvance() return DataManager.ShopData:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, self.fundAdvanceId) > 0 end function FundData:getIsClaimedFree(id) return self.freeClaimed[id] end function FundData:getIsClaimedBase(id) return self.baseClaimed[id] end function FundData:getIsClaimedAdvance(id) return self.advanceClaimed[id] end function FundData:getMinUnclaimedRewardIndex() local playerLevel = DataManager.PlayerData:getLv() local levelInfoIds = self:getCurrLevelInfoList() local minIndex = 0 local isBoughtBase = self:getIsBoughtBase() local isBoughtAdvance = self:getIsBoughtAdvance() for k, id in ipairs(levelInfoIds) 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 FundData:getIfCanClaimReward() if not self:getIsOpen() then return false end return self:getMinUnclaimedRewardIndex() > 0 end return FundData