------------------------------------------------ -- 作者: 王圣 -- 日期: 2019-07-15 -- 文件: GrowthWaySystem.lua -- 模块: GrowthWaySystem -- 描述: 成长之路系统类 ------------------------------------------------ -- 引用 local TaskData = require "Logic.GrowthWay.GrowthWayTaskData" local TreasureData = require "Logic.GrowthWay.GrowthWayTreasureData" local AttrData = require "Logic.GrowthWay.GrowthWayAttrData" local TimeUtils = CS.Thousandto.Core.Base.TimeUtils; local GrowthWaySystem = { -- 第几天 CurDay = 0, -- 活动剩余时间 LeftTime = 0, SyncTime = 0, -- 法宝道具Id FbItemId = 0, -- 当前星星个数 CurStarNum = 0, -- 宝箱奖励 ListTreasure = nil, -- 每日任务 DicDailyTask = Dictionary:New(), -- 菜单红点 DicMenuRedPoint = Dictionary:New(), IsShowModel = false, ShowModelId = 0 } -- 初始化排行榜Cfg function GrowthWaySystem:Initialize() self.DicDailyTask:Clear() self.DicMenuRedPoint:Clear() DataConfig.DataNewSeverGrowup:Foreach(function(k, v) local task = TaskData:New() task:Parase(v) local key = v.Day local list = nil if self.DicDailyTask:ContainsKey(key) then list = self.DicDailyTask[key] list:Add(task) else list = List:New() list:Add(task) self.DicDailyTask:Add(key, list) end end) self.TimerEventId = GameCenter.TimerEventSystem:AddTimeStampDayEvent(10, 10, true, nil, function(id, remainTime, param) -- 跨天了 重新获取一下开服时间 self.CurDay = Time.GetOpenSeverDay() end) -- 初始化菜单按钮红点 for i = 1, GrowthWayType.Count - 1 do self.DicMenuRedPoint:Add(i, false) end -- 设置法宝信息 self:SetFaBaoInfo() end function GrowthWaySystem:UnInitialize() self.ListTreasure = nil end function GrowthWaySystem:GetListTreasure() if self.ListTreasure == nil then self.ListTreasure = List:New() -- 宝箱奖励配置初始化 DataConfig.DataNewSeverGrowuprew:Foreach(function(k, v) local treasure = TreasureData:New() treasure:Parase(v) self.ListTreasure:Add(treasure) end) end return self.ListTreasure end -- 获取对应key奖励的总分 function GrowthWaySystem:GetTasksScore(key) local score = 0 if self.DicDailyTask:ContainsKey(key) then local tasks = self.DicDailyTask[key] for i = 1, #tasks do score = score + tasks[i].Cfg.Rate end end return score end -- 获取key对应的已经完成的任务积分 function GrowthWaySystem:GetFinishTasksScore(key) local score = 0 if self.DicDailyTask:ContainsKey(key) then local tasks = self.DicDailyTask[key] for i = 1, #tasks do if tasks[i].CurCount >= tasks[i].TotalCount and tasks[i].IsRward then score = score + tasks[i].Cfg.Rate end end end return score end -- 获取key对应的任务列表 function GrowthWaySystem:GetTaskListByIndex(day, subId) local listTask = self.DicDailyTask[day] if listTask == nil then return nil else listTask:Sort(function(a, b) if a.State == b.State then return a.Cfg.Id < b.Cfg.Id else return a.State < b.State end end) local list = List:New() for i = 1, #listTask do if listTask[i].Cfg.SubId == subId then list:Add(listTask[i]) end end return list end end function GrowthWaySystem:CanSubmitTask(day, subId) local listTask = self.DicDailyTask[day] if listTask ~= nil then for i = 1, #listTask do local task = listTask[i] if task.CurCount >= task.TotalCount and not task.IsRward and task.Cfg.SubId == subId then return true end end end return false end function GrowthWaySystem:GetProcessParam() local ret = nil local Score = 0 local leftScore = 0 local _listTreasure = self:GetListTreasure() for i = 1, #_listTreasure do if self.CurStarNum >= leftScore and self.CurStarNum < _listTreasure[i].StarNum then ret = { LeftScore = leftScore, Score = _listTreasure[i].StarNum, Index = i } return ret end leftScore = _listTreasure[i].StarNum end if leftScore ~= 0 and ret == nil then ret = { LeftScore = leftScore, Score = _listTreasure[#_listTreasure].StarNum, Index = #_listTreasure } end return ret end -- 获取index对应的宝箱奖励数据 function GrowthWaySystem:GetTreasureDataByIndex(index) local _listTreasure = self:GetListTreasure() if index <= #_listTreasure then return _listTreasure[index] end return nil end -- 获取普通奖励宝箱数据 function GrowthWaySystem:GetTreasureNormalData() local list = List:New() local _listTreasure = self:GetListTreasure() for i = 1, #_listTreasure do local data = _listTreasure[i] if not data.IsModel then list:Add(data) end end return list end -- 获取特殊奖励宝箱数据 function GrowthWaySystem:GetTreasureSpecialData() local ret = nil local _listTreasure = self:GetListTreasure() for i = 1, #_listTreasure do local data = _listTreasure[i] if data.IsModel then ret = data end end return ret end function GrowthWaySystem:IsRewardFinal() -- 如果开服时间大于了功能存在的时间也返回true local _listTreasure = self:GetListTreasure() if Time.GetOpenSeverDay() > 7 then return true end if _listTreasure[2].IsReward and _listTreasure[#_listTreasure].IsReward then return true else return false end end function GrowthWaySystem:GetGrowthWayModellID() local _listTreasure = self:GetListTreasure() if not _listTreasure[2].IsReward then local item = _listTreasure[2].ListItem[1] local cfg = DataConfig.DataItem[item.Id] if cfg ~= nil then local list = Utils.SplitStr(cfg.ShowId, '_') return tonumber(list[1]) end end if not _listTreasure[#_listTreasure].IsReward then local item = _listTreasure[#_listTreasure].ListItem[1] local cfg = DataConfig.DataItem[item.Id] if cfg ~= nil then local list = Utils.SplitStr(cfg.ShowId, '_') return tonumber(list[1]) end end end -- 获取默认参数 function GrowthWaySystem:GetDefaultParam() local ret = nil local tempRet = nil local tempTask = nil local length = self.CurDay if length > self.DicDailyTask:Count() then length = self.DicDailyTask:Count() end for i = 1, length do if tempTask == nil then local listTask = self.DicDailyTask[i] if listTask ~= nil then for m = 1, #listTask do local task = listTask[m] if i == 1 and m == 1 then tempRet = { Day = task.Cfg.Day, SubId = task.Cfg.SubId } end if task.CurCount >= task.TotalCount and not task.IsRward then ret = { Day = task.Cfg.Day, SubId = task.Cfg.SubId } return ret elseif task.CurCount < task.TotalCount and tempTask == nil then tempTask = task end end end else ret = { Day = tempTask.Cfg.Day, SubId = tempTask.Cfg.SubId } return ret end end ret = tempRet return ret end -- 获取指定天数对应的参数 function GrowthWaySystem:GetParamByDay(day) local ret = nil local tempRet = nil local tempTask = nil local listTask = self.DicDailyTask[day] if listTask == nil then return end if listTask ~= nil then for i = 1, #listTask do local task = listTask[i] if i == 1 then tempRet = { Day = task.Cfg.Day, SubId = task.Cfg.SubId } end if task.CurCount >= task.TotalCount and not task.IsRward then ret = { Day = task.Cfg.Day, SubId = task.Cfg.SubId } return ret elseif task.CurCount < task.TotalCount and tempTask == nil then tempTask = task ret = { Day = tempTask.Cfg.Day, SubId = tempTask.Cfg.SubId } end end end if tempTask ~= nil then return ret else ret = tempRet return ret end end -- 设置法宝信息 function GrowthWaySystem:SetFaBaoInfo() local str = DataConfig.DataGlobal[1552].Params local list = Utils.SplitStr(str, '_') if list ~= nil then self.FbItemId = tonumber(list[1]) end end -- 获取法宝名字 function GrowthWaySystem:GetFbName() local cfg = DataConfig.DataItem[self.FbItemId] if cfg ~= nil then return cfg.Name end end -- 获取剩余时间 function GrowthWaySystem:GetLeftTime() return self.LeftTime - (Time.GetRealtimeSinceStartup() - self.SyncTime) end -- 设置菜单红点Dic function GrowthWaySystem:UpdateMenuRedPointDic() -- 判断红点 self.DicDailyTask:Foreach(function(k, v) local taskList = v if taskList == nil then return end local canReward = false for i = 1, #taskList do canReward = taskList[i]:CanRewardItem() if canReward then if self.DicMenuRedPoint:ContainsKey(k) then self.DicMenuRedPoint[k] = true break end end end if not canReward then self.DicMenuRedPoint[k] = false end end) end function GrowthWaySystem:GetTreasureParam() local retData = nil local preData = nil local list = List:New() local _listTreasure = self:GetListTreasure() for i = 1, #_listTreasure do if i == 1 then preData = _listTreasure[i] if not preData.IsReward then retData = _listTreasure[i] end else if preData.IsReward and not _listTreasure[i].IsReward then retData = _listTreasure[i] preData = _listTreasure[i] end end end if retData == nil then return nil else if #retData.ListItem > 0 then return retData.ListItem[1].Id end end end function GrowthWaySystem:Update(dt) local lp = GameCenter.GameSceneSystem:GetLocalPlayer() if lp == nil then return end local isShow = false local _listTreasure = self:GetListTreasure() self.DicDailyTask:Foreach(function(k, v) local taskList = v if taskList == nil then return end local canReward = false for i = 1, #taskList do canReward = taskList[i]:CanRewardItem() if canReward and self.CurDay >= k then isShow = true break end end end) if not isShow then -- 判断是否有宝箱可以领取 for i = 1, #_listTreasure do local data = _listTreasure[i] local canReward = false if data.StarNum <= self.CurStarNum then canReward = true end if not data.IsReward then if canReward then isShow = true break end end end end GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.GrowthWay, isShow) if self.IsShowModel then if self:IsRewardFinal() then if lp ~= nil then lp.PropMoudle.GrowthWayModelId = 0 self.ShowModelId = 0 end self.IsShowModel = false else local modelId = self:GetGrowthWayModellID() if self.ShowModelId ~= modelId then if lp ~= nil then lp.PropMoudle.GrowthWayModelId = self:GetGrowthWayModellID() self.ShowModelId = modelId end end end else -- 如果没有显示模型 并且功能没有结束 且功能没有开启 if not self:IsRewardFinal() and not GameCenter.MainFunctionSystem:FunctionIsVisible(FunctionStartIdCode.GrowthWay) then -- 设置默认模型 if lp ~= nil then local cfg = DataConfig.DataGlobal[GlobalName.New_Sever_Growup_Show_Model_Value] if cfg ~= nil then local list = Utils.SplitStr(cfg.Params, ';') local values = Utils.SplitStr(list[1], '_') local modelId = tonumber(values[1]) lp.PropMoudle.GrowthWayModelId = modelId end end end end end function GrowthWaySystem:IsRewardOver() local _ret = true local _listTreasure = self:GetListTreasure() for i = 1, #_listTreasure do if not _listTreasure[i].IsReward then _ret = false break end end return _ret end -------------------req消息(Msg)相关------------------ -- 领取成长之路积分 function GrowthWaySystem:ReqGrowUpPoint(index) GameCenter.Network.Send("MSG_OpenServerAc.ReqGrowUpPoint", { id = index }) end -- 领取积分奖励 function GrowthWaySystem:ReqGrowUpPointReward(index) GameCenter.Network.Send("MSG_OpenServerAc.ReqGrowUpPointReward", { id = index }) end ------------------res消息(Msg)------------------- -- 成长之路服务器主动推送消息 (上线的时候发送一次) function GrowthWaySystem:ResGrowUpInfo(result) if result == nil then return end local _listTreasure = self:GetListTreasure() -- 计算剩余时间 -- 计算服务器开启了第几天 self.CurDay = Time.GetOpenSeverDay() -- GameCenter.ServeCrazySystem:GetCurOpenTime() local totalDay = tonumber(DataConfig.DataGlobal[1567].Params) - 1 local liveSeconds = totalDay * (24 * 60 * 60) local seconds = 24 * 3600 local hour, min, sec = TimeUtils.GetStampTimeHHMMSS(math.floor(GameCenter.HeartSystem.ServerTime)) local curSeconds = hour * 3600 + min * 60 + sec self.LeftTime = liveSeconds - ((self.CurDay - 1) * (24 * 60 * 60) + curSeconds) self.SyncTime = Time.GetRealtimeSinceStartup() self.CurStarNum = result.point for i = 1, #result.growups do local key = DataConfig.DataNewSeverGrowup[result.growups[i].id].Day local taskList = nil if self.DicDailyTask:ContainsKey(key) then taskList = self.DicDailyTask[key] for m = 1, #taskList do if taskList[m].CfgId == result.growups[i].id then taskList[m]:ParaseMsg(result.growups[i]) end end end end -- 判断宝箱领取状态 local index = 0 local mark = 1 local isRewardOver = true for i = 1, #_listTreasure do mark = 1 << index _listTreasure[i]:SetReward(result.hasGet, mark) index = index + 1 --IsReward if not _listTreasure[i].IsReward then isRewardOver = false end end if isRewardOver then GameCenter.MainFunctionSystem:SetFunctionVisible(FunctionStartIdCode.GrowthWay, false) end self:UpdateMenuRedPointDic() -- GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_GROWTHWAYFORM_UPDATE) if not self:IsRewardFinal() then local lp = GameCenter.GameSceneSystem:GetLocalPlayer() if lp ~= nil then lp.PropMoudle.GrowthWayModelId = self:GetGrowthWayModellID() self.ShowModelId = lp.PropMoudle.GrowthWayModelId end self.IsShowModel = true end end -- 更新成长之路列表 function GrowthWaySystem:ResGrowUpList(result) if result == nil then return end if result.growups ~= nil then for i = 1, #result.growups do local key = DataConfig.DataNewSeverGrowup[result.growups[i].id].Day local taskList = nil if self.DicDailyTask:ContainsKey(key) then taskList = self.DicDailyTask[key] for m = 1, #taskList do if taskList[m].CfgId == result.growups[i].id then taskList[m]:ParaseMsg(result.growups[i]) end end end end end self:UpdateMenuRedPointDic() -- 发送消息更新UI GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_GROWTHWAYFORM_UPDATE, false) end -- 完成任务后成长之路积分返回 function GrowthWaySystem:ResGrowUpPoint(result) if result == nil then return end self.CurStarNum = result.point local tab = nil local taskList = nil local day = DataConfig.DataNewSeverGrowup[result.id].Day if self.DicDailyTask:ContainsKey(day) then taskList = self.DicDailyTask[day] for m = 1, #taskList do if taskList[m].CfgId == result.id then taskList[m].IsRward = true taskList[m].State = 3 tab = { Day = day, SubId = taskList[m].Cfg.SubId } end end end self:UpdateMenuRedPointDic() GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_GROWTHUP_TASKUPDATE, tab) end -- 成长之路预览奖励返回 function GrowthWaySystem:ResGrowUpPointReward(result) if result == nil then return end local _listTreasure = self:GetListTreasure() for i = 1, #_listTreasure do if _listTreasure[i].CfgId == result.id then _listTreasure[i].IsReward = true end end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_GROWTHWAYFORM_UPDATE, false) end return GrowthWaySystem