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

132 lines
5.3 KiB
Lua
Raw Normal View History

2020-08-25 15:46:38 +08:00
AutoRecoverManager = {}
2020-05-09 13:31:21 +08:00
local this = AutoRecoverManager
2020-10-19 23:49:21 +08:00
local GameSetting = ConfigManager.GetConfigData(ConfigName.GameSetting, 1)
2020-05-09 13:31:21 +08:00
--- 注册物品及其获取恢复时间的方法
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,
2020-05-25 19:16:23 +08:00
-- [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,
2020-05-09 13:31:21 +08:00
[UpViewRechargeType.AdventureAlianInvasionTicket] = function()
local curCount = BagManager.GetItemCountById(UpViewRechargeType.AdventureAlianInvasionTicket)
local maxCount = PrivilegeManager.GetPrivilegeNumber(9)
if curCount < maxCount then
local nextFreshTime = BagManager.bagDatas[UpViewRechargeType.AdventureAlianInvasionTicket].nextFlushTime
local remationTime = nextFreshTime - PlayerManager.serverTime
if remationTime >= 0 then
return remationTime
end
-- 需要刷新数量
return -2
2020-05-09 13:31:21 +08:00
else -- 数量已满返回 -1
return -1
end
end,
[UpViewRechargeType.ActPower] = function()
local curCount = EndLessMapManager.GetLeftMapEnergy()
local maxCount = PrivilegeManager.GetPrivilegeNumber(20)
if curCount < maxCount then
local nextFreshTime = BagManager.bagDatas[UpViewRechargeType.ActPower].nextFlushTime
local remationTime = nextFreshTime - PlayerManager.serverTime
if remationTime > 0 then
return remationTime
end
-- 需要刷新数量
return -2
2020-05-09 13:31:21 +08:00
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)
if curCount < maxCount then
local nextFreshTime = BagManager.bagDatas[UpViewRechargeType.YunYouVle].nextFlushTime
2020-10-19 23:49:21 +08:00
local remationTime = nextFreshTime - PlayerManager.serverTime -- 下一次刷新的时间
if remationTime<=-1 then
local timeInterval= GameSetting.ItemAdd[7][3]
remationTime=timeInterval-(math.abs(remationTime)%timeInterval)
end
2020-10-19 23:49:21 +08:00
return remationTime
else -- 数量已满返回 -1
return -1
end
end,
2020-05-09 13:31:21 +08:00
}
--
2020-10-19 23:49:21 +08:00
2020-05-09 13:31:21 +08:00
function this.Initialize()
Timer.New(function()
for _, data in ipairs(GameSetting.ItemAdd) do
local itemId = data[1]
local deltaNum = data[2]
local deltaTime = data[3]
if this.IsAutoRecover(itemId) then
local leftTime = this.GetRecoverTime(itemId)
-- 已满不需要刷新
if leftTime == -1 then
return
end
--
if leftTime == -2 then
BagManager.bagDatas[itemId].num = BagManager.bagDatas[itemId].num + deltaNum
BagManager.bagDatas[itemId].nextFlushTime = BagManager.bagDatas[itemId].nextFlushTime + deltaTime
2020-05-09 13:31:21 +08:00
LogPink("自动恢复物品数量刷新:"..itemId.."|"..BagManager.bagDatas[itemId].num.."|"..BagManager.bagDatas[itemId].nextFlushTime)
end
end
end
end, 1, -1, true):Start()
2020-05-09 13:31:21 +08:00
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
2020-06-23 18:36:24 +08:00
assert(false, Language[11499].. itemId)
2020-05-09 13:31:21 +08:00
end
return _TimeCheckFunc[itemId]()
end
2020-06-23 18:36:24 +08:00
return this