local OfficialPosition_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local official_title_pb = require('Proto/official_title_pb') --官职收益增加挑战次数的活动类型 local profitFreeTimes = { [LuaConst.ActivityType.HeroBiography] = "HeroBiographyFreeTimes", --名将列传 [LuaConst.ActivityType.WorldBoss] = "WorldBossFreeTimes", --世界boss [LuaConst.ActivityType.CountryWorldBoss] = "WarZoneBossFreeTimes", --战区boss [LuaConst.ActivityType.ResourcesChapterChild1] = "ResourcesChapter1FreeTimes", --同步副本 [LuaConst.ActivityType.ResourcesChapterChild2] = "ResourcesChapter2FreeTimes", --经验丹副本 [LuaConst.ActivityType.ResourcesChapterChild3] = "ResourcesChapter3FreeTimes", --强化石副本 } --官职收益增加购买次数的活动类型 local profitBuyTimes = { [LuaConst.ActivityType.HeroBiography] = "HeroBiographyBuyTimes", [LuaConst.ActivityType.WorldBoss] = "WorldBossBuyTimes", --世界boss [LuaConst.ActivityType.CountryWorldBoss] = "WarZoneBossBuyTimes", --战区boss [LuaConst.ActivityType.OffLineSoloFight] = "OfflineSoloBuyTimes", } private.TitleInfo = { CurTitle = 0, HighestTitle = 0, ExamTitle = 0, IsAllFinish = false, } function OfficialPosition_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessagePromotionTitle, private.PromotionTitleResp) NetManager.RegisterMsgCB(MessageEnums.MessageGetExamInfo, private.GetExamInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageApplyExam, private.ApplyExamResp) NetManager.RegisterMsgCB(MessageEnums.MessageGetPromotionMemberInfo, private.GetPromotionMemberInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageCancelExam, private.CancelExamResp) end --获取购买次数弹窗官职收益描述 function OfficialPosition_Model.GetPurchaseTimesDesc(activityType) local enum = profitBuyTimes[activityType] local buyTimes, profitID = OfficialPosition_Model.GetProfitParam(enum) local tarGrade = 0 for i,v in DataSheetManager.OfficialProfit:GetEnumerator() do for _, vv in ipairs(v.Unlock_Table) do if vv.Profit == profitID then if vv.Parm > buyTimes then tarGrade = v.GradeID end break end end if tarGrade > 0 then break end end if tarGrade > 0 then local titleData = OfficialPosition_Model.GetTitleDataByGradeID(tarGrade) return string.FormatByIdsId(Const_IDS.IDS_OfficialPrivilege_AddPurchase, UIUtils.GetLocalizedTxt(Const_IDS[titleData.Name1])) end return nil end --判断是否处于降品条件 function OfficialPosition_Model.IsInDegradation(gradeID, rank) local officialPVPGradeID = DataSheetManager.ConstData:GetDataByID("OfficialPVPGradeID").IntValue if gradeID > 0 and gradeID < officialPVPGradeID then local promotionData = DataSheetManager.OfficialPositionPromotion:GetDataByGradeID(gradeID) if promotionData then local degradationNum = promotionData.DegradationNum if degradationNum == -1 then --不降品 return false elseif rank > degradationNum then return true end end end return false end --获取该活动的购买次数的官职权益加成次数 function OfficialPosition_Model.GetProfitBuyTimes(activityType) local enum = profitBuyTimes[activityType] local times = OfficialPosition_Model.GetProfitParam(enum) return times end --获取该活动的免费次数的官职权益加成次数 function OfficialPosition_Model.GetProfitFreeTimes(activityType) local enum = profitFreeTimes[activityType] local times = OfficialPosition_Model.GetProfitParam(enum) return times end function OfficialPosition_Model.GetProfitParam(enum) local profitID for i,v in DataSheetManager.RevenuePrivilege:GetEnumerator() do if v.Enumeration == enum then profitID = v.ID break end end if profitID then local curGradeId = OfficialPosition_Model.GetCurGradeID() if curGradeId > 0 then local profit = DataSheetManager.OfficialProfit:GetDataByGradeID(curGradeId) for _, v in ipairs(profit.Unlock_Table) do if v.Profit == profitID then return v.Parm, profitID end end end end return 0, profitID end function OfficialPosition_Model.GetProfitParamByGradeId(enum, gradeId) if gradeId <= 0 then return 0 end local profitID for i,v in DataSheetManager.RevenuePrivilege:GetEnumerator() do if v.Enumeration == enum then profitID = v.ID break end end if profitID then local profit = DataSheetManager.OfficialProfit:GetDataByGradeID(gradeId) for _, v in ipairs(profit.Unlock_Table) do if v.Profit == profitID then return v.Parm end end end return 0 end function OfficialPosition_Model.GetTitleDataByGradeID(gradeID) for i,v in DataSheetManager.OfficialPosition:GetEnumerator() do if v.GradeID == gradeID then return v end end return nil end function OfficialPosition_Model.SyncOfficialInfo(officialInfo, isInit) if isInit == false then local lastTitle = private.TitleInfo.CurTitle if officialInfo.curTitle > lastTitle then --晋升弹出诏书 local titleData = DataSheetManager.OfficialPosition:GetDataByID(officialInfo.curTitle) if titleData and titleData.Type <= 2 then CTL.OfficialPosition.ShowZhaoshu(officialInfo.curTitle) end end end private.TitleInfo.CurTitle = officialInfo.curTitle private.TitleInfo.HighestTitle = officialInfo.historyHighestTitle--最高官职 private.TitleInfo.ExamTitle = officialInfo.applyExamTitle --当前报名的官职 private.TitleInfo.IsAllFinish = false --第一阶段任务是否全部完成 --只有第1个阶段需要同步完成情况 if IsServerDataNotNil(officialInfo.finishInfo) then local titleData = officialInfo.curTitle>0 and DataSheetManager.OfficialPosition:GetDataByID(officialInfo.curTitle) or nil if officialInfo.curTitle == 0 or titleData.Type <= 2 then local isAllFinish = true if private.TitleInfo.FinishDetail == nil then private.TitleInfo.FinishDetail = {} else table.clear(private.TitleInfo.FinishDetail) end for _, v in ipairs(officialInfo.finishInfo) do private.TitleInfo.FinishDetail[v.triggerType] = v.finishState if v.finishState == false then isAllFinish = false end end private.TitleInfo.IsAllFinish = isAllFinish end end --下个官职为类型3或者4,显示"可报名"标识 local nextTitle = officialInfo.curTitle + 1 local isSuccess, nextTitleData = DataSheetManager.OfficialPosition:TryGetDataByID(nextTitle) if nextTitleData and nextTitleData.Type > 2 then CTL.OfficialPosition.HandleApplyNotice(nextTitleData) end EventSystem.Dispatch(EventID.UI_RefreshOfficialPositionInfo) CTL.OfficialPrivilege.CheckOfficialPrivilegeRedPoint() end function OfficialPosition_Model.GetOfficialInfo() return private.TitleInfo end function OfficialPosition_Model.GetCurTitle() return private.TitleInfo.CurTitle end function OfficialPosition_Model.GetCurTitleData() local title = private.TitleInfo.CurTitle return title>0 and DataSheetManager.OfficialPosition:GetDataByID(title) end -- 获取GradeID function OfficialPosition_Model.GetCurGradeID() local title = private.TitleInfo.CurTitle local curTitleData = title>0 and DataSheetManager.OfficialPosition:GetDataByID(title) if curTitleData then return curTitleData.GradeID else return 0 end end --是否完成第一个晋升 function OfficialPosition_Model.GetHasFinishFirstTitle() return private.TitleInfo.CurTitle == 0 and private.TitleInfo.IsAllFinish end --是否阶段1当前的任务全部完成 function OfficialPosition_Model.GetHasFinish() return private.TitleInfo.IsAllFinish end --是否已经报过名 function OfficialPosition_Model.GetHasApply() return private.TitleInfo.ExamTitle > 0 end --晋升官职 function OfficialPosition_Model.PromotionTitleReq() local msg = official_title_pb.PromotionTitleReq() NetManager.SendMessage(MessageEnums.MessagePromotionTitle, msg) end function private.PromotionTitleResp(msgResp) logging.log(LTAG.LOG, "PromotionTitleResp") BIManager.DispatchBIClientEvent(BIManager.EventName.OfficialPromotion) BIManager.DispatchBIClientEvent(BIManager.EventName.user_rank_, private.TitleInfo.CurTitle) end --报名参加 function OfficialPosition_Model.ApplyExamReq(title) local msg = official_title_pb.ApplyExamReq() msg.title = title NetManager.SendMessage(MessageEnums.MessageApplyExam, msg) end function private.ApplyExamResp(msgResp) logging.log(LTAG.LOG, "ApplyExamResp") if msgResp.Resp.Code == 0 then --消息返回成功 CTL.Tips.AddTipsMsg(Const_IDS.IDS_OfficialPosition_SignUpRight) end end --取消报名 function OfficialPosition_Model.CancelExamReq() local msg = official_title_pb.CancelExamReq() NetManager.SendMessage(MessageEnums.MessageCancelExam, msg) end function private.CancelExamResp(msgResp) logging.log(LTAG.LOG, "CancelExamResp") end --获取报名信息 function OfficialPosition_Model.GetExamInfoReq(title) local msg = official_title_pb.GetExamInfoReq() msg.title = title NetManager.SendMessage(MessageEnums.MessageGetExamInfo, msg) end local function SortRule(a, b) if a.acid == BattleDataGetter.GetAcID() then return true elseif b.acid == BattleDataGetter.GetAcID() then return false else return a.applyTime < b.applyTime end end function private.GetExamInfoResp(msgResp) logging.log(LTAG.LOG, "GetExamInfoResp") if msgResp.Resp.Code == 0 then --消息返回成功 if OfficialPosition_Model.ExamInfoList == nil then OfficialPosition_Model.ExamInfoList = {} else table.clearArray(OfficialPosition_Model.ExamInfoList) end for i, v in ipairs(msgResp.examInfo) do OfficialPosition_Model.ExamInfoList[i] = v end table.sort(OfficialPosition_Model.ExamInfoList, SortRule) EventSystem.Dispatch(EventID.UI_UpdateOfficialPositionApplyInfo) end end --请求晋升名单 function OfficialPosition_Model.GetPromotionMemberInfoReq(title) local msg = official_title_pb.GetPromotionMemberInfoReq() msg.title = title NetManager.SendMessage(MessageEnums.MessageGetPromotionMemberInfo, msg) end function private.GetPromotionMemberInfoResp(msgResp) logging.log(LTAG.LOG, "GetPromotionMemberInfoResp") if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_UpdateAdmissionResult, msgResp.promotionExamRecord) end end return OfficialPosition_Model