miduo_client/Assets/ManagedResources/~Lua/Modules/Player/AutoRecoverManager.lua

160 lines
5.8 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

AutoRecoverManager = {}
local this = AutoRecoverManager
local GameSetting = ConfigManager.GetConfigData(ConfigName.GameSetting, 1)
--- 注册物品及其获取恢复时间的方法
local _TimeCheckFunc = {
[UpViewRechargeType.EliteCarbonTicket] = function()
local ownNumber = BagManager.GetItemCountById(UpViewRechargeType.EliteCarbonTicket)
if ownNumber < CarbonManager.gameSetting[1].HeroTimes then
return CarbonManager.remainTime
else -- 数量已满返回 -1
return -1
end
end,
-- [UpViewRechargeType.MonsterCampTicket] = function()
-- if MonsterCampManager.IsNeedSupply() then
-- local nextFreshTime = BagManager.bagDatas[UpViewRechargeType.MonsterCampTicket].nextFlushTime
-- local remationTime = nextFreshTime - PlayerManager.serverTime
-- return remationTime
-- else -- 数量已满返回 -1
-- return -1
-- end
-- end,
[UpViewRechargeType.AdventureAlianInvasionTicket] = function()
local curCount = BagManager.GetItemCountById(UpViewRechargeType.AdventureAlianInvasionTicket)
local maxCount = PrivilegeManager.GetPrivilegeNumber(9)
local itemData = BagManager.GetItemById(UpViewRechargeType.AdventureAlianInvasionTicket)
if not itemData then
return
end
if curCount < maxCount then
local nextFreshTime = itemData.nextFlushTime
local remationTime = nextFreshTime - PlayerManager.serverTime
if remationTime >= 0 then
return remationTime
end
-- 需要刷新数量
return -2
else -- 数量已满返回 -1
return -1
end
end,
[UpViewRechargeType.ActPower] = function()
local curCount = EndLessMapManager.GetLeftMapEnergy()
local maxCount = PrivilegeManager.GetPrivilegeNumber(20)
local itemData = BagManager.GetItemById(UpViewRechargeType.ActPower)
if not itemData then
return
end
if curCount < maxCount then
local nextFreshTime = itemData.nextFlushTime
local remationTime = nextFreshTime - PlayerManager.serverTime
if remationTime > 0 then
return remationTime
end
-- 需要刷新数量
return -2
else -- 数量已满返回 -1
return -1
end
end,
[UpViewRechargeType.Energy] = function()
local curCount = BagManager.GetItemCountById(UpViewRechargeType.Energy)
local maxCount = PlayerManager.userLevelData[PlayerManager.level].MaxEnergy
if curCount < maxCount then
local nextFreshTime = BagManager.bagDatas[UpViewRechargeType.Energy].nextFlushTime
local remationTime = nextFreshTime - PlayerManager.serverTime -- 下一次刷新的时间
-- 计算从下一次刷新到恢复满得时间
local gameSetting = ConfigManager.GetConfigData(ConfigName.GameSetting, 1)
local recoverNum = gameSetting.EnergyRecoverSpeed[1]
local recoverTime = gameSetting.EnergyRecoverSpeed[2]
local fullTime = math.floor((maxCount - curCount) / recoverNum - 1) * recoverTime * 60
return remationTime + fullTime
else -- 数量已满返回 -1
return -1
end
end,
[UpViewRechargeType.YunYouVle] = function() --逍遥游云游值倒计时
local curCount = BagManager.GetItemCountById(UpViewRechargeType.YunYouVle)
local maxCount = PrivilegeManager.GetPrivilegeNumber(39)
local itemData = BagManager.GetItemById(UpViewRechargeType.YunYouVle)
if not itemData then
return
end
if curCount < maxCount then
local nextFreshTime = itemData.nextFlushTime
local remationTime = nextFreshTime - PlayerManager.serverTime -- 下一次刷新的时间
if remationTime > 0 then
return remationTime
end
-- 需要刷新数量
return -2
else -- 数量已满返回 -1
return -1
end
end,
}
--
function this.Initialize()
local _ItemAdd = {}
for _, data in ipairs(GameSetting.ItemAdd) do
table.insert(_ItemAdd, data)
end
Timer.New(function()
for i = 1, #_ItemAdd do
local data = _ItemAdd[i]
local itemId = data[1]
local deltaNum = data[2]
local deltaTime = data[3]
if this.IsAutoRecover(itemId) then
local leftTime = this.GetRecoverTime(itemId)
-- 已满不需要刷新
--
if leftTime == -2 then
BagManager.bagDatas[itemId].num = BagManager.bagDatas[itemId].num + deltaNum
BagManager.bagDatas[itemId].nextFlushTime = BagManager.bagDatas[itemId].nextFlushTime + deltaTime
LogPink("自动恢复物品数量刷新:"..itemId.."|"..BagManager.bagDatas[itemId].num.."|"..BagManager.bagDatas[itemId].nextFlushTime)
end
end
end
end, 1, -1, true):Start()
end
-- 获取道具是否自动恢复
function AutoRecoverManager.IsAutoRecover(itemId)
if not _TimeCheckFunc[itemId] then
return false
end
return true
end
-- 获取道具恢复时间
function AutoRecoverManager.GetRecoverTime(itemId)
if not _TimeCheckFunc[itemId] then
assert(false, "找到获取恢复时间的方法物品id = ".. itemId)
end
return _TimeCheckFunc[itemId]()
end
function AutoRecoverManager.CostRecoverItem(itemId, num, maxNum)
if this.IsAutoRecover(itemId) then
local curCount = BagManager.GetItemCountById(itemId)
if curCount >= maxNum then
end
end
end
return this