PGRData/Script/matrix/xmanager/XFubenAwarenessManager.lua
2024-09-01 22:49:41 +02:00

808 lines
No EOL
32 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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