local BTRechargeRewardDataMgr = class('BTRechargeRewardDataMgr', require('DataBase')) function BTRechargeRewardDataMgr:ctor() self.firstRechargeRewardState = 0 self.hundredRechargeUnlockState = false self.hundredRechargeRewardMaxDay = 0 self.hundredRechargeRewardCurDay = 0 self.btTotalRecharge = 0 end function BTRechargeRewardDataMgr:Clear() self.firstRechargeRewardState = 0 self.hundredRechargeUnlockState = false self.hundredRechargeRewardMaxDay = 0 self.hundredRechargeRewardCurDay = 0 self.btTotalRecharge = 0 end function BTRechargeRewardDataMgr:Destroy() self.firstRechargeRewardState = nil self.hundredRechargeUnlockState = nil self.hundredRechargeRewardMaxDay = nil self.hundredRechargeRewardCurDay = nil self.btTotalRecharge = nil self:UnRegisterNetEvents() end function BTRechargeRewardDataMgr:RegisterNetEvents() ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BT_FIRST_RECHARGE_NTF, self.OnBTFirstRechargeNtf, self) ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BT_FIRST_RECHARGE_REWARD_ACK, self.OnBTFirstRechargeRewardAck, self) ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BT_RECHARGE100_NTF, self.OnBTHundredRechargeNtf, self) ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BT_RECHARGE100_REWARD_ACK, self.OnBTHundredRechargeRewardAck, self) ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PAY_INFO_NTF, self.OnPayInfoNtf, self) end function BTRechargeRewardDataMgr:UnRegisterNetEvents() ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BT_FIRST_RECHARGE_NTF) ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BT_FIRST_RECHARGE_REWARD_ACK) ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BT_RECHARGE100_NTF) ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BT_RECHARGE100_REWARD_ACK) ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BT_FIRST_RECHARGE_NTF) ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_PAY_INFO_NTF, self.OnPayInfoNtf, self) end function BTRechargeRewardDataMgr:OnBTFirstRechargeNtf(data) if not data.first_recharge_time or data.first_recharge_time <= 0 then return end local firstRechargeRewardState = self.firstRechargeRewardState self.firstRechargeRewardState = data.first_recharge_reward_state or 0 if self.firstRechargeRewardState ~= firstRechargeRewardState then ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BT_FIRST_RECHARGE_REWARD_CHANGED) self:CheckFirstRechargeRedPoint() end end function BTRechargeRewardDataMgr:OnBTFirstRechargeRewardAck(data) if ManagerContainer.NetManager:IsErrorData(data) then return end if data.reward_item_list then local rewardList = {} for i = 1, #data.reward_item_list do local _itemData = data.reward_item_list[i] rewardList[#rewardList+1] = {cfgId = _itemData.key, num = _itemData.value} end ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPOPGot,{rewards = rewardList}) end ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BT_FIRST_RECHARGE_REWARD_CHANGED, data.reward_idx) end function BTRechargeRewardDataMgr:OnBTHundredRechargeNtf(data) LogWarning("=================OnBTHundredRechargeNtf========================="..Inspect(data)) local hundredRechargeUnlockState = self.hundredRechargeUnlockState local hundredRechargeRewardMaxDay = self.hundredRechargeRewardMaxDay local hundredRechargeRewardCurDay = self.hundredRechargeRewardCurDay self.hundredRechargeUnlockState = data.recharge100_time and data.recharge100_time > 0 or false self.hundredRechargeRewardMaxDay = Mathf.Clamp(data.recharge100_reward_day or 0, 0, 3) self.hundredRechargeRewardCurDay = data.recharge100_reward_state or 0 if self.hundredRechargeUnlockState ~= hundredRechargeUnlockState or self.hundredRechargeRewardMaxDay ~= hundredRechargeRewardMaxDay or self.hundredRechargeRewardCurDay ~= hundredRechargeRewardCurDay then ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BT_HUNDRED_RECHARGE_REWARD_CHANGED) self:CheckHundredRechargeRedPoint() end end function BTRechargeRewardDataMgr:OnBTHundredRechargeRewardAck(data) if ManagerContainer.NetManager:IsErrorData(data) then return end if data.reward_item_list then local rewardList = {} for i = 1, #data.reward_item_list do local _itemData = data.reward_item_list[i] rewardList[#rewardList+1] = {cfgId = _itemData.key, num = _itemData.value} end ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPOPGot,{rewards = rewardList}) end end function BTRechargeRewardDataMgr:OnPayInfoNtf(data) --LogError('[wboy] SC_PAY_INFO_NTF ' .. Inspect(data)) if ManagerContainer.NetManager:IsErrorData(data) then return end local lastBTTotalRecharge = self.btTotalRecharge local jiaTotalRecharge = data.bt_jia_total_recharge or 0 local totalRecharge = data.total_recharge or 0 self.btTotalRecharge = jiaTotalRecharge + totalRecharge if lastBTTotalRecharge == self.btTotalRecharge then return end ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PAY_BT_TOTAL_RECHARGE_CHANGED) ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BT_FIRST_RECHARGE_REWARD_CHANGED) self:CheckFirstRechargeRedPoint() end function BTRechargeRewardDataMgr:SendBTFirstRechargeRewardReq(idx) ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_BT_FIRST_RECHARGE_REWARD_REQ, {reward_idx = idx}) end function BTRechargeRewardDataMgr:SendBTHundredRechargeRewardReq() ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_BT_RECHARGE100_REWARD_REQ) end function BTRechargeRewardDataMgr:InitBtTotalRecharge(data) if not data then return end self:OnPayInfoNtf(data) end function BTRechargeRewardDataMgr:InitData(data) if not data then return end LogWarning("=================InitData========================="..Inspect(data)) local firstRechargeRewardState = self.firstRechargeRewardState local hundredRechargeUnlockState = self.hundredRechargeUnlockState local hundredRechargeRewardMaxDay = self.hundredRechargeRewardMaxDay local hundredRechargeRewardCurDay = self.hundredRechargeRewardCurDay self.firstRechargeRewardState = data.first_recharge_reward_state or 0 self.hundredRechargeUnlockState = data.recharge100_time and data.recharge100_time > 0 or false self.hundredRechargeRewardMaxDay = Mathf.Clamp(data.recharge100_reward_day or 0, 0, 3) self.hundredRechargeRewardCurDay = data.recharge100_reward_state or 0 if self.firstRechargeRewardState ~= firstRechargeRewardState then ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BT_FIRST_RECHARGE_REWARD_CHANGED) self:CheckFirstRechargeRedPoint() end if self.hundredRechargeUnlockState ~= hundredRechargeUnlockState or self.hundredRechargeRewardMaxDay ~= hundredRechargeRewardMaxDay or self.hundredRechargeRewardCurDay ~= hundredRechargeRewardCurDay then ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BT_HUNDRED_RECHARGE_REWARD_CHANGED) self:CheckHundredRechargeRedPoint() end end function BTRechargeRewardDataMgr:CheckFirstRechargeRedPoint() if self:IsShowHundred() or not self.btTotalRecharge or self.btTotalRecharge <= 0 then ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.FirstRecharge, false) return end local cfgData = ManagerContainer.CfgMgr:GetActivitiesBtFirstChargeCfgById(1) for i = 1, #cfgData.RechargeAmount do if not self:GetBTFirstRechargeRewardState(i) and self:IsReachFirstRechargeValue(cfgData.RechargeAmount[i]) then ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.FirstRecharge, true) return end end ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.FirstRecharge, false) end function BTRechargeRewardDataMgr:CheckHundredRechargeRedPoint() if not self.hundredRechargeUnlockState or self.hundredRechargeRewardMaxDay <= self.hundredRechargeRewardCurDay or not self:IsShowHundred() then ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.HundredRecharge, false) return end ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.HundredRecharge, true) end function BTRechargeRewardDataMgr:IsReachFirstRechargeValue(value) --LogError("=====self.btTotalRecharge==="..self.btTotalRecharge.."===========================value"..value); return self.btTotalRecharge >= value end function BTRechargeRewardDataMgr:GetBTFirstRechargeRewardState(idx) local value = Bit.lshift(1, idx) return (Bit.band(self.firstRechargeRewardState, value) == value) end function BTRechargeRewardDataMgr:IsShowHundred() local value = 14 -- 2 + 4 + 8 if not (Bit.band(self.firstRechargeRewardState, value) == value) then return false end return true end function BTRechargeRewardDataMgr:IsGotHundredAllRewardCompleted() return self.hundredRechargeRewardCurDay >= 3 end function BTRechargeRewardDataMgr:GetBTHundredRechargeUnlockState() return self.hundredRechargeUnlockState end function BTRechargeRewardDataMgr:GetBTHundredRechargeRewardMaxDay() return self.hundredRechargeRewardMaxDay end function BTRechargeRewardDataMgr:GetBThundredRechargeRewardState(idx) if self.hundredRechargeRewardMaxDay >= idx then if self.hundredRechargeRewardCurDay >= idx then return Enum.ActivityRewardState.GotAndHas else return Enum.ActivityRewardState.Got end end return Enum.ActivityRewardState.NotGot end return BTRechargeRewardDataMgr