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
|
2021-01-09 14:20:06 +08:00
|
|
|
|
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
|