local RewardsRetrieve_Model = {} local private = {} local reward_recovery_handle_pb = require("Proto/reward_recovery_handle_pb") local reward_recovery_pb = require("Proto/reward_recovery_pb") local EventSystem = require('Event/EventSystem') RewardsRetrieve_Model.ResourceState = { NotRecoveryYet = reward_recovery_pb.NotRecoveryYet, -- 尚未进行找回(有可找回资源)。 Recovering = reward_recovery_pb.Recovering, -- 找回进行当中(第一阶段[直接发放]完成)。 RecoveryComplete = reward_recovery_pb.RecoveryComplete, -- 资源找回完成(第二阶段[活跃邮件]完成)。 } -- #region 辅助方法 -- 未找回 > 找回中 > 已找回,(同级下,主线剧情排第一 其余按照活动id大小) local function SortRewardRecoveryInfo(a, b) if a.info.ResourceState ~= b.info.ResourceState then return a.info.ResourceState < b.info.ResourceState else local mainLine = LuaConst.ActivityType.MainlLine if a.info.ActivityDataID == mainLine then return true end if b.info.ActivityDataID == mainLine then return false end return a.info.ActivityDataID < b.info.ActivityDataID end end -- #endregion function RewardsRetrieve_Model.OnStartup() private.rewardRecoveryInfo = {} private.recoveryAllCost = 0 NetManager.RegisterMsgCB(MessageEnums.MessageSpecifyResourceRecovery, private.SpecifyResourceRecoveryResponse) NetManager.RegisterMsgCB(MessageEnums.MessageAllResourceRecovery, private.AllResourceRecoveryResponse) end -- #region 协议相关 -- 同步奖励找回信息(enter_world、player_change)此消息为全量推送 function RewardsRetrieve_Model.SyncRewardRecoveryInfo(resourceInfos) private.recoveryAllCost = 0 for i, v in ipairs(resourceInfos) do local activityData = DataSheetManager.ActivityData:GetDataByID(v.ActivityDataID) private.rewardRecoveryInfo[i] = {["info"] = v, ["activityData"] = activityData,} if not activityData then logging.error(LTAG.ERROR, "奖励找回(RewardRecoveryInfoResponse):没有找到对应的活动, ActivityDataID = ", v.ActivityDataID) end if v.ResourceState == RewardsRetrieve_Model.ResourceState.NotRecoveryYet then private.recoveryAllCost = private.recoveryAllCost + v.CostNeedCurrency end end for i = #private.rewardRecoveryInfo, #resourceInfos + 1, -1 do table.remove(private.rewardRecoveryInfo, i) end table.sort(private.rewardRecoveryInfo, SortRewardRecoveryInfo) EventSystem.Dispatch(EventID.UI_RewardRecovery_RefreshRecovery) EventSystem.Dispatch(EventID.UI_RewardRecovery_RefreshRedPoint) -- 刷新奖励界面红点 EventSystem.Dispatch(EventID.UI_WelfareBase_RefreshRedPoint) -- 刷新页签红点 end -- 具体资源找回请求 -- activityDataID : 产出活动ID -- costRecovery : 是否使用元宝找回 function RewardsRetrieve_Model.SpecifyResourceRecoveryRequest(activityDataID, costRecovery) local msg = reward_recovery_handle_pb.SpecifyResourceRecoveryReq() msg.ActivityDataID = activityDataID msg.CostRecovery = costRecovery NetManager.SendMessage(MessageEnums.MessageSpecifyResourceRecovery, msg) end function private.SpecifyResourceRecoveryResponse(msgResp) end -- 全部资源找回请求 function RewardsRetrieve_Model.AllResourceRecoveryRequest(costRecovery) if not RewardsRetrieve_Model.HaveCanRecoveryReward() then CTL.Tips.AddTipsMsg(Const_IDS.IDS_RewardRecovery_NoReward) return end local msg = reward_recovery_handle_pb.AllResourceRecoveryReq() msg.CostRecovery = costRecovery NetManager.SendMessage(MessageEnums.MessageAllResourceRecovery, msg) end function private.AllResourceRecoveryResponse(msgResp) end -- #endregion -- #region 数据相关 -- 资源找回信息 function RewardsRetrieve_Model.RewardRecoveryInfoIsEmpty() return #private.rewardRecoveryInfo == 0 end function RewardsRetrieve_Model.GetRewardRecoveryInfoIterator() return ipairs(private.rewardRecoveryInfo) end -- 全部元宝找回总消耗 function RewardsRetrieve_Model.GetRecoveryAllCost() return private.recoveryAllCost end -- 是否有可找回的奖励(仅没找回,处于找回第一阶段不算) function RewardsRetrieve_Model.HaveCanRecoveryReward() if #private.rewardRecoveryInfo == 0 then return false end for i, v in ipairs(private.rewardRecoveryInfo) do if v.info.ResourceState == RewardsRetrieve_Model.ResourceState.NotRecoveryYet then return true end end return false end -- 是否已经全部找回完奖励(全都处于找回完毕状态,处于找回第一阶段不算) function RewardsRetrieve_Model.AllFinishRecoveryReward() if #private.rewardRecoveryInfo == 0 then return true end -- 没有数据算全部已经找回 for i, v in ipairs(private.rewardRecoveryInfo) do if v.info.ResourceState ~= RewardsRetrieve_Model.ResourceState.RecoveryComplete then return false end end return true end -- #endregion return RewardsRetrieve_Model