PGRData/Resources/Scripts/XManager/XArchiveManager.lua

2442 lines
100 KiB
Lua
Raw Normal View History

2022-12-26 08:36:01 +00:00
--
-- Author: zhanghsuang、wujie
-- Note: 图鉴数据管理
XArchiveManagerCreator = function()
local EntityType = {
Info = 1,
Setting = 2,
Skill = 3,
}
local tableInsert = table.insert
local XArchiveMonsterDetailEntity = require("XEntity/XArchive/XArchiveMonsterDetailEntity")
local XArchiveMonsterEntity = require("XEntity/XArchive/XArchiveMonsterEntity")
local XArchiveStoryChapterEntity = require("XEntity/XArchive/XArchiveStoryChapterEntity")
local XArchiveStoryDetailEntity = require("XEntity/XArchive/XArchiveStoryDetailEntity")
local XArchiveCGEntity = require("XEntity/XArchive/XArchiveCGEntity")
local XArchiveCommunicationEntity = require("XEntity/XArchive/XArchiveCommunicationEntity")
local XArchiveMailEntity = require("XEntity/XArchive/XArchiveMailEntity")
local XArchiveNpcDetailEntity = require("XEntity/XArchive/XArchiveNpcDetailEntity")
local XArchiveNpcEntity = require("XEntity/XArchive/XArchiveNpcEntity")
local XArchivePartnerEntity = require("XEntity/XArchive/XArchivePartnerEntity")
local XArchivePartnerSettingEntity = require("XEntity/XArchive/XArchivePartnerSettingEntity")
local XArchiveManager ={}
local ArchiveCfg = {}
local ArchiveMonsterCfg = {}
local ArchiveMonsterInfoCfg = {}
local ArchiveMonsterSkillCfg = {}
local ArchiveMonsterSettingCfg = {}
-- local AwarenessSettingCfg = {}
-- local WeaponSettingCfg = {}
-- local ArchiveWeaponGroupCfg = {}
local ArchiveWeaponTemplateIdToSettingListDic = {}
local ArchiveAwarenessGroupCfg = {}
local ArchiveStoryChapterCfg = {}
local ArchiveStoryDetailCfg = {}
local ArchiveStoryNpcCfg = {}
local ArchiveStoryNpcSettingCfg = {}
local ArchiveCGGroupCfg = {}
local ArchiveCGDetailCfg = {}
local ArchiveMailCfg = {}
local ArchiveCommunicationCfg = {}
local EventDateGroupCfg = {}
local ArchiveAwarenessShowedStatusDic = {}
local ArchiveShowedMonsterList = {}
local ArchiveTagList = {}
local ArchiveMonsterList = {}
local ArchiveMonsterInfoList = {}
local ArchiveMonsterSkillList = {}
local ArchiveMonsterSettingList = {}
local MonsterRedPointDic = {}
local ArchiveNpcToMonster = {}
local ArchiveMonsterData = {}
local ArchiveStoryGroupList = {}
local ArchiveStoryChapterList = {}
local ArchiveStoryDetailList = {}
local ArchiveStoryNpcList = {}
local ArchiveStoryNpcSettingList = {}
local ArchiveCGDetailList = {}
local ArchiveShowedCGList = {}
local ArchiveCGDetailData = {}
local ArchiveMailList = {}
local ArchiveCommunicationList = {}
local ArchivePartnerList = {}
local ArchivePartnerSettingList = {}
local PartnerUnLockDic = {}
local PartnerUnLockSettingDic = {}
local ArchiveMonsterUnlockIdsList = {}
local ArchiveMonsterInfoUnlockIdsList = {}
local ArchiveMonsterSkillUnlockIdsList = {}
local ArchiveMonsterSettingUnlockIdsList = {}
local ArchiveMonsterEvaluateList = {}
local ArchiveMonsterMySelfEvaluateList = {}
local ArchiveStoryEvaluateList = {}
local ArchiveStoryMySelfEvaluateList = {}
local LastSyncMonsterEvaluateTimes = {}
local LastSyncStoryEvaluateTimes = {}
-- 记录服务端武器数据以TemplateId为键
local ArchiveWeaponServerData = {}
-- 记录服务端意识数据以TemplateId为键
local ArchiveAwarenessServerData = {}
-- 记录suitId对应获得的数量
local ArchiveAwarenessSuitToAwarenessCountDic = {}
-- 记录解锁的武器是否已读(解锁)(已读则无相关红点)
local ArchiveWeaponUnlockServerData = {}
-- 记录解锁的意识套装是否已读(解锁)
local ArchiveAwarenessSuitUnlockServerData = {}
-- 记录服务端武器设定已读解锁数据以SettingId为键
local ArchiveWeaponSettingUnlockServerData = {}
-- 记录服务端意识设定已读解锁数据以SettingId为键
local ArchiveAwarenessSettingUnlockServerData = {}
-->>>红点相关
local ArchiveWeaponRedPointCountDic = {} --每个武器类型拥有的红点数量
local ArchiveWeaponTotalRedPointCount = 0 --武器图鉴拥有的红点数量
local ArchiveAwarenessSuitRedPointCountDic = {} --每个意识获取类型下对应套装拥有的红点数量
local ArchiveAwarenessSuitTotalRedPointCount = 0 --意识图鉴拥有的红点数量
local ArchiveWeaponSettingCanUnlockDic = {} --武器设定可以解锁的
local ArchiveNewWeaponSettingIdsDic = {} --武器id对应的新的武器设定ids
local ArchiveWeaponSettingRedPointCountDic = {} --每个武器类型下对应设定拥有的红点数量
local ArchiveWeaponSettingTotalRedPointCount = 0 --武器设定拥有的总红点数量
local ArchiveAwarenessSettingCanUnlockDic = {} --意识设定可以解锁的
local ArchiveNewAwarenessSettingIdsDic = {} --意识suitId对应的新的设定ids
local ArchiveAwarenessSettingRedPointCountDic = {} --每个意识获取类型下对应设定拥有的红点数量
local ArchiveAwarenessSettingTotalRedPointCount = 0 --意识设定拥有的总红点数量
--<<<红点相关
XArchiveManager.EquipInfoChildUiType = {
Details = 1,
Setting = 2,
}
XArchiveManager.MonsterRedPointType = {
Monster = 1,
MonsterInfo = 2,
MonsterSkill = 3,
MonsterSetting = 4,
}
local SYNC_EVALUATE_SECOND = 5
local METHOD_NAME = {
GetEvaluateRequest = "GetEvaluateRequest",
GetStoryEvaluateRequest = "GetStoryEvaluateRequest",
ArchiveEvaluateRequest = "ArchiveEvaluateRequest",
ArchiveGiveLikeRequest = "ArchiveGiveLikeRequest",
UnlockMonsterSettingRequest = "UnlockMonsterSettingRequest",
UnlockArchiveMonsterRequest = "UnlockArchiveMonsterRequest",
UnlockMonsterInfoRequest = "UnlockMonsterInfoRequest",
UnlockMonsterSkillRequest = "UnlockMonsterSkillRequest",
UnlockArchiveWeaponRequest = "UnlockArchiveWeaponRequest",
UnlockArchiveAwarenessRequest = "UnlockArchiveAwarenessRequest",
UnlockWeaponSettingRequest = "UnlockWeaponSettingRequest",
UnlockAwarenessSettingRequest = "UnlockAwarenessSettingRequest",
}
function XArchiveManager.Init()
PartnerUnLockSettingDic = {}
PartnerUnLockDic = {}
ArchiveCfg = XArchiveConfigs.GetArchiveConfigs()--图鉴入口
-- AwarenessSettingCfg = XArchiveConfigs.GetAwarenessSettings()--意识设定
-- WeaponSettingCfg = XArchiveConfigs.GetWeaponSettings()--武器设定
ArchiveMonsterCfg = XArchiveConfigs.GetArchiveMonsterConfigs()--图鉴怪物
ArchiveTagList = XArchiveConfigs.GetArchiveTagAllList()--图鉴标签
ArchiveMonsterInfoCfg = XArchiveConfigs.GetArchiveMonsterInfoConfigs()--图鉴怪物信息
ArchiveMonsterSkillCfg = XArchiveConfigs.GetArchiveMonsterSkillConfigs()--图鉴怪物技能
ArchiveMonsterSettingCfg = XArchiveConfigs.GetArchiveMonsterSettingConfigs()--图鉴怪物设定
-- ArchiveWeaponGroupCfg = XArchiveConfigs.GetWeaponGroup()
ArchiveWeaponTemplateIdToSettingListDic = XArchiveConfigs.GetWeaponTemplateIdToSettingListDic()
ArchiveAwarenessGroupCfg = XArchiveConfigs.GetAwarenessGroup()
ArchiveAwarenessShowedStatusDic = XArchiveConfigs.GetAwarenessShowedStatusDic()
ArchiveStoryGroupList = XArchiveConfigs.GetArchiveStoryGroupAllList()
ArchiveStoryChapterCfg = XArchiveConfigs.GetArchiveStoryChapterConfigs()
ArchiveStoryDetailCfg = XArchiveConfigs.GetArchiveStoryDetailConfigs()
ArchiveStoryNpcCfg = XArchiveConfigs.GetArchiveStoryNpcConfigs()--图鉴NPC
ArchiveStoryNpcSettingCfg = XArchiveConfigs.GetArchiveStoryNpcSettingConfigs()--图鉴NPC设定
ArchiveCGGroupCfg = XArchiveConfigs.GetArchiveCGGroupConfigs()--图鉴CG组信息
ArchiveCGDetailCfg = XArchiveConfigs.GetArchiveCGDetailConfigs()--图鉴CG详情
ArchiveMailCfg = XArchiveConfigs.GetArchiveMailsConfigs()
ArchiveCommunicationCfg = XArchiveConfigs.GetArchiveCommunicationsConfigs()
EventDateGroupCfg = XArchiveConfigs.GetEventDateGroupsConfigs()
XArchiveManager.InitArchiveMonsterList()
XArchiveManager.InitArchiveMonsterDetail(EntityType.Info,ArchiveMonsterInfoCfg,ArchiveMonsterInfoList,true)
XArchiveManager.InitArchiveMonsterDetail(EntityType.Skill,ArchiveMonsterSkillCfg,ArchiveMonsterSkillList,false)
XArchiveManager.InitArchiveMonsterDetail(EntityType.Setting,ArchiveMonsterSettingCfg,ArchiveMonsterSettingList,true)
XArchiveManager.InitArchiveStoryChapterList()
XArchiveManager.InitArchiveStoryDetailAllList()
XArchiveManager.InitArchiveStoryNpcAllList()
XArchiveManager.InitArchiveStoryNpcSettingAllList()
XArchiveManager.InitArchiveCGAllList()
XArchiveManager.InitArchiveMailList()
XArchiveManager.InitArchiveCommunicationList()
XArchiveManager.InitArchivePartnerSetting()
XArchiveManager.InitArchivePartnerList()
end
--------------------------------怪物图鉴,数据初始化------------------------------------------>>>
function XArchiveManager.InitArchiveMonsterList()
ArchiveMonsterList = {}
ArchiveNpcToMonster = {}
ArchiveMonsterData = {}
for _, monster in pairs(ArchiveMonsterCfg or {}) do
if not ArchiveMonsterList[monster.Type] then
ArchiveMonsterList[monster.Type] = {}
end
local tmp = XArchiveMonsterEntity.New(monster.Id)
for _,id in pairs(monster.NpcId or {})do
ArchiveNpcToMonster[id] = monster.Id
end
tableInsert(ArchiveMonsterList[monster.Type], tmp)
end
for _,list in pairs(ArchiveMonsterList)do
XArchiveConfigs.SortByOrder(list)
for _,monster in pairs(list) do
ArchiveMonsterData[monster:GetId()] = monster
end
end
end
function XArchiveManager.InitArchiveMonsterDetail(entityType,detailCfg,allList,IsHavetype)
for _, detail in pairs(detailCfg or {}) do
if not allList[detail.GroupId] then
allList[detail.GroupId] = {}
end
if IsHavetype and not allList[detail.GroupId][detail.Type] then
allList[detail.GroupId][detail.Type] = {}
end
local tmp = XArchiveMonsterDetailEntity.New(entityType,detail.Id)
if IsHavetype then
table.insert(allList[detail.GroupId][detail.Type], tmp)
else
table.insert(allList[detail.GroupId], tmp)
end
end
for _,group in pairs(allList) do
if IsHavetype then
for _,type in pairs(group) do
XArchiveConfigs.SortByOrder(type)
end
else
XArchiveConfigs.SortByOrder(group)
end
end
end
--------------------------------怪物图鉴,数据初始化------------------------------------------<<<
--------------------------------怪物图鉴,数据获取相关------------------------------------------>>>
function XArchiveManager.GetArchiveMonsterEvaluate(npcId)
return ArchiveMonsterEvaluateList[npcId] or {}
end
function XArchiveManager.GetArchiveMonsterMySelfEvaluate(npcId)
return ArchiveMonsterMySelfEvaluateList[npcId] or {}
end
function XArchiveManager.GetArchiveMonsterEvaluateList()
return ArchiveMonsterEvaluateList
end
function XArchiveManager.GetArchiveMonsterMySelfEvaluateList()
return ArchiveMonsterMySelfEvaluateList
end
function XArchiveManager.GetArchiveMonsterUnlockIdsList()
return ArchiveMonsterUnlockIdsList
end
function XArchiveManager.GetArchiveMonsterInfoUnlockIdsList()
return ArchiveMonsterInfoUnlockIdsList
end
function XArchiveManager.GetArchiveMonsterSkillUnlockIdsList()
return ArchiveMonsterSkillUnlockIdsList
end
function XArchiveManager.GetArchiveMonsterSettingUnlockIdsList()
return ArchiveMonsterSettingUnlockIdsList
end
function XArchiveManager.GetArchiveMonsterEntityByNpcId(npcId)
local monsterId = XArchiveManager.GetMonsterIdByNpcId(npcId)
if monsterId == nil then
XLog.Error(string.format("npcId:%s没有在Share/Archive/Monster.tab或SameNpcGroup.tab配置", npcId))
return nil
end
return ArchiveMonsterData[monsterId]
end
function XArchiveManager.GetArchiveMonsterType(monsterId)
return ArchiveMonsterData[monsterId] and ArchiveMonsterData[monsterId]:GetType() or nil
end
function XArchiveManager.GetArchives()------------------------------------修改技能设定等的条件判定
local list = {}
for _, v in pairs(ArchiveCfg) do
local SkipFunctional = XFunctionConfig.GetSkipList(v.SkipId)
if SkipFunctional and not XFunctionManager.CheckFunctionFitter(SkipFunctional.FunctionalId) then
table.insert(list, v)
end
end
--return XArchiveConfigs.SortByOrder(list)
return list
end
function XArchiveManager.GetMonsterKillCount(npcId)
local sameNpcId = XArchiveConfigs.GetSameNpcId(npcId)
local monsterId = ArchiveNpcToMonster[sameNpcId]
if not monsterId then return 0 end
local killCount = ArchiveMonsterData[monsterId].Kill[sameNpcId]
return killCount and killCount or 0
end
function XArchiveManager.GetMonsterArchiveName(monster)
if monster:GetName() then
return monster:GetName()
end
if monster:GetNpcId(1) then
return XArchiveConfigs.GetMonsterRealName(monster:GetNpcId(1))
end
return "NULL"
end
function XArchiveManager.GetArchiveTagList(group)
return ArchiveTagList[group]
end
function XArchiveManager.GetArchiveMonsterList(type)--type为空时不作为判断条件获取相应类型的图鉴怪物列表
if type then
return ArchiveMonsterList[type] or {}
end
local list = {}
for _,tmpType in pairs(ArchiveMonsterList) do
for _,monster in pairs(tmpType) do
tableInsert(list,monster)
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetArchiveMonsterInfoList(groupId,type)--type为空时不作为判断条件获取相应类型的图鉴怪物信息列表
if type then
return ArchiveMonsterInfoList[groupId] and ArchiveMonsterInfoList[groupId][type] or {}
end
local list = {}
for _,tmpType in pairs(ArchiveMonsterInfoList[groupId]) do
for _,monster in pairs(tmpType) do
tableInsert(list,monster)
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetArchiveMonsterSkillList(groupId)--groupId为空时不作为判断条件获取相应类型的图鉴怪物技能列表
if groupId then
return ArchiveMonsterSkillList[groupId] or {}
end
local list = {}
for _,group in pairs(ArchiveMonsterSkillList) do
for _,monster in pairs(group) do
tableInsert(list,monster)
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetArchiveMonsterSettingList(groupId,type)--type为空时不作为判断条件获取相应类型的图鉴怪物设定列表
if type then
return ArchiveMonsterSettingList[groupId] and ArchiveMonsterSettingList[groupId][type] or {}
end
local list = {}
for _,tmpType in pairs(ArchiveMonsterSettingList[groupId]) do
for _,monster in pairs(tmpType) do
tableInsert(list,monster)
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetMonsterCompletionRate(type)
local monsterList = XArchiveManager.GetArchiveMonsterList(type)
if #monsterList < 1 then
return 0
end
local unlockCount = 0
for _,v in pairs(monsterList or {}) do
if not v.IsLockMain then
unlockCount = unlockCount + 1
end
end
return math.floor((unlockCount/#monsterList)*100)
end
function XArchiveManager.IsMonsterHaveRedPointByAll()
local IsHaveRedPoint = false
for type,_ in pairs(MonsterRedPointDic or {}) do
if XArchiveManager.IsMonsterHaveRedPointByType(type) then
IsHaveRedPoint = true
break
end
if XArchiveManager.IsMonsterHaveNewTagByType(type) then
IsHaveRedPoint = true
break
end
end
return IsHaveRedPoint
end
function XArchiveManager.IsMonsterHaveNewTagByType(type)
local IsHaveNewTag = false
for monsterId,_ in pairs(MonsterRedPointDic[type] or {}) do
if XArchiveManager.IsMonsterHaveNewTagById(monsterId) then
IsHaveNewTag = true
break
end
end
return IsHaveNewTag
end
function XArchiveManager.IsMonsterHaveRedPointByType(type)
local IsHaveRedPoint = false
for monsterId,_ in pairs(MonsterRedPointDic[type] or {}) do
if XArchiveManager.IsMonsterHaveRedPointById(monsterId) then
IsHaveRedPoint = true
break
end
end
return IsHaveRedPoint
end
function XArchiveManager.IsMonsterHaveNewTagById(monsterId)
local monsterType = XArchiveManager.GetArchiveMonsterType(monsterId)
return monsterType and MonsterRedPointDic[monsterType] and
MonsterRedPointDic[monsterType][monsterId] and
MonsterRedPointDic[monsterType][monsterId].IsNewMonster or false
end
function XArchiveManager.IsMonsterHaveRedPointById(monsterId)
return XArchiveManager.IsHaveNewMonsterInfoByNpcId(monsterId) or
XArchiveManager.IsHaveNewMonsterSkillByNpcId(monsterId) or
XArchiveManager.IsHaveNewMonsterSettingByNpcId(monsterId)
end
function XArchiveManager.IsHaveNewMonsterInfoByNpcId(monsterId)
local monsterType = XArchiveManager.GetArchiveMonsterType(monsterId)
return monsterType and MonsterRedPointDic[monsterType] and
MonsterRedPointDic[monsterType][monsterId] and
MonsterRedPointDic[monsterType][monsterId].IsNewInfo or false
end
function XArchiveManager.IsHaveNewMonsterSkillByNpcId(monsterId)
local monsterType = XArchiveManager.GetArchiveMonsterType(monsterId)
return monsterType and MonsterRedPointDic[monsterType] and
MonsterRedPointDic[monsterType][monsterId] and
MonsterRedPointDic[monsterType][monsterId].IsNewSkill or false
end
function XArchiveManager.IsHaveNewMonsterSettingByNpcId(monsterId)
local monsterType = XArchiveManager.GetArchiveMonsterType(monsterId)
return monsterType and MonsterRedPointDic[monsterType] and
MonsterRedPointDic[monsterType][monsterId] and
MonsterRedPointDic[monsterType][monsterId].IsNewSetting or false
end
--------------------------------怪物图鉴,数据获取相关------------------------------------------<<<
--------------------------------怪物图鉴,数据更新相关------------------------------------------>>>
function XArchiveManager.UpdateMonsterData()
MonsterRedPointDic = {}
XArchiveManager.UpdateMonsterList()
XArchiveManager.UpdateMonsterInfoList()
XArchiveManager.UpdateMonsterSettingList()
XArchiveManager.UpdateMonsterSkillList()
XEventManager.DispatchEvent(XEventId.EVNET_ARCHIVE_MONSTER_KILLCOUNTCHANGE)
end
function XArchiveManager.UpdateMonsterList() --更新图鉴怪物列表数据
local killCount = {}
local tmpData = {}
for _,showedMonster in pairs(ArchiveShowedMonsterList or {}) do
local sameNpcId = XArchiveConfigs.GetSameNpcId(showedMonster.Id)
local monsterId = ArchiveNpcToMonster[sameNpcId]
local monsterData = ArchiveMonsterData[monsterId]
if monsterId and monsterData then
tmpData.IsLockMain = false
if not killCount[sameNpcId] then killCount[sameNpcId] = 0 end
killCount[sameNpcId] = killCount[sameNpcId] + showedMonster.Killed
tmpData.Kill = tmpData.Kill or {}
tmpData.Kill[sameNpcId] = killCount[sameNpcId]
monsterData:UpdateData(tmpData)
XArchiveManager.SetMonsterRedPointDic(monsterId,XArchiveManager.MonsterRedPointType.Monster,nil)
end
end
end
function XArchiveManager.UpdateMonsterInfoList()--更新图鉴怪物信息列表数据
for _,showedMonster in pairs(ArchiveShowedMonsterList or {}) do
local sameNpcId = XArchiveConfigs.GetSameNpcId(showedMonster.Id)
local monsterId = ArchiveNpcToMonster[sameNpcId]
local monsterData = ArchiveMonsterData[monsterId]
if monsterId and monsterData then
for _,npcId in pairs(monsterData:GetNpcId() or {}) do
for _,type in pairs(ArchiveMonsterInfoList[npcId] or {}) do
for _,monsterInfo in pairs(type) do
local IsUnLock = false
local lockDes = ""
if monsterInfo:GetCondition() == 0 then
IsUnLock =true
else
IsUnLock,lockDes = XConditionManager.CheckCondition(monsterInfo:GetCondition(),monsterInfo:GetGroupId())
end
local tmpData = {}
tmpData.IsLock = not IsUnLock
tmpData.LockDesc = lockDes
monsterInfo:UpdateData(tmpData)
if IsUnLock then
XArchiveManager.SetMonsterRedPointDic(monsterId,XArchiveManager.MonsterRedPointType.MonsterInfo,monsterInfo:GetId())
end
end
end
end
end
end
end
function XArchiveManager.UpdateMonsterSkillList()--更新图鉴怪物技能列表数据
for _,showedMonster in pairs(ArchiveShowedMonsterList or {}) do
local sameNpcId = XArchiveConfigs.GetSameNpcId(showedMonster.Id)
local monsterId = ArchiveNpcToMonster[sameNpcId]
local monsterData = ArchiveMonsterData[monsterId]
if monsterId and monsterData then
for _,npcId in pairs(monsterData:GetNpcId() or {}) do
for _,monsterSkill in pairs(ArchiveMonsterSkillList[npcId] or {}) do
local IsUnLock = false
local lockDes = ""
if monsterSkill:GetCondition() == 0 then
IsUnLock =true
else
IsUnLock,lockDes = XConditionManager.CheckCondition(monsterSkill:GetCondition(),monsterSkill:GetGroupId())
end
local tmpData = {}
tmpData.IsLock = not IsUnLock
tmpData.LockDesc = lockDes
monsterSkill:UpdateData(tmpData)
if IsUnLock then
XArchiveManager.SetMonsterRedPointDic(monsterId,XArchiveManager.MonsterRedPointType.MonsterSkill,monsterSkill:GetId())
end
end
end
end
end
end
function XArchiveManager.UpdateMonsterSettingList()--更新图鉴怪物设定列表数据
for _,showedMonster in pairs(ArchiveShowedMonsterList or {}) do
local sameNpcId = XArchiveConfigs.GetSameNpcId(showedMonster.Id)
local monsterId = ArchiveNpcToMonster[sameNpcId]
local monsterData = ArchiveMonsterData[monsterId]
if monsterId and monsterData then
for _,npcId in pairs(monsterData:GetNpcId() or {}) do
for _,type in pairs(ArchiveMonsterSettingList[npcId] or {}) do
for _,monsterStting in pairs(type) do
local IsUnLock = false
local lockDes = ""
if monsterStting:GetCondition() == 0 then
IsUnLock =true
else
IsUnLock,lockDes = XConditionManager.CheckCondition(monsterStting:GetCondition(),monsterStting:GetGroupId())
end
local tmpData = {}
tmpData.IsLock = not IsUnLock
tmpData.LockDesc = lockDes
monsterStting:UpdateData(tmpData)
if IsUnLock then
XArchiveManager.SetMonsterRedPointDic(monsterId,XArchiveManager.MonsterRedPointType.MonsterSetting,monsterStting:GetId())
end
end
end
end
end
end
end
function XArchiveManager.SetMonsterRedPointDic(monsterId,type,id)
local monsterType = XArchiveManager.GetArchiveMonsterType(monsterId)
if not monsterType then return end
if not MonsterRedPointDic[monsterType] then
MonsterRedPointDic[monsterType] = {}
end
if not MonsterRedPointDic[monsterType][monsterId] then
MonsterRedPointDic[monsterType][monsterId] = {}
end
if type == XArchiveManager.MonsterRedPointType.Monster then
if not ArchiveMonsterUnlockIdsList[monsterId] then
MonsterRedPointDic[monsterType][monsterId].IsNewMonster = true
end
elseif type == XArchiveManager.MonsterRedPointType.MonsterInfo then
if not ArchiveMonsterInfoUnlockIdsList[id] then
MonsterRedPointDic[monsterType][monsterId].IsNewInfo = true
end
elseif type == XArchiveManager.MonsterRedPointType.MonsterSkill then
if not ArchiveMonsterSkillUnlockIdsList[id] then
MonsterRedPointDic[monsterType][monsterId].IsNewSkill = true
end
elseif type == XArchiveManager.MonsterRedPointType.MonsterSetting then
if not ArchiveMonsterSettingUnlockIdsList[id] then
MonsterRedPointDic[monsterType][monsterId].IsNewSetting = true
end
end
end
function XArchiveManager.ClearMonsterRedPointDic(monsterId,type)
local monsterType = XArchiveManager.GetArchiveMonsterType(monsterId)
if not monsterType then return end
if not MonsterRedPointDic[monsterType] then return end
if not MonsterRedPointDic[monsterType][monsterId] then return end
if type == XArchiveManager.MonsterRedPointType.Monster then
MonsterRedPointDic[monsterType][monsterId].IsNewMonster = false
elseif type == XArchiveManager.MonsterRedPointType.MonsterInfo then
MonsterRedPointDic[monsterType][monsterId].IsNewInfo = false
elseif type == XArchiveManager.MonsterRedPointType.MonsterSkill then
MonsterRedPointDic[monsterType][monsterId].IsNewSkill = false
elseif type == XArchiveManager.MonsterRedPointType.MonsterSetting then
MonsterRedPointDic[monsterType][monsterId].IsNewSetting = false
end
if not MonsterRedPointDic[monsterType][monsterId].IsNewMonster and
not MonsterRedPointDic[monsterType][monsterId].IsNewInfo and
not MonsterRedPointDic[monsterType][monsterId].IsNewSkill and
not MonsterRedPointDic[monsterType][monsterId].IsNewSetting then
MonsterRedPointDic[monsterType][monsterId] = nil
end
end
function XArchiveManager.SetArchiveShowedMonsterList(list)
for _,monster in pairs(list or {}) do
ArchiveShowedMonsterList[monster.Id] = monster
end
end
function XArchiveManager.AddArchiveShowedMonsterList(list)
for _,monster in pairs(list or {}) do
if not ArchiveShowedMonsterList[monster] then
ArchiveShowedMonsterList[monster.Id] = monster
else
ArchiveShowedMonsterList[monster.Id].Killed = monster.Killed
end
end
end
function XArchiveManager.SetArchiveMonsterEvaluate(evaluates)
for _,evaluate in pairs(evaluates or {}) do
if evaluate and evaluate.Id then
ArchiveMonsterEvaluateList[evaluate.Id] = evaluate
for index,tag in pairs(ArchiveMonsterEvaluateList[evaluate.Id].Tags) do
local tagCfg = XArchiveConfigs.GetArchiveTagCfgById(tag.Id)
if tagCfg and tagCfg.IsNotShow == 1 then
ArchiveMonsterEvaluateList[evaluate.Id].Tags[index] = nil
end
end
end
end
end
function XArchiveManager.SetArchiveMonsterMySelfEvaluate(mySelfEvaluates)
for _,mySelfEvaluate in pairs(mySelfEvaluates or {}) do
if mySelfEvaluate and mySelfEvaluate.Id then
ArchiveMonsterMySelfEvaluateList[mySelfEvaluate.Id] = mySelfEvaluate
for index,tag in pairs(ArchiveMonsterMySelfEvaluateList[mySelfEvaluate.Id].Tags) do
local tagCfg = XArchiveConfigs.GetArchiveTagCfgById(tag)
if tagCfg and tagCfg.IsNotShow == 1 then
ArchiveMonsterMySelfEvaluateList[mySelfEvaluate.Id].Tags[index] = nil
end
end
end
end
end
function XArchiveManager.SetArchiveMonsterMySelfEvaluateLikeStatus(npcId,likeState)
if not ArchiveMonsterMySelfEvaluateList[npcId] then
ArchiveMonsterMySelfEvaluateList[npcId] ={}
end
ArchiveMonsterMySelfEvaluateList[npcId].LikeStatus = likeState
end
function XArchiveManager.SetArchiveMonsterMySelfEvaluateDifficulty(npcId,score,difficulty,tags)
if not ArchiveMonsterMySelfEvaluateList[npcId] then
ArchiveMonsterMySelfEvaluateList[npcId] ={}
end
ArchiveMonsterMySelfEvaluateList[npcId].Score = score
ArchiveMonsterMySelfEvaluateList[npcId].Difficulty = difficulty
ArchiveMonsterMySelfEvaluateList[npcId].Tags = tags
end
function XArchiveManager.SetArchiveMonsterUnlockIdsList(list)
for _,id in pairs(list) do
ArchiveMonsterUnlockIdsList[id] = true
end
end
function XArchiveManager.SetArchiveMonsterInfoUnlockIdsList(list)
for _,id in pairs(list) do
ArchiveMonsterInfoUnlockIdsList[id] = true
end
end
function XArchiveManager.SetArchiveMonsterSkillUnlockIdsList(list)
for _,id in pairs(list) do
ArchiveMonsterSkillUnlockIdsList[id] = true
end
end
function XArchiveManager.SetArchiveMonsterSettingUnlockIdsList(list)
for _,id in pairs(list) do
ArchiveMonsterSettingUnlockIdsList[id] = true
end
end
function XArchiveManager.ClearMonsterNewTag(datas)
local idList = {}
if not datas then
return
end
local IsHasNew = false
for _,data in pairs(datas) do
if XArchiveManager.IsMonsterHaveNewTagById(data.Id) then
IsHasNew = true
break
end
end
if not IsHasNew then return end
for _,data in pairs(datas) do
if not data.IsLockMain then
tableInsert(idList,data.Id)
end
end
if #idList < 1 then
return
end
XDataCenter.ArchiveManager.UnlockArchiveMonster(idList,function ()
for _,id in pairs(idList) do
XDataCenter.ArchiveManager.ClearMonsterRedPointDic(id,XDataCenter.ArchiveManager.MonsterRedPointType.Monster)
end
XDataCenter.ArchiveManager.SetArchiveMonsterUnlockIdsList(idList)
XEventManager.DispatchEvent(XEventId.EVNET_ARCHIVE_MONSTER_UNLOCKMONSTER)
end)
end
function XArchiveManager.ClearDetailRedPoint(type,datas)
local idList = {}
if not datas then
return
end
--------------------检测各类型是否有新增记录------------------
if type == XArchiveConfigs.MonsterDetailType.Info then
local IsHasNew = false
for _,data in pairs(datas) do
if XArchiveManager.IsHaveNewMonsterInfoByNpcId(data:GetId()) then
IsHasNew = true
break
end
end
if not IsHasNew then return end
elseif type == XArchiveConfigs.MonsterDetailType.Setting then
local IsHasNew = false
for _,data in pairs(datas) do
if XArchiveManager.IsHaveNewMonsterSettingByNpcId(data:GetId()) then
IsHasNew = true
break
end
end
if not IsHasNew then return end
elseif type == XArchiveConfigs.MonsterDetailType.Skill then
local IsHasNew = false
for _,data in pairs(datas) do
if XArchiveManager.IsHaveNewMonsterSkillByNpcId(data:GetId()) then
IsHasNew = true
break
end
end
if not IsHasNew then return end
end
--------------------将各类型新增记录的ID放入一个List------------------
for _,data in pairs(datas) do
for _,npcId in pairs(data:GetNpcId() or {}) do
if type == XArchiveConfigs.MonsterDetailType.Info then
local list = XArchiveManager.GetArchiveMonsterInfoList(npcId,nil)
for _,info in pairs(list or {}) do
if not info:GetIsLock() then
tableInsert(idList,info:GetId())
end
end
elseif type == XArchiveConfigs.MonsterDetailType.Setting then
local list = XArchiveManager.GetArchiveMonsterSettingList(npcId,nil)
for _,setting in pairs(list or {}) do
if not setting:GetIsLock() then
tableInsert(idList,setting:GetId())
end
end
elseif type == XArchiveConfigs.MonsterDetailType.Skill then
local list = XArchiveManager.GetArchiveMonsterSkillList(npcId)
for _,skill in pairs(list or {}) do
if not skill:GetIsLock() then
tableInsert(idList,skill:GetId())
end
end
end
end
end
if #idList < 1 then
return
end
--------------------将各类型新增记录的红点取消通知服务器------------------
if type == XArchiveConfigs.MonsterDetailType.Info then
XArchiveManager.UnlockMonsterInfo(idList,function ()
for _,data in pairs(datas) do
XArchiveManager.ClearMonsterRedPointDic(data:GetId(),XArchiveManager.MonsterRedPointType.MonsterInfo)
end
XArchiveManager.SetArchiveMonsterInfoUnlockIdsList(idList)
XEventManager.DispatchEvent(XEventId.EVNET_ARCHIVE_MONSTER_UNLOCKMONSTERINFO)
end)
elseif type == XArchiveConfigs.MonsterDetailType.Setting then
XArchiveManager.UnlockMonsterSetting(idList,function ()
for _,data in pairs(datas) do
XArchiveManager.ClearMonsterRedPointDic(data:GetId(),XArchiveManager.MonsterRedPointType.MonsterSetting)
end
XArchiveManager.SetArchiveMonsterSettingUnlockIdsList(idList)
XEventManager.DispatchEvent(XEventId.EVNET_ARCHIVE_MONSTER_UNLOCKMONSTERSETTING)
end)
elseif type == XArchiveConfigs.MonsterDetailType.Skill then
XArchiveManager.UnlockMonsterSkill(idList,function ()
for _,data in pairs(datas) do
XArchiveManager.ClearMonsterRedPointDic(data:GetId(),XArchiveManager.MonsterRedPointType.MonsterSkill)
end
XArchiveManager.SetArchiveMonsterSkillUnlockIdsList(idList)
XEventManager.DispatchEvent(XEventId.EVNET_ARCHIVE_MONSTER_UNLOCKMONSTERSKILL)
end)
end
end
function XArchiveManager.GetMonsterEvaluateFromSever(NpcIds, cb)
local now = XTime.GetServerNowTimestamp()
local monsterId = ArchiveNpcToMonster[NpcIds[1]]
local syscTime = LastSyncMonsterEvaluateTimes[monsterId]
if syscTime and now - syscTime < SYNC_EVALUATE_SECOND then
if cb then
cb()
return
end
end
XNetwork.Call(METHOD_NAME.GetEvaluateRequest, {Ids = NpcIds}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XArchiveManager.SetArchiveMonsterEvaluate(res.Evaluates)
XArchiveManager.SetArchiveMonsterMySelfEvaluate(res.PersonalEvaluates)
LastSyncMonsterEvaluateTimes[monsterId] = XTime.GetServerNowTimestamp()
if cb then cb() end
end)
end
function XArchiveManager.MonsterGiveEvaluate(npcId ,score ,difficulty ,tags ,cbBeFore ,cbAfter)
local type = XArchiveConfigs.SubSystemType.Monster
local tb = {Id = npcId ,Type = type ,Score = score ,Difficulty = difficulty ,Tags = tags}
XNetwork.Call(METHOD_NAME.ArchiveEvaluateRequest, tb, function(res)
if cbBeFore then cbBeFore() end
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XArchiveManager.SetArchiveMonsterMySelfEvaluateDifficulty(npcId,score,difficulty,tags)
if cbAfter then cbAfter() end
end)
end
function XArchiveManager.MonsterGiveLike(likeList ,cb)
local type = XArchiveConfigs.SubSystemType.Monster
XNetwork.Call(METHOD_NAME.ArchiveGiveLikeRequest, {LikeList = likeList ,Type = type}, function(res)
if cb then cb() end
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
for _,id in pairs(res.SuccessIds or {}) do
for _,like in pairs(likeList or {}) do
if id == like.Id then
XArchiveManager.SetArchiveMonsterMySelfEvaluateLikeStatus(id,like.LikeStatus)
end
end
end
end)
end
function XArchiveManager.UnlockArchiveMonster(ids,cb)
local list = {}
for _,id in pairs(ids or {}) do
if not ArchiveMonsterUnlockIdsList[id] then
tableInsert(list,id)
end
end
if #list == 0 then
return
end
XNetwork.Call(METHOD_NAME.UnlockArchiveMonsterRequest, {Ids = list}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if cb then cb() end
end)
end
function XArchiveManager.UnlockMonsterInfo(ids,cb)
local list = {}
for _,id in pairs(ids or {}) do
if not ArchiveMonsterInfoUnlockIdsList[id] then
tableInsert(list,id)
end
end
if #list == 0 then
return
end
XNetwork.Call(METHOD_NAME.UnlockMonsterInfoRequest, {Ids = ids}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if cb then cb() end
end)
end
function XArchiveManager.UnlockMonsterSkill(ids,cb)
local list = {}
for _,id in pairs(ids or {}) do
if not ArchiveMonsterSkillUnlockIdsList[id] then
tableInsert(list,id)
end
end
if #list == 0 then
return
end
XNetwork.Call(METHOD_NAME.UnlockMonsterSkillRequest, {Ids = ids}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if cb then cb() end
end)
end
function XArchiveManager.UnlockMonsterSetting(ids,cb)
local list = {}
for _,id in pairs(ids or {}) do
if not ArchiveMonsterSettingUnlockIdsList[id] then
tableInsert(list,id)
end
end
if #list == 0 then
return
end
XNetwork.Call(METHOD_NAME.UnlockMonsterSettingRequest, {Ids = ids}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if cb then cb() end
end)
end
--------------------------------怪物图鉴,数据更新相关------------------------------------------<<<
--检查怪物的开放列表以及怪物的从属信息列表,检查是否有关于某个怪的新增,关于某个怪的信息开放
--------------------------------怪物图鉴,数据检查相关------------------------------------------>>>
--------------------------------怪物图鉴,数据检查相关------------------------------------------<<<
-- 武器、意识部分------------------->>>
-- 武器相关
function XArchiveManager.IsWeaponGet(templateId)
return ArchiveWeaponServerData[templateId] ~= nil
end
function XArchiveManager.GetWeaponCollectRate()
local sumNum = XArchiveConfigs.GetWeaponSumCollectNum()
if sumNum == 0 then
return 0
end
local haveNum = 0
for _, _ in pairs(ArchiveWeaponServerData) do
haveNum = haveNum + 1
end
return math.floor(haveNum * 100 / sumNum)
end
-- 武器new标签
function XArchiveManager.IsNewWeapon(templateId)
local isNew = false
if not ArchiveWeaponUnlockServerData[templateId] and ArchiveWeaponServerData[templateId] then
isNew = true
end
return isNew
end
-- 某个武器类型下是否有new标签
function XArchiveManager.IsHaveNewWeaponByWeaponType(type)
return ArchiveWeaponRedPointCountDic[type] > 0
end
-- 武器图鉴是否有new标签
function XArchiveManager.IsHaveNewWeapon()
return ArchiveWeaponTotalRedPointCount > 0
end
-- 武器图鉴是否有红点
function XArchiveManager.IsNewWeaponSetting(templateId)
local newSettingList = ArchiveNewWeaponSettingIdsDic[templateId]
if newSettingList and #newSettingList > 0 then
return true
end
return false
end
function XArchiveManager.IsWeaponSettingOpen(settingId)
return ArchiveWeaponSettingUnlockServerData[settingId] or ArchiveWeaponSettingCanUnlockDic[settingId] == true
end
-- 武器设定有红点的列表,列表可能为空
function XArchiveManager.GetNewWeaponSettingIdList(templateId)
return ArchiveNewWeaponSettingIdsDic[templateId]
end
-- 某个武器类型下是否有红点
function XArchiveManager.IsHaveNewWeaponSettingByWeaponType(type)
return ArchiveWeaponSettingRedPointCountDic[type] > 0
end
-- 武器图鉴是否有红点
function XArchiveManager.IsHaveNewWeaponSetting()
return ArchiveWeaponSettingTotalRedPointCount > 0
end
-- 意识相关
function XArchiveManager.IsAwarenessGet(templateId)
return ArchiveAwarenessServerData[templateId] ~= nil
end
function XArchiveManager.GetAwarenessCollectRate()
local sumNum = XArchiveConfigs.GetAwarenessSumCollectNum()
if sumNum == 0 then
return 0
end
local haveNum = 0
for _, _ in pairs(ArchiveAwarenessServerData) do
haveNum = haveNum + 1
end
return math.floor(haveNum * 100 / sumNum)
end
-- 意识new标签
function XArchiveManager.IsNewAwarenessSuit(suitId)
local isNew = false
if not ArchiveAwarenessSuitUnlockServerData[suitId] and ArchiveAwarenessSuitToAwarenessCountDic[suitId] then
isNew = true
end
return isNew
end
-- 某个意识的获得类型下是否有new标签
function XArchiveManager.IsHaveNewAwarenessSuitByGetType(type)
return ArchiveAwarenessSuitRedPointCountDic[type] > 0
end
-- 意识图鉴是否有new标签
function XArchiveManager.IsHaveNewAwarenessSuit()
return ArchiveAwarenessSuitTotalRedPointCount > 0
end
-- 意识设定是否有红点
function XArchiveManager.IsNewAwarenessSetting(suitId)
local newSettingList = ArchiveNewAwarenessSettingIdsDic[suitId]
if newSettingList and #newSettingList > 0 then
return true
end
return false
end
function XArchiveManager.IsAwarenessSettingOpen(settingId)
return ArchiveAwarenessSettingUnlockServerData[settingId] or ArchiveAwarenessSettingCanUnlockDic[settingId] == true
end
-- 有红点的意识列表
function XArchiveManager.GetNewAwarenessSettingIdList(suitId)
return ArchiveNewAwarenessSettingIdsDic[suitId]
end
-- 意识图鉴是否有红点
function XArchiveManager.IsHaveNewAwarenessSetting()
return ArchiveAwarenessSettingTotalRedPointCount > 0
end
-- 意识的获得类型下是否有红点
function XArchiveManager.IsHaveNewAwarenessSettingByGetType(type)
return ArchiveAwarenessSettingRedPointCountDic[type] > 0
end
function XArchiveManager.GetAwarenessCountBySuitId(suitId)
return ArchiveAwarenessSuitToAwarenessCountDic[suitId] or 0
end
function XArchiveManager.IsEquipGet(templateId)
return XArchiveManager.IsWeaponGet(templateId) or XArchiveManager.IsAwarenessGet(templateId)
end
function XArchiveManager.GetEquipLv(templateId)
local data = ArchiveWeaponServerData[templateId] or ArchiveAwarenessServerData[templateId]
return data and data.Level or 0
end
function XArchiveManager.GetEquipBreakThroughTimes(templateId)
local data = ArchiveWeaponServerData[templateId] or ArchiveAwarenessServerData[templateId]
return data and data.Breakthrough or 0
end
-- 从服务端获取武器和意识相关数据
function XArchiveManager.SetEquipServerData(equipData)
local templateId
local suitId
--只有在配置表中出现id才会记录在本地的serverData
for _, data in ipairs(equipData) do
templateId = data.Id
if XDataCenter.EquipManager.IsWeaponByTemplateId(templateId) and ArchiveWeaponTemplateIdToSettingListDic[templateId] then
ArchiveWeaponServerData[templateId] = data
elseif XDataCenter.EquipManager.IsAwarenessByTemplateId(templateId) and ArchiveAwarenessShowedStatusDic[templateId] then
ArchiveAwarenessServerData[templateId] = data
suitId = XDataCenter.EquipManager.GetSuitIdByTemplateId(templateId)
ArchiveAwarenessSuitToAwarenessCountDic[suitId] = ArchiveAwarenessSuitToAwarenessCountDic[suitId] or 0
ArchiveAwarenessSuitToAwarenessCountDic[suitId] = ArchiveAwarenessSuitToAwarenessCountDic[suitId] + 1
end
end
end
-- 从服务端获取武器和意识相关数据,并判断是否有新的武器或者意识
function XArchiveManager.UpdateEquipServerData(equipData)
local templateId
--只有在配置表中出现id才会记录在本地的serverData
local isNewWeaponSetting = false
local isNewAwarenessSetting = false
local weaponIdList
local awarenessSuitIdList
local suitId
local weaponType
local awarenessSuitGetType
local settingDataList
local settingId
local conditionId
local updateSuitIdDic
for _, data in ipairs(equipData) do
templateId = data.Id
if XDataCenter.EquipManager.IsWeaponByTemplateId(templateId) and ArchiveWeaponTemplateIdToSettingListDic[templateId] then
weaponType = XDataCenter.EquipManager.GetEquipTypeByTemplateId(templateId)
if not ArchiveWeaponUnlockServerData[templateId] then
weaponIdList = weaponIdList or {}
tableInsert(weaponIdList, templateId)
if not ArchiveWeaponServerData[templateId] then
ArchiveWeaponRedPointCountDic[weaponType] = ArchiveWeaponRedPointCountDic[weaponType] + 1
ArchiveWeaponTotalRedPointCount = ArchiveWeaponTotalRedPointCount + 1
end
end
ArchiveWeaponServerData[templateId] = data
settingDataList = XArchiveConfigs.GetWeaponSettingList(templateId)
for _, settingData in ipairs(settingDataList) do
settingId = settingData.Id
conditionId = settingData.Condition
if not ArchiveWeaponSettingUnlockServerData[settingId] then
if not ArchiveWeaponSettingCanUnlockDic[settingId] and XConditionManager.CheckCondition(conditionId, templateId) then
isNewWeaponSetting = true
ArchiveWeaponSettingCanUnlockDic[settingId] = true
ArchiveNewWeaponSettingIdsDic[templateId] = ArchiveNewWeaponSettingIdsDic[templateId] or {}
table.insert(ArchiveNewWeaponSettingIdsDic[templateId], settingId)
ArchiveWeaponSettingRedPointCountDic[weaponType] = ArchiveWeaponSettingRedPointCountDic[weaponType] + 1
ArchiveWeaponSettingTotalRedPointCount = ArchiveWeaponSettingTotalRedPointCount + 1
end
end
end
elseif XDataCenter.EquipManager.IsAwarenessByTemplateId(templateId) and ArchiveAwarenessShowedStatusDic[templateId] then
suitId = XDataCenter.EquipManager.GetSuitIdByTemplateId(templateId)
updateSuitIdDic = updateSuitIdDic or {}
updateSuitIdDic[suitId] = true
if not ArchiveAwarenessServerData[templateId] then
if not ArchiveAwarenessSuitToAwarenessCountDic[suitId] then
awarenessSuitIdList = awarenessSuitIdList or {}
tableInsert(awarenessSuitIdList, suitId)
awarenessSuitGetType = XArchiveConfigs.GetAwarenessSuitInfoGetType(suitId)
ArchiveAwarenessSuitRedPointCountDic[awarenessSuitGetType] = ArchiveAwarenessSuitRedPointCountDic[awarenessSuitGetType] + 1
ArchiveAwarenessSuitTotalRedPointCount = ArchiveAwarenessSuitTotalRedPointCount + 1
end
ArchiveAwarenessSuitToAwarenessCountDic[suitId] = ArchiveAwarenessSuitToAwarenessCountDic[suitId] or 0
ArchiveAwarenessSuitToAwarenessCountDic[suitId] = ArchiveAwarenessSuitToAwarenessCountDic[suitId] + 1
end
ArchiveAwarenessServerData[templateId] = data
end
end
if updateSuitIdDic then
for tmpSuitId, _ in pairs(updateSuitIdDic) do
settingDataList = XArchiveConfigs.GetAwarenessSettingList(tmpSuitId)
for _, settingData in ipairs(settingDataList) do
settingId = settingData.Id
conditionId = settingData.Condition
if not ArchiveAwarenessSettingUnlockServerData[settingId] and
not ArchiveAwarenessSettingCanUnlockDic[settingId] and
XConditionManager.CheckCondition(conditionId, tmpSuitId) then
isNewAwarenessSetting = true
ArchiveAwarenessSettingCanUnlockDic[settingId] = true
ArchiveNewAwarenessSettingIdsDic[tmpSuitId] = ArchiveNewAwarenessSettingIdsDic[tmpSuitId] or {}
table.insert(ArchiveNewAwarenessSettingIdsDic[tmpSuitId], settingId)
awarenessSuitGetType = XArchiveConfigs.GetAwarenessSuitInfoGetType(tmpSuitId)
ArchiveAwarenessSettingRedPointCountDic[awarenessSuitGetType] = ArchiveAwarenessSettingRedPointCountDic[awarenessSuitGetType] + 1
ArchiveAwarenessSettingTotalRedPointCount = ArchiveAwarenessSettingTotalRedPointCount + 1
end
end
end
end
if weaponIdList then
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_NEW_WEAPON, weaponIdList)
end
if isNewWeaponSetting then
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_UNLOCK_WEAPON_SETTING)
end
if awarenessSuitIdList then
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_NEW_AWARENESS_SUIT, awarenessSuitIdList)
end
if isNewAwarenessSetting then
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_UNLOCK_AWARENESS_SETTING)
end
end
function XArchiveManager.UpdateWeaponUnlockServerData(idList)
for _, id in ipairs(idList) do
ArchiveWeaponUnlockServerData[id] = true
end
end
function XArchiveManager.UpdateAwarenessSuitUnlockServerData(idList)
for _, id in ipairs(idList) do
ArchiveAwarenessSuitUnlockServerData[id] = true
end
end
function XArchiveManager.UpdateWeaponSettingUnlockServerData(idList)
for _, id in ipairs(idList) do
ArchiveWeaponSettingUnlockServerData[id] = true
end
end
function XArchiveManager.UpdateAwarenessSettingUnlockServerData(idList)
for _, id in ipairs(idList) do
ArchiveAwarenessSettingUnlockServerData[id] = true
end
end
function XArchiveManager.CreateRedPointCountDic()
local weaponTypeList = XArchiveConfigs.GetShowedWeaponTypeList()
local groupTypeList = XArchiveConfigs.GetAwarenessGroupTypes()
for _,type in ipairs(weaponTypeList) do
ArchiveWeaponRedPointCountDic[type] = 0
ArchiveWeaponSettingRedPointCountDic[type] = 0
end
for _, type in pairs(groupTypeList) do
ArchiveAwarenessSuitRedPointCountDic[type.GroupId] = 0
ArchiveAwarenessSettingRedPointCountDic[type.GroupId] = 0
end
local weaponType
for id, _ in pairs(ArchiveWeaponServerData) do
if not ArchiveWeaponUnlockServerData[id] then
weaponType = XDataCenter.EquipManager.GetEquipTypeByTemplateId(id)
if weaponType then
ArchiveWeaponRedPointCountDic[weaponType] = ArchiveWeaponRedPointCountDic[weaponType] + 1
ArchiveWeaponTotalRedPointCount = ArchiveWeaponTotalRedPointCount + 1
end
end
end
local awarenessGetType
for id, _ in pairs(ArchiveAwarenessSuitToAwarenessCountDic) do
if not ArchiveAwarenessSuitUnlockServerData[id] then
awarenessGetType = XArchiveConfigs.GetAwarenessSuitInfoGetType(id)
if ArchiveAwarenessSuitRedPointCountDic[awarenessGetType] then
ArchiveAwarenessSuitRedPointCountDic[awarenessGetType] = ArchiveAwarenessSuitRedPointCountDic[awarenessGetType] + 1
ArchiveAwarenessSuitTotalRedPointCount = ArchiveAwarenessSuitTotalRedPointCount + 1
end
end
end
local settingDataList
local settingId
for weaponId, _ in pairs(ArchiveWeaponTemplateIdToSettingListDic) do
settingDataList = XArchiveConfigs.GetWeaponSettingList(weaponId)
for _, settingData in ipairs(settingDataList) do
settingId = settingData.Id
if not ArchiveWeaponSettingUnlockServerData[settingId] and XConditionManager.CheckCondition(settingData.Condition, weaponId) then
ArchiveWeaponSettingCanUnlockDic[settingId] = true
weaponType = XDataCenter.EquipManager.GetEquipTypeByTemplateId(weaponId)
ArchiveNewWeaponSettingIdsDic[weaponId] = ArchiveNewWeaponSettingIdsDic[weaponId] or {}
table.insert(ArchiveNewWeaponSettingIdsDic[weaponId],settingId)
ArchiveWeaponSettingRedPointCountDic[weaponType] = ArchiveWeaponSettingRedPointCountDic[weaponType] + 1
ArchiveWeaponSettingTotalRedPointCount = ArchiveWeaponSettingTotalRedPointCount + 1
end
end
end
local getType
for suitId, _ in pairs(ArchiveAwarenessGroupCfg) do
settingDataList = XArchiveConfigs.GetAwarenessSettingList(suitId)
for _, settingData in ipairs(settingDataList) do
settingId = settingData.Id
if not ArchiveAwarenessSettingUnlockServerData[settingId] and XConditionManager.CheckCondition(settingData.Condition, suitId) then
ArchiveAwarenessSettingCanUnlockDic[settingId] = true
getType = XArchiveConfigs.GetAwarenessSuitInfoGetType(suitId)
ArchiveNewAwarenessSettingIdsDic[suitId] = ArchiveNewAwarenessSettingIdsDic[suitId] or {}
table.insert(ArchiveNewAwarenessSettingIdsDic[suitId], settingId)
ArchiveAwarenessSettingRedPointCountDic[getType] = ArchiveAwarenessSettingRedPointCountDic[getType] + 1
ArchiveAwarenessSettingTotalRedPointCount = ArchiveAwarenessSettingTotalRedPointCount + 1
end
end
end
end
function XArchiveManager.RequestUnlockWeapon(idList)
XNetwork.Call(METHOD_NAME.UnlockArchiveWeaponRequest, {Ids = idList}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
end
local successIdList = res.SuccessIds
if successIdList then
local weaponType
for _, id in ipairs(successIdList) do
ArchiveWeaponUnlockServerData[id] = true
weaponType = XDataCenter.EquipManager.GetEquipTypeByTemplateId(id)
ArchiveWeaponRedPointCountDic[weaponType] = ArchiveWeaponRedPointCountDic[weaponType] - 1
end
ArchiveWeaponTotalRedPointCount = ArchiveWeaponTotalRedPointCount - #successIdList
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_UNLOCK_WEAPON)
end
end)
end
function XArchiveManager.HandleCanUnlockWeapon()
local isHaveNew = XArchiveManager.IsHaveNewWeapon()
if isHaveNew then
local idList = {}
for id, _ in pairs(ArchiveWeaponServerData) do
if XArchiveManager.IsNewWeapon(id) then
table.insert(idList, id)
end
end
XArchiveManager.RequestUnlockWeapon(idList)
end
end
function XArchiveManager.HandleCanUnlockWeaponByWeaponType(type)
local isHaveNew = XArchiveManager.IsHaveNewWeaponByWeaponType(type)
if isHaveNew then
local idList = {}
local needCheckIdList = XArchiveConfigs.GetWeaponTemplateIdListByType(type)
if needCheckIdList then
for _, id in ipairs(needCheckIdList) do
if XArchiveManager.IsNewWeapon(id) then
table.insert(idList, id)
end
end
XArchiveManager.RequestUnlockWeapon(idList)
end
end
end
function XArchiveManager.RequestUnlockAwarenessSuit(idList)
XNetwork.Call(METHOD_NAME.UnlockArchiveAwarenessRequest, {Ids = idList}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
end
local successIdList = res.SuccessIds
if successIdList then
local awarenessGetType
for _, id in ipairs(successIdList) do
ArchiveAwarenessSuitUnlockServerData[id] = true
awarenessGetType = XArchiveConfigs.GetAwarenessSuitInfoGetType(id)
ArchiveAwarenessSuitRedPointCountDic[awarenessGetType] = ArchiveAwarenessSuitRedPointCountDic[awarenessGetType] - 1
end
ArchiveAwarenessSuitTotalRedPointCount = ArchiveAwarenessSuitTotalRedPointCount - #successIdList
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_UNLOCK_AWARENESS_SUIT)
end
end)
end
function XArchiveManager.HandleCanUnlockAwarenessSuit()
local isHaveNew = XArchiveManager.IsHaveNewAwarenessSuit()
if isHaveNew then
local idList = {}
for id, _ in pairs(ArchiveAwarenessSuitToAwarenessCountDic) do
if XArchiveManager.IsNewAwarenessSuit(id) then
table.insert(idList, id)
end
end
XArchiveManager.RequestUnlockAwarenessSuit(idList)
end
end
function XArchiveManager.HandleCanUnlockAwarenessSuitByGetType(type)
local isHaveNew = XArchiveManager.IsHaveNewAwarenessSuitByGetType(type)
if isHaveNew then
local typeToGroupDatasDic = XArchiveConfigs.GetAwarenessTypeToGroupDatasDic()
local groupDataList = typeToGroupDatasDic[type]
if groupDataList then
local newSettingId
local requestIdList = {}
for _, groupData in ipairs(groupDataList) do
newSettingId = groupData.Id
if XArchiveManager.IsNewAwarenessSuit(newSettingId) then
tableInsert(requestIdList, newSettingId)
end
end
XArchiveManager.RequestUnlockAwarenessSuit(requestIdList)
end
end
end
function XArchiveManager.CheckWeaponsCollectionLevelUp(type,curLevel)
local oldlevel = XSaveTool.GetData(string.format("%d%s%d", XPlayer.Id, "ArchiveWeaponsCollection",type))
if not oldlevel then
XSaveTool.SaveData(string.format("%d%s%d", XPlayer.Id, "ArchiveWeaponsCollection",type), curLevel)
return false
else
if curLevel > oldlevel then
XSaveTool.SaveData(string.format("%d%s%d", XPlayer.Id, "ArchiveWeaponsCollection",type), curLevel)
return true, oldlevel
else
return false
end
end
end
function XArchiveManager.SaveWeaponsCollectionDefaultData(type,level)
local oldlevel = XSaveTool.GetData(string.format("%d%s%d", XPlayer.Id, "ArchiveWeaponsCollection",type))
if not oldlevel then
XSaveTool.SaveData(string.format("%d%s%d", XPlayer.Id, "ArchiveWeaponsCollection",type), level)
end
end
function XArchiveManager.RequestUnlockWeaponSetting(settingIdList)
XNetwork.Call(METHOD_NAME.UnlockWeaponSettingRequest, {Ids = settingIdList}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
end
local successIdList = res.SuccessIds
if successIdList then
local templateId
local weaponType
local newWeaponSettingIdList
for _, id in ipairs(successIdList) do
ArchiveWeaponSettingUnlockServerData[id] = true
ArchiveWeaponSettingCanUnlockDic[id] = nil
templateId = XArchiveConfigs.GetWeaponTemplateIdBySettingId(id)
weaponType = XDataCenter.EquipManager.GetEquipTypeByTemplateId(templateId)
ArchiveWeaponSettingRedPointCountDic[weaponType] = ArchiveWeaponSettingRedPointCountDic[weaponType] - 1
newWeaponSettingIdList = ArchiveNewWeaponSettingIdsDic[templateId]
if newWeaponSettingIdList then
for index, settingId in ipairs(newWeaponSettingIdList) do
if id == settingId then
table.remove(newWeaponSettingIdList, index)
break
end
end
if #newWeaponSettingIdList == 0 then
ArchiveNewWeaponSettingIdsDic[templateId] = nil
end
end
end
ArchiveWeaponSettingTotalRedPointCount = ArchiveWeaponSettingTotalRedPointCount - #successIdList
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_UNLOCK_WEAPON_SETTING)
end
end)
end
function XArchiveManager.HandleCanUnlockWeaponSetting()
local isHaveNew = XArchiveManager.IsHaveNewWeaponSetting()
if isHaveNew then
local idList = {}
for id, _ in pairs(ArchiveWeaponSettingCanUnlockDic) do
tableInsert(idList, id)
end
XArchiveManager.RequestUnlockWeaponSetting(idList)
end
end
function XArchiveManager.HandleCanUnlockWeaponSettingByWeaponType(type)
local isHaveNew = XArchiveManager.IsHaveNewWeaponSettingByWeaponType(type)
if not isHaveNew then return end
local idList = {}
local needCheckIdList = XArchiveConfigs.GetWeaponTemplateIdListByType(type)
for _, templateId in ipairs(needCheckIdList) do
if ArchiveNewWeaponSettingIdsDic[templateId] then
for _, id in ipairs(ArchiveNewWeaponSettingIdsDic[templateId]) do
tableInsert(idList, id)
end
end
end
XArchiveManager.RequestUnlockWeaponSetting(idList)
end
function XArchiveManager.RequestUnlockAwarenessSetting(settingIdList)
XNetwork.Call(METHOD_NAME.UnlockAwarenessSettingRequest, {Ids = settingIdList}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
end
local successIdList = res.SuccessIds
if successIdList then
local suitId
local getType
local newAwarenessSettingIdList
for _, id in ipairs(successIdList) do
ArchiveAwarenessSettingUnlockServerData[id] = true
ArchiveAwarenessSettingCanUnlockDic[id] = nil
suitId = XArchiveConfigs.GetAwarenessSuitIdBySettingId(id)
getType = XArchiveConfigs.GetAwarenessSuitInfoGetType(suitId)
ArchiveAwarenessSettingRedPointCountDic[getType] = ArchiveAwarenessSettingRedPointCountDic[getType] - 1
newAwarenessSettingIdList = ArchiveNewAwarenessSettingIdsDic[suitId]
if newAwarenessSettingIdList then
for index, settingId in ipairs(newAwarenessSettingIdList) do
if id == settingId then
table.remove(newAwarenessSettingIdList, index)
break
end
end
if #newAwarenessSettingIdList == 0 then
ArchiveNewAwarenessSettingIdsDic[suitId] = nil
end
end
end
ArchiveAwarenessSettingTotalRedPointCount = ArchiveAwarenessSettingTotalRedPointCount - #successIdList
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_UNLOCK_AWARENESS_SETTING)
end
end)
end
function XArchiveManager.HandleCanUnlockAwarenessSetting()
local isHaveNew = XArchiveManager.IsHaveNewAwarenessSetting()
if isHaveNew then
local idList = {}
for id, _ in pairs(ArchiveAwarenessSettingCanUnlockDic) do
tableInsert(idList, id)
end
XArchiveManager.RequestUnlockAwarenessSetting(idList)
end
end
function XArchiveManager.HandleCanUnlockAwarenessSettingByGetType(type)
local isHaveNew = XArchiveManager.IsHaveNewAwarenessSettingByGetType(type)
if not isHaveNew then return end
local typeToGroupDatasDic = XArchiveConfigs.GetAwarenessTypeToGroupDatasDic()
local groupDataList = typeToGroupDatasDic[type]
if groupDataList then
local newSettingIdList
local requestIdList = {}
for _, groupData in ipairs(groupDataList) do
newSettingIdList = ArchiveNewAwarenessSettingIdsDic[groupData.Id]
if newSettingIdList then
for _, id in ipairs(newSettingIdList) do
tableInsert(requestIdList, id)
end
end
end
XArchiveManager.RequestUnlockAwarenessSetting(requestIdList)
end
end
-- 武器、意识部分-------------------<<<
-- 剧情相关------------->>>
function XArchiveManager.InitArchiveStoryChapterList()
for _, chapter in pairs(ArchiveStoryChapterCfg or {}) do
if not ArchiveStoryChapterList[chapter.GroupId] then
ArchiveStoryChapterList[chapter.GroupId] = {}
end
local tmp = XArchiveStoryChapterEntity.New(chapter.Id)
table.insert(ArchiveStoryChapterList[chapter.GroupId], tmp)
end
for _,group in pairs(ArchiveStoryChapterList) do
XArchiveConfigs.SortByOrder(group)
end
end
function XArchiveManager.InitArchiveStoryDetailAllList()
for _, detail in pairs(ArchiveStoryDetailCfg or {}) do
if not ArchiveStoryDetailList[detail.ChapterId] then
ArchiveStoryDetailList[detail.ChapterId] = {}
end
local tmp = XArchiveStoryDetailEntity.New(detail.Id)
table.insert(ArchiveStoryDetailList[detail.ChapterId], tmp)
end
for _,group in pairs(ArchiveStoryDetailList) do
XArchiveConfigs.SortByOrder(group)
end
end
function XArchiveManager.GetArchiveStoryGroupList()
return ArchiveStoryGroupList
end
function XArchiveManager.GetArchiveStoryEvaluate(id)
return ArchiveStoryEvaluateList[id] or {}
end
function XArchiveManager.GetArchiveStoryMySelfEvaluate(id)
return ArchiveStoryMySelfEvaluateList[id] or {}
end
function XArchiveManager.GetArchiveStoryEvaluateList()
return ArchiveStoryEvaluateList
end
function XArchiveManager.GetArchiveStoryMySelfEvaluateList()
return ArchiveStoryMySelfEvaluateList
end
function XArchiveManager.GetStoryCollectRate()
local storyDetailList = XArchiveManager.GetArchiveStoryDetailList()
if #storyDetailList < 1 then
return 0
end
local unlockCount = 0
for _,v in pairs(storyDetailList or {}) do
if not v:GetIsLock() then
unlockCount = unlockCount + 1
end
end
return math.floor((unlockCount/#storyDetailList)*100)
end
function XArchiveManager.GetArchiveStoryChapterList(groupId)--groupId为空时不作为判断条件
if groupId then
return ArchiveStoryChapterList[groupId] or {}
end
local list = {}
for _,group in pairs(ArchiveStoryChapterList or {}) do
for _,chapter in pairs(group) do
tableInsert(list,chapter)
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetArchiveStoryDetailList(chapterId)--chapterId为空时不作为判断条件
if chapterId then
return ArchiveStoryDetailList[chapterId] or {}
end
local list = {}
for _,group in pairs(ArchiveStoryDetailList or {}) do
for _,detail in pairs(group) do
tableInsert(list,detail)
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetArchiveStoryDetailIdList(chapterId)
local list = {}
for _,detail in pairs(ArchiveStoryDetailList[chapterId] or {}) do
tableInsert(list,detail:GetId())
end
return list
end
function XArchiveManager.SetArchiveStoryEvaluate(likes)
for _,like in pairs(likes or {}) do
if like and like.Id then
ArchiveStoryEvaluateList[like.Id] = like
end
end
end
function XArchiveManager.SetArchiveStoryMySelfEvaluate(mySelfLikes)
for _,myLike in pairs(mySelfLikes or {}) do
if myLike and myLike.Id then
ArchiveStoryMySelfEvaluateList[myLike.Id] = myLike
end
end
end
function XArchiveManager.SetArchiveStoryMySelfEvaluateLikeStatus(id,likeState)
if not ArchiveStoryMySelfEvaluateList[id] then
ArchiveStoryMySelfEvaluateList[id] ={}
end
ArchiveStoryMySelfEvaluateList[id].LikeStatus = likeState
end
function XArchiveManager.UpdateStoryData()
XArchiveManager.UpdateStoryDetailList()
XArchiveManager.UpdateStoryChapterList()
end
function XArchiveManager.UpdateStoryChapterList()--更新图鉴剧情关卡列表数据
for _,chapterList in pairs(ArchiveStoryChapterList or {}) do
for _,chapter in pairs(chapterList or {}) do
local IsUnLock = false
local lockDes = CS.XTextManager.GetText("StoryArchiveErrorHint")
local storyDetailList = XArchiveManager.GetArchiveStoryDetailList(chapter:GetId())
for _,detail in pairs(storyDetailList or {}) do
IsUnLock = IsUnLock or (not detail:GetIsLock())
if IsUnLock then
break
end
end
local tmpData = {}
tmpData.IsLock = not IsUnLock
local FirstIndex = 1
local storyDetail = storyDetailList[FirstIndex]
if storyDetail and storyDetail:GetLockDesc() then
tmpData.LockDesc = storyDetail:GetLockDesc()
else
tmpData.LockDesc = lockDes
XLog.Error("detail is nil or LockDesc is nil by chapterId:" .. chapter:GetId())
end
chapter:UpdateData(tmpData)
end
end
end
function XArchiveManager.UpdateStoryDetailList()--更新图鉴剧情详细列表数据
for _,detailList in pairs(ArchiveStoryDetailList or {}) do
for _,detail in pairs(detailList or {}) do
local IsUnLock = false
local lockDes = ""
local nowTime = XTime.GetServerNowTimestamp()
local unLockTime = detail:GetUnLockTime() and XTime.ParseToTimestamp(detail:GetUnLockTime()) or 0
local IsPassCondition = (unLockTime ~= 0) and (nowTime > unLockTime)
if detail:GetCondition() == 0 or IsPassCondition then
IsUnLock = true
else
IsUnLock, lockDes = XConditionManager.CheckCondition(detail:GetCondition())
end
local tmpData = {}
tmpData.IsLock = not IsUnLock
tmpData.LockDesc = lockDes
detail:UpdateData(tmpData)
end
end
end
function XArchiveManager.GetStoryEvaluateFromSever(chapterId,Ids, cb)
local now = XTime.GetServerNowTimestamp()
local syscTime = LastSyncStoryEvaluateTimes[chapterId]
if syscTime and now - syscTime < SYNC_EVALUATE_SECOND then
if cb then
cb()
return
end
end
XNetwork.Call(METHOD_NAME.GetStoryEvaluateRequest, {Ids = Ids}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XArchiveManager.SetArchiveStoryEvaluate(res.Likes)
XArchiveManager.SetArchiveStoryMySelfEvaluate(res.PersonalLikes)
LastSyncStoryEvaluateTimes[chapterId] = XTime.GetServerNowTimestamp()
if cb then cb() end
end)
end
function XArchiveManager.StoryGiveLike(likeList ,cb)
local type = XArchiveConfigs.SubSystemType.Story
XNetwork.Call(METHOD_NAME.ArchiveGiveLikeRequest, {LikeList = likeList ,Type = type}, function(res)
if cb then cb() end
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
for _,id in pairs(res.SuccessIds or {}) do
for _,like in pairs(likeList or {}) do
if id == like.Id then
XArchiveManager.SetArchiveStoryMySelfEvaluateLikeStatus(id,like.LikeStatus)
end
end
end
end)
end
-- 剧情相关-------------<<<
-- Npc相关------------->>>
function XArchiveManager.InitArchiveStoryNpcAllList()--创建图鉴Npc数据
for _, npcCfg in pairs(ArchiveStoryNpcCfg or {}) do
local tmp = XArchiveNpcEntity.New(npcCfg.Id)
table.insert(ArchiveStoryNpcList, tmp)
end
XArchiveConfigs.SortByOrder(ArchiveStoryNpcList)
end
function XArchiveManager.InitArchiveStoryNpcSettingAllList()--创建图鉴NpcSetting数据
for _, settingCfg in pairs(ArchiveStoryNpcSettingCfg or {}) do
if not ArchiveStoryNpcSettingList[settingCfg.GroupId] then
ArchiveStoryNpcSettingList[settingCfg.GroupId] = {}
end
if not ArchiveStoryNpcSettingList[settingCfg.GroupId][settingCfg.Type] then
ArchiveStoryNpcSettingList[settingCfg.GroupId][settingCfg.Type] = {}
end
local tmp = XArchiveNpcDetailEntity.New(settingCfg.Id)
table.insert(ArchiveStoryNpcSettingList[settingCfg.GroupId][settingCfg.Type], tmp)
end
for _,group in pairs(ArchiveStoryNpcSettingList) do
for _,type in pairs(group) do
XArchiveConfigs.SortByOrder(type)
end
end
end
function XArchiveManager.UpdateStoryNpcList()--更新图鉴Npc数据
for _,npc in pairs(ArchiveStoryNpcList or {}) do
local IsUnLock = false
local lockDes = ""
local nowTime = XTime.GetServerNowTimestamp()
local unLockTime = npc:GetUnLockTime() and XTime.ParseToTimestamp(npc:GetUnLockTime()) or 0
local IsPassCondition = (unLockTime ~= 0) and (nowTime > unLockTime)
if npc:GetCondition() == 0 or IsPassCondition then
IsUnLock = true
else
IsUnLock, lockDes = XConditionManager.CheckCondition(npc:GetCondition())
end
local tmpData = {}
tmpData.IsLock = not IsUnLock
tmpData.LockDesc = lockDes
npc:UpdateData(tmpData)
end
end
function XArchiveManager.UpdateStoryNpcSettingList()--更新图鉴NpcSetting数据
for _,settingGroupList in pairs(ArchiveStoryNpcSettingList or {}) do
for _,settingList in pairs(settingGroupList or {}) do
for _,setting in pairs(settingList or {}) do
local IsUnLock
local lockDes = ""
local nowTime = XTime.GetServerNowTimestamp()
local unLockTime = setting:GetUnLockTime() and XTime.ParseToTimestamp(setting:GetUnLockTime()) or 0
local IsPassCondition = (unLockTime ~= 0) and (nowTime > unLockTime)
if setting:GetCondition() == 0 or IsPassCondition then
IsUnLock = true
else
IsUnLock, lockDes = XConditionManager.CheckCondition(setting:GetCondition())
end
local tmpData = {}
tmpData.IsLock = not IsUnLock
tmpData.LockDesc = lockDes
setting:UpdateData(tmpData)
end
end
end
end
function XArchiveManager.UpdateStoryNpcData()
XArchiveManager.UpdateStoryNpcList()
XArchiveManager.UpdateStoryNpcSettingList()
end
function XArchiveManager.GetArchiveStoryNpcList()
return ArchiveStoryNpcList or {}
end
function XArchiveManager.GetArchiveStoryNpcSettingList(group,type)--type为空时不作为判断条件获取相应类型的图鉴Npc设定列表
if type then
return ArchiveStoryNpcSettingList[group] and ArchiveStoryNpcSettingList[group][type] or {}
end
local list = {}
for _,settingList in pairs(ArchiveStoryNpcSettingList[group]) do
for _,setting in pairs(settingList) do
tableInsert(list,setting)
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetNPCCompletionRate()
local npcList = XArchiveManager.GetArchiveStoryNpcList()
if #npcList < 1 then
return 0
end
local unlockCount = 0
for _,v in pairs(npcList or {}) do
if not v:GetIsLock() then
unlockCount = unlockCount + 1
end
end
return math.floor((unlockCount/#npcList)*100)
end
-- Npc相关-------------<<<
-- CG相关------------->>>
function XArchiveManager.InitArchiveCGAllList()--创建图鉴NpcSetting数据
for _, CGDetailCfg in pairs(ArchiveCGDetailCfg or {}) do
if not ArchiveCGDetailList[CGDetailCfg.GroupId] then
ArchiveCGDetailList[CGDetailCfg.GroupId] = {}
end
local tmp = XArchiveCGEntity.New(CGDetailCfg.Id)
table.insert(ArchiveCGDetailList[CGDetailCfg.GroupId], tmp)
ArchiveCGDetailData[CGDetailCfg.Id] = tmp
end
for _,group in pairs(ArchiveCGDetailList) do
XArchiveConfigs.SortByOrder(group)
end
end
function XArchiveManager.SetArchiveShowedCGList(idList)
for _,id in pairs(idList or {}) do
ArchiveShowedCGList[id] = id
end
end
function XArchiveManager.UpdateCGAllList()--更新图鉴Npc数据
for _,group in pairs(ArchiveCGDetailList or {}) do
for _,CGDetail in pairs(group) do
local lockDes = ""
local IsUnLock = ""
if ArchiveShowedCGList[CGDetail:GetId()] then
IsUnLock = true
else
if CGDetail:GetCondition() ~= 0 then
_,lockDes = XConditionManager.CheckCondition(CGDetail:GetCondition())
end
IsUnLock = false
end
local tmpData = {}
tmpData.IsLock = not IsUnLock
tmpData.LockDesc = lockDes
CGDetail:UpdateData(tmpData)
end
end
end
function XArchiveManager.GetArchiveCGGroupList()
local list = {}
for _,group in pairs(ArchiveCGGroupCfg) do
tableInsert(list,group)
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetArchiveCGDetailList(group)--group为空时不作为判断条件获取相应类型的图鉴CG列表
if group then
return ArchiveCGDetailList[group] and ArchiveCGDetailList[group] or {}
end
local list = {}
for _,CGDetailGroup in pairs(ArchiveCGDetailList) do
for _,CGDetail in pairs(CGDetailGroup) do
tableInsert(list,CGDetail)
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetCGCompletionRate(type)
local CGList = XArchiveManager.GetArchiveCGDetailList(type)
if #CGList < 1 then
return 0
end
local unlockCount = 0
for _,v in pairs(CGList or {}) do
if not v:GetIsLock() then
unlockCount = unlockCount + 1
end
end
return math.floor((unlockCount/#CGList)*100)
end
function XArchiveManager.CheckCGRedPointByGroup(groupId)
local list = XArchiveManager.GetArchiveCGDetailList(groupId)
for _,cgDetail in pairs(list) do
if XArchiveManager.CheckCGRedPoint(cgDetail:GetId()) then
return true
end
end
return false
end
function XArchiveManager.ClearCGRedPointByGroup(groupId)
local list = XArchiveManager.GetArchiveCGDetailList(groupId)
for _,cgDetail in pairs(list) do
XArchiveManager.ClearCGRedPoint(cgDetail:GetId())
end
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_MARK_CG)
end
function XArchiveManager.ClearCGRedPointById(id)
XArchiveManager.ClearCGRedPoint(id)
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_MARK_CG)
end
function XArchiveManager.CheckCGRedPoint(id)
if XSaveTool.GetData(string.format("%d%s%d", XPlayer.Id, "ArchiveCG",id)) then
return true
else
return false
end
end
function XArchiveManager.AddNewCGRedPoint(idList)
for _,id in pairs(idList) do
if ArchiveCGDetailData[id] and ArchiveCGDetailData[id]:GetIsShowRedPoint() == 1 then
if not XSaveTool.GetData(string.format("%d%s%d", XPlayer.Id, "ArchiveCG",id)) then
XSaveTool.SaveData(string.format("%d%s%d", XPlayer.Id, "ArchiveCG",id), id)
end
end
end
end
function XArchiveManager.ClearCGRedPoint(id)
if XSaveTool.GetData(string.format("%d%s%d", XPlayer.Id, "ArchiveCG",id)) then
XSaveTool.RemoveData(string.format("%d%s%d", XPlayer.Id, "ArchiveCG",id))
end
end
-- CG相关-------------<<<
-- 邮件通讯相关------------->>>
function XArchiveManager.InitArchiveMailList()--创建图鉴邮件数据
for _, mailCfg in pairs(ArchiveMailCfg or {}) do
if not ArchiveMailList[mailCfg.GroupId] then
ArchiveMailList[mailCfg.GroupId] = {}
end
local tmp = XArchiveMailEntity.New(mailCfg.Id)
table.insert(ArchiveMailList[mailCfg.GroupId], tmp)
end
for _,group in pairs(ArchiveMailList) do
XArchiveConfigs.SortByOrder(group)
end
end
function XArchiveManager.InitArchiveCommunicationList()--创建图鉴通讯数据
for _, communicationCfg in pairs(ArchiveCommunicationCfg or {}) do
if not ArchiveCommunicationList[communicationCfg.GroupId] then
ArchiveCommunicationList[communicationCfg.GroupId] = {}
end
local tmp = XArchiveCommunicationEntity.New(communicationCfg.Id)
table.insert(ArchiveCommunicationList[communicationCfg.GroupId], tmp)
end
for _,group in pairs(ArchiveCommunicationList) do
XArchiveConfigs.SortByOrder(group)
end
end
function XArchiveManager.UpdateMailList()--更新邮件数据
for _,group in pairs(ArchiveMailList or {}) do
for _,mail in pairs(group) do
local IsUnLock = false
local lockDes = ""
local nowTime = XTime.GetServerNowTimestamp()
local unLockTime = mail:GetUnLockTime() and XTime.ParseToTimestamp(mail:GetUnLockTime()) or 0
local IsInUnLockTime = (unLockTime == 0) or (nowTime > unLockTime)
if not IsInUnLockTime then
lockDes = CS.XTextManager.GetText("ArchiveNotUnLockTime")
IsUnLock = false
else
if mail:GetCondition() == 0 then
IsUnLock = true
else
IsUnLock, lockDes = XConditionManager.CheckCondition(mail:GetCondition())
end
end
local tmpData = {}
tmpData.IsLock = not IsUnLock
tmpData.LockDesc = lockDes
mail:UpdateData(tmpData)
end
end
end
function XArchiveManager.UpdateCommunicationList()--更新通讯数据
for _,group in pairs(ArchiveCommunicationList or {}) do
for _,communication in pairs(group) do
local IsUnLock = false
local lockDes = ""
local nowTime = XTime.GetServerNowTimestamp()
local unLockTime = communication:GetUnLockTime() and XTime.ParseToTimestamp(communication:GetUnLockTime()) or 0
local IsPassCondition = (unLockTime ~= 0) and (nowTime > unLockTime)
if communication:GetCondition() == 0 or IsPassCondition then
IsUnLock = XPlayer.IsCommunicationMark(communication:GetCommunicationId())
else
IsUnLock, lockDes = XConditionManager.CheckCondition(communication:GetCondition())
end
local tmpData = {}
tmpData.IsLock = not IsUnLock
tmpData.LockDesc = lockDes
communication:UpdateData(tmpData)
end
end
end
function XArchiveManager.UpdateMailAndCommunicationData()
XArchiveManager.UpdateMailList()
XArchiveManager.UpdateCommunicationList()
end
function XArchiveManager.GetArchiveCommunicationList(group)--group为空时不作为判断条件
local list = {}
if group then
if ArchiveCommunicationList and ArchiveCommunicationList[group] then
for _,communication in pairs(ArchiveCommunicationList[group]) do
if not communication:GetIsLock() then
tableInsert(list,communication)
end
end
end
return XArchiveConfigs.SortByOrder(list)
end
for _,communicationList in pairs(ArchiveCommunicationList) do
for _,communication in pairs(communicationList) do
if not communication:GetIsLock() then
tableInsert(list,communication)
end
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetArchiveMailList(group)--group为空时不作为判断条件
local list = {}
if group then
if ArchiveMailList and ArchiveMailList[group] then
for _,mail in pairs(ArchiveMailList[group]) do
if not mail:GetIsLock() then
tableInsert(list,mail)
end
end
end
return XArchiveConfigs.SortByOrder(list)
end
for _,mailList in pairs(ArchiveMailList) do
for _,mail in pairs(mailList) do
if not mail:GetIsLock() then
tableInsert(list,mail)
end
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetEventDateGroupList()
local list = {}
for _,group in pairs(EventDateGroupCfg) do
list[group.GroupType] = list[group.GroupType] or {}
tableInsert(list[group.GroupType],group)
end
for _,group in pairs(list)do
XArchiveConfigs.SortByOrder(group)
end
return list
end
-- 邮件通讯相关-------------<<<
--------------------------------伙伴图鉴相关------------------------------------------>>>
function XArchiveManager.InitArchivePartnerSetting()
ArchivePartnerSettingList = {}
local detailCfg = XArchiveConfigs.GetPartnerSettingConfigs()
for _, detail in pairs(detailCfg or {}) do
if not ArchivePartnerSettingList[detail.GroupId] then
ArchivePartnerSettingList[detail.GroupId] = {}
end
if not ArchivePartnerSettingList[detail.GroupId][detail.Type] then
ArchivePartnerSettingList[detail.GroupId][detail.Type] = {}
end
local tmp = XArchivePartnerSettingEntity.New(detail.Id)
table.insert(ArchivePartnerSettingList[detail.GroupId][detail.Type], tmp)
end
for _,group in pairs(ArchivePartnerSettingList) do
for _,type in pairs(group) do
XArchiveConfigs.SortByOrder(type)
end
end
end
function XArchiveManager.InitArchivePartnerList()--生成图鉴伙伴数据
ArchivePartnerList = {}
local templateList = XArchiveConfigs.GetPartnerConfigs()
for _,template in pairs(templateList or {}) do
if not ArchivePartnerList[template.GroupId] then
ArchivePartnerList[template.GroupId] = {}
end
local entity = XArchivePartnerEntity.New(template.Id,
XArchiveManager.GetArchivePartnerSetting(template.Id,XArchiveConfigs.PartnerSettingType.Story),
XArchiveManager.GetArchivePartnerSetting(template.Id,XArchiveConfigs.PartnerSettingType.Setting))
table.insert(ArchivePartnerList[template.GroupId],entity)
end
for _,group in pairs(ArchivePartnerList) do
XArchiveConfigs.SortByOrder(group)
end
end
function XArchiveManager.UpdateArchivePartnerList()--更新图鉴伙伴数据
for _,group in pairs(ArchivePartnerList or {}) do
for _,partner in pairs(group) do
local IsUnLock = false
if PartnerUnLockDic[partner:GetTemplateId()] then
IsUnLock = true
end
partner:UpdateData({IsArchiveLock = not IsUnLock})
end
end
end
function XArchiveManager.UpdateArchivePartnerSettingList()--更新图鉴伙伴设定数据
for _,group in pairs(ArchivePartnerList or {}) do
for _,partner in pairs(group) do
partner:UpdateStoryAndSettingEntity(PartnerUnLockSettingDic)
end
end
end
function XArchiveManager.UpdateUnLockPartnerDic(dataList)
for _,data in pairs(dataList) do
if not PartnerUnLockDic[data] then
PartnerUnLockDic[data] = data
end
end
end
function XArchiveManager.UpdateUnLockPartnerSettingDic(dataList)
for _,data in pairs(dataList) do
if not PartnerUnLockSettingDic[data] then
PartnerUnLockSettingDic[data] = data
end
end
end
function XArchiveManager.GetPartnerUnLockDic()
return PartnerUnLockDic
end
function XArchiveManager.GetPartnerUnLockById(templateId)
return PartnerUnLockDic[templateId]
end
function XArchiveManager.GetPartnerSettingUnLockDic()
return PartnerUnLockSettingDic
end
function XArchiveManager.GetPartnerGroupList()
local list = {}
local groupConfigs = XArchiveConfigs.GetPartnerGroupConfigs()
for groupId,_ in pairs(ArchivePartnerList) do
if groupConfigs[groupId] then
table.insert(list,groupConfigs[groupId])
end
end
XArchiveConfigs.SortByOrder(list)
return list
end
function XArchiveManager.GetArchivePartnerList(group)
if group then
return ArchivePartnerList[group] and ArchivePartnerList[group] or {}
end
local list = {}
for _,partnerGroup in pairs(ArchivePartnerList) do
for _,partner in pairs(partnerGroup) do
tableInsert(list,partner)
end
end
return XArchiveConfigs.SortByOrder(list)
end
function XArchiveManager.GetArchivePartnerSetting(partnerTemplateId,type)
local settingList = ArchivePartnerSettingList[partnerTemplateId]
if not settingList then
XLog.Error("Id is not exist in Share/Archive/PartnerSetting.tab".." id = " .. partnerTemplateId)
return
end
local setting = settingList[type]
if not setting then
return
end
return XArchiveConfigs.SortByOrder(setting)
end
function XArchiveManager.GetPartnerCompletionRate(type)
local partnerList = XArchiveManager.GetArchivePartnerList(type)
if #partnerList < 1 then
return 0
end
local unlockCount = 0
for _,v in pairs(partnerList or {}) do
if not v:GetIsArchiveLock() then
unlockCount = unlockCount + 1
end
end
return math.floor((unlockCount/#partnerList)*100)
end
-- 根据npcId获取monsterId
-- PS:XArchiveConfigs.GetSameNpcId该方法关联配置的Npc的会计入图鉴击杀计算内
-- PS:这里两张表的配置其实是强关联,详细配法最好问图鉴相关负责人
-- PS:以后根据NpcId获取MonsterId时不要直接走ArchiveNpcToMonster变量
function XArchiveManager.GetMonsterIdByNpcId(npcId)
local sameNpcId = XArchiveConfigs.GetSameNpcId(npcId)
return ArchiveNpcToMonster[sameNpcId]
end
--------------------------------伙伴图鉴相关------------------------------------------<<<
XArchiveManager.Init()
return XArchiveManager
end
XRpc.NotifyArchiveLoginData = function(data)
XDataCenter.ArchiveManager.SetArchiveShowedMonsterList(data.Monsters)
XDataCenter.ArchiveManager.SetArchiveMonsterSettingUnlockIdsList(data.MonsterSettings)
XDataCenter.ArchiveManager.SetArchiveMonsterUnlockIdsList(data.MonsterUnlockIds)
XDataCenter.ArchiveManager.SetArchiveMonsterInfoUnlockIdsList(data.MonsterInfos)
XDataCenter.ArchiveManager.SetArchiveMonsterSkillUnlockIdsList(data.MonsterSkills)
XDataCenter.ArchiveManager.SetEquipServerData(data.Equips)
XDataCenter.ArchiveManager.SetArchiveShowedCGList(data.UnlockCgs)
XDataCenter.ArchiveManager.UpdateWeaponUnlockServerData(data.WeaponUnlockIds)
XDataCenter.ArchiveManager.UpdateAwarenessSuitUnlockServerData(data.AwarenessUnlockIds)
XDataCenter.ArchiveManager.UpdateWeaponSettingUnlockServerData(data.WeaponSettings)
XDataCenter.ArchiveManager.UpdateAwarenessSettingUnlockServerData(data.AwarenessSettings)
XDataCenter.ArchiveManager.UpdateUnLockPartnerSettingDic(data.PartnerSettings)
XDataCenter.ArchiveManager.UpdateUnLockPartnerDic(data.PartnerUnlockIds)
XDataCenter.ArchiveManager.UpdateMonsterData()
XDataCenter.ArchiveManager.UpdateCGAllList()
XDataCenter.ArchiveManager.CreateRedPointCountDic()
XDataCenter.PartnerManager.UpdateAllPartnerStory()
XDataCenter.ArchiveManager.UpdateArchivePartnerList()
XDataCenter.ArchiveManager.UpdateArchivePartnerSettingList()
end
XRpc.NotifyArchiveMonsterRecord = function(data)
XDataCenter.ArchiveManager.AddArchiveShowedMonsterList(data.Monsters)
XDataCenter.ArchiveManager.UpdateMonsterData()
end
XRpc.NotifyArchiveCgs = function(data)
XDataCenter.ArchiveManager.SetArchiveShowedCGList(data.UnlockCgs)
XDataCenter.ArchiveManager.UpdateCGAllList()
XDataCenter.ArchiveManager.AddNewCGRedPoint(data.UnlockCgs)
XEventManager.DispatchEvent(XEventId.EVENET_ARCHIVE_NEW_CG)
end
-----------------武器、意识相关------------------->>>
XRpc.NotifyArchiveEquip = function(data)
XDataCenter.ArchiveManager.UpdateEquipServerData(data.Equips)
end
-----------------武器、意识相关-------------------<<<
-----------------伙伴相关------------------->>>
XRpc.NotifyArchivePartners = function(data)
XDataCenter.ArchiveManager.UpdateUnLockPartnerDic(data.PartnerUnlockIds)
XDataCenter.ArchiveManager.UpdateArchivePartnerList()
end
XRpc.NotifyPartnerSettings = function(data)
XDataCenter.ArchiveManager.UpdateUnLockPartnerSettingDic(data.PartnerSettings)
XDataCenter.ArchiveManager.UpdateArchivePartnerSettingList()
XDataCenter.PartnerManager.UpdateAllPartnerStory()
end
-----------------伙伴相关-------------------<<<