410 lines
9.6 KiB
Lua
Executable File
410 lines
9.6 KiB
Lua
Executable File
local FundLevelData = class("FundLevelData", BaseData)
|
|
|
|
FundLevelData.PRO_GIFT_IDS = {
|
|
[1] = 1014000001,
|
|
[2] = 1014000101,
|
|
[3] = 1014000201,
|
|
[4] = 1014000301,
|
|
[5] = 1014000401,
|
|
[6] = 1014000501,
|
|
[7] = 1014000601,
|
|
[8] = 1014000701,
|
|
[9] = 1014000801,
|
|
[10] = 1014000901,
|
|
[11] = 1014001001,
|
|
[12] = 1014001101,
|
|
[13] = 1014001201,
|
|
[14] = 1014001301,
|
|
[15] = 1014001401,
|
|
}
|
|
function FundLevelData:ctor()
|
|
self.data.isDirty = false
|
|
end
|
|
|
|
function FundLevelData:clear()
|
|
|
|
end
|
|
|
|
function FundLevelData:setDirty()
|
|
self.data.isDirty = not self.data.isDirty
|
|
end
|
|
|
|
function FundLevelData:getConfig(id)
|
|
if self.giftCfgs then
|
|
if self.giftCfgs[id] then
|
|
return self.giftCfgs[id]
|
|
else
|
|
return self.giftCfgs
|
|
end
|
|
end
|
|
local cfgs = ConfigManager:getConfig("act_level_gift")
|
|
self.giftCfgs = {}
|
|
local index = 1
|
|
for k, v in pairs(cfgs) do
|
|
if v.season == self.season then
|
|
v.id = k
|
|
self.giftCfgs[index] = v
|
|
index = index + 1
|
|
end
|
|
end
|
|
return self.giftCfgs
|
|
end
|
|
|
|
function FundLevelData:getStageById(id)
|
|
return self:getConfig(id).stage
|
|
end
|
|
|
|
function FundLevelData:initData(data)
|
|
if EDITOR_MODE then
|
|
Logger.logHighlight("---------------基金------------------")
|
|
Logger.printTable(data)
|
|
end
|
|
data = data or {}
|
|
local fund = data.fund or {}
|
|
self.season = data.season or 1
|
|
self.claimed = fund.claimed or {}
|
|
|
|
self:findStage()
|
|
|
|
self:setDirty()
|
|
end
|
|
|
|
function FundLevelData:getIsOpen(stage)
|
|
if GFunc.isShenhe() then
|
|
return
|
|
end
|
|
if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ACT_LEVEL_GIFT, true) then
|
|
return false
|
|
end
|
|
|
|
stage = stage or self:getCurStage()
|
|
local list = self:getListByStage(stage)
|
|
return list ~= nil
|
|
end
|
|
|
|
-- 获取总阶段个数
|
|
function FundLevelData:getStageCount()
|
|
local count = 0
|
|
for id, info in pairs(self:getConfig()) do
|
|
count = math.max(count, info.stage)
|
|
end
|
|
return count
|
|
end
|
|
|
|
function FundLevelData:isStageUnlock(stage)
|
|
if self:getIsAllClaimedByStage(stage) then
|
|
return false
|
|
end
|
|
|
|
if stage > 1 and self:getIsAllCanGetByStage(stage - 1) then
|
|
return true
|
|
end
|
|
|
|
local list = self:getListByStage(stage)
|
|
if self:getNeedLevel(list[1]) > DataManager.PlayerData:getLv() then
|
|
return false
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
function FundLevelData:getUnlockStageList()
|
|
self:getListByStage(1)-- 用于初始化stageList
|
|
local stages = {}
|
|
for stage = 1, self:getStageCount() do
|
|
if self:isStageUnlock(stage) then
|
|
table.insert(stages, stage)
|
|
end
|
|
end
|
|
table.sort(stages)
|
|
return stages
|
|
end
|
|
|
|
function FundLevelData:findStage()
|
|
local stage = 1
|
|
while true do
|
|
local list = self:getListByStage(stage)
|
|
if not list then
|
|
break
|
|
else
|
|
local lastId = list[#list]
|
|
if not self:getFreeGot(lastId) or not self:getProlGot(lastId) then
|
|
break
|
|
end
|
|
stage = stage + 1
|
|
end
|
|
end
|
|
self.curStage = stage
|
|
end
|
|
|
|
function FundLevelData:getListByStage(stage)
|
|
if not self.stageList then
|
|
self.stageList = {}
|
|
for id, info in pairs(self:getConfig()) do
|
|
if not self.stageList[info.stage] then
|
|
self.stageList[info.stage] = {}
|
|
end
|
|
table.insert(self.stageList[info.stage], id)
|
|
end
|
|
for stage, _ in pairs(self.stageList) do
|
|
table.sort(self.stageList[stage], function(a, b)
|
|
return a < b
|
|
end)
|
|
end
|
|
end
|
|
|
|
return self.stageList[stage]
|
|
end
|
|
|
|
-- 是否已领奖
|
|
function FundLevelData:isRewardReceived(id, grade)
|
|
if self.claimed[id] == nil then
|
|
return false
|
|
end
|
|
if self.claimed[id].grade[grade] == nil then
|
|
return false
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
function FundLevelData:getFreeCanGet(id)
|
|
if self:getFreeGot(id) then
|
|
return false
|
|
end
|
|
|
|
local cfg = self:getConfig(id)
|
|
return cfg.level <= DataManager.PlayerData:getLv()
|
|
end
|
|
|
|
function FundLevelData:getFreeGot(id)
|
|
return self:isRewardReceived(id, 1)
|
|
end
|
|
|
|
function FundLevelData:getFreeRewards(id)
|
|
local cfg = self:getConfig(id)
|
|
return cfg.reward_free
|
|
end
|
|
|
|
function FundLevelData:getNeedLevel(id)
|
|
local cfg = self:getConfig(id)
|
|
return cfg and cfg.level
|
|
end
|
|
|
|
function FundLevelData:getProCanGet(id)
|
|
if not self:getProlBought(self:getStageById(id)) then
|
|
return false
|
|
end
|
|
|
|
if self:getProlGot(id) then
|
|
return false
|
|
end
|
|
|
|
local cfg = self:getConfig(id)
|
|
return cfg.level <= DataManager.PlayerData:getLv()
|
|
end
|
|
|
|
function FundLevelData:getProlGot(id)
|
|
return self:isRewardReceived(id, 2)
|
|
end
|
|
|
|
function FundLevelData:getProlBought(stage)
|
|
return DataManager.PaymentData:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, self:getProActId(stage)) > 0
|
|
end
|
|
|
|
function FundLevelData:getProActId(stage)
|
|
stage = stage or self:getCurStage()
|
|
return self.PRO_GIFT_IDS[stage]
|
|
end
|
|
|
|
function FundLevelData:getBigCanGet(id)
|
|
if not self:getBigBought() then
|
|
return false
|
|
end
|
|
|
|
if self:getBigGot(id) then
|
|
return false
|
|
end
|
|
|
|
local cfg = self:getConfig(id)
|
|
return cfg.level <= DataManager.PlayerData:getLv()
|
|
end
|
|
function FundLevelData:getConfigIdByIndex(currStage, index)
|
|
local id = self:getListByStage(currStage)[index]
|
|
if id then
|
|
return self:getConfig(id).id
|
|
end
|
|
end
|
|
function FundLevelData:getProGot(id)
|
|
return self:isRewardReceived(id, 2)
|
|
end
|
|
|
|
function FundLevelData:getProBought(stage)
|
|
return DataManager.PaymentData:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, self:getBigActId(stage)) > 0
|
|
end
|
|
|
|
function FundLevelData:getProRewards(id)
|
|
local cfg = self:getConfig(id)
|
|
return cfg.reward
|
|
end
|
|
|
|
function FundLevelData:getBigActId(stage)
|
|
stage = stage or self:getCurStage()
|
|
return self.PRO_GIFT_IDS[stage]
|
|
end
|
|
|
|
function FundLevelData:getCurStage()
|
|
return self.curStage
|
|
end
|
|
|
|
function FundLevelData:getRedPoint()
|
|
if not self:getIsOpen() then
|
|
return false
|
|
end
|
|
|
|
return self:getMinUnclaimedStage() ~= nil
|
|
end
|
|
|
|
function FundLevelData:canGetRewards(stage)
|
|
stage = stage or self:getCurStage()
|
|
local list = self:getListByStage(stage)
|
|
if not list then
|
|
return false
|
|
end
|
|
|
|
for _, id in ipairs(list) do
|
|
if self:getFreeCanGet(id) then
|
|
return true
|
|
end
|
|
if self:getProCanGet(id) then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
-- 获取可领奖励的最小阶段
|
|
function FundLevelData:getMinUnclaimedStage()
|
|
for i, stage in pairs(self:getUnlockStageList()) do
|
|
if self:canGetRewards(stage) then
|
|
return stage
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
-- 获取可领奖励的最小阶段
|
|
function FundLevelData:getMaxUnclaimedStage()
|
|
local toStage = 1
|
|
for i, stage in pairs(self:getUnlockStageList()) do
|
|
toStage = stage
|
|
end
|
|
return toStage
|
|
end
|
|
-- 获取可领奖励的最小索引
|
|
function FundLevelData:getMinUnclaimedRewardIndex(stage)
|
|
stage = stage or self:getCurStage()
|
|
local list = self:getListByStage(stage)
|
|
if not list then
|
|
return 0
|
|
end
|
|
for index, id in ipairs(list) do
|
|
if self:getFreeCanGet(id) then
|
|
return index
|
|
end
|
|
if self:getProCanGet(id) then
|
|
return index
|
|
end
|
|
end
|
|
for i = 1, #list do
|
|
if not self:getFreeGot(list[i]) then
|
|
return i
|
|
end
|
|
end
|
|
return #list
|
|
end
|
|
--获取最大可领取的id
|
|
function FundLevelData:getMaxUnclaimedId()
|
|
local list = self:getConfig()
|
|
local id = 0
|
|
for k, v in pairs(list) do
|
|
local value = DataManager.PlayerData:getLv() >= v.level
|
|
if value then
|
|
if id == nil or id < v.id then
|
|
id = v.id
|
|
end
|
|
end
|
|
end
|
|
return id
|
|
end
|
|
-- 获取可领奖励的最大索引
|
|
function FundLevelData:getMaxUnclaimedRewardIndex(stage)
|
|
stage = stage or self:getCurStage()
|
|
local list = self:getListByStage(stage)
|
|
if not list then
|
|
return 0
|
|
end
|
|
for i = #list, 1, -1 do
|
|
if self:getFreeCanGet(list[i]) then
|
|
return i
|
|
end
|
|
if self:getProCanGet(list[i]) then
|
|
return i
|
|
end
|
|
end
|
|
for i = 1, #list do
|
|
if not self:getFreeGot(list[i]) then
|
|
return i
|
|
end
|
|
end
|
|
return #list
|
|
end
|
|
|
|
-- 是否已经领取了全部奖励,包括付费的
|
|
function FundLevelData:getIsAllClaimed()
|
|
for stage = 1, self:getStageCount() do
|
|
local list = self:getListByStage(stage)
|
|
if not self:getFreeGot(list[#list]) or not self:getProlGot(list[#list]) then
|
|
return false
|
|
end
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
-- 阶段奖励是否领取完毕
|
|
function FundLevelData:getIsAllClaimedByStage(stage)
|
|
stage = stage or self:getCurStage()
|
|
local list = self:getListByStage(stage)
|
|
if not list then
|
|
return false
|
|
end
|
|
|
|
if self:getFreeGot(list[#list]) and self:getProlGot(list[#list]) then
|
|
return true
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
-- 阶段奖励是否全部已领取or可领取
|
|
function FundLevelData:getIsAllCanGetByStage(stage)
|
|
stage = stage or self:getCurStage()
|
|
local list = self:getListByStage(stage)
|
|
if not list then
|
|
return false
|
|
end
|
|
|
|
for _, id in ipairs(list) do
|
|
if not self:getFreeGot(id) and not self:getFreeCanGet(id) then
|
|
return false
|
|
end
|
|
if not self:getProlGot(id) and not self:getProCanGet(id) then
|
|
return false
|
|
end
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
return FundLevelData |