259 lines
8.2 KiB
Lua
259 lines
8.2 KiB
Lua
|
|
------------------------------------------------
|
|
--作者: _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
|