------------------------------------------------ --作者: _SqL_ --日期: 2019-04-29 --文件: GodBookSystem.lua --模块: GodBookSystem --描述: 天书系统 ------------------------------------------------ local AmuletData = require "Logic.GodBook.AmuletData" local GodBookData = require "Logic.GodBook.GodBookData" local GodBookSystem = { ActiveAmuletID = 0, -- 保存正在激活的符咒id OpenAmuletInfoList = List:New(), -- 激活中的的符咒 OpenAmuletIdList = List:New(), -- 激活中的符咒id列表 } function GodBookSystem:Initialize() GameCenter.RegFixEventHandle(LogicEventDefine.EID_EVENT_FIRSTENTERMAP, self.OnFirstEnterMap, self) end function GodBookSystem:UnInitialize() self.OpenAmuletIdList:Clear() self.OpenAmuletInfoList:Clear() GameCenter.UnRegFixEventHandle(LogicEventDefine.EID_EVENT_FIRSTENTERMAP, self.OnFirstEnterMap, self) end -- 符咒是否可激活 function GodBookSystem:GetAmuletActiveStatus(id) local _active = true local _message = nil if not self.OpenAmuletIdList:Contains(id) then return false end local _amuletData = {} for i = 1, self.OpenAmuletInfoList:Count() do if self.OpenAmuletInfoList[i].ID == id then _amuletData = self.OpenAmuletInfoList[i].TaskList if self.OpenAmuletInfoList[i].Status then return false end break end end for i=1,_amuletData:Count() do if not (_amuletData[i].Status == AmuletTaskStatusEnum.RECEIVED) then return false end end local _cfg = DataConfig.DataAmulet[id] if _cfg.Condition and _cfg.Condition ~= "" then local _params = Utils.SplitStr(_cfg.Condition, "_") if tonumber(_params[1]) == AmuletActiveConditionEnum.LevelComplete then local _p = GameCenter.GameSceneSystem:GetLocalPlayer() if tonumber(_params[2]) <= _p.Level then _active = true else _active = false _message = UIUtils.CSFormat(DataConfig.DataMessageString.Get("GodBookOpenTips"), _params[2]) end elseif tonumber(_params[1]) == AmuletActiveConditionEnum.TaskComplete then if GameCenter.LuaTaskManager:IsMainTaskOver(tonumber(_params[2])) then _active = true else _active = false local _taskCfg = DataConfig.DataTask[tonumber(_params[2])] _message = UIUtils.CSFormat( DataConfig.DataMessageString.Get("GodBookTaskOpenTips"), _taskCfg.TaskName) end elseif tonumber(_params[1]) == AmuletActiveConditionEnum.AchievementComplete then if GameCenter.AchievementSystem:IsFinish(tonumber(_params[2])) then _active = true else _active = false local _achievementCfg = DataConfig.DataAchievement[tonumber(_params[2])] _message = UIUtils.CSFormat(DataConfig.DataMessageString.Get("GodBookAchieveOpenTips"), _achievementCfg.Name) end end end return _active, _message end -- 获取符咒对应的任务列表 function GodBookSystem:GetTaskList(id) if not self.OpenAmuletIdList:Contains(id) then return nil end for i = 1, self.OpenAmuletInfoList:Count() do if self.OpenAmuletInfoList[i].ID ==id then return self.OpenAmuletInfoList[i].TaskList end end end -- 根据Id获取符咒信息 function GodBookSystem:GetAmuletInfo(id) for i = 1, self.OpenAmuletInfoList:Count() do if self.OpenAmuletInfoList[i].ID == id then return self.OpenAmuletInfoList[i] end end end -- 刷新任务 function GodBookSystem:RefreshTask(index, info) local _list = self.OpenAmuletInfoList[index].TaskList for j = 1, #_list do if _list[j].ID == info.id then self.OpenAmuletInfoList[index].TaskList[j]:RefreshData(info) break end end if info.status == AmuletTaskStatusEnum.RECEIVED then self.OpenAmuletInfoList[index]:SortData() end end -- 红点条件 function GodBookSystem:IsShowRedPoint(id) local _showRedPoint = false local _tastList = self:GetTaskList(id) if not _tastList then return false end for i = 1, _tastList:Count() do if _tastList[i].Status == AmuletTaskStatusEnum.Available then _showRedPoint = true end end return _showRedPoint end -- 设置红点 function GodBookSystem:SetRedPoint() local _conditions = List:New(); local _showRedPoint = false for i = 1, self.OpenAmuletInfoList:Count() do local _active = self:GetAmuletActiveStatus(self.OpenAmuletInfoList[i].ID) if _active or self:IsShowRedPoint(self.OpenAmuletInfoList[i].ID) then _showRedPoint = true break end end GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.GodBook, _showRedPoint) end -- 符咒是否已激活 function GodBookSystem:IsActive(id) for i = 1, #self.OpenAmuletInfoList do if id == self.OpenAmuletInfoList[i].ID then return self.OpenAmuletInfoList[i].Status end end return false end -- MSG -- 请求天书信息 function GodBookSystem:ReqGodBookInfo() GameCenter.Network.Send("MSG_GodBook.ReqGodBookInfo",{}) end -- 请求激活符咒 function GodBookSystem:ReqActiveAmulet(id) local _req = {} _req.amuletId = id self.ActiveAmuletID = id GameCenter.Network.Send("MSG_GodBook.ReqActiveAmulet", _req) end -- 请求领取奖励 function GodBookSystem:ReqGetReward(id) local _req = {} _req.conditonId = id GameCenter.Network.Send("MSG_GodBook.ReqGetReward", _req) end function GodBookSystem:AmuletTaskIsGet(taskList, active) local _num = 0 for i = 1, #taskList do if taskList[i].Status == 1 then return true end if taskList[i].Status == 3 then _num = _num + 1 end end return _num == #taskList and (not active) end -- 天书信息返回 function GodBookSystem:GS2U_ResBookInfo(msg) if msg.amulets ~= nil then self.OpenAmuletIdList:Clear() self.OpenAmuletInfoList:Clear() for i = 1, #msg.amulets do self.OpenAmuletIdList:Add(msg.amulets[i].id) self.OpenAmuletInfoList:Add(GodBookData:New(msg.amulets[i])) end end table.sort( self.OpenAmuletInfoList, function(a, b) return a.ID < b.ID end) if self.ActiveAmuletID ~= 0 then GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_AMULETINFO, self.ActiveAmuletID) self.ActiveAmuletID = 0 else local _param = AmuletEnum.LuoFan for i = 1, #self.OpenAmuletInfoList do if self:AmuletTaskIsGet(self.OpenAmuletInfoList[i].TaskList, self.OpenAmuletInfoList[i].Status) then _param = self.OpenAmuletInfoList[i].ID break end end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_AMULETINFO, _param) end self:SetRedPoint() end -- 领取奖励返回 function GodBookSystem:GS2U_ResGetReward(msg) local _cfg = DataConfig.DataAmuletCondition[msg.id] if not _cfg then return end for i = 1, self.OpenAmuletInfoList:Count() do if self.OpenAmuletInfoList[i].ID == _cfg.AmuletId then self:RefreshTask(i, {id = msg.id, progress = 0, status = AmuletTaskStatusEnum.RECEIVED}) break end end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_AMULETPANEL, _cfg.AmuletId) self:SetRedPoint() end -- 符咒条件状态更新 function GodBookSystem:GS2U_ResUpdateCondition(msg) -- Debug.LogError("GS2U_ResUpdateCondition") for i = 1, #self.OpenAmuletInfoList do local _taskList = self.OpenAmuletInfoList[i].TaskList; for j = 1, #_taskList do if msg.id == _taskList[j].ID then _taskList[j].Status = AmuletTaskStatusEnum.Available; end end end self:SetRedPoint() end --第一次进游戏场景 function GodBookSystem:OnFirstEnterMap() self.ReqGodBookInfo(); end return GodBookSystem