local Reward_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local level_gift_pb = require 'Proto.level_gift_pb' local common_pb = require 'Proto/common_pb' Reward_Model.ExpItemId = 1 --经验ID Reward_Model.EquipIntensifyStoneId = 18 --强化石ID --奖励获取的途径类型 Reward_Model.RewardShowType = { ShowNothing = 0, ShowPanel = 1, ShowTips = 2, ShowSeniorCutsceneTips = 3, ShowOfficialPositionReward = 4, DelayTownShowPanel = 5, } Reward_Model.LevelUpGiftState = { CanClaim = 1, Locked = 2, Claimed = 3 } -- 奖励下发类型 Reward_Model.ItemRewardType = { CommonType = common_pb.CommonType, -- 通用奖励 TeamType = common_pb.TeamType -- 组队奖励 } function Reward_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageLevelGift, private.ResponseLevelGift) EventSystem.Regist(EventID.TeamLevelUpdate, Reward_Model.UpdateLevelGiftClaim) private.showLevelUpGifts = nil private.showLevelUpGiftCount = 0 private.levelGiftClaimed = LuaExt.CreateTable(DataSheetManager.LevelUpGift:GetDataCount()) end function Reward_Model.OnShutdown() private.showLevelUpGifts = nil private.levelGiftClaimed = nil private.isCloseRewardTipShow = false private.isCloseNotExpTipShow = false --不显示非经验Tips end -- 等级礼包奖励 function Reward_Model.RequestLevelGift(id) local msg = level_gift_pb.LevelGiftReq() msg.id = id NetManager.SendMessage(MessageEnums.MessageLevelGift, msg) end function private.ResponseLevelGift(msgResp) EventSystem.Dispatch(EventID.UI_WelfareBase_RefreshRedPoint) end function Reward_Model.UpdateLevelGiftClaim(leveUpGiftInfo) if IsServerDataNotNil(leveUpGiftInfo) then if leveUpGiftInfo.receivedIds and #leveUpGiftInfo.receivedIds > 0 then for _, id in ipairs (leveUpGiftInfo.receivedIds) do if not private.levelGiftClaimed[id] then private.levelGiftClaimed[id] = true end end end end EventSystem.Dispatch(EventID.UI_EnergyGet_EnergyStateRefresh) EventSystem.Dispatch(EventID.UI_LevelUpGift_Refresh) end function Reward_Model.GetShowLevelUpGifts() if private.showLevelUpGiftCount < DataSheetManager.LevelUpGift:GetDataCount() then if not private.showLevelUpGifts then private.showLevelUpGifts = LuaExt.CreateTable(DataSheetManager.LevelUpGift:GetDataCount()) else while (private.showLevelUpGiftCount > 0) do private.showLevelUpGifts[private.showLevelUpGiftCount] = nil private.showLevelUpGiftCount = private.showLevelUpGiftCount - 1 end end local newCompleteRewardData = DataSheetManager.LevelUpGift:GetDataByID(1) for _, v in DataSheetManager.LevelUpGift:GetEnumerator() do local rewardData = DataSheetManager.LevelUpGiftReward:GetDataByID(v.Reward) local rewardState = Reward_Model.GetLevelUpGiftState(v) if rewardState ~= Reward_Model.LevelUpGiftState.Locked then newCompleteRewardData = v table.insert(private.showLevelUpGifts, {data = v, Item_Table = rewardData.Item_Table}) private.showLevelUpGiftCount = private.showLevelUpGiftCount + 1 else break end end if private.showLevelUpGiftCount < DataSheetManager.LevelUpGift:GetDataCount() then local startIndex = Reward_Model.GetLevelUpGiftState(newCompleteRewardData) ~= Reward_Model.LevelUpGiftState.Locked and newCompleteRewardData.ID + 1 or newCompleteRewardData.ID local endIndex = newCompleteRewardData.Preview > 0 and newCompleteRewardData.ID + newCompleteRewardData.Preview or DataSheetManager.LevelUpGift:GetDataCount() for i = startIndex, endIndex do local levelUpGiftData = DataSheetManager.LevelUpGift:GetDataByID(i) local rewardData = DataSheetManager.LevelUpGiftReward:GetDataByID(levelUpGiftData.Reward) table.insert(private.showLevelUpGifts, {data = levelUpGiftData, Item_Table = rewardData.Item_Table}) private.showLevelUpGiftCount = private.showLevelUpGiftCount + 1 end end end table.sort(private.showLevelUpGifts, private.SortLevelUpGift) return private.showLevelUpGifts end function private.SortLevelUpGift(a, b) local aState = Reward_Model.GetLevelUpGiftState(a.data) local bState = Reward_Model.GetLevelUpGiftState(b.data) if aState == bState then return a.data.Level < b.data.Level end return aState < bState end function Reward_Model.GetLevelUpGiftState(leveUpGift) local teamLevel = MDL.Player.GetRoleLevel() if teamLevel and teamLevel >= leveUpGift.Level then return private.levelGiftClaimed[leveUpGift.ID] == true and Reward_Model.LevelUpGiftState.Claimed or Reward_Model.LevelUpGiftState.CanClaim end return Reward_Model.LevelUpGiftState.Locked end function Reward_Model.IsHasLeveUpGiftToGet() if not private.showLevelUpGifts then Reward_Model.GetShowLevelUpGifts() end for _, v in DataSheetManager.LevelUpGift:GetEnumerator() do if Reward_Model.GetLevelUpGiftState(v) == Reward_Model.LevelUpGiftState.CanClaim then return true end end return false end local rewardsArr = {} --徐倩修改 策划秦斌需要所有奖励都弹tips 弹窗根据配置决定 function Reward_Model.GainRewards(rewards, rewardShowId, serverLevelEffectVal) if private.isCloseRewardTipShow or #rewards <= 0 then -- 只获得道具经验的时候,判断是否受服务器等级影响 if serverLevelEffectVal and serverLevelEffectVal < 0 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_ServerLevel_TIPS_NoExp"]) end return end --这里主要是解决红包雨最后一个红包弹出奖励提示面板的问题 if private.isCloseRewardTipShowTime then if UTL.Time.GetServerTimestamp()-private.isCloseRewardTipShowTime<2 then return end end local rewardShowData = DataSheetManager.RewardShow:GetDataByRewardShowID(rewardShowId) if rewardShowData.ShowType == Reward_Model.RewardShowType.ShowSeniorCutsceneTips then for _, reward in ipairs(rewards) do CTL.Tips.AddImageTip(reward.ItemId, reward.ItemCount, UIUtils.GetLocalizedTxt(Const_IDS.IDS_Timeline_Reward)) end return end if rewardShowData.ShowType == Reward_Model.RewardShowType.ShowOfficialPositionReward then CTL.HomeMain.AddTownHomeDelayView(Const_UI_Lua.UIEnum.UIRewardGainPanel, { itemList = rewards, topContentIDS = "IDS_OfficialPosition_FirstPromotionAward" }) return end table.sort(rewards, private.SortRewards) --显示经验Tip local noExperience = true table.clearArray(rewardsArr) for _, reward in ipairs(rewards) do -- 只添加数量不为0的奖励 if reward.ItemCount > 0 then table.insert(rewardsArr, reward) end if reward.ItemId == Reward_Model.ExpItemId then noExperience = false local extraDesc if serverLevelEffectVal > 0 then -- 有加成 extraDesc = UIUtils.GetLocalizedTxt(Const_IDS.IDS_ExpAddWithServerLevelBonus) elseif serverLevelEffectVal < 0 then -- 经验衰减 extraDesc = UIUtils.GetLocalizedTxt(Const_IDS.IDS_ExpAddWithServerLevelLimit) end CTL.Tips.AddImageTip(reward.ItemId, reward.ItemCount, extraDesc) else -- 当获得道具中没有经验时,判断是否弹出提示 if not private.isCloseNotExpTipShow then CTL.Tips.AddImageTip(reward.ItemId, reward.ItemCount) end end end if serverLevelEffectVal and serverLevelEffectVal < 0 and noExperience then CTL.Tips.AddTipsMsg(Const_IDS["IDS_ServerLevel_TIPS_NoExp"]) end --根据类型判断是否显示奖励展示面板 if rewardShowData.ShowType == Reward_Model.RewardShowType.ShowPanel then CTL.Reward.ShowRewardPanel(rewardsArr) elseif rewardShowData.ShowType == Reward_Model.RewardShowType.DelayTownShowPanel then CTL.HomeMain.AddTownHomeDelayView(Const_UI_Lua.UIEnum.UIRewardGainPanel, rewardsArr) end end function Reward_Model.SetCloseRewardTipShow(isClose, isSetTime) private.isCloseRewardTipShow = isClose --记录恢复奖励提示面板的时间,主要是红包雨恢复后两秒内不弹出奖励提示面板 if not isClose and isSetTime then private.isCloseRewardTipShowTime = UTL.Time.GetServerTimestamp() end -- 同时延迟处理进背包弹出的快速使用界面 CTL.Bag.SetDelayFastApplyPanel(isClose) end function Reward_Model.SetCloseNotExpTipShow(isClose) private.isCloseNotExpTipShow = isClose end function private.SortRewards(a, b) local itemA = DataSheetManager.ItemData:GetDataByID(a.ItemId) local itemB = DataSheetManager.ItemData:GetDataByID(b.ItemId) local priorityA = itemA.RewardShowPriority local priorityB = itemB.RewardShowPriority if priorityA ~= priorityB then return priorityA > priorityB else return a.ItemId < b.ItemId end end return Reward_Model