local Hegemony_Model = {} local private = {} local operation_activity_pb = require "Proto.operation_activity_pb" local operation_activity_info_pb = require "Proto.operation_activity_info_pb" local EventSystem = require('Event/EventSystem') local HegemonyPushInterFaceList = DataSheetManager.ConstData:GetDataByID("HegemonyPushArray").IntListValue Hegemony_Model.HegemonyTaskState = { Doing = operation_activity_info_pb.State_Doing, Finished = operation_activity_info_pb.State_Finished, Claimed = operation_activity_info_pb.State_Reward, } function Hegemony_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageAcquireHegemonyReward, private.AcquireHegemonyRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessageAcquireHegemonyScoreReward, private.AcquireHegemonyScoreRewardResp) private.hegemonyScore = {} private.hegemonyActivityId = 0 private.hegemonyInfo = {} private.hegemonyScoreInfo = {} end --region 获取数据 function Hegemony_Model.GetHegemonyPushInterFace(index) return DataSheetManager.HegemonyPush:GetDataByID(HegemonyPushInterFaceList[index]).ViewClass end function Hegemony_Model.GetNumInDict(dict) local num = 0 if dict then for i, v in pairs(dict) do num = num + 1 end end return num end function Hegemony_Model.GetGroupIdByDay(day) for i, v in MDL.OperationActivity.HegemonyTab:GetEnumeratorByActivityID(private.hegemonyActivityId) do local dayData = v[day] if dayData and dayData[1] then return dayData[1].GroupID end end end function Hegemony_Model.GetDayNumInGroup(group) return Hegemony_Model.GetNumInDict(MDL.OperationActivity.HegemonyTab:GetDataByActivityID_GroupID_StageID_PageID(private.hegemonyActivityId, group)) end function Hegemony_Model.GetDayNumBeforeGroup(group) local num = 0 for i = 1, group - 1 do num = num + Hegemony_Model.GetNumInDict(MDL.OperationActivity.HegemonyTab:GetDataByActivityID_GroupID_StageID_PageID(private.hegemonyActivityId, i)) end return num end local function IpairsValue(tab, i) i = i + 1 local data = tab[i] if data then return i, tab[i] else return nil end end function Hegemony_Model.GetSortedTaskEnumerator(day, page) local taskTable = MDL.OperationActivity.HegemonyParam:GetDataByActivityID_StageID_PageID_NumID(private.hegemonyActivityId, day, page) private.tempDay = day private.tempPage = page private.sortedTable = {} for i, v in ipairs(taskTable) do table.insert(private.sortedTable, v) end table.sort(private.sortedTable, private.SortTaskTable) return IpairsValue, private.sortedTable, 0 end function private.SortTaskTable(a, b) local indexA = MDL.Hegemony.GetTaskIndexByData(a) local indexB = MDL.Hegemony.GetTaskIndexByData(b) local taskInfoA = MDL.Hegemony.GetTaskInfo(private.tempDay, private.tempPage, indexA) local taskInfoB = MDL.Hegemony.GetTaskInfo(private.tempDay, private.tempPage, indexB) if taskInfoA and taskInfoB then local stateA = taskInfoA.state local stateB = taskInfoB.state if stateA ~= stateB then if taskInfoA.state == Hegemony_Model.HegemonyTaskState.Finished then return true end if taskInfoB.state == Hegemony_Model.HegemonyTaskState.Finished then return false end if taskInfoA.state == Hegemony_Model.HegemonyTaskState.Doing then return true end if taskInfoB.state == Hegemony_Model.HegemonyTaskState.Doing then return false end end return indexA < indexB elseif taskInfoA then return true elseif taskInfoB then return false else return indexA < indexB end end function Hegemony_Model.GetTaskIndexByData(taskData) return taskData.NumID - 1 end function Hegemony_Model.GetHegemonyActivityId() return private.hegemonyActivityId end function Hegemony_Model.GetHegemonyInfo() return private.hegemonyInfo end function Hegemony_Model.GetScoreByGroupId(groupId) return private.hegemonyScore[groupId] or 0 end function Hegemony_Model.GetScoreInfoByGroupId(groupId) return private.hegemonyScoreInfo[groupId] or {} end --index从0开始,使用时需要注意 function Hegemony_Model.GetTaskInfo(day, page, index) local pageInfo = Hegemony_Model.GetPageInfo(day, page) if pageInfo then return pageInfo[index] end end function Hegemony_Model.GetPageInfo(day, page) local dayInfo = private.hegemonyInfo[day] if dayInfo then local pageInfo = dayInfo[page] if pageInfo then return pageInfo else logging.error(LTAG.ERROR, "没有天ID:", day, ",页签ID:", page" 的数据,请程序检查!!!") return nil end end end function Hegemony_Model.GetDayInfo(day) local info = private.hegemonyInfo[day] if info then return info end return nil end --endregion --region 数据处理相关 function Hegemony_Model.SetHegemonyInfo(info) if info.activityId > 0 then logging.log(LTAG.LOG, "霸业之始信息SetHegemonyInfo", info.activityId, info.dayInfos) private.hegemonyActivityId = info.activityId private.DealWithHegemonyInfo(info.dayInfos) private.DealWithHegemonyRewardInfo(info.scoreInfo) CTL.Hegemony.CheckCloseCountDown() else logging.error(LTAG.ERROR, "霸业之始信息SetHegemonyInfo的activityId是", info.activityId, "!!!", info) end end function private.DealWithHegemonyInfo(dayInfos) for i_1, day in ipairs(dayInfos) do if not private.hegemonyInfo[day.stageId] then private.hegemonyInfo[day.stageId] = {} end for i_2, page in ipairs(day.pageInfos) do if not private.hegemonyInfo[day.stageId][page.pageId] then private.hegemonyInfo[day.stageId][page.pageId] = {} end for i_3, task in ipairs(page.tasks) do private.hegemonyInfo[day.stageId][page.pageId][task.index] = {state = task.state, finishCount = task.finishCount} end end end --EventSystem.Dispatch(EventID.UI_Hegemony_InfoRefresh) end function Hegemony_Model.PrintHegemonyInfoAndRp() local printTable = {} table.insert(printTable, "HegemonyNewDayRp:" .. tostring(MDL.RedPoint.GetNodeStateByMultiKey(CTL.Hegemony.HegemonyRpEventId.TownHome, CTL.Hegemony.HegemonyRpEventId.NewDay))) for dayIndex, dayInfo in ipairs(private.hegemonyInfo) do table.insert(printTable, ("day:" .. dayIndex .. " Rp:" .. tostring(MDL.RedPoint.GetNodeStateByMultiKey(CTL.Hegemony.HegemonyRpEventId.TownHome, math.ceil(dayIndex / 7), dayIndex)))) for pageIndex, pageInfo in ipairs(dayInfo) do table.insert(printTable, (" day:" .. dayIndex .. " page:" .. pageIndex .. " Rp:" .. tostring(MDL.RedPoint.GetNodeStateByMultiKey(CTL.Hegemony.HegemonyRpEventId.TownHome, math.ceil(dayIndex / 7), dayIndex, pageIndex)))) for taskIndex, taskInfo in ipairs(pageInfo) do table.insert(printTable, (" day:" .. dayIndex .. " page:" .. pageIndex .. " task:" .. taskIndex .. " Rp:" .. tostring(taskInfo.state == Hegemony_Model.HegemonyTaskState.Finished))) end end end logging.log(LTAG.LOG, printTable) end function private.DealWithHegemonyRewardInfo(rewardInfo) for i, v in ipairs(rewardInfo) do local groupId = v.groupId private.hegemonyScore[groupId] = v.score for index, value in ipairs(v.scoreRewardInfo) do if not private.hegemonyScoreInfo[groupId] then private.hegemonyScoreInfo[groupId] = {} end private.hegemonyScoreInfo[groupId][value.stageId] = value.received end end end --endregion --region 协议相关 function Hegemony_Model.AcquireHegemonyRewardReq(stageId, pageId, index) local msg = operation_activity_pb.AcquireHegemonyRewardReq() msg.stageId = stageId msg.pageId = pageId msg.index = index NetManager.SendMessage(MessageEnums.MessageAcquireHegemonyReward, msg) end function private.AcquireHegemonyRewardResp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_Hegemony_AcquireReward) end end function Hegemony_Model.AcquireHegemonyScoreRewardReq(groupId, stageId) local msg = operation_activity_pb.AcquireHegemonyScoreRewardReq() msg.groupId = groupId msg.stageId = stageId NetManager.SendMessage(MessageEnums.MessageAcquireHegemonyScoreReward, msg) end function private.AcquireHegemonyScoreRewardResp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_Hegemony_AcquirePointReward) end end --endregion function Hegemony_Model.OnShutdown() end return Hegemony_Model