------------------------------------------------ -- 作者: 王圣 -- 日期: 2020-11-07 -- 文件: TianJinLingSystem.lua -- 模块: TianJinLingSystem -- 描述: 天禁令系统 ------------------------------------------------ -- 引用 local L_TaskData = require "Logic.TianJinLing.TianJinLingTaskData" local L_LvRewardData = require "Logic.TianJinLing.TianJinLingLvData" local TianJinLingSystem = { -- 天禁令等级 CurLv = 0, -- 当前轮数 CurGroup = 1, -- 剩余时间 LeftTime = 0, -- 结束时间 EndTime = 0, -- 当前等级对应的配置ID CurCfgId = 0, -- 一轮活动生命周期 LiveTime = 0, -- 是否购买 IsBuy = false, -- 充值ID RechargeId = 0, -- 购买价格 Price = 0, -- 任务字典 DicGroupTask = nil, --定位数据 LocationList = nil, -- 等级奖励字典 DicLvReward = nil, -- 是否点击过购买 IsClickBuy = false } function TianJinLingSystem:Initialize() GameCenter.RegFixEventHandle(LogicEventDefine.EVENT_COIN_CHANGE_UPDATE, self.CoinChange, self) end function TianJinLingSystem:UnInitialize() GameCenter.UnRegFixEventHandle(LogicEventDefine.EVENT_COIN_CHANGE_UPDATE, self.CoinChange, self) end function TianJinLingSystem:CoinChange(obj, sender) if obj == ItemTypeCode.TianJinLingPoint then local point = GameCenter.ItemContianerSystem:GetEconomyWithType(ItemTypeCode.TianJinLingPoint) self:SetCurLv(point) end end -- 获取活动生命周期 function TianJinLingSystem:GetLiveTime() if self.LiveTime == 0 then end return self.LiveTime end -- 获取当前活动是第几轮 function TianJinLingSystem:GetGroup() -- 用当前的服务器时区时间 减去活动开始时间 local _disTime = GameCenter.HeartSystem.ServerTime - Time.GetOpenServerTime() local _liveTime = self:GetLiveTime() local _group = math.floor(_disTime / _liveTime) + 1 return _group end -- 获取当前轮剩余时间 function TianJinLingSystem:GetLeftTime() return self.EndTime - GameCenter.HeartSystem.ServerTime end -- ===============================================任务相关--=============================================== -- 获取任务字典 function TianJinLingSystem:GetTaskDic() if self.DicGroupTask == nil then self.DicGroupTask = Dictionary:New() DataConfig.DataFallingSkyTask:Foreach(function(k, v) local _task = L_TaskData:New(v) local _dicTask = self.DicGroupTask[v.Group] if _dicTask == nil then _dicTask = Dictionary:New() local _list = List:New() _list:Add(_task) _dicTask[v.Type] = _list self.DicGroupTask[v.Group] = _dicTask else local _list = _dicTask[v.Type] if _list == nil then _list = List:New() _list:Add(_task) _dicTask[v.Type] = _list else _list:Add(_task) end end end) end return self.DicGroupTask end -- 获取任务类型 function TianJinLingSystem:GetTaskTypeList() local _ret = nil local _dic = self:GetTaskDic() if _dic ~= nil then local _groups = _dic:GetKeys() local _gropu = _groups[1] if _gropu ~= nil then local _dicTask = _dic[_gropu] local _types = _dicTask:GetKeys() _ret = _types end end return _ret end function TianJinLingSystem:GetCurGroupTaskListByType(type) local _list = nil local _dic = self:GetCurGroupTaskDataList() if _dic ~= nil and _dic:ContainsKey(type) then _list = _dic[type] if _list ~= nil then _list:Sort(function(a, b) return a:GetState() * 100 + a:GetId() < b:GetState() * 100 + b:GetId() end) end end return _list end function TianJinLingSystem:GetCurGroupTaskDataList() local _dic = self:GetTaskDataDic(self.CurGroup) return _dic end -- 根据group获取任务列表 function TianJinLingSystem:GetTaskDataDic(group) local _ret = nil local _dic = self:GetTaskDic() if _dic ~= nil then local _dic2 = _dic[group] if _dic2 ~= nil then _ret = _dic2 end end return _ret end -- 根据任务ID和Group获取任务数据 function TianJinLingSystem:GetTaskDataById(group, id) local _ret = nil local _dic = self:GetTaskDataDic(group) if _dic ~= nil then local _keys = _dic:GetKeys() for i = 1, #_keys do local _list = _dic[_keys[i]] for m = 1, #_list do local _data = _list[m] if _data:GetId() == id then _ret = _data end end end end return _ret end -- ===============================================任务相关--=============================================== -- ===============================================等级奖励相关--=============================================== -- 获取等级奖励数据 function TianJinLingSystem:GetLvDataDic() if self.DicLvReward == nil then self.DicLvReward = Dictionary:New() DataConfig.DataFallingSkyLevel:Foreach(function(k, v) local _data = L_LvRewardData:New(v) local _group = v.Goup local _list = self.DicLvReward[_group] if _list == nil then _list = List:New() _list:Add(_data) self.DicLvReward[_group] = _list else _list:Add(_data) end end) end return self.DicLvReward end function TianJinLingSystem:GetLocationList() if self.LocationList == nil then self.LocationList = List:New() local _index = 0 local _dic = self:GetLvDataDic() local _list = _dic[self.CurGroup] if _list ~= nil then local _cacheLocation = nil for i = 1, #_list do local _data = _list[i] local _group = _data.Cfg.SubGroup local _location = nil if _index ~= _group then _location = {Data = nil, Index = i - 1} _index = _group _cacheLocation = _location self.LocationList:Add(_location) else _cacheLocation.Data = _data end end end end return self.LocationList end -- 获取当前等级奖励列表 function TianJinLingSystem:GetGroupLvDataList(group) local _ret = nil local _curGroup = group local _dic = self:GetLvDataDic() if _dic ~= nil then local _list = _dic[_curGroup] if _list ~= nil then _ret = _list end end return _ret end function TianJinLingSystem:GetCurGroupLvDataList() local _ret = nil local _dic = self:GetLvDataDic() if _dic ~= nil then local _list = _dic[self.CurGroup] if _list ~= nil then _ret = _list end end local _prePoint = 0 if _ret ~= nil then for i = 1, #_ret do local _data = _ret[i] if i == 1 then _data.PrePoint = 0 _prePoint = _data:GetPoint() else _data.PrePoint = _prePoint _prePoint = _data:GetPoint() end end end return _ret end -- 获取传入等级对应的当前轮活动数据 function TianJinLingSystem:GetGroupLvDataByLv(group, lv) local _ret = nil local _list = self:GetGroupLvDataList(group) if _list ~= nil then for i = 1, #_list do local _data = _list[i] if _data:GetId() == lv then _ret = _data end end end return _ret end -- 获取天禁令等级 function TianJinLingSystem:SetCurLv(point) self.CurLv = 0 self.CurCfgId = 0 local _list = self:GetGroupLvDataList(self.CurGroup) for i = 1, #_list do local _data = _list[i] if point >= _data:GetPoint() then self.CurLv = _data:GetLv() self.CurCfgId = _data:GetId() else break end end end -- 获取下一级需要的天禁令点 function TianJinLingSystem:GetNextPoint() local _ret = 0 local _list = self:GetGroupLvDataList(self.CurGroup) local _isFind = false for i = 1, #_list do local _data = _list[i] if _isFind then _ret = _data:GetPoint() break end if self.CurCfgId == 0 then _ret = _data:GetPoint() break elseif self.CurCfgId == _data:GetId() then if i == #_list then _ret = _data:GetPoint() break else _isFind = true end end end return _ret end function TianJinLingSystem:CheckRedPoint() -- 检查任务 local _taskDic = self:GetTaskDataDic(self.CurGroup) if _taskDic ~= nil then local _keys = _taskDic:GetKeys() for i = 1, #_keys do local _key = _keys[i] local _funcId = 0 if _key == TJLMenu.DailyTask then _funcId = FunctionStartIdCode.TJLDailyTask elseif _key == TJLMenu.StepTask then _funcId = FunctionStartIdCode.TJLStepTask elseif _key == TJLMenu.ChuMoTask then _funcId = FunctionStartIdCode.TJLChuMoTask end local _taskList = _taskDic[_key] local _isShow = false for m = 1, #_taskList do local _task = _taskList[m] if not _isShow and _task.Count >= _task:GetTCount() and _task:GetState() == 0 then _isShow = true break end end GameCenter.MainFunctionSystem:SetAlertFlag(_funcId, _isShow) end end -- 检查等级奖励 local _lvRedPoint = false local _point = GameCenter.ItemContianerSystem:GetEconomyWithType(ItemTypeCode.TianJinLingPoint) local _lvList = self:GetCurGroupLvDataList() if _lvList ~= nil then for i = 1, #_lvList do local _data = _lvList[i] if not _lvRedPoint and _point >= _data:GetPoint() then if self.IsBuy then -- 如果买了 if not _data.IsAwardFree or not _data.IsAwardPay then _lvRedPoint = true break end else -- 如果没有买 if not _data.IsAwardFree then _lvRedPoint = true break end end end end end if not _lvRedPoint then if not self.IsClickBuy and not self.IsBuy then -- 如果没有点击过购买按钮 _lvRedPoint = true end end GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.TJL, _lvRedPoint) end -- ===============================================等级奖励相关--=============================================== -- ===============================================Msg--=============================================== -- 请求任务领奖 function TianJinLingSystem:ReqGetFallSkyTaskReward(id) GameCenter.Network.Send("MSG_FallingSky.ReqGetFallSkyTaskReward", { taskID = id }) end -- 等级领奖 function TianJinLingSystem:ReqGetFallSkyLevelReward(id, free) GameCenter.Network.Send("MSG_FallingSky.ReqGetFallSkyLevelReward", { levelId = id, isFree = free }) end --请求一键领取等级奖励 function TianJinLingSystem:ReqOnekeyGetFallSkyLevelReward() GameCenter.Network.Send("MSG_FallingSky.ReqOnekeyGetFallSkyLevelReward") end --请求一键领取任务奖励 function TianJinLingSystem:ReqOnekeyGetFallSkyTaskReward() GameCenter.Network.Send("MSG_FallingSky.ReqOnekeyGetFallSkyTaskReward") end -- 上线推送消息 function TianJinLingSystem:ResOnlineFallSkyInfo(msg) -- 初始化激活金额 self.RechargeId = tonumber(DataConfig.DataGlobal[GlobalName.FallingSky_RechargeId].Params) if msg == nil then return end -- 设置是否购买 self.IsBuy = msg.hasPay self.CurGroup = msg.round -- self.LeftTime = msg.lastTime self.EndTime = msg.lastTime / 1000 -- 设置等级奖励数据 if msg.levelDataList ~= nil then for i = 1, #msg.levelDataList do local _msgData = msg.levelDataList[i] local _data = self:GetGroupLvDataByLv(msg.round, _msgData.levelId) if _data ~= nil then _data.IsAwardFree = _msgData.isGetfeelReward _data.IsAwardPay = _msgData.isGetpayReward end end end --重置每日任务数据 服务器不会发每日任务 local _taskList = self:GetCurGroupTaskListByType(TJLMenu.DailyTask) if _taskList ~= nil then for i = 1, #_taskList do local _task = _taskList[i] _task.Count = 0 _task.IsAward = false end end -- 设置任务数据 if msg.taskDataList ~= nil then for i = 1, #msg.taskDataList do local _msgData = msg.taskDataList[i] local _data = self:GetTaskDataById(msg.round, _msgData.taskID) if _data ~= nil then _data.Count = _msgData.progress _data.IsAward = _msgData.state end end end self:CheckRedPoint() GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_TIANJINLING_LVDATA_REFRESH) GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_TIANJINLING_TASKDATA_REFRESH) end -- 任务进度刷新 function TianJinLingSystem:ResRefreshFallSkyTask(msg) if msg == nil then return end if msg.taskData ~= nil then for i = 1, #msg.taskData do local _msgData = msg.taskData[i] local _data = self:GetTaskDataById(self.CurGroup, _msgData.taskID) if _data ~= nil then _data.Count = _msgData.progress _data.IsAward = _msgData.state end end end local _taskDic = self:GetTaskDataDic(self.CurGroup) local _keys = _taskDic:GetKeys() for i = 1, #_keys do local _taskList = _taskDic[_keys[i]] _taskList:Sort(function(a, b) return a:GetState() * 100 + a:GetId() < b:GetState() * 100 + b:GetId() end) end self:CheckRedPoint() GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_TIANJINLING_TASKDATA_REFRESH) end -- 单个等级奖励状态刷新 function TianJinLingSystem:ResRefreshFallSkyLevel(msg) if msg == nil then return end if msg ~= nil then for i = 1, #msg.levelData do local _msgData = msg.levelData[i] local _data = self:GetGroupLvDataByLv(self.CurGroup, _msgData.levelId) if _data ~= nil then _data.IsAwardFree = _msgData.isGetfeelReward _data.IsAwardPay = _msgData.isGetpayReward end end end self:CheckRedPoint() GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_TIANJINLING_LVDATA_REFRESH) end -- 刷新付费状态 function TianJinLingSystem:ResRefreshRechargeState(msg) if msg == nil then return end self.IsBuy = msg.hasPay GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_TIANJINLING_BUY_RESULT) end return TianJinLingSystem