182 lines
5.6 KiB
Lua
182 lines
5.6 KiB
Lua
|
|
|||
|
------------------------------------------------
|
|||
|
--作者: cy
|
|||
|
--日期: 2019-04-16
|
|||
|
--文件: OfflineOnHookSystem.lua
|
|||
|
--模块: OfflineOnHookSystem
|
|||
|
--描述: 离线挂机系统
|
|||
|
------------------------------------------------
|
|||
|
local RedPointCustomCondition = CS.Thousandto.Code.Logic.RedPointCustomCondition
|
|||
|
|
|||
|
local OfflineOnHookSystem = {
|
|||
|
AddExpItemID = {1003, 1002, 1001},
|
|||
|
GoToShopItemID = 1002,
|
|||
|
AddOnHookTimeItemID = {1031, 1004},
|
|||
|
RemainOnHookTime = 0, --精确到秒
|
|||
|
OfflineHookResult = {},
|
|||
|
CurWorldLevel = 0, --当前世界等级
|
|||
|
ExpAddRateDic = Dictionary:New(), --经验加成字典,key = type,value = 加成值
|
|||
|
|
|||
|
--药品剩余时间
|
|||
|
ItemRemainTime = 0,
|
|||
|
--药品同步的时间,用于计算剩余时间
|
|||
|
ItemSyncTime = 0,
|
|||
|
|
|||
|
TimerEventID = 0,
|
|||
|
|
|||
|
--可找回的时间
|
|||
|
CanFindTime = 0,
|
|||
|
--可找回的经验值
|
|||
|
CanFindExpValue = 0,
|
|||
|
}
|
|||
|
function OfflineOnHookSystem:Initialize()
|
|||
|
self.TimerEventID = GameCenter.TimerEventSystem:AddTimeStampHourEvent(10, 1,
|
|||
|
true, nil, function(id, remainTime, param)
|
|||
|
self:ReqHookSetInfo()
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function OfflineOnHookSystem:UnInitialize()
|
|||
|
GameCenter.TimerEventSystem:RemoveTimerEvent(self.TimerEventID)
|
|||
|
end
|
|||
|
|
|||
|
function OfflineOnHookSystem:ReqHookSetInfo()
|
|||
|
GameCenter.Network.Send("MSG_Hook.ReqHookSetInfo", {})
|
|||
|
end
|
|||
|
|
|||
|
function OfflineOnHookSystem:GS2U_ResHookSetInfo(result)
|
|||
|
self.RemainOnHookTime = result.hookRemainTime
|
|||
|
self.CurWorldLevel = result.worldlevel
|
|||
|
self.ExpAddRateDic = Dictionary:New()
|
|||
|
for i=1,#result.expAddRateList do
|
|||
|
local _type = result.expAddRateList[i].type
|
|||
|
local _rate = result.expAddRateList[i].rate
|
|||
|
local _cfg = DataConfig.DataOnHookC[_type]
|
|||
|
if _cfg ~= nil then
|
|||
|
self.ExpAddRateDic:Add(_type, _rate)
|
|||
|
end
|
|||
|
end
|
|||
|
self.ItemRemainTime = result.curExpItemRamineTime
|
|||
|
self.ItemSyncTime = Time.GetRealtimeSinceStartup()
|
|||
|
--self.ExpAddRateList = List:New(result.expAddRateList)
|
|||
|
self:CheckTimeRedPoint()
|
|||
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_UPDATE_HOOKSITTING, result)
|
|||
|
end
|
|||
|
|
|||
|
function OfflineOnHookSystem:GS2U_ResOfflineHookResult(result)
|
|||
|
self.RemainOnHookTime = result.hookRemainTime
|
|||
|
self.OfflineHookResult = result
|
|||
|
self:CheckTimeRedPoint()
|
|||
|
GameCenter.PushFixEvent(UIEventDefine.UIOnHookForm_OPEN)
|
|||
|
end
|
|||
|
|
|||
|
--经验加成改变
|
|||
|
function OfflineOnHookSystem:GS2U_ResExpRateChange(result)
|
|||
|
if self.ExpAddRateDic == nil then
|
|||
|
self.ExpAddRateDic = Dictionary:New()
|
|||
|
end
|
|||
|
local _type = result.info.type
|
|||
|
local _rate = result.info.rate
|
|||
|
local _cfg = DataConfig.DataOnHookC[_type]
|
|||
|
if _cfg ~= nil then
|
|||
|
self.ExpAddRateDic[_type] = _rate
|
|||
|
end
|
|||
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_UPDATE_HOOKSITTING, result)
|
|||
|
end
|
|||
|
|
|||
|
--返回的是整数
|
|||
|
function OfflineOnHookSystem:GetHourAndMinuteBySecond(second)
|
|||
|
local h = second / 3600
|
|||
|
second = second % 3600
|
|||
|
local m = second / 60
|
|||
|
--返回整数
|
|||
|
return math.modf( h ), math.modf( m )
|
|||
|
end
|
|||
|
|
|||
|
--获取经验加成,百分制,type = OnHookExpAddType
|
|||
|
function OfflineOnHookSystem:GetMainFormShowExpRate(expAddType)
|
|||
|
local _retValue = 0
|
|||
|
self.ExpAddRateDic:Foreach(
|
|||
|
function(key, value)
|
|||
|
if key == expAddType then
|
|||
|
_retValue = _retValue + value
|
|||
|
end
|
|||
|
end
|
|||
|
)
|
|||
|
return _retValue
|
|||
|
end
|
|||
|
|
|||
|
--获取总的经验加成,百分制
|
|||
|
function OfflineOnHookSystem:GetTotalExpAddRate()
|
|||
|
local _retValue = 0
|
|||
|
self.ExpAddRateDic:Foreach(
|
|||
|
function(key, value)
|
|||
|
if key == OnHookExpAddType.WorldLevel and GameCenter.VipSystem.CurRecharge <= 0 then
|
|||
|
else
|
|||
|
_retValue = _retValue + value
|
|||
|
end
|
|||
|
end
|
|||
|
)
|
|||
|
return _retValue
|
|||
|
end
|
|||
|
|
|||
|
--获取其他的经验加成,百分制
|
|||
|
function OfflineOnHookSystem:GetOtherExpAddRate()
|
|||
|
local _lp = GameCenter.GameSceneSystem:GetLocalPlayer()
|
|||
|
if _lp == nil then
|
|||
|
return 0
|
|||
|
end
|
|||
|
local _result = (_lp.PropMoudle.KillMonsterExpPercent // 100) - self:GetTotalExpAddRate()
|
|||
|
if _result < 0 then
|
|||
|
_result = 0
|
|||
|
end
|
|||
|
return _result
|
|||
|
end
|
|||
|
|
|||
|
--获取当前经验药品加成倍率,百分制
|
|||
|
function OfflineOnHookSystem:GetCurItemAddRate()
|
|||
|
return self:GetMainFormShowExpRate(OnHookExpAddType.Drug)
|
|||
|
end
|
|||
|
|
|||
|
--获取当前世界等级
|
|||
|
function OfflineOnHookSystem:GetCurWorldLevel()
|
|||
|
return self.CurWorldLevel
|
|||
|
end
|
|||
|
|
|||
|
--获取经验药剩余时间
|
|||
|
function OfflineOnHookSystem:GetItemExpRemainTime()
|
|||
|
local _time = self.ItemRemainTime - (Time.GetRealtimeSinceStartup() - self.ItemSyncTime)
|
|||
|
if _time < 0 then
|
|||
|
_time = 0
|
|||
|
end
|
|||
|
return _time
|
|||
|
end
|
|||
|
|
|||
|
--检测红点
|
|||
|
function OfflineOnHookSystem:CheckTimeRedPoint()
|
|||
|
--剩余时间小于5消失展示红点
|
|||
|
GameCenter.RedPointSystem:CleraFuncCondition(FunctionStartIdCode.OnHookSettingForm)
|
|||
|
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.OnHookSettingForm, 0, RedPointCustomCondition(self.RemainOnHookTime <= (5 * 60 * 60)))
|
|||
|
end
|
|||
|
|
|||
|
--判断是否是离线经验道具
|
|||
|
function OfflineOnHookSystem:IsOffLineTimeItem(itemId)
|
|||
|
for i = 1, #self.AddOnHookTimeItemID do
|
|||
|
if self.AddOnHookTimeItemID[i] == itemId then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
--离线找回经验
|
|||
|
function OfflineOnHookSystem:ResOfflineHookFindTime(msg)
|
|||
|
--可找回的时间
|
|||
|
self.CanFindTime = msg.offlineTime
|
|||
|
--可找回的经验值
|
|||
|
self.CanFindExpValue = msg.exp
|
|||
|
GameCenter.MainFunctionSystem:SetFunctionVisible(FunctionStartIdCode.OfflineFind, self.CanFindTime > 0 and self.CanFindExpValue > 0)
|
|||
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_UPDATE_OFFLINEFINDTIME)
|
|||
|
end
|
|||
|
|
|||
|
return OfflineOnHookSystem
|