c1_lua/lua/app/userdata/idle/idle_data.lua
2023-05-18 20:24:04 +08:00

195 lines
5.5 KiB
Lua

local IdleData = class("IdleData", BaseData)
function IdleData:ctor()
self.data.dirty = false
self.idleRewardMap = {}
self.idleQuickPreviewRewardMap = {}
end
function IdleData:init(data)
data = data or GConst.EMPTY_TABLE
self.data.dropTime = (data.claim_at or 0) // 1000
self.data.adCount = data.ad_count or 0
self.data.energyCount = data.energy_count or 0
end
function IdleData:onGetIdleShowRewrad(data)
data = data or GConst.EMPTY_TABLE
self.data.dropTime = (data.claim_at or 0) // 1000
self.data.adCount = data.ad_count or 0
self.data.energyCount = data.energy_count or 0
self:updateIdleRewards(data.items)
self:markDirty()
end
function IdleData:updateIdleRewards(items)
if items == nil then
return
end
for k, v in pairs(self.idleRewardMap) do
self.idleRewardMap[k].num = 0
end
for id, num in pairs(items) do
if self.idleRewardMap[id] then
self.idleRewardMap[id].num = num
else
self.idleRewardMap[id] = {
id = id,
num = num,
type = GConst.REWARD_TYPE.ITEM
}
end
end
self:markDirty()
end
function IdleData:getIdleRewards()
return self.idleRewardMap
end
function IdleData:markDirty()
self.data.dirty = not self.data.dirty
end
function IdleData:getLastDropTime()
return self.data.dropTime
end
function IdleData:onGetIdleRewrad(time)
self.data.dropTime = time // 1000
for k, v in pairs(self.idleRewardMap) do
self.idleRewardMap[k].num = 0
end
self:markDirty()
end
function IdleData:onGetIdleQuickRewrad(data)
self.data.adCount = data.ad_count or 0
self.data.energyCount = data.energy_count or 0
self:markDirty()
end
function IdleData:getIdleQuickDropPreviewRewards()
for k, v in pairs(self.idleQuickPreviewRewardMap) do
self.idleQuickPreviewRewardMap[k].num = 0
end
local chapterId = DataManager.ChapterData:getMaxChapterId()
local cfg = ConfigManager:getConfig("chapter")[chapterId]
if cfg == nil then
return self.idleQuickPreviewRewardMap
end
local constCfg = ConfigManager:getConfig("const")
local coinPerTime = constCfg.idle_exp_drop_time.value
local expPerTime = constCfg.idle_gold_drop_time.value
local itemPerTime = constCfg.idle_item_drop_time.value
local time = self:getQuickIdleTime()
local itemGold = self.idleQuickPreviewRewardMap[GConst.ItemConst.ITEM_ID_GOLD]
if itemGold == nil then
itemGold = {}
itemGold.id = GConst.ItemConst.ITEM_ID_GOLD
itemGold.type = GConst.REWARD_TYPE.ITEM
self.idleQuickPreviewRewardMap[GConst.ItemConst.ITEM_ID_GOLD] = itemGold
end
itemGold.num = math.floor(cfg.idle_gold * (time // coinPerTime))
local itemExp = self.idleQuickPreviewRewardMap[GConst.ItemConst.ITEM_ID_EXP]
if itemExp == nil then
itemExp = {}
itemExp.id = GConst.ItemConst.ITEM_ID_EXP
itemExp.type = GConst.REWARD_TYPE.ITEM
self.idleQuickPreviewRewardMap[GConst.ItemConst.ITEM_ID_EXP] = itemExp
end
itemExp.num = math.floor(cfg.idle_exp * (time // expPerTime))
local itemCard = self.idleQuickPreviewRewardMap[GConst.ItemConst.ITEM_ID_HERO_FRAGMENT_2]
if itemCard == nil then
itemCard = {}
itemCard.id = GConst.ItemConst.ITEM_ID_HERO_FRAGMENT_2
itemCard.type = GConst.REWARD_TYPE.ITEM
self.idleQuickPreviewRewardMap[GConst.ItemConst.ITEM_ID_HERO_FRAGMENT_2] = itemCard
end
itemCard.num = math.floor((time // itemPerTime))
return self.idleQuickPreviewRewardMap
end
function IdleData:getIsOpen()
return ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.IDLE_DROP, true)
end
function IdleData:getIdleGoldDropTime()
if self.idleGoldDropTime == nil then
self.idleGoldDropTime = ConfigManager:getConfig("const")["idle_gold_drop_time"].value
end
return self.idleGoldDropTime
end
function IdleData:getIdleExpDropTime()
if self.idleExpDropTime == nil then
self.idleExpDropTime = ConfigManager:getConfig("const")["idle_exp_drop_time"].value
end
return self.idleExpDropTime
end
function IdleData:getIdleMaxTime()
if self.idleMaxTime == nil then
self.idleMaxTime = ConfigManager:getConfig("const")["idle_maxtime"].value
end
return self.idleMaxTime
end
function IdleData:getGoldPerHour()
local goldDrop = DataManager.ChapterData:getGoldDrop()
local time = self:getIdleGoldDropTime()
return math.floor(goldDrop * 3600 / time)
end
function IdleData:getExpPerHour()
local expDrop = DataManager.ChapterData:getExpDrop()
local time = self:getIdleExpDropTime()
return math.floor(expDrop * 3600 / time)
end
function IdleData:getQuickIdleMaxAdTimes()
if self.quickIdleMaxAdTimes == nil then
self.quickIdleMaxAdTimes = ConfigManager:getConfig("const")["idle_drop_fast_times_1"].value
end
return self.quickIdleMaxAdTimes
end
function IdleData:getQuickIdleAdRemainTimes()
return self:getQuickIdleMaxAdTimes() - self.data.adCount
end
function IdleData:getQuickIdleMaxVitTimes()
if self.quickIdleMaxVitTimes == nil then
self.quickIdleMaxVitTimes = ConfigManager:getConfig("const")["idle_drop_fast_times_2"].value
end
return self.quickIdleMaxVitTimes
end
function IdleData:getQuickIdleVitRemainTimes()
return self:getQuickIdleMaxVitTimes() - self.data.energyCount
end
function IdleData:getQuickIdleRemainTimes()
return self:getQuickIdleMaxAdTimes() + self:getQuickIdleMaxVitTimes() - self.data.adCount - self.data.energyCount
end
function IdleData:getQuickIdleCost()
if self.quickIdleCost == nil then
self.quickIdleCost = ConfigManager:getConfig("const")["idle_drop_fast_cost"].reward
end
return self.quickIdleCost
end
function IdleData:getQuickIdleTime()
if self.quickIdleTime == nil then
self.quickIdleTime = ConfigManager:getConfig("const")["idle_drop_fast_time"].value
end
return self.quickIdleTime
end
return IdleData