PGRData/Script/matrix/xmanager/XFubenAwarenessManager.lua

808 lines
32 KiB
Lua
Raw Permalink Normal View History

2024-09-01 20:49:41 +00:00
local XExFubenSimulationChallengeManager = require("XEntity/XFuben/XExFubenSimulationChallengeManager")
local XAwarenessChapter = require("XEntity/XAwareness/XAwarenessChapter")
local XAwarenessTeam = require("XEntity/XAwareness/XAwarenessTeam")
--- 意识公约管理器
XFubenAwarenessManagerCreator = function()
local XFubenAwarenessManager = {}
XFubenAwarenessManager.CAPTIAN_MEMBER_INDEX = 1 -- 队长位置
XFubenAwarenessManager.FIRSTFIGHT_MEMBER_INDEX = 1 -- 首发位置
local MEMBER_MAX_COUNT = 3 -- 队伍最大成员数
-- 自定义数据
local ChapterIdList = nil
local ChapterDataDict = nil -- 章节
local TeamDataDict = nil -- 队伍
local LoadingData = nil
local ChapterFirstPassTrigger = nil
--- 服务器下发确认的数据
local ChapterTeamRecords = {}
local ChapterTeamRecordsDic = {} -- ChapterTeamRecords 的重定义字典
local FinishStageIds = {}
local FinishStageIdDic = {}
------ 战斗接口用的数据
local FinishFightCb = nil
local CloseLoadingCb = nil
-- local MEMBER_INDEX_BY_ORDER = {[1] = 2, [2] = 1, [3] = 3} -- 面板上显示的位置(order) = 队伍中实际中的位置(index)
local MEMBER_ORDER_BY_INDEX = {[1] = 2, [2] = 1, [3] = 3 } -- 队伍中实际中的位置(index) = 面板上显示的位置(order)
local ChapterIdByStageId = nil -- {[stageId] = chapterId, ...}
local FollowGroupDict = nil -- {[前置组id] = {后置组id, ...}, ...}
function XFubenAwarenessManager.Init()
end
function XFubenAwarenessManager.GetChapterFirstPassTrigger()
if ChapterFirstPassTrigger then
local tempData = ChapterFirstPassTrigger
ChapterFirstPassTrigger = nil
return tempData
end
end
-- 角色是否已在占领
function XFubenAwarenessManager.CheckCharacterInOccupy(characterId)
local chapterData
for _, id in ipairs(XFubenAwarenessManager.GetChapterIdList()) do
chapterData = XFubenAwarenessManager.GetChapterDataById(id)
if chapterData:GetCharacterId() == characterId then
return true, id
end
end
return false
end
function XFubenAwarenessManager.GetChapterDataById(id)
if not id then
XLog.Error("XFubenAwarenessManager.GetChapterDataById函数参数id不能为空" .. tostring(id))
return
end
if not ChapterDataDict then
ChapterDataDict = {}
end
if not ChapterDataDict[id] then
ChapterDataDict[id] = XAwarenessChapter.New(id)
end
return ChapterDataDict[id]
end
-- 根据意识位拿chapter
function XFubenAwarenessManager.GetChapterDataBySiteNum(siteNum)
local chapterId = XFubenAwarenessManager.GetChapterIdList()[siteNum]
return XFubenAwarenessManager.GetChapterDataById(chapterId)
end
function XFubenAwarenessManager.GetCurrentChapterData()
local idList = XFubenAwarenessManager.GetChapterIdList()
for _, chapterId in ipairs(idList) do
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
if not chapterData:IsPass() then
return chapterData
end
end
return XFubenAwarenessManager.GetChapterDataById(idList[#idList])
end
function XFubenAwarenessManager.GetChapterIdList()
if XTool.IsTableEmpty(ChapterIdList) then
ChapterIdList = {}
for chapterId, v in pairs(XFubenAwarenessConfigs.GetAllConfigs(XFubenAwarenessConfigs.TableKey.AwarenessChapter)) do
table.insert(ChapterIdList, chapterId)
end
table.sort(ChapterIdList, function(a, b)
local chapterA = XFubenAwarenessManager.GetChapterDataById(a)
local chapterB = XFubenAwarenessManager.GetChapterDataById(b)
return chapterA:GetCfg().Site < chapterB:GetCfg().Site
end)
end
return ChapterIdList
end
function XFubenAwarenessManager.GetAllChapterOccupyNum()
local count = 0
for _, chapterId in ipairs(XFubenAwarenessManager.GetChapterIdList()) do
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
if chapterData:IsOccupy() then
count = count + 1
end
end
return count
end
function XFubenAwarenessManager.GetChapterProgressTxt()
local chapterData = XFubenAwarenessManager.GetCurrentChapterData()
return CS.XTextManager.GetText("AssignChapterProgressTxt", chapterData:GetDesc())
end
function XFubenAwarenessManager.GetCharacterOccupyChapterId(characterId)
if characterId and characterId ~= 0 then
for _, chapterId in ipairs(XFubenAwarenessManager.GetChapterIdList()) do
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
if chapterData:GetCharacterId() == characterId then
return chapterId
end
end
end
return nil
end
-- 检查该group是否有服务器记录过队伍数据
function XFubenAwarenessManager.CheckChapterHadRecordTeam(chapterId)
return ChapterTeamRecordsDic[chapterId]
end
-- 检查该group是否有服务器记录过队伍数据
function XFubenAwarenessManager.GetChapterTeamRecords()
return ChapterTeamRecords
end
function XFubenAwarenessManager.GetFinishStageIds()
return FinishStageIds
end
function XFubenAwarenessManager.CheckStageFinish(stageId)
return FinishStageIdDic[stageId]
end
-- 角色是否已在队伍中
function XFubenAwarenessManager.CheckCharacterInTeam(characterId)
for _, teamData in pairs(TeamDataDict) do
if teamData:GetCharacterOrder(characterId) ~= nil then
return true
end
end
return false
end
-- 该角色是否已有关卡进度 压制
function XFubenAwarenessManager.CheckCharacterInMultiTeamLock(characterId, groupId)
local chapterData = XFubenAwarenessManager.GetChapterDataById(groupId)
local isIn, teamData, teamOrder = XFubenAwarenessManager.CheckCharacterInCurChapterTeam(characterId, groupId)
local stageList = chapterData:GetStageId()
local stageId = stageList[teamOrder]
return XFubenAwarenessManager.CheckStageFinish(stageId)
end
-- 角色是否已在该chapter的队伍中
function XFubenAwarenessManager.CheckCharacterInCurChapterTeam(characterId, chapterId)
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
for order, teamId in pairs(chapterData:GetTeamInfoId()) do
local teamData = XFubenAwarenessManager.GetTeamDataById(teamId)
if teamData:GetCharacterOrder(characterId) ~= nil then
return true, teamData, order
end
end
return false
end
-- 获取其他队伍的角色
function XFubenAwarenessManager.GetOtherTeamCharacters(chapterId, srcTeamId)
local otherTeamCharacters = {}
for _, teamId in pairs(ChapterDataDict[chapterId]:GetTeamInfoId()) do
if teamId ~= srcTeamId and TeamDataDict[teamId] then
for i, member in ipairs(TeamDataDict[teamId]:GetMemberList()) do
local characterId = member:GetCharacterId()
if characterId and characterId ~= 0 then
table.insert(otherTeamCharacters, { teamId, i, characterId })
end
end
end
end
return otherTeamCharacters
end
-- 获取某组里 角色对应的队伍编号
function XFubenAwarenessManager.GetCharacterTeamOderMapByGroup(chapterId)
local teamOrderMap = {}
local teamIdMap = {}
for i, teamId in pairs(ChapterDataDict[chapterId]:GetTeamInfoId()) do
local teamData = XFubenAwarenessManager.GetTeamDataById(teamId)
for _, memberData in ipairs(teamData:GetMemberList()) do
if memberData:HasCharacter() then
teamIdMap[memberData:GetCharacterId()] = teamId
teamOrderMap[memberData:GetCharacterId()] = i
end
end
end
return teamIdMap, teamOrderMap
end
function XFubenAwarenessManager.SwapMultiTeamMember(aTeam, aPos, bTeam, bPos)
local aMemberData = aTeam:GetMemberList()[aPos]
local bMemberData = bTeam:GetMemberList()[bPos]
local aTeamaPosCharId = aMemberData:GetCharacterId()
local bTeambPosCharId = bMemberData:GetCharacterId()
if aTeamaPosCharId == bTeambPosCharId then
bMemberData:SetCharacterId(0)
else
aMemberData:SetCharacterId(bTeambPosCharId)
bMemberData:SetCharacterId(aTeamaPosCharId)
end
end
function XFubenAwarenessManager.SetTeamMember(teamId, targetOrder, characterId)
local targetTeamData = XFubenAwarenessManager.GetTeamDataById(teamId)
targetTeamData:SetMember(targetOrder, characterId)
end
function XFubenAwarenessManager.GetTeamDataById(id)
if not TeamDataDict then
TeamDataDict = {}
end
if not TeamDataDict[id] then
TeamDataDict[id] = XAwarenessTeam.New(id)
end
return TeamDataDict[id]
end
function XFubenAwarenessManager.GetTeamCharacterType(teamId)
local teamData = XFubenAwarenessManager.GetTeamDataById(teamId)
return teamData:GetCharacterType()
end
function XFubenAwarenessManager.IsCharacterInTeamById(teamId, characterId)
local teamData = XFubenAwarenessManager.GetTeamDataById(teamId)
return teamData:GetCharacterOrder(characterId) ~= nil
end
function XFubenAwarenessManager.GetChapterMemberCount(chapterId)
local count = 0
for _, teamId in pairs(ChapterDataDict[chapterId]:GetTeamInfoId()) do
for _, member in ipairs(XFubenAwarenessManager.GetTeamDataById(teamId):GetMemberList()) do
if member:HasCharacter() then
count = count + 1
end
end
end
return count
end
-- 一键上阵
function XFubenAwarenessManager.AutoTeam(chapterId)
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
for k, stageId in pairs(chapterData:GetStageId()) do
local isFinish = XFubenAwarenessManager.CheckStageFinish(stageId)
if isFinish then -- 有完成进度
XUiManager.TipError(CS.XTextManager.GetText("AutoTeamLimit"))
return
end
end
local ownCharacters = XDataCenter.CharacterManager.GetOwnCharacterList()
table.sort(ownCharacters, function(a, b)
return a.Ability > b.Ability
end)
-- 保留当前角色
-- local curCharacters = XFubenAwarenessManager.GetOtherTeamCharacters(chapterId, nil)
for _, teamId in pairs(ChapterDataDict[chapterId]:GetTeamInfoId()) do
local targetTeamData = XFubenAwarenessManager.GetTeamDataById(teamId)
targetTeamData:ClearMemberList()
end
local count = 1
local maxCount = #ownCharacters
for _, teamId in pairs(ChapterDataDict[chapterId]:GetTeamInfoId()) do
if count > maxCount then
break
end
local teamData = XFubenAwarenessManager.GetTeamDataById(teamId)
local needCount = teamData:GetNeedCharacter()
for index = 1, needCount do
local order = XFubenAwarenessManager.GetMemberOrderByIndex(index, needCount)
local targetTeamData = XFubenAwarenessManager.GetTeamDataById(teamId)
local stageId = teamId
local characterLimitType = XFubenConfigs.GetStageCharacterLimitType(teamId)
local defaultCharacterType = XDataCenter.FubenManager.GetDefaultCharacterTypeByCharacterLimitType(characterLimitType)
local i
for charIndex, char in ipairs(ownCharacters) do
local charType = XCharacterConfigs.GetCharacterType(char.Id)
if defaultCharacterType ~= XFubenConfigs.CharacterLimitType.All and defaultCharacterType ~= charType then
goto CONTINUE
end
XFubenAwarenessManager.SetTeamMember(teamId, order, char.Id)
i = charIndex
break
:: CONTINUE ::
end
if i then
table.remove(ownCharacters, i)
end
end
end
end
-- 是否满足关卡所需战力
function XFubenAwarenessManager.IsAbilityMatch(targetStageId, charIdList)
local chapterId = XFubenAwarenessConfigs.GetChapterIdByStageId(targetStageId)
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
local isMatch = false
local teamIdList = chapterData:GetTeamInfoId()
for i, stageId in pairs(chapterData:GetStageId()) do
if stageId == targetStageId then
isMatch = true
local teamId = teamIdList[i]
local teamData = XFubenAwarenessManager.GetTeamDataById(teamId)
for order = 1, teamData:GetNeedCharacter() do
local characterId = charIdList[order]
local character = XDataCenter.CharacterManager.GetCharacter(characterId)
if character.Ability < teamData:GetRequireAbility() then
isMatch = false
break
end
end
break
end
end
return isMatch
end
function XFubenAwarenessManager.SetCloseLoadingCb(cb)
CloseLoadingCb = cb
end
function XFubenAwarenessManager.SetFinishFightCb(cb)
FinishFightCb = cb
end
function XFubenAwarenessManager.GetMemberOrderByIndex(index, maxCount)
return maxCount > 1 and MEMBER_ORDER_BY_INDEX[index] or index
end
function XFubenAwarenessManager.CheckIsGroupLastStage(stageId)
local chapterId = XFubenAwarenessConfigs.GetChapterIdByStageId(stageId)
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
local stageIdList = chapterData:GetStageId()
return (stageIdList[#stageIdList] == stageId)
end
------ 以下是在FubenManager注册的函数
function XFubenAwarenessManager.InitStageInfo()
local stageType = XDataCenter.FubenManager.StageType.Awareness
for _, chapterId in pairs(XFubenAwarenessManager.GetChapterIdList()) do
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
for _, stageId in ipairs(chapterData:GetStageId()) do
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
stageInfo.IsOpen = true
stageInfo.Type = stageType
end
end
end
-- 设置进入loading界面用到的数据
function XFubenAwarenessManager.SetEnterLoadingData(stageIndex, teamCharList, chapterData, isNextFight)
LoadingData = {
StageIndex = stageIndex,
TeamCharList = teamCharList,
ChapterData = chapterData,
IsNextFight = isNextFight,
}
end
-- 打开战斗前loading界面
function XFubenAwarenessManager.OpenFightLoading(stageId)
if LoadingData.IsNextFight then
XLuaUiManager.Open("UiAssignLoading", LoadingData)
else
XLuaUiManager.Open("UiLoading", LoadingType.Fight)
end
end
function XFubenAwarenessManager.CloseFightLoading()
XLuaUiManager.Remove("UiAssignLoading")
XLuaUiManager.Remove("UiLoading")
if CloseLoadingCb then
CloseLoadingCb()
end
end
function XFubenAwarenessManager.ShowReward(winData)
-- 同步本地战斗后的关卡数据
-- 关卡通关数据要先刷新再在下一关for循环检测最后再清除
FinishStageIdDic[winData.StageId] = true
local index = nil
local targetNextStageId = nil
local chapterData = LoadingData.ChapterData
local stageIdList = chapterData:GetStageId()
for i = 1, #stageIdList, 1 do
local stageId = stageIdList[i]
if not XFubenAwarenessManager.CheckStageFinish(stageId) then
index = i
targetNextStageId = stageId
break
end
end
-- 如果还有未完成的关
if targetNextStageId then
-- 且是连续挑战
if LoadingData.IsNextFight then
local isNextFight = true
local _, teamCharListOrg, captainPosList, firstFightPosList = XFubenAwarenessManager.TryGetFightTeamCharList(chapterData:GetId())
local teamCharList = teamCharListOrg[index]
XFubenAwarenessManager.SetEnterLoadingData(index, teamCharList, chapterData, isNextFight)
XDataCenter.FubenManager.EnterAwarenessFight(targetNextStageId, teamCharList, captainPosList[index], nil, nil, firstFightPosList[index])
end
else
-- 如果没有未完成的关了 说明已经作战完毕 结算
-- 并清除所有已完成的关卡数据
for k, id in pairs(stageIdList) do
FinishStageIdDic[id] = nil
end
chapterData:SetFightCount(chapterData:GetFightCount() + 1)
-- 检测设置首通提示驻守trigger
if chapterData:GetFightCount() == 1 then
ChapterFirstPassTrigger = chapterData:GetId()
end
XLuaUiManager.Remove("UiAwarenessDeploy")
XLuaUiManager.Remove("UiAssignLoading")
XLuaUiManager.Open("UiAwarenessSettleWin", winData)
end
-- 结算完刷新下数据
XFubenAwarenessManager.AwarenessGetDataRequest()
end
----------- 战斗接口 end-----------
-- 某角色某技能加成
function XFubenAwarenessManager.GetSkillLevel(characterId, skillId)
local character = XDataCenter.CharacterManager.GetCharacter(characterId)
if not character then return 0 end
local keys, levels = XFubenAwarenessManager.GetBuffKeysAndLevels()
local npcTemplate = XCharacterConfigs.GetNpcTemplate(character.NpcId)
local tragetCharacterType = npcTemplate.Type
local targetSkilType = XCharacterConfigs.GetSkillType(skillId)
local level = nil
for _, key in pairs(keys) do
local skillType = key % SKILLTYPE_BITS
local characterType = (key - skillType) / SKILLTYPE_BITS
if (characterType == tragetCharacterType or characterType == CHARACTERTYPE_ALL) and skillType == targetSkilType then
level = levels[key]
end
end
return level or 0
end
function XFubenAwarenessManager.GetSkillLevelByCharacterData(character, skillId, assignChapterRecords)
local keys = {}
local levels = {}
for _, v in ipairs(assignChapterRecords) do
local chapterData = XAwarenessChapter.New(v.ChapterId)
chapterData:SetCharacterId(v.CharacterId)
if chapterData:IsOccupy() then
for _, key in ipairs(chapterData:GetBuffKeys()) do
if not levels[key] then
levels[key] = 1
table.insert(keys, key)
else
levels[key] = levels[key] + 1
end
end
end
end
local npcTemplate = XCharacterConfigs.GetNpcTemplate(character.NpcId)
local tragetCharacterType = npcTemplate.Type
local targetSkilType = XCharacterConfigs.GetSkillType(skillId)
local level = nil
for _, key in pairs(keys) do
local skillType = key % SKILLTYPE_BITS
local characterType = (key - skillType) / SKILLTYPE_BITS
if (characterType == tragetCharacterType or characterType == CHARACTERTYPE_ALL) and skillType == targetSkilType then
level = levels[key]
end
end
return level or 0
end
-- 参数keys: {角色类型*1000+技能类型, ...}
-- 参数levels: {[key] = level, ...}
function XFubenAwarenessManager.GetBuffDescListByKeys(keys, levels)
local descList = {}
local GetCareerName = XCharacterConfigs.GetCareerName
local GetSkillTypeName = XCharacterConfigs.GetSkillTypeName
local GetText = CS.XTextManager.GetText
for _, key in ipairs(keys) do
local skillType = key % SKILLTYPE_BITS
local characterType = (key - skillType) / SKILLTYPE_BITS
local level = levels and levels[key] or 1
local memberTypeName = characterType == CHARACTERTYPE_ALL and "" or GetCareerName(characterType)
local str = GetText("AssignSkillPlus", memberTypeName, GetSkillTypeName(skillType), level) -- 全体{0}成员{1}等级+{2}
table.insert(descList, str)
end
return descList
end
function XFubenAwarenessManager.GetBuffKeysAndLevels()
local keys = {}
local levels = {}
for _, id in ipairs(XFubenAwarenessManager.GetChapterIdList()) do
local chapterData = XFubenAwarenessManager.GetChapterDataById(id)
if chapterData:IsOccupy() then
for _, key in ipairs(chapterData:GetBuffKeys()) do
if not levels[key] then
levels[key] = 1
table.insert(keys, key)
else
levels[key] = levels[key] + 1
end
end
end
end
return keys, levels
end
function XFubenAwarenessManager.SortKeys(keys)
table.sort(keys, function(a, b)
local skillTypeA = a % SKILLTYPE_BITS
local characterTypeA = (a - skillTypeA) / SKILLTYPE_BITS
local skillTypeB = b % SKILLTYPE_BITS
local characterTypeB = (b - skillTypeB) / SKILLTYPE_BITS
if skillTypeA ~= skillTypeB then
return skillTypeA < skillTypeB
end
return characterTypeA < characterTypeB
end)
return keys
end
function XFubenAwarenessManager.GetAllBuffList()
local keys, levels = XFubenAwarenessManager.GetBuffKeysAndLevels()
keys = XFubenAwarenessManager.SortKeys(keys)
return XFubenAwarenessManager.GetBuffDescListByKeys(keys, levels)
end
function XFubenAwarenessManager.TryGetFightTeamCharList(chapterId)
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
local teamList = {}
local captainPosList = {}
local firstFightPosList = {}
local teamIdList = chapterData:GetTeamInfoId()
local allTeamHasMember = (#teamIdList > 0)
for i, teamId in ipairs(teamIdList) do
teamList[i] = {}
local count = 0
local teamData = XFubenAwarenessManager.GetTeamDataById(teamId)
captainPosList[i] = teamData:GetLeaderIndex()
firstFightPosList[i] = teamData:GetFirstFightIndex()
local memberList = teamData:GetMemberList()
for _, memberData in ipairs(memberList) do
local characterId = memberData:GetCharacterId() or 0
teamList[i][memberData:GetIndex()] = characterId
if characterId ~= 0 then
count = count + 1
end
end
if count < #memberList then
allTeamHasMember = false
end
end
return allTeamHasMember, teamList, captainPosList, firstFightPosList
end
function XFubenAwarenessManager.IsRedPoint()
for _, chapterId in ipairs(XFubenAwarenessManager.GetChapterIdList()) do
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
if chapterData:CanReward() then
return true
end
end
return false
end
-- 是否满足关卡所需战力
function XFubenAwarenessManager.IsStagePass(stageId)
local chapterId = XFubenAwarenessConfigs.GetChapterIdByStageId(stageId)
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
return chapterData:IsPass()
end
function XFubenAwarenessManager.UpdateChapterRecords(chapterRecords)
if not chapterRecords then
return
end
for _, v in pairs(chapterRecords) do
local chapterData = XFubenAwarenessManager.GetChapterDataById(v.ChapterId)
chapterData:SetCharacterId(v.CharacterId)
chapterData:SetRewarded(v.IsGetReward)
chapterData:SetIsPassByServer(true)
end
end
function XFubenAwarenessManager.RefreshAwarenessInfo(data)
local info = data.AwarenessInfo
if XTool.IsTableEmpty(info) then
return
end
-- 章节占领角色数据
local chapterRecords = info.ChapterRecords
XFubenAwarenessManager.UpdateChapterRecords(chapterRecords)
-- 关卡通关数据
FinishStageIdDic = {}
local chapterChallengeRecords = info.ChallengeRecords
for _, v in pairs(chapterChallengeRecords or {}) do
local chapterData = XFubenAwarenessManager.GetChapterDataById(v.ChapterId)
chapterData:SetFightCount(v.Count)
if not XTool.IsTableEmpty(v.FinishStageIds) then
for k, id in pairs(v.FinishStageIds) do
-- 使用全局变量记录服务器发下来的数据
-- 已通关的StageId
FinishStageIdDic[id] = true
end
end
end
-- 编队记录
ChapterTeamRecords = info.TeamRecords
ChapterTeamRecordsDic = {}
for _, v in ipairs(ChapterTeamRecords or {}) do
local chapterData = XFubenAwarenessManager.GetChapterDataById(v.ChapterId)
local teamCount = #v.TeamInfoList
local posCount = v.CaptainPosList and #v.CaptainPosList or 0
local firstFightCount = v.FirstFightPosList and #v.FirstFightPosList or 0
for i, teamId in ipairs(chapterData:GetTeamInfoId()) do
local teamData = XFubenAwarenessManager.GetTeamDataById(teamId)
local charaterIds = (i <= teamCount) and v.TeamInfoList[i] or nil
local captainPos = (i <= posCount) and v.CaptainPosList[i] or XFubenAwarenessManager.CAPTIAN_MEMBER_INDEX
local firstFightPos = (i <= firstFightCount) and v.FirstFightPosList[i] or XFubenAwarenessManager.FIRSTFIGHT_MEMBER_INDEX
teamData:SetMemberList(charaterIds)
teamData:SetLeaderIndex(captainPos)
teamData:SetFirstFightIndex(firstFightPos)
end
-- 队伍字典
ChapterTeamRecordsDic[v.ChapterId] = v
end
end
-----------------协议----------
-- Login登录后端初始化数据接口
function XFubenAwarenessManager.NotifyLoginAwarenessInfo(data)
if XTool.IsTableEmpty(data) then
return
end
XFubenAwarenessManager.RefreshAwarenessInfo(data)
end
function XFubenAwarenessManager.AwarenessGetDataRequest(cb)
XNetwork.Call("AwarenessGetDataRequest", nil, function(res)
XFubenAwarenessManager.RefreshAwarenessInfo(res)
if cb then
cb()
end
end)
end
function XFubenAwarenessManager.AwarenessSetTeamRequest(ChapterId, TeamList, captainPosList, firstFightPosList, cb)
XNetwork.Call("AwarenessSetTeamRequest", { ChapterId = ChapterId, TeamList = TeamList, CaptainPosList = captainPosList, FirstFightPosList = firstFightPosList }, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if cb then
cb()
end
end)
end
function XFubenAwarenessManager.AwarenessSetCharacterRequest(ChapterId, CharacterId, cb)
XNetwork.Call("AwarenessSetCharacterRequest", { ChapterId = ChapterId, CharacterId = CharacterId }, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local chapterData = XFubenAwarenessManager.GetChapterDataById(ChapterId)
chapterData:SetCharacterId(CharacterId)
XEventManager.DispatchEvent(XEventId.EVENT_REFRESH_CHRACTER_ABLIITY) -- 重新计算角色战力
CsXGameEventManager.Instance:Notify(XEventId.EVENT_ASSIGN_SELECT_OCCUPY_END) -- 刷新驻守界面
if cb then
cb()
end
end)
end
function XFubenAwarenessManager.AwarenessGetRewardRequest(ChapterId, cb)
XNetwork.Call("AwarenessGetRewardRequest", { ChapterId = ChapterId }, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local chapterData = XFubenAwarenessManager.GetChapterDataById(ChapterId)
chapterData:SetRewarded(true)
XUiManager.OpenUiObtain(res.RewardList or {})
if cb then
cb()
end
end)
end
-- 重置关卡
function XFubenAwarenessManager.AwarenessResetStageRequest(chapterId, stageId, cb)
XNetwork.Call("AwarenessResetStageRequest", { ChapterId = chapterId, StageId = stageId }, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
FinishStageIdDic[stageId] = nil
if cb then
cb()
end
end)
end
function XFubenAwarenessManager.GetSkillPlusIdList()
local list = {}
for _, chapterId in ipairs(XFubenAwarenessManager.GetChapterIdList()) do
local chapterData = XFubenAwarenessManager.GetChapterDataById(chapterId)
if chapterData:IsOccupy() then
table.insert(list, chapterData:GetSkillPlusId())
end
end
return list
end
function XFubenAwarenessManager.GetSkillPlusIdListOther(assignChapterRecords)
local list = {}
if assignChapterRecords == nil then
return list
end
for _, v in ipairs(assignChapterRecords) do
local chapterData = XAwarenessChapter.New(v.ChapterId)
chapterData:SetCharacterId(v.CharacterId)
if chapterData:IsOccupy() then
table.insert(list, chapterData:GetSkillPlusId())
end
end
return list
end
-- 2选1入口的红点
function XFubenAwarenessManager.CheckIsShowRedPoint()
for k, chapterId in pairs(XFubenAwarenessManager.GetChapterIdList()) do
local chapter = XFubenAwarenessManager.GetChapterDataById(chapterId)
if chapter:IsRed() then
return true
end
end
return false
end
function XFubenAwarenessManager.OpenUi(openCb)
if XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.FubenAwareness, true) then
if openCb then
XLuaUiManager.OpenWithCallback("UiAwarenessMain", openCb)
else
XLuaUiManager.Open("UiAwarenessMain")
end
end
end
XFubenAwarenessManager.Init()
return XFubenAwarenessManager
end
XRpc.NotifyLoginAwarenessInfo = function(data)
XDataCenter.FubenAwarenessManager.NotifyLoginAwarenessInfo(data)
end