121 lines
3 KiB
Lua
121 lines
3 KiB
Lua
|
XRecItem = XClass(XItem, "XRecItem")
|
||
|
|
||
|
local max = math.max
|
||
|
local min = math.min
|
||
|
local abs = math.abs
|
||
|
|
||
|
function XRecItem:Ctor(itemData, template)
|
||
|
if template then
|
||
|
self.Template = template
|
||
|
self.Id = template.Id
|
||
|
end
|
||
|
|
||
|
self.NextRefreshTime = 0
|
||
|
self:RefreshItem(itemData)
|
||
|
end
|
||
|
|
||
|
function XRecItem:GetRecMaxCount()
|
||
|
if self.Id == XDataCenter.ItemManager.ItemId.ActionPoint then
|
||
|
return XPlayerManager.GetMaxActionPoint(XPlayer.GetLevelOrHonorLevel(), XPlayer.IsHonorLevelOpen())
|
||
|
elseif self.Id == XDataCenter.ItemManager.ItemId.AreaWarActionPoint then
|
||
|
return XDataCenter.AreaWarManager.GetMaxActionPoint()
|
||
|
else
|
||
|
return self.Template.MaxCount
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XRecItem:GetMaxCount()
|
||
|
return self:GetRecMaxCount()
|
||
|
end
|
||
|
|
||
|
function XRecItem:RefreshCount()
|
||
|
local now = XTime.GetServerNowTimestamp()
|
||
|
local second = now - self.RefreshTime
|
||
|
if second < 0 then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local recSecond = self.Template.RecSeconds[1]
|
||
|
local recCount = self.Template.RecCount
|
||
|
local addCount = XMath.ToMinInt(second / recSecond * recCount)
|
||
|
local maxCount = max(self.Count, self:GetRecMaxCount())
|
||
|
|
||
|
if addCount == 0 then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local count = self.Count + addCount
|
||
|
if count >= maxCount then
|
||
|
count = maxCount
|
||
|
self.RefreshTime = now
|
||
|
elseif count <= 0 then
|
||
|
count = 0
|
||
|
self.RefreshTime = now
|
||
|
else
|
||
|
self.RefreshTime = self.RefreshTime + abs(addCount) * recSecond
|
||
|
end
|
||
|
|
||
|
self:SetCount(max(min(count, maxCount), 0))
|
||
|
end
|
||
|
|
||
|
function XRecItem:CheckRefreshTime()
|
||
|
self.NextRefreshTime =
|
||
|
XResetManager.GetNextResetTime(
|
||
|
self.Template.RecType,
|
||
|
self.RefreshTime,
|
||
|
self.Template.RecSeconds,
|
||
|
self.Template.RecDays
|
||
|
)
|
||
|
end
|
||
|
|
||
|
function XRecItem:ResetCount()
|
||
|
self.RefreshTime = XTime.GetServerNowTimestamp()
|
||
|
self:SetCount(max(min(self.Template.RecCount + self.Count, self.Template.MaxCount), 0))
|
||
|
self:CheckRefreshTime()
|
||
|
end
|
||
|
|
||
|
function XRecItem:CheckCount()
|
||
|
if self.Template.RecType == XResetManager.ResetType.Interval then
|
||
|
self:RefreshCount()
|
||
|
else
|
||
|
if self.NextRefreshTime > 0 then
|
||
|
if XTime.GetServerNowTimestamp() >= self.NextRefreshTime then
|
||
|
self:ResetCount()
|
||
|
end
|
||
|
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self:CheckRefreshTime()
|
||
|
|
||
|
local isReset, _ =
|
||
|
CS.XReset.IsTime2Reset(
|
||
|
self.Template.RecType,
|
||
|
self.RefreshTime,
|
||
|
self.Template.RecSeconds,
|
||
|
self.Template.RecDays
|
||
|
)
|
||
|
if isReset then
|
||
|
self:ResetCount()
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XRecItem:GetCount()
|
||
|
self:CheckCount()
|
||
|
return self.Count
|
||
|
end
|
||
|
|
||
|
function XRecItem:GetRefreshResidueSecond()
|
||
|
if self.Count >= self:GetRecMaxCount() then
|
||
|
return 0
|
||
|
end
|
||
|
|
||
|
local second = XTime.GetServerNowTimestamp() - self.RefreshTime
|
||
|
if second < 0 then
|
||
|
return 0
|
||
|
end
|
||
|
|
||
|
return self.Template.RecSeconds[1] - second
|
||
|
end
|