miduo_client/Assets/ManagedResources/~Lua/Modules/Player/RedPointManager.lua

342 lines
12 KiB
Lua
Raw Normal View History

2021-04-20 13:58:00 +08:00
--[[
2020-05-09 13:31:21 +08:00
* @Classname RedPointManager
* @Description
* @Date 2019/5/18 10:48
* @Created by MagicianJoker
--]]
require "Message/MessageTypeProto_pb"
require "Message/PlayerInfoProto_pb"
RedPointManager = {}
local this = RedPointManager
local RedPointData = {}
local BindObjs = {}
local ChallengeMapConfig = ConfigManager.GetConfig(ConfigName.ChallengeMapConfig)
local AreaConfig = ConfigManager.GetConfig(ConfigName.AreaConfig)
local MissionConfig = ConfigManager.GetConfig(ConfigName.MissionEventsConfig)
local ChallengeConfig = ConfigManager.GetConfig(ConfigName.ChallengeConfig)
local kServerRedPointBorder = 100
function this.Initialize()
this.InitRedPointData()
end
function this.InitRedPointData()
for _, v in pairs(RedPointType) do
RedPointData[v] = RedPointStatus.Hide
end
end
--服务器推送红点信息
function this.ReceiveRedPoint(buffer)
local data = buffer:DataByte()
local msg = PlayerInfoProto_pb.RedPointInfo()
msg:ParseFromString(data)
if msg.type == RedPointType.Mail then
this.ChangeRedPointStatus(RedPointType.Mail, RedPointStatus.Show)
end
end
function this.BindObject(rpType, rpObj)
BindObjs[rpType] = BindObjs[rpType] or {}
rpObj:SetActive(RedPointData[rpType] == RedPointStatus.Show)
table.insert(BindObjs[rpType], rpObj)
end
function this.UnBindObject(rpType, rpObj)
for k, v in pairs(BindObjs[rpType]) do
if rpObj == v then
BindObjs[rpType][k] = nil
end
end
end
function this.GetRedPointStatus(rpType)
if RedPointData[rpType] then
return RedPointData[rpType]
end
return RedPointStatus.Hide
end
function this.SetRedPointStatus(rpType, status)
this.ChangeRedPointStatus(rpType, status)
this.SetRedPointAllRelate()
end
function this.ChangeRedPointStatus(rpType, status)
if RedPointData[rpType] then
if RedPointData[rpType] ~= status and BindObjs[rpType] then
table.walk(BindObjs[rpType], function(bindObj)
bindObj.gameObject:SetActive(status == RedPointStatus.Show)
end)
end
RedPointData[rpType] = status
end
end
function this.RefreshRedPointData(context)
this.ClearNullReference()
if context then
local infoList = {}
for _, v in pairs(context) do
infoList[v.type] = v.state
end
for _, v in pairs(RedPointType) do
if v < kServerRedPointBorder then
this.ChangeRedPointStatus(v, infoList[v] and infoList[v] or RedPointStatus.Hide)
end
end
end
this.SetRedPointAllRelate()
end
function this.ClearNullReference()
for _, objs in pairs(BindObjs) do
local indexToKill = {}
for k, obj in pairs(objs) do
if IsNull(obj) then
table.insert(indexToKill, k)
end
end
for _, index in ipairs(indexToKill) do
objs[index] = nil
end
end
end
function this.SetRedPointAllRelate()
this.SetRedPointRelate(RedPointType.JieLing, {
RedPointType.Refining,
RedPointType.Arena,
RedPointType.Adventure,
})
this.SetRedPointRelate(RedPointType.ExploreMain, {
RedPointType.OrdinaryExplore,
RedPointType.HeroExplore,
RedPointType.EpicExplore,
RedPointType.LegendExplore,
})
--this.SetRedPointRelate(RedPointType.Operating, {
-- RedPointType.MonthCard,
-- RedPointType.GrowthGift,
-- RedPointType.GiftPack,
--})
--this.SetRedPointRelate(RedPointType.Role, {
-- RedPointType.Talent,
-- RedPointType.Friend,
--})
end
--function this.RefreshPointData()
-- RedPointData[RedPointType.JieLing] = (RedPointData[RedPointType.Refining] == RedPointStatus.Show or
-- RedPointData[RedPointType.Arena] == RedPointStatus.Show or
-- RedPointData[RedPointType.Adventure] == RedPointStatus.Show) and RedPointStatus.Show or RedPointStatus.Hide
-- RedPointData[RedPointType.ExploreMain] = (RedPointData[RedPointType.OrdinaryExplore] == RedPointStatus.Show or
-- RedPointData[RedPointType.HeroExplore] == RedPointStatus.Show or
-- RedPointData[RedPointType.EpicExplore] == RedPointStatus.Show or
-- RedPointData[RedPointType.EpicExplore] == RedPointStatus.Show) and RedPointStatus.Show or RedPointStatus.Hide
-- RedPointData[RedPointType.Operating] = (RedPointData[RedPointType.MonthCard] == RedPointStatus.Show or
-- RedPointData[RedPointType.GrowthGift] == RedPointStatus.Show or
-- RedPointData[RedPointType.GiftPack] == RedPointStatus.Show) and RedPointStatus.Show or RedPointStatus.Hide
-- RedPointData[RedPointType.Role] = (RedPointData[RedPointType.Talent] == RedPointStatus.Show or
-- RedPointData[RedPointType.Friend] == RedPointStatus.Show) and RedPointStatus.Show or RedPointStatus.Hide
--end
function this.SetRedPointRelate(rpType, rpList)
local state = false
for _, rpSType in pairs(rpList) do
state = state or (RedPointData[rpSType] == RedPointStatus.Show)
end
state = state and RedPointStatus.Show or RedPointStatus.Hide
this.ChangeRedPointStatus(rpType, state)
end
--副本红点关卡level双限制
function this.SetExploreRedPoint(context)
--{fightId,level}
--local data = {}
--for _, challengeInfo in ConfigPairs(ChallengeConfig) do
-- local condition = context.fightId and context.fightId or context.level
-- local pos = context.fightId and 1 or 2
-- if challengeInfo.OpenRule[1][pos] == condition then
-- local index = table.keyvalueindexof(data, "Id", challengeInfo.Id)
-- if not index then
-- table.insert(data, challengeInfo)
-- end
-- end
--end
--table.walk(data, function(dataInfo)
-- local fightIdPos = dataInfo.OpenRule[1][1]
-- local levelPos = dataInfo.OpenRule[1][2]
-- if FightManager.SetAndGetSingleFightState(fightIdPos, 2) >= 4 and PlayerManager.level >= levelPos then
-- if dataInfo.Type == 1 then
-- ChangeRedPointStatus(RedPointType.OrdinaryExplore, RedPointStatus.Show)
-- elseif dataInfo.Type == 2 then
-- ChangeRedPointStatus(RedPointType.HeroExplore, RedPointStatus.Show)
-- elseif dataInfo.Type == 3 then
-- ChangeRedPointStatus(RedPointType.EpicExplore, RedPointStatus.Show)
-- else
-- ChangeRedPointStatus(RedPointType.LegendExplore, RedPointStatus.Show)
-- end
-- end
--end)
end
------------待处理--------------
--检测背包红点
function this.RedPointBagPanel()
local itemData = BagManager.GetBagItemData()
local time = tonumber(RedPointManager.PlayerPrefsGetStr("OpenBagPanel"))
for i = 1, #itemData do
--if RedPointManager.PlayerPrefsGetStrItemId(itemData[i].id) == 0 then
--2 为体力 体力获得时间用做特殊处理 把体力排除
if itemData[i].id ~= 2 and itemData[i].endingTime and time then
if tonumber(itemData[i].endingTime) > time then
return true
end
end
end
local allEquipData = {}
2020-07-06 20:35:39 +08:00
allEquipData = BagManager.GetEquipDataByEquipPosition()
2020-05-09 13:31:21 +08:00
for i = 1, #allEquipData do
table.insert(itemData, allEquipData[i])
--if RedPointManager.PlayerPrefsGetStrItemId(allEquipData[i].did) == 0 then
if tonumber(allEquipData[i].endingTime) > time then
return true
end
end
return false
end
--检测单个地图探索度红点(是否有可领取宝箱)
function this.RedPointMapProgress(_mapId)
local isShow = false
if MapManager.allMapProgressList[_mapId] then
for i = 1, #MapManager.allMapProgressList[_mapId].boxData.allBoxInfoData do
if MapManager.allMapProgressList[_mapId].boxData.curTotalWeight >= MapManager.allMapProgressList[_mapId].boxData.allBoxInfoData[i].num and
MapManager.allMapProgressList[_mapId].boxData.allBoxInfoData[i].isGet == false then
isShow = true
break
end
end
end
return isShow
end
--检测该区域所有地图探索度是否有红点(是否有可领取宝箱)
function this.RedPointAreaMapProgress(_area)
local isShow = false
local mapIds = AreaConfig[_area].Include
for i = 1, #mapIds do
isShow = this.RedPointMapProgress(mapIds[i])
if isShow then
break
end
end
return isShow
end
--检测所有地图探索度是否有红点(是否有可领取宝箱)
function this.RedPointAllMapProgress()
local isShow = false
local MapConfigKeys = GameDataBase.SheetBase.GetKeys(ChallengeMapConfig)
for i = 1, #MapConfigKeys do
local mapId = ChallengeMapConfig[MapConfigKeys[i]].Id
isShow = this.RedPointMapProgress(mapId)
if isShow then
break
end
end
return isShow
end
--检测主线任务是否有可领取的奖励
function this.RedPointSingleMission()
local isShow = false
for i, v in pairs(MissionManager.MissionState) do
if MissionConfig[i].Type == 1 then
isShow = MissionManager.MainMissionIsDone(v.id)
if isShow then
break
end
end
end
return isShow
end
--检测主线任务是否有可领取的奖励
function this.GetRedPointMissionDaily()
local isShow = false
if ActTimeCtrlManager.SingleFuncState(JumpType.DailyTasks) then
for i, v in pairs(TaskManager.GetTypeTaskList(TaskTypeDef.DayTask)) do
if v.state == 1 then
isShow = true
end
end
end
return isShow
end
--检测成员是否有红点
function this.GetRedPointRoleIsUpEquip()
--local teamHero=FormationManager.GetAllFormationHeroId()
local teamHero=FormationManager.GetWuJinFormationHeroIds(FormationTypeDef.FORMATION_NORMAL)
for i, v in pairs(teamHero) do
local isUpEquip = HeroManager.GetHeroIsUpEquip(i)
if isUpEquip and #isUpEquip > 0 then
Log("有可穿戴装备")
2020-05-09 13:31:21 +08:00
return isUpEquip
end
end
-- for i, v in pairs(teamHero) do
-- local isUpTalisman = HeroManager.GetHeroIsUpTalisman(i)
-- if isUpTalisman and #isUpTalisman > 0 then
-- Log("有可穿戴法宝")
-- return isUpTalisman
-- end
-- end
--local tarHero=HeroManager.GetAllHeroDatas()
--for i, v in pairs(teamHero) do
-- SoulPrintManager.UnLockSoulPrintPos(tarHero[v])
-- local soulPrintIsOpen = table.nums(SoulPrintManager.hasUnlockPos)>=1
-- local isCanShowSoulPrintPoint = RedPointManager.PlayerPrefsGetStr(PlayerManager.uid .. tarHero[v].dynamicId)
-- local soulPrintData = SoulPrintManager.GetSoulPrintAndSort(SoulPrintManager.soulPrintData)
-- if(isCanShowSoulPrintPoint=="0" and #soulPrintData>=1 and soulPrintIsOpen) then
-- return soulPrintData
-- end
--end
return {}
end
--本地存储字符串
function this.PlayerPrefsSetStr(_str, val)
PlayerPrefs.SetString(PlayerManager.uid..PlayerManager.serverInfo.server_id.._str, val)
end
--获得本地存储字符串
function this.PlayerPrefsGetStr(_str)
return PlayerPrefs.GetString(PlayerManager.uid..PlayerManager.serverInfo.server_id.._str, 0)
end
--删除存储本地存储字符串
function this.PlayerPrefsDeleteStr(_str)
return PlayerPrefs.DeleteKey(PlayerManager.uid..PlayerManager.serverInfo.server_id.._str)
end
--设置红点存储本地
function this.PlayerPrefsSetStrItemId(_iteemId, val)
PlayerPrefs.SetInt(PlayerManager.uid.._iteemId, val)
end
--获得红点信息
function this.PlayerPrefsGetStrItemId(_iteemId)
return PlayerPrefs.GetInt(PlayerManager.uid.._iteemId, 0)--1 已经查看过不需要显示新红点 0 显示红点
end
--删除存储本地红点信息(吞装备)
function this.PlayerPrefsDeleteStrItemId(_iteemId)
return PlayerPrefs.DeleteKey(PlayerManager.uid.._iteemId)
end
2020-06-23 18:36:24 +08:00
return this