Files
Main/Assets/GameAssets/Resources/Lua/Logic/GuideSystem/GuideSystem.lua
2025-01-25 04:38:09 +08:00

112 lines
3.3 KiB
Lua

------------------------------------------------
--作者: yangqf
--日期: 2021-04-09
--文件: GuideSystem.lua
--模块: GuideSystem
--描述: 引导系统
------------------------------------------------
local L_GuideKey = "GuideFinishKey_%d"
local GuideSystem = {
GuideTable = nil,
FinishList = nil,
}
function GuideSystem:Initialize()
end
function GuideSystem:UnInitialize()
self.GuideTable = nil
self.FinishList = nil
end
function GuideSystem:Check(type, param)
if type == GuideTriggerType.None then
return false
end
local _lp = GameCenter.GameSceneSystem:GetLocalPlayer()
if _lp == nil then
return false
end
if self.FinishList == nil then
self.FinishList = List:New()
local _finishText = PlayerPrefs.GetString(string.format(L_GuideKey, _lp.ID), nil)
if _finishText ~= nil and string.len(_finishText) > 0 then
local _paramsArray = Utils.SplitNumber(_finishText, '_')
for i = 1, #_paramsArray do
self.FinishList:Add(_paramsArray[i])
end
end
end
if self.GuideTable == nil then
self.GuideTable = Dictionary:New()
local _func = function(k, cfg)
if not self.FinishList:Contains(k) then
local _list = self.GuideTable[cfg.TriggerType]
if _list == nil then
_list = List:New()
self.GuideTable:Add(cfg.TriggerType, _list)
end
_list:Add(cfg)
end
end
DataConfig.DataGuide:Foreach(_func)
end
local _waitCheckList = self.GuideTable[type]
if _waitCheckList == nil then
return false
end
if #_waitCheckList <= 0 then
self.GuideTable:Remove(type)
return false
end
local _lpLevel = _lp.Level
for i = #_waitCheckList, 1, -1 do
local _guideItem = _waitCheckList[i]
if (_guideItem.TriggerParam == param and
(_guideItem.LimitLevelMin <= 0 or _lpLevel >= _guideItem.LimitLevelMin) and
(_guideItem.LimitLevelMax <= 0 or _lpLevel <= _guideItem.LimitLevelMax)) then
GameCenter.BlockingUpPromptSystem:AddForceGuide(_guideItem)
if _guideItem.Type == GuideForcedType.NotForced or _guideItem.Type == GuideForcedType.SceneAnim or _guideItem.Type == GuideForcedType.TimelineAnim then
--非强制引导直接设置为已经引导
self:SaveGuide(_guideItem.Id)
end
return true
end
end
return false
end
function GuideSystem:SaveGuide(guideID)
local _lp = GameCenter.GameSceneSystem:GetLocalPlayer()
if _lp == nil or self.FinishList==nil then
return
end
if not self.FinishList:Contains(guideID) then
self.FinishList:Add(guideID)
local _text = ""
for i = 1, #self.FinishList do
_text = _text .. self.FinishList[i]
if i < #self.FinishList then
_text = _text .. "_"
end
end
PlayerPrefs.SetString(string.format(L_GuideKey, _lp.ID), _text)
PlayerPrefs.Save()
end
for k, v in pairs(self.GuideTable) do
for i = #v, 1, -1 do
if v[i].Id == guideID then
v:RemoveAt(i)
end
end
end
end
return GuideSystem