1196 lines
46 KiB
Lua
1196 lines
46 KiB
Lua
|
local XNameplate = require("XEntity/XNameplate/XNameplate")
|
|||
|
XMedalManagerCreator = function()
|
|||
|
local tableInsert = table.insert
|
|||
|
|
|||
|
local XMedalManager = {}
|
|||
|
|
|||
|
local METHOD_NAME = {
|
|||
|
ScoreTitleShowSetRequest = "ScoreTitleShowSetRequest",
|
|||
|
CollectionShowSetRequest = "CollectionShowSetRequest",
|
|||
|
WearNameplateRequest = "WearNameplateRequest",
|
|||
|
}
|
|||
|
|
|||
|
XMedalManager.InType = { Normal = 1, GetMedal = 2, OtherPlayer = 3, Preview = 4 }
|
|||
|
|
|||
|
XMedalManager.MedalStroyId = CS.XGame.ClientConfig:GetInt("MedalStoryId")
|
|||
|
|
|||
|
local NewMedalId = nil
|
|||
|
|
|||
|
local ScoreTitleUnLockList = {} -- 收藏品ID为索引,存放服务器下发的解锁收藏品
|
|||
|
|
|||
|
local MedalList = {}
|
|||
|
local ScoreTitleList = {} -- Type索引数组,数组存放收藏品配置
|
|||
|
local ScoreTitleDataList = {} -- 收藏品ID为索引,存放收藏品配置
|
|||
|
local ScoreTitleShowStateList = {}
|
|||
|
local NewCollectionList = {}
|
|||
|
local QualityUpCollectionList = {}
|
|||
|
local IsCanCheckQualityUp
|
|||
|
local MedalUpdateTimeId --勋章持续刷新Id
|
|||
|
local MedalUpdateList --需刷新勋章使用期列表
|
|||
|
local BaseIconWidth -- 基准图标宽度
|
|||
|
local DEFAULT_BASE_ICON_WIDHT = 160 -- 默认基准图标宽度(玩家信息的收藏品页签中的格子)
|
|||
|
|
|||
|
function XMedalManager.Init()
|
|||
|
XMedalManager.StopUpdateTimeMedal() --停止刷新勋章持续时间
|
|||
|
XMedalManager.InitScoreTitleList()
|
|||
|
XMedalManager.InitMedalList()
|
|||
|
IsCanCheckQualityUp = true
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetMedals()
|
|||
|
table.sort(MedalList, function(headA, headB)
|
|||
|
local weightA = headA.IsLock and 0 or 1
|
|||
|
local weightB = headB.IsLock and 0 or 1
|
|||
|
if weightA == weightB then
|
|||
|
return headA.Priority > headB.Priority
|
|||
|
end
|
|||
|
return weightA > weightB
|
|||
|
end)
|
|||
|
return MedalList
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetMedalById(id)
|
|||
|
for _, medal in pairs(MedalList) do
|
|||
|
if medal.Id == id then
|
|||
|
return medal
|
|||
|
end
|
|||
|
end
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.InitMedalList()
|
|||
|
MedalUpdateList = {}
|
|||
|
local meadalsCfg = XMedalConfigs.GetMeadalConfigs()
|
|||
|
for _, meadal in pairs(meadalsCfg or {}) do
|
|||
|
|
|||
|
local tmp = {}
|
|||
|
for k, v in pairs(meadal) do
|
|||
|
tmp[k] = v
|
|||
|
end
|
|||
|
tmp["Type"] = XMedalConfigs.MedalType.Normal
|
|||
|
tmp["IsLock"] = true
|
|||
|
tmp["Time"] = 0
|
|||
|
tmp["Num"] = 0
|
|||
|
table.insert(MedalList, tmp)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CreateOtherPlayerMedalList(medalInfos)
|
|||
|
if not medalInfos then
|
|||
|
return {}
|
|||
|
end
|
|||
|
local meadalsCfg = XMedalConfigs.GetMeadalConfigs()
|
|||
|
local othermedalList = {}
|
|||
|
for _, Info in pairs(medalInfos) do
|
|||
|
local cfg = meadalsCfg[Info.Id]
|
|||
|
if cfg then
|
|||
|
local tmp = {}
|
|||
|
for k, v in pairs(cfg) do
|
|||
|
tmp[k] = v
|
|||
|
end
|
|||
|
tmp["Type"] = XMedalConfigs.MedalType.Normal
|
|||
|
tmp["IsLock"] = false
|
|||
|
tmp["Time"] = Info.Time
|
|||
|
tmp["Num"] = Info.Num
|
|||
|
othermedalList[tmp.Id] = tmp
|
|||
|
end
|
|||
|
end
|
|||
|
return othermedalList
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.UpdateMedalList()
|
|||
|
for _, medal in pairs(MedalList) do
|
|||
|
local medalInfo = XPlayer.UnlockedMedalInfos[medal.Id]
|
|||
|
if medalInfo then
|
|||
|
medal.IsLock = false
|
|||
|
medal.Time = medalInfo.Time
|
|||
|
medal.KeepTime = medalInfo.KeepTime --勋章的有效持续时间,失效期 = KeepTime + Time。等于0或空值表示永久有效。
|
|||
|
medal.Num = medal.Num
|
|||
|
medal.IsExpired = false --是否已过期,永久的统一标记为false
|
|||
|
--检测是否有限时勋章
|
|||
|
if medal.KeepTime > 0 then
|
|||
|
local now = XTime.GetServerNowTimestamp()
|
|||
|
if (medal.KeepTime + medal.Time) <= now then
|
|||
|
medal.IsExpired = true
|
|||
|
else
|
|||
|
XMedalManager.AddUpdateTimeMedal(medal)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.StartUpdateTimeMedal()
|
|||
|
if MedalUpdateTimeId then return end
|
|||
|
MedalUpdateTimeId = XScheduleManager.ScheduleForever(function()
|
|||
|
XMedalManager.UpdateMedalTimeLimit()
|
|||
|
end, 1000) --每1秒刷新一次
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.UpdateMedalTimeLimit()
|
|||
|
--获取需要删除的组员Id
|
|||
|
local removeList = {}
|
|||
|
for i = #MedalUpdateList, 1, -1 do
|
|||
|
local medal = MedalUpdateList[i]
|
|||
|
if medal then
|
|||
|
local now = XTime.GetServerNowTimestamp()
|
|||
|
if (medal.KeepTime + medal.Time) <= now then
|
|||
|
medal.IsExpired = true
|
|||
|
if XPlayer.GetCurrentMedal() == medal.Id then
|
|||
|
XPlayer.ChangeMedal(0)
|
|||
|
end
|
|||
|
table.insert(removeList, i)
|
|||
|
end
|
|||
|
else
|
|||
|
table.insert(removeList, i)
|
|||
|
end
|
|||
|
end
|
|||
|
--删除过期的组员Id
|
|||
|
for _, removeId in pairs(removeList) do
|
|||
|
table.remove(MedalUpdateList, removeId)
|
|||
|
end
|
|||
|
--判断刷新列表是否还有需要刷新的,没有则停止循环检查
|
|||
|
if #MedalUpdateList <= 0 then
|
|||
|
XMedalManager.StopUpdateTimeMedal()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.AddUpdateTimeMedal(medal)
|
|||
|
if #MedalUpdateList <= 0 then
|
|||
|
table.insert(MedalUpdateList, medal)
|
|||
|
XMedalManager.StartUpdateTimeMedal()
|
|||
|
else
|
|||
|
table.insert(MedalUpdateList, medal)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.StopUpdateTimeMedal()
|
|||
|
if not MedalUpdateTimeId then return end
|
|||
|
XScheduleManager.UnSchedule(MedalUpdateTimeId)
|
|||
|
MedalUpdateTimeId = nil
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetMeadalInfoById(Id)
|
|||
|
return XPlayer.UnlockedMedalInfos[Id]
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetMeadalMaxCount()
|
|||
|
local maxCount = 0
|
|||
|
local medalsList = XMedalConfigs.GetMeadalConfigs()
|
|||
|
for _, _ in pairs(medalsList or {}) do
|
|||
|
maxCount = maxCount + 1
|
|||
|
end
|
|||
|
return maxCount
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckMedalStoryIsPlayed()
|
|||
|
if XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "MedalStoryIsPlayed")) then
|
|||
|
return true
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.MarkMedalStory()
|
|||
|
if not XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "MedalStoryIsPlayed")) then
|
|||
|
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "MedalStoryIsPlayed"), "MedalStoryIsPlayed")
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckHaveNewMedal()
|
|||
|
local meadals = XMedalConfigs.GetMeadalConfigs()
|
|||
|
if not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.Medal) then
|
|||
|
if XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.Medal) then
|
|||
|
for _, v in pairs(meadals) do
|
|||
|
if XSaveTool.GetData(string.format("%d%s%d%d", XPlayer.Id, "NewMeadal", v.Id, XMedalConfigs.MedalType.Normal)) then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
if not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.Collection) then
|
|||
|
if XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.Collection) then
|
|||
|
for _, v in pairs(ScoreTitleDataList) do
|
|||
|
if XSaveTool.GetData(string.format("%d%s%d%d", XPlayer.Id, "NewMeadal", v.Id, v.Type)) then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if XMedalManager.CkeckHaveNewNameplate() then
|
|||
|
return true
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckHaveNewMedalByType(type)
|
|||
|
local meadals = XMedalConfigs.GetMeadalConfigs()
|
|||
|
if type == XMedalConfigs.ViewType.Medal then
|
|||
|
if not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.Medal) then
|
|||
|
if XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.Medal) then
|
|||
|
for _, v in pairs(meadals) do
|
|||
|
if XSaveTool.GetData(string.format("%d%s%d%d", XPlayer.Id, "NewMeadal", v.Id, XMedalConfigs.MedalType.Normal)) then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
else
|
|||
|
if not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.Collection) then
|
|||
|
if XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.Collection) then
|
|||
|
for _, v in pairs(ScoreTitleDataList) do
|
|||
|
if XSaveTool.GetData(string.format("%d%s%d%d", XPlayer.Id, "NewMeadal", v.Id, v.Type)) then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckIsNewMedalById(Id, type)
|
|||
|
if XSaveTool.GetData(string.format("%d%s%d%d", XPlayer.Id, "NewMeadal", Id, type)) then
|
|||
|
return true
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.SetMedalForOld(Id, type)
|
|||
|
if XSaveTool.GetData(string.format("%d%s%d%d", XPlayer.Id, "NewMeadal", Id, type)) then
|
|||
|
XSaveTool.RemoveData(string.format("%d%s%d%d", XPlayer.Id, "NewMeadal", Id, type))
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_MEDAL_REDPOINT_CHANGE)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.AddNewMedal(Id, type)
|
|||
|
if not XSaveTool.GetData(string.format("%d%s%d%d", XPlayer.Id, "NewMeadal", Id, type)) then
|
|||
|
XSaveTool.SaveData(string.format("%d%s%d%d", XPlayer.Id, "NewMeadal", Id, type), Id)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.ShowUnlockTips()
|
|||
|
if NewMedalId then
|
|||
|
XLuaUiManager.Open("UiMedalUnlockTips", NewMedalId)
|
|||
|
NewMedalId = nil
|
|||
|
return true
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.SetNewMedalId(id)
|
|||
|
NewMedalId = id
|
|||
|
end
|
|||
|
|
|||
|
------------------------------------------计分徽章--------------------------------->>>
|
|||
|
function XMedalManager.InitScoreTitleList()
|
|||
|
local scoreTitlesCfg = XMedalConfigs.GetScoreTitlesConfigs()
|
|||
|
for _, scoreTitle in pairs(scoreTitlesCfg or {}) do
|
|||
|
|
|||
|
if not ScoreTitleList[scoreTitle.Type] then
|
|||
|
ScoreTitleList[scoreTitle.Type] = {}
|
|||
|
end
|
|||
|
|
|||
|
local tmp = {}
|
|||
|
for k, v in pairs(scoreTitle) do
|
|||
|
tmp[k] = v
|
|||
|
end
|
|||
|
|
|||
|
tmp["IsLock"] = true
|
|||
|
tmp["Quality"] = scoreTitle.InitQuality
|
|||
|
tmp["Score"] = 0
|
|||
|
tmp["Time"] = 0
|
|||
|
|
|||
|
table.insert(ScoreTitleList[scoreTitle.Type], tmp)
|
|||
|
|
|||
|
end
|
|||
|
for _, type in pairs(ScoreTitleList) do
|
|||
|
XMedalConfigs.SortByPriority(type)
|
|||
|
for _, scoreTitle in pairs(type) do
|
|||
|
ScoreTitleDataList[scoreTitle.Id] = scoreTitle
|
|||
|
if not ScoreTitleShowStateList[scoreTitle.Type] then
|
|||
|
ScoreTitleShowStateList[scoreTitle.Type] = {}
|
|||
|
ScoreTitleShowStateList[scoreTitle.Type].Type = scoreTitle.Type
|
|||
|
ScoreTitleShowStateList[scoreTitle.Type].Hide = XMedalConfigs.Hide.OFF
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CreateOtherPlayerScoreTitleList(titleInfos)
|
|||
|
if not titleInfos then
|
|||
|
return {}
|
|||
|
end
|
|||
|
local scoreTitlesCfg = XMedalConfigs.GetScoreTitlesConfigs()
|
|||
|
local otherScoreTitleList = {}
|
|||
|
for _, Info in pairs(titleInfos) do
|
|||
|
local cfg = scoreTitlesCfg[Info.Id]
|
|||
|
if cfg then
|
|||
|
local tmp = {}
|
|||
|
for k, v in pairs(cfg) do
|
|||
|
tmp[k] = v
|
|||
|
end
|
|||
|
tmp["IsLock"] = false
|
|||
|
tmp["Quality"] = Info.Quality
|
|||
|
tmp["Score"] = Info.Score
|
|||
|
tmp["Time"] = Info.Time
|
|||
|
if Info.ExpandInfo then
|
|||
|
tmp["ExpandInfo"] = Info.ExpandInfo
|
|||
|
end
|
|||
|
table.insert(otherScoreTitleList, tmp)
|
|||
|
end
|
|||
|
end
|
|||
|
return XMedalConfigs.SortByPriority(otherScoreTitleList)
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CreateOtherPlayerScoreTitle(titleInfo)
|
|||
|
if not titleInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local scoreTitlesCfg = XMedalConfigs.GetScoreTitlesConfigs()
|
|||
|
local cfg = scoreTitlesCfg[titleInfo.Id]
|
|||
|
if cfg then
|
|||
|
local tmp = {}
|
|||
|
for k, v in pairs(cfg) do
|
|||
|
tmp[k] = v
|
|||
|
end
|
|||
|
tmp["IsLock"] = false
|
|||
|
tmp["Quality"] = titleInfo.Quality
|
|||
|
tmp["Score"] = titleInfo.Score
|
|||
|
tmp["Time"] = titleInfo.Time
|
|||
|
if titleInfo.ExpandInfo then
|
|||
|
tmp["ExpandInfo"] = titleInfo.ExpandInfo
|
|||
|
end
|
|||
|
return tmp
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetScoreTitle(type)
|
|||
|
local list = {}
|
|||
|
|
|||
|
if type then
|
|||
|
local titleList = ScoreTitleList[type]
|
|||
|
if titleList then
|
|||
|
for _, scoreTitle in pairs(titleList) do
|
|||
|
if not scoreTitle.IsLock or scoreTitle.ShowType ~= 0 then
|
|||
|
table.insert(list, scoreTitle)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
for _, tmpType in pairs(ScoreTitleList) do
|
|||
|
for _, scoreTitle in pairs(tmpType) do
|
|||
|
if not scoreTitle.IsLock or scoreTitle.ShowType ~= 0 then
|
|||
|
tableInsert(list, scoreTitle)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return XMedalConfigs.SortByPriority(list)
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetScoreTitleByScreenType(screenType)
|
|||
|
local list = {}
|
|||
|
for _, tmpType in pairs(ScoreTitleList) do
|
|||
|
for _, scoreTitle in pairs(tmpType) do
|
|||
|
if (not scoreTitle.IsLock or scoreTitle.ShowType ~= 0) then
|
|||
|
local isHasScreenType = screenType and screenType > 0
|
|||
|
local isSameScreenType = scoreTitle.ScreenType == screenType
|
|||
|
if not isHasScreenType or (isHasScreenType and isSameScreenType) then
|
|||
|
tableInsert(list, scoreTitle)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local resultList = XMedalManager.UpgradeCollection(list)
|
|||
|
return XMedalConfigs.SortByPriority(resultList)
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetScoreTitleById(id)
|
|||
|
return ScoreTitleDataList[id]
|
|||
|
--[[
|
|||
|
for _, tmpType in pairs(ScoreTitleList) do
|
|||
|
for _, scoreTitle in pairs(tmpType) do
|
|||
|
if scoreTitle.Id == id then
|
|||
|
return scoreTitle
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
]]
|
|||
|
end
|
|||
|
|
|||
|
---==========================================
|
|||
|
--- 检查传入的 ‘oriList’数组 是否有需要升级的收藏品
|
|||
|
--- 更高级收藏品是一个独立的收藏品,有自己的收藏品Id
|
|||
|
--- 更高级收藏品会覆盖低级收藏品,需要把低级收藏品隐藏(去除)
|
|||
|
---@return table
|
|||
|
---==========================================
|
|||
|
function XMedalManager.UpgradeCollection(oriList)
|
|||
|
if oriList == nil or next(oriList) == nil then
|
|||
|
return oriList
|
|||
|
end
|
|||
|
|
|||
|
local resultList = {}
|
|||
|
local groupIdIndex = {} -- GroupId做索引,存放相应的收藏品组
|
|||
|
|
|||
|
-- 区分需要升级与不需要升级的收藏品
|
|||
|
for _, scoreTitle in pairs(oriList) do
|
|||
|
if scoreTitle.GroupId == 0 or scoreTitle.GroupId == nil then
|
|||
|
-- 收藏品不可以升级,不需要判断显隐
|
|||
|
tableInsert(resultList, scoreTitle)
|
|||
|
else
|
|||
|
-- 相同组的收藏品放在同一个GroupId表
|
|||
|
if groupIdIndex[scoreTitle.GroupId] == nil then
|
|||
|
groupIdIndex[scoreTitle.GroupId] = {}
|
|||
|
end
|
|||
|
tableInsert(groupIdIndex[scoreTitle.GroupId], scoreTitle)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 选出每个Group中最高级的收藏品
|
|||
|
for _, group in pairs(groupIdIndex) do
|
|||
|
table.sort(group, function(scoreTitle1, scoreTitle2)
|
|||
|
if scoreTitle1.GroupLv == nil then
|
|||
|
XLog.Error("XMedalManager.UpgradeCollection函数错误,收藏品" .. scoreTitle1.Id .. "的GroupLv为空")
|
|||
|
return
|
|||
|
elseif scoreTitle2.GroupLv == nil then
|
|||
|
XLog.Error("XMedalManager.UpgradeCollection函数错误,收藏品" .. scoreTitle2.Id .. "的GroupLv为空")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- 按GroupLv降序排序
|
|||
|
return scoreTitle1.GroupLv > scoreTitle2.GroupLv
|
|||
|
end)
|
|||
|
|
|||
|
-- 将最高级的收藏品放入返回结果中
|
|||
|
tableInsert(resultList, group[1])
|
|||
|
end
|
|||
|
|
|||
|
return resultList
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetMedalData(scoreTitleId)
|
|||
|
local scoreTitleData = ScoreTitleDataList[scoreTitleId]
|
|||
|
return scoreTitleData
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetMedalImg(scoreTitleId)
|
|||
|
local scoreTitleData = ScoreTitleDataList[scoreTitleId]
|
|||
|
return scoreTitleData and scoreTitleData.MedalImg
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetScore(scoreTitleId)
|
|||
|
local scoreTitleData = ScoreTitleDataList[scoreTitleId]
|
|||
|
return scoreTitleData and scoreTitleData.Score or 0
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetMedalType(scoreTitleId)
|
|||
|
local scoreTitleData = ScoreTitleDataList[scoreTitleId]
|
|||
|
return scoreTitleData and scoreTitleData.Type or 0
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetQuality(scoreTitleId)
|
|||
|
local scoreTitleData = ScoreTitleDataList[scoreTitleId]
|
|||
|
return scoreTitleData and (scoreTitleData.Quality or scoreTitleData.InitQuality) or 0
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetIsLock(scoreTitleId)
|
|||
|
local scoreTitleData = ScoreTitleDataList[scoreTitleId]
|
|||
|
return scoreTitleData and scoreTitleData.IsLock or false
|
|||
|
end
|
|||
|
|
|||
|
---
|
|||
|
--- 获取'minQuality'与'maxQuality'(包括min与max)区间品质的收藏品id数组
|
|||
|
--- 如果只有一个参数,则获取这个品质的收藏品id数组
|
|||
|
---@param minQuality number
|
|||
|
---@param maxQuality number
|
|||
|
---@return table
|
|||
|
function XMedalManager.GetScoreTitleByQuality(minQuality, maxQuality)
|
|||
|
local list = {}
|
|||
|
if not minQuality and not maxQuality then
|
|||
|
XLog.Error("XMedalManager.GetScoreTitleByQuality函数错误,参数不能全部都为 nil")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- 解锁的收藏品配置
|
|||
|
local unLockList = {}
|
|||
|
for _, scoreTitle in pairs(ScoreTitleDataList) do
|
|||
|
if (not scoreTitle.IsLock) then
|
|||
|
tableInsert(unLockList, scoreTitle)
|
|||
|
end
|
|||
|
end
|
|||
|
-- 合并同一个组的收藏品
|
|||
|
local upgradeList = XMedalManager.UpgradeCollection(unLockList)
|
|||
|
|
|||
|
for _, scoreTitle in pairs(upgradeList) do
|
|||
|
if maxQuality then
|
|||
|
if (scoreTitle.Quality or scoreTitle.InitQuality) <= maxQuality
|
|||
|
and (scoreTitle.Quality or scoreTitle.InitQuality) >= minQuality then
|
|||
|
table.insert(list, scoreTitle)
|
|||
|
end
|
|||
|
else
|
|||
|
if (scoreTitle.Quality or scoreTitle.InitQuality) == minQuality then
|
|||
|
table.insert(list, scoreTitle)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetLevelIcon(scoreTitleId, curQuality)
|
|||
|
local collectionLevel = XMedalConfigs.GetCollectionDefaultLevelConfigs()
|
|||
|
local ScoreTitles = XMedalConfigs.GetScoreTitlesConfigs()
|
|||
|
local levelIcon = nil
|
|||
|
local curIndex = 0
|
|||
|
local qualities = ScoreTitles[scoreTitleId].Qualities
|
|||
|
if qualities and #qualities > 0 then
|
|||
|
for index, quality in pairs(qualities) do
|
|||
|
if quality == curQuality then
|
|||
|
curIndex = index
|
|||
|
end
|
|||
|
for _, level in pairs(collectionLevel) do
|
|||
|
if level.CurLevel == curIndex and level.MaxLevel == #qualities then
|
|||
|
levelIcon = level.Icon
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return levelIcon
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetScoreTitleShowState()
|
|||
|
return XTool.Clone(ScoreTitleShowStateList)
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetScoreTitleUnLockList()
|
|||
|
return XTool.Clone(ScoreTitleUnLockList)
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckCanGetNewCollection()
|
|||
|
if #NewCollectionList == 0 then
|
|||
|
return false
|
|||
|
else
|
|||
|
local list = {}
|
|||
|
for _, collectionId in pairs(NewCollectionList) do
|
|||
|
tableInsert(list, XRewardManager.CreateRewardGoods(collectionId))
|
|||
|
end
|
|||
|
XLuaUiManager.Open("UiObtainCollection", list)
|
|||
|
XMedalManager.ClearCollectionList()
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckQualityUpCollection()
|
|||
|
if not QualityUpCollectionList or not next(QualityUpCollectionList) or not IsCanCheckQualityUp then
|
|||
|
return
|
|||
|
else
|
|||
|
IsCanCheckQualityUp = false
|
|||
|
local key, value = next(QualityUpCollectionList)
|
|||
|
if key then
|
|||
|
XLuaUiManager.Open("UiUpgradeCollection", key, value, function()
|
|||
|
IsCanCheckQualityUp = true
|
|||
|
XMedalManager.ClearQualityUpCollectionById(key)
|
|||
|
XMedalManager.CheckQualityUpCollection()
|
|||
|
end)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.ClearCollectionList()
|
|||
|
NewCollectionList = {}
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.GetScoreTitleIconById(id)
|
|||
|
if not id then
|
|||
|
return nil
|
|||
|
end
|
|||
|
return ScoreTitleDataList[id] and ScoreTitleDataList[id].MedalIcon or nil
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckScoreTitleIsShow(type)
|
|||
|
local state = ScoreTitleShowStateList[type]
|
|||
|
if not state then
|
|||
|
return false
|
|||
|
end
|
|||
|
return state.Hide == XMedalConfigs.Hide.OFF
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckScoreTitleIsHaveById(id)
|
|||
|
return ScoreTitleUnLockList[id] and true or false
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckHaveScoreTitleType(type)
|
|||
|
return ScoreTitleList[type] and true or false
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckScoreTitleInTimeByType(type)
|
|||
|
local scoreTitle = ScoreTitleList[type]
|
|||
|
if not scoreTitle then
|
|||
|
return false
|
|||
|
end
|
|||
|
for _, title in pairs(scoreTitle) do
|
|||
|
local nowTime = XTime.GetServerNowTimestamp()
|
|||
|
local beginTime, endTime = XFunctionManager.GetTimeByTimeId(title.TimeId)
|
|||
|
if nowTime > beginTime and nowTime < endTime then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.UpdateScoreTitle()
|
|||
|
for _, scoreTitle in pairs(ScoreTitleUnLockList) do
|
|||
|
local scoreTitleData = ScoreTitleDataList[scoreTitle.Id]
|
|||
|
if scoreTitleData then
|
|||
|
scoreTitleData.IsLock = false
|
|||
|
scoreTitleData.Quality = scoreTitle.Quality
|
|||
|
scoreTitleData.Score = scoreTitle.Score
|
|||
|
scoreTitleData.Time = scoreTitle.Time
|
|||
|
if scoreTitle.ExpandInfo then
|
|||
|
scoreTitleData.ExpandInfo = scoreTitle.ExpandInfo
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.UpdateScoreTitleShowState(hideTypes)
|
|||
|
for _, hideType in pairs(hideTypes or {}) do
|
|||
|
local scoreTitleShowState = ScoreTitleShowStateList[hideType]
|
|||
|
if scoreTitleShowState then
|
|||
|
scoreTitleShowState.Hide = XMedalConfigs.Hide.ON
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.SetScoreTitleUnLockList(scoreTitleInfoList)
|
|||
|
for _, scoreTitle in pairs(scoreTitleInfoList or {}) do
|
|||
|
ScoreTitleUnLockList[scoreTitle.Id] = scoreTitle
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.AddScoreTitleUnLockList(titles, IsLogined)
|
|||
|
for _, scoreTitleInfo in pairs(titles) do
|
|||
|
local scoreTitleData = ScoreTitleDataList[scoreTitleInfo.Id]
|
|||
|
if scoreTitleData then
|
|||
|
local scoreTitleUnLock = ScoreTitleUnLockList[scoreTitleInfo.Id]
|
|||
|
if not scoreTitleUnLock then
|
|||
|
scoreTitleUnLock = scoreTitleInfo
|
|||
|
XDataCenter.MedalManager.AddNewMedal(scoreTitleInfo.Id, scoreTitleData.Type)
|
|||
|
if scoreTitleData.IsNotShowGetTip ~= 1 then
|
|||
|
table.insert(NewCollectionList, scoreTitleInfo.Id)
|
|||
|
end
|
|||
|
ScoreTitleUnLockList[scoreTitleInfo.Id] = scoreTitleUnLock
|
|||
|
else
|
|||
|
scoreTitleUnLock.Score = scoreTitleInfo.Score
|
|||
|
if scoreTitleUnLock.Quality ~= scoreTitleInfo.Quality then
|
|||
|
|
|||
|
if scoreTitleData.ShowQualityUpTip == XMedalConfigs.ShowScore.ON then
|
|||
|
local qualityUpCollection = QualityUpCollectionList[scoreTitleInfo.Id]
|
|||
|
if not qualityUpCollection then
|
|||
|
qualityUpCollection = {}
|
|||
|
qualityUpCollection.BeforeQuality = scoreTitleUnLock.Quality
|
|||
|
qualityUpCollection.AfterQuality = scoreTitleInfo.Quality
|
|||
|
QualityUpCollectionList[scoreTitleInfo.Id] = qualityUpCollection
|
|||
|
else
|
|||
|
qualityUpCollection.AfterQuality = scoreTitleInfo.Quality
|
|||
|
end
|
|||
|
end
|
|||
|
scoreTitleUnLock.Quality = scoreTitleInfo.Quality
|
|||
|
XDataCenter.MedalManager.AddNewMedal(scoreTitleInfo.Id, scoreTitleData.Type)
|
|||
|
end
|
|||
|
end
|
|||
|
else
|
|||
|
XLog.Error("Share/ScoreTitle/ScoreTitle.tab 表中不存在 ScoreTitleId: " .. scoreTitleInfo.Id)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if #NewCollectionList > 0 and IsLogined then
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_SCORETITLE_NEW)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckHasScoreTitleNew()
|
|||
|
local groupTitleList = {} --打组升级的收藏品特别判断
|
|||
|
for _, data in pairs(ScoreTitleDataList or {}) do
|
|||
|
if data.GroupId > 0 then
|
|||
|
if not groupTitleList[data.GroupId] then
|
|||
|
groupTitleList[data.GroupId] = {}
|
|||
|
end
|
|||
|
if not data.IsLock then --若已经解锁且是打组升级的收藏品,先加入判断组,后面另外判断
|
|||
|
local isNew = XMedalManager.CheckIsNewMedalById(data.Id, data.Type)
|
|||
|
groupTitleList[data.GroupId][data.GroupLv] = isNew
|
|||
|
end
|
|||
|
else
|
|||
|
local isNew = XMedalManager.CheckIsNewMedalById(data.Id, data.Type)
|
|||
|
if isNew then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
--判断每个打组最高级已被解锁的收藏品新旧状态
|
|||
|
for _, group in pairs(groupTitleList) do
|
|||
|
if group[#group] then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.ClearQualityUpCollectionById(id)
|
|||
|
if QualityUpCollectionList[id] then
|
|||
|
QualityUpCollectionList[id] = nil
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.SetScoreTitleShowData(list)
|
|||
|
for _, showSetInfo in pairs(list or {}) do
|
|||
|
local scoreTitleShowState = ScoreTitleShowStateList[showSetInfo.Type]
|
|||
|
if scoreTitleShowState then
|
|||
|
scoreTitleShowState.Hide = showSetInfo.Hide
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.SetScoreTitleShow(list, cb)
|
|||
|
XNetwork.Call(METHOD_NAME.ScoreTitleShowSetRequest, { ScoreTitleShowSetInfos = list }, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
XMedalManager.SetScoreTitleShowData(list)
|
|||
|
if cb then
|
|||
|
cb()
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
-- 设置基准图标宽度
|
|||
|
function XMedalManager.SetBaseIconWidth(baseIconWidth)
|
|||
|
BaseIconWidth = baseIconWidth
|
|||
|
end
|
|||
|
|
|||
|
-- 获取基准图标宽度
|
|||
|
function XMedalManager.GetBaseIconWidth()
|
|||
|
return BaseIconWidth or DEFAULT_BASE_ICON_WIDHT
|
|||
|
end
|
|||
|
|
|||
|
---==========================================
|
|||
|
--- 根据'score'的位数和图标宽度‘iconWidth’来得到相应字号
|
|||
|
---@param score number
|
|||
|
---@param iconWidth number
|
|||
|
---@return number
|
|||
|
---==========================================
|
|||
|
function XMedalManager.GetScoreSize(score, iconWidth)
|
|||
|
if score == nil or score == 0 then
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
local digit = math.floor(math.log(score, 10) + 1)
|
|||
|
if digit > #XMedalConfigs.EnumCollectionScoreTextSize then
|
|||
|
XLog.Warning("XMedalManager.GetScoreSize函数警告,分数" .. tostring(score) .. "位数大于ClientConfig配置的位数字号")
|
|||
|
end
|
|||
|
|
|||
|
-- 得到基准图标宽度和基准位数字号,基准位数字号通过配表读取
|
|||
|
local baseIconWidth = XMedalManager.GetBaseIconWidth()
|
|||
|
local baseScoreSize = XMedalConfigs.EnumCollectionScoreTextSize[digit]
|
|||
|
or XMedalConfigs.EnumCollectionScoreTextSize[#XMedalConfigs.EnumCollectionScoreTextSize]
|
|||
|
|
|||
|
if baseIconWidth == 0 then
|
|||
|
XLog.Error("XMedalManager.GetScoreSize函数错误,baseIconWidth为0")
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
-- 根据比例来算出当前图标宽度对应的字号大小
|
|||
|
return math.floor((baseScoreSize * iconWidth) / baseIconWidth)
|
|||
|
end
|
|||
|
|
|||
|
---
|
|||
|
--- 设置特定收藏品的最大分数
|
|||
|
function XMedalManager.SetSpecificMaxScore(titleInfos)
|
|||
|
if XTool.IsTableEmpty(titleInfos) then return end
|
|||
|
for _, titleInfo in pairs(titleInfos) do
|
|||
|
local showMaxLevel = XMedalConfigs.GetCollectionShowMaxLevel(titleInfo.Id)
|
|||
|
if XTool.IsNumberValid(showMaxLevel) and titleInfo.Score >= showMaxLevel then
|
|||
|
titleInfo.Score = showMaxLevel
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
------------------------------------------计分徽章---------------------------------<<<
|
|||
|
------------------------------------------铭牌--------------------------------------
|
|||
|
local NameplateIdDic = {}
|
|||
|
local NameplateGroupDic = {}
|
|||
|
local NameplateSaveDic = {}
|
|||
|
local NameplateRedPointDic = {}
|
|||
|
local NameplateLastEqu = {}
|
|||
|
local CurWearNameplate = 0 --当前穿戴的铭牌
|
|||
|
local UiNameplateIsOpen = false
|
|||
|
--登陆下推
|
|||
|
function XMedalManager.AsyncNameplateLogin(data)
|
|||
|
CurWearNameplate = data.CurrentWearNameplate
|
|||
|
XMedalManager.InitNameplateSaveRedDic()
|
|||
|
NameplateSaveDic = {}
|
|||
|
for _, info in ipairs(data.UnlockNameplates) do
|
|||
|
XMedalManager.UpdateNameplate(info, true)
|
|||
|
NameplateSaveDic[info.Id] = true
|
|||
|
end
|
|||
|
--登陆时对红点的处理
|
|||
|
local redChange = false
|
|||
|
local tmpNameplatePoint = {}
|
|||
|
for nameplateId, _ in pairs(NameplateRedPointDic) do
|
|||
|
if not NameplateIdDic[nameplateId] or NameplateIdDic[nameplateId]:IsNamepalteExpire() then
|
|||
|
tmpNameplatePoint[nameplateId] = nil
|
|||
|
if tmpNameplatePoint[nameplateId] then
|
|||
|
redChange = true
|
|||
|
end
|
|||
|
else
|
|||
|
if not tmpNameplatePoint[nameplateId] then
|
|||
|
redChange = true
|
|||
|
end
|
|||
|
tmpNameplatePoint[nameplateId] = true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if redChange then
|
|||
|
NameplateRedPointDic = tmpNameplatePoint
|
|||
|
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NameplateRedPointDic"), NameplateRedPointDic)
|
|||
|
end
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_NAMEPLATE_CHANGE)
|
|||
|
end
|
|||
|
|
|||
|
--服务端下推处理 铭牌更新
|
|||
|
function XMedalManager.AsyncUpateNameplate(data)
|
|||
|
--XLog.Debug("AsyncUpateNameplate", data)
|
|||
|
XMedalManager.UpdateNameplate(data)
|
|||
|
end
|
|||
|
|
|||
|
--服务端下推处理(真实处理数据)
|
|||
|
function XMedalManager.UpdateNameplate(data, isLogin)
|
|||
|
local nameplateData, lastNameplateData
|
|||
|
local redChange = false
|
|||
|
local haveNameplateUp = false
|
|||
|
local isGetNameplateNew = false
|
|||
|
local NameplateGroupId = XMedalConfigs.GetNameplateGroup(data.Id)
|
|||
|
if not NameplateGroupDic[NameplateGroupId] then
|
|||
|
nameplateData = XNameplate.New(data)
|
|||
|
haveNameplateUp = true
|
|||
|
else
|
|||
|
lastNameplateData = NameplateGroupDic[NameplateGroupId]
|
|||
|
if isLogin then
|
|||
|
XLog.Error("铭牌数据异常,请服务端检查:", "LastId: ", lastNameplateData:GetNameplateId(), "Id: ", data.Id, "GroupId: ", NameplateGroupId)
|
|||
|
end
|
|||
|
if lastNameplateData:GetNameplateId() == data.Id then
|
|||
|
if lastNameplateData:IsNamepalteExpire() then --如果过期的刷新时间 可以重新激活红点
|
|||
|
isGetNameplateNew = true
|
|||
|
if CurWearNameplate and CurWearNameplate == lastNameplateData:GetNameplateId() then--如果当前存储的已佩戴铭牌过期 重新设置缓存
|
|||
|
CurWearNameplate = 0
|
|||
|
end
|
|||
|
end
|
|||
|
nameplateData = NameplateGroupDic[NameplateGroupId]
|
|||
|
nameplateData:UpdateData(data)
|
|||
|
else
|
|||
|
if lastNameplateData:IsNamepalteExpire() then --如果当前存储的已佩戴铭牌过期 重新设置缓存
|
|||
|
if CurWearNameplate and CurWearNameplate == lastNameplateData:GetNameplateId() then
|
|||
|
CurWearNameplate = 0
|
|||
|
end
|
|||
|
end
|
|||
|
nameplateData = XNameplate.New(data)
|
|||
|
--if lastNameplateData:GetNameplateQuality() < nameplateData:GetNameplateQuality() then
|
|||
|
if nameplateData:GetNameplateUpgradeType() == XMedalConfigs.NameplateGetType.TypeFour then --如果铭牌类型是转换道具 暂时不删除信息 帮助转换道具的下推保存数据
|
|||
|
|
|||
|
else
|
|||
|
NameplateIdDic[lastNameplateData:GetNameplateId()] = nil --如果铭牌发生变化,清理上一次的更新
|
|||
|
end
|
|||
|
if lastNameplateData:GetNameplateId() == CurWearNameplate then
|
|||
|
CurWearNameplate = nameplateData:GetNameplateId()
|
|||
|
end
|
|||
|
|
|||
|
if NameplateRedPointDic[lastNameplateData:GetNameplateId()] then
|
|||
|
NameplateSaveDic[lastNameplateData:GetNameplateId()] = true
|
|||
|
NameplateRedPointDic[lastNameplateData:GetNameplateId()] = nil
|
|||
|
redChange = true
|
|||
|
end
|
|||
|
haveNameplateUp = true
|
|||
|
-- else
|
|||
|
-- NameplateSaveDic[data.Id] = true
|
|||
|
-- end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--铭牌发生替换时 处理保存的逻辑
|
|||
|
if haveNameplateUp then
|
|||
|
NameplateIdDic[data.Id] = nameplateData
|
|||
|
NameplateGroupDic[NameplateGroupId] = nameplateData
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if not isLogin then
|
|||
|
if not NameplateSaveDic[data.Id] or isGetNameplateNew then --如果本地没有存储过这个铭牌的信息或者是新获得的记录红点
|
|||
|
if not NameplateRedPointDic[data.Id] then
|
|||
|
redChange = true
|
|||
|
end
|
|||
|
NameplateRedPointDic[data.Id] = true
|
|||
|
end
|
|||
|
|
|||
|
if (not nameplateData:IsNamepalteExpire() and nameplateData:GetNameplateUpgradeType() ~= XMedalConfigs.NameplateGetType.TypeFour) --如果获得的铭牌没有过期,并且不是转换道具的铭牌 进入弹窗逻辑
|
|||
|
or ((haveNameplateUp or isGetNameplateNew) and nameplateData:GetNameplateUpgradeType() == XMedalConfigs.NameplateGetType.TypeFour) --如果是转换道具的铭牌并且铭牌是新获得或者升级 进入弹窗逻辑
|
|||
|
then
|
|||
|
if isGetNameplateNew then
|
|||
|
lastNameplateData = nil
|
|||
|
end
|
|||
|
XLuaUiManager.Open("UiObtainNameplate", nameplateData, lastNameplateData)
|
|||
|
UiNameplateIsOpen = true
|
|||
|
end
|
|||
|
|
|||
|
if redChange then
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_NAMEPLATE_CHANGE)
|
|||
|
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NameplateRedPointDic"), NameplateRedPointDic)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
--服务端下推处理 铭牌转换道具
|
|||
|
function XMedalManager.NameplateConvertItem(data)
|
|||
|
local nameplateData = NameplateIdDic[data.NameplateId]
|
|||
|
NameplateIdDic[data.NameplateId] = nil
|
|||
|
if not nameplateData then
|
|||
|
local groupId = XMedalConfigs.GetNameplateGroup(data.NameplateId)
|
|||
|
local dataByGroup = NameplateGroupDic[groupId]
|
|||
|
local tmpData = {}
|
|||
|
tmpData.Id = data.NameplateId
|
|||
|
tmpData.Exp = 0
|
|||
|
tmpData.EndTime = dataByGroup and dataByGroup:GetNamepalteEndTime() or 0
|
|||
|
tmpData.GetTime = dataByGroup and dataByGroup:GetNamepalteGetTime() or 0
|
|||
|
nameplateData = XNameplate.New(tmpData)
|
|||
|
end
|
|||
|
XLuaUiManager.Open("UiObtainNameplate", nameplateData, false, data.ConvertItem, data.ConvertCount)
|
|||
|
|
|||
|
-- if UiNameplateIsOpen then
|
|||
|
-- local tmpData = {}
|
|||
|
-- tmpData.NameplateData = nameplateData
|
|||
|
-- tmpData.ConvertItem = data.ConvertItem
|
|||
|
-- tmpData.ConvertCount = data.ConvertCount
|
|||
|
-- table.insert(NameplateLastEqu, tmpData)
|
|||
|
-- else
|
|||
|
-- if not nameplateData then
|
|||
|
-- local tmpData = {}
|
|||
|
-- tmpData.Id = data.NameplateId
|
|||
|
-- tmpData.Exp = 0
|
|||
|
-- tmpData.EndTime = 0
|
|||
|
-- tmpData.GetTime = 0
|
|||
|
-- nameplateData = XNameplate.New(tmpData)
|
|||
|
-- end
|
|||
|
-- XLuaUiManager.Open("UiObtainNameplate", nameplateData, false, data.ConvertItem, data.ConvertCount)
|
|||
|
-- UiNameplateIsOpen = true
|
|||
|
-- end
|
|||
|
end
|
|||
|
|
|||
|
--获取铭牌数据列表(真实数据信息
|
|||
|
function XMedalManager.GetNameplateGroupList()
|
|||
|
local nameplateGroup = {}
|
|||
|
for _, data in pairs(NameplateGroupDic) do
|
|||
|
table.insert(nameplateGroup, data)
|
|||
|
end
|
|||
|
table.sort(nameplateGroup, function(a, b)
|
|||
|
if a:IsNameplateNew() and not b:IsNameplateNew() then
|
|||
|
return true
|
|||
|
elseif a:IsNameplateNew() == b:IsNameplateNew() then
|
|||
|
if a:IsNameplateDress() and not b:IsNameplateDress() then
|
|||
|
return true
|
|||
|
elseif a:IsNameplateDress() == b:IsNameplateDress() then
|
|||
|
-- if not a:IsNamepalteExpire() and b:IsNamepalteExpire() then
|
|||
|
-- return true
|
|||
|
-- elseif a:IsNamepalteExpire() == b:IsNamepalteExpire() then
|
|||
|
-- return a:GetNameplateId() < b:GetNameplateId()
|
|||
|
-- end
|
|||
|
if a:IsNamepalteForever() and not b:IsNamepalteForever() then
|
|||
|
return true
|
|||
|
elseif a:IsNamepalteForever() == b:IsNamepalteForever() then
|
|||
|
if a:GetNamepalteLeftTime() > b:GetNamepalteLeftTime() then
|
|||
|
return true
|
|||
|
elseif a:GetNamepalteLeftTime() == b:GetNamepalteLeftTime() then
|
|||
|
return a:GetNameplateId() < b:GetNameplateId()
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end)
|
|||
|
return nameplateGroup
|
|||
|
end
|
|||
|
|
|||
|
--打开获取铭牌界面(栈方式 暂时废弃
|
|||
|
function XMedalManager.OpenNextUiObtainNameplate()
|
|||
|
UiNameplateIsOpen = false
|
|||
|
if #NameplateLastEqu > 0 then
|
|||
|
local tmpData = table.remove(NameplateLastEqu, 1)
|
|||
|
XLuaUiManager.Open("UiObtainNameplate", tmpData.NameplateData, false, tmpData.ConvertItem, tmpData.ConvertCount)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--根据GroupId获取服务端推送的铭牌实体数据
|
|||
|
function XMedalManager.CheckNameplateGroupUnluck(group)
|
|||
|
return NameplateGroupDic[group]
|
|||
|
end
|
|||
|
|
|||
|
--获取当前装备的铭牌
|
|||
|
function XMedalManager.GetNameplateCurId()
|
|||
|
return CurWearNameplate
|
|||
|
end
|
|||
|
|
|||
|
--检查是不是新获得的铭牌(红点)
|
|||
|
function XMedalManager.CheckNameplateNew(id)
|
|||
|
if not NameplateRedPointDic[id] then
|
|||
|
return false
|
|||
|
end
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
--检查是不是新图片资源铭牌
|
|||
|
function XMedalManager.CheckNameplateNewTexture(id)
|
|||
|
local isNew = XMedalConfigs.GetNameplateIsNewTextureIcon(id)
|
|||
|
if isNew then
|
|||
|
return isNew == 1
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
--初始化本地持久化数据的红点信息
|
|||
|
function XMedalManager.InitNameplateSaveRedDic()
|
|||
|
--NameplateSaveDic = XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "NameplateSaveDic")) or {}
|
|||
|
NameplateRedPointDic = XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "NameplateRedPointDic")) or {}
|
|||
|
end
|
|||
|
|
|||
|
--根据规则处理红点的隐藏
|
|||
|
function XMedalManager.SetNameplateRedPointDic(id)
|
|||
|
local needChangeRed = false
|
|||
|
if not id then
|
|||
|
for _, nameplateData in pairs(NameplateGroupDic) do
|
|||
|
if NameplateRedPointDic[nameplateData:GetNameplateId()] then
|
|||
|
needChangeRed = true
|
|||
|
end
|
|||
|
NameplateSaveDic[nameplateData:GetNameplateId()] = true
|
|||
|
NameplateRedPointDic[nameplateData:GetNameplateId()] = nil
|
|||
|
end
|
|||
|
else
|
|||
|
if NameplateRedPointDic[id] then
|
|||
|
NameplateSaveDic[id] = true
|
|||
|
NameplateRedPointDic[id] = nil
|
|||
|
needChangeRed = true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if needChangeRed then
|
|||
|
--XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NameplateSaveDic"), NameplateSaveDic)
|
|||
|
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NameplateRedPointDic"), NameplateRedPointDic)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_NAMEPLATE_CHANGE)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XMedalManager.CheckHaveNewNameplateById(id)
|
|||
|
return NameplateRedPointDic[id]
|
|||
|
end
|
|||
|
|
|||
|
--检查是否有新的铭牌
|
|||
|
function XMedalManager.CkeckHaveNewNameplate()
|
|||
|
if not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.Nameplate) then
|
|||
|
if XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.Nameplate) then
|
|||
|
for _, data in pairs(NameplateGroupDic) do
|
|||
|
if data:IsNameplateNew() then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
--佩戴铭牌请求
|
|||
|
function XMedalManager.WearNameplate(nameplateId, cb)
|
|||
|
XNetwork.Call(METHOD_NAME.WearNameplateRequest, { NameplateId = nameplateId }, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
CurWearNameplate = nameplateId
|
|||
|
if cb then
|
|||
|
cb()
|
|||
|
end
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_NAMEPLATE_CHANGE)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
------------------------------------------铭牌--------------------------------------
|
|||
|
XMedalManager.Init()
|
|||
|
return XMedalManager
|
|||
|
end
|
|||
|
|
|||
|
XRpc.NotifyMedalData = function(data)
|
|||
|
if not data then
|
|||
|
return
|
|||
|
end
|
|||
|
XPlayer.AsyncMedalIds(data.MedalInfos, false)
|
|||
|
XDataCenter.MedalManager.UpdateMedalList()
|
|||
|
end
|
|||
|
|
|||
|
XRpc.NotifyUpdateMedalData = function(data)
|
|||
|
if not data then
|
|||
|
return
|
|||
|
end
|
|||
|
XPlayer.AsyncMedalIds(data.UpdateInfo, true)
|
|||
|
XDataCenter.MedalManager.SetNewMedalId(data.UpdateInfo.Id)
|
|||
|
XDataCenter.MedalManager.UpdateMedalList()
|
|||
|
--CheckPoint: APPEVENT_BADGE
|
|||
|
XAppEventManager.MedalAppLogEvent(data.UpdateInfo.Id)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_MEDAL_NOTIFY)
|
|||
|
end
|
|||
|
|
|||
|
XRpc.NotifyScoreTitleData = function(data)
|
|||
|
XDataCenter.MedalManager.SetSpecificMaxScore(data.TitleInfos)
|
|||
|
XDataCenter.MedalManager.SetScoreTitleUnLockList(data.TitleInfos)
|
|||
|
XDataCenter.MedalManager.UpdateScoreTitleShowState(data.HideTypes)
|
|||
|
XDataCenter.MedalManager.UpdateScoreTitle()
|
|||
|
|
|||
|
-- 全部已解锁的收藏品墙与装饰品数据
|
|||
|
XDataCenter.CollectionWallManager.SyncWallEntityData(data.WallInfos)
|
|||
|
XDataCenter.CollectionWallManager.SyncDecorationData(data.UnlockedDecorationIds)
|
|||
|
end
|
|||
|
|
|||
|
XRpc.NotifyScoreTitleInfo = function(data)
|
|||
|
XDataCenter.MedalManager.SetSpecificMaxScore(data.Titles)
|
|||
|
XDataCenter.MedalManager.AddScoreTitleUnLockList(data.Titles, data.IsLogined)
|
|||
|
XDataCenter.MedalManager.UpdateScoreTitle()
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_SCORETITLE_CHANGE)
|
|||
|
end
|
|||
|
|
|||
|
--铭牌登陆下推
|
|||
|
XRpc.NotifyNameplateLoginData = function(data)
|
|||
|
XDataCenter.MedalManager.AsyncNameplateLogin(data)
|
|||
|
end
|
|||
|
|
|||
|
--铭牌信息改变下推
|
|||
|
XRpc.NotifyNameplateInfo = function(data)
|
|||
|
if data.Nameplate then
|
|||
|
XDataCenter.MedalManager.AsyncUpateNameplate(data.Nameplate)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--铭牌信息改变下推
|
|||
|
XRpc.NotifyNameplateConvertItem = function(data)
|
|||
|
XDataCenter.MedalManager.NameplateConvertItem(data)
|
|||
|
end
|
|||
|
|
|||
|
--更新当前装备的勋章Id
|
|||
|
XRpc.NotifyPlayerCurrMedalId = function(data)
|
|||
|
XPlayer.SetCurrMedalId(data.CurrMedalId)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_MEDAL_USE)
|
|||
|
end
|