2021-06-04

本文档展示了实现一个珍稀礼包系统的核心代码,包括显示物品、购买功能、红点提示等功能。系统通过接收后端数据来更新商城界面,并根据用户状态显示不同按钮。此外,还详细解释了如何处理用户登录后的红点提示以及购买后未领取的状态指示。
摘要由CSDN通过智能技术生成

珍稀礼包系统

从周三至周五这三天时间我完成了一个简单的珍稀礼包系统。

包含的内容:该系统主要包括显示出珍稀物品、购买功能、购买后进入可领取状态以及用户当天首次登录的红点功能和物品已购买但未领取状态下的显示红点功能。

代码:

1、功能:显示珍稀物品

     实现原理:根据后端下发的数据显示商城中需要展示的物品。

     Manager文件(接收后端下发的数据)中的代码:

     local UnlResourcesManager = LDeclare("UnlResourcesManager", LClass("UnlResourcesManager"))

            UnlResourcesManager._CareModules = Util.NumToDic({

           ActDef.JcRareGift ,

          })

    function UnlResourcesManager : Init()

                       self : RegisterNetWork()

                       self : AddListener()

    end

    function UnlResourcesManager : Reset()

         self.RechargeCardUlInfo = nil     --可以不需要?

    end

    function UnlResourcesManager : RegisterNetWork()

         --下发信息

         LProtoHandle.AddMessageListen(LProtoDefine.ScriptMiscSystem, 196, function(info)

         self.RareShopUIInfo = info

         if self.RareShopUIInfo.state == 1 then

            self : ResetIconTip()

        end

        local isSomeActive = ActivityManager:IsSomeActive(self._CareModules)       --根据服务器下发的购买状态判断是否显示按钮

        if self.RareShopUIInfo.state == 2 then

           isSomeActive = false

       else

          isSomeActive = true

      end

      XEventManager : Sp() : SendEvent(EEvent.RefreshActivityBtn, ELUIPanel.eRareShopUI, isSomeActive)

     LMessage : dispatchEvent(ELEvent.RefreshRareShopData)

     end)

end

function UnlResourcesManager : GetRareShopInfo()

     return self.RareShopUIInfo

end

function UnlResourcesManager : AddListener()

     LMessage : addEvent(ELEvent.RefreshMouduleState, function(module0)

               self : RefreshModule(module0)

    end)

    XEventManager : Sp() : AddHandler(function(eventId, args)

              self : GetCareDatas()

              self : ResetIconTip()

              self : ResetUnlimitIconTip()

    end, EEvent.Main_Player_Inited) 

end

function UnlResourcesManager : GetCareDatas()

      ActivityManager : RequestModuleInfos(self._CareModules)

end

function UnlResourcesManager : GetRareCfg()      --得到相应配置

      local subAct = ActivityManager : GetModuleBymid(ActDef.JcRareGift)

      if subAct ~= nil then

         self.cfgMgr = XCfgManager.GetXCfgConfig(LEDBConfg_Item.RareShop)

         for i = 0, self.cfgMgr : GetRowCount() - 1 do

         local RareData = self.cfgMgr : LuaGetOneRow(i)

        if subAct : IsUseCfg(RareData) then

           return RareData

        end

        end

     end

     return nil

end

function UnlResourcesManager : RefreshModule(module0)

       if module0 == nil then return end

       local mId = module0 : GetModuleId()

      if self._CareModules[mId] == nil then

         return

      end

      local isSomeActive = ActivityManager:IsSomeActive(self._CareModules)         --活动结束判断是否显示按钮

      if isSomeActive then

             if self.RareShopUIInfo ~= 2 and self.RareShopUIInfo.state == 2 then

                XEventManager : Sp() : SendEvent(EEvent.RefreshActivityBtn, ELUIPanel.eRareShopUI, false)

             else

                XEventManager : Sp() : SendEvent(EEvent.RefreshActivityBtn, ELUIPanel.eRareShopUI, isSomeActive)

             end

       else

              XEventManager : Sp() : SendEvent(EEvent.RefreshActivityBtn, ELUIPanel.eRareShopUI, isSomeActive)

       end

      if not isSomeActive and XUIManager : Sp() : IsShow(ELUPanel.eRareShopUI) then

               XEventManager : Sp() : SendEvent(EEvent.UI_Destroy, ELUIPanel.eRareShopUI)

      end

end

--设置珍稀礼包红点

function UnlResourcesManager : ResetIconTip()

        XIconTipManager : Sp() : RelRef(LuaIconTipManager.enRareShopIcon)

                local l_day = PlayerPrefs.GetInt(saveRareShopIdx..XLogicWorld : Sp().MainPlayer.Name, 0)

                local l_now = LuaStaticTools.GetCurTime()

                local l_today = l_now.Year * 10000 + l_now.Month * 100 + l_now.Day

                if l_day ~= l_today or self.RareShopUIInfo.state == 1 then

                      self.l_showicontip = true

               else

                     self.l_showicontip = false

              end

       if self.l_showicontip then

          XIconTipManager : Sp() : AddRef(LuaIconTipManager.enRareShopIcon)

      end

end

function UnlResourcesManager : OpenUISetIconTip()

        local l_now = LuaStaticTools.GetCurTime()

        local l_today = l_now.Year * 10000 + l_now.Month * 100 + l_now.Day

        PlayerPrefs.SetInt(saveRareShopIdx..XLogicWorld : Sp().MainPlayer.Name, l_today)

        self : ResetIconTip()

end

return UnlResourcesManager

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

RareShopUI中的代码:

local RareShopUI = LDeclare("RareShopUI", LClass("RareShopUI))

function RareShopUI : Init()

      UIEventListener.Get(self.btn).onclick = function(go)

                     if self.btnState == 1 then

                        LuaScriptMiscSystem.CProtoScriptMiscSystemLuaGetRareGiftRwd : write()

                     elseif self.btnState == 2 then

                        LuaStaticTools.Notice(5 , XStringManger : Sp() : Format(991))

                     elseif self.btnState == 0 then

                         VipManager : BuyVipGiftByIdx(self.itemServerCfg.buyIndex)

                     end

      end

end

function RareShopUI : Show()

       self : RefreshBtn()

       self : SetLeftTime()

       self : SetItemShow()

       self : AddListener()

       UnlResourcesManager : OpenUISetIconTip() 

end

function RareShopUI : Hide()

       self : RemoveListener()

       if nil ~= self.mainTimer then

          LuaTimer.Delete(self.mainTimer)

          self.mainTimer = nil

       end

end

function RareShopUI : OnDestroy()

      self : RemoveListener()

end

function RareShopUI : AddListener()

     if self.RefreshRareShopUIFunc == nil then

        self.RefreshRareShopUIFunc = function()

               self : RefreshBtn()

        end

        LMessage : addEvent(ELEvent.RefreshRareShopData, self.RefreshRareShopUIFunc)

     end

end

function RareShopUI : RemoveListener()

     if self.RefreshRareShopUIFunc ~= nil then

        LMessage : removeEvent(ELEvent.RefreshRareShopData, self.RefreshRareShopUIFunc)

        self.RefreshRareShopUIFunc = nil

     end

end

function RareShopUI : RefreshBtn()

      self.RareShopInfo = UnlResourcesManager : GetRareShopInfo()

      self.btnState = self.RareShopInfo.state

      if self.btnState == 1 then

         self.btnEffect : SetActive(true)

         self.btnBoxCollider.enabled = true

         self.btnLabel.text = XStringManager : Sp() : GetString(203)  --可领取

         XUIDynamicAtlas : Sp() : SetSprite(self.btnSprite, 1815, "yellow_btn_2")

      elseif self.btnState == 2 then

         self.btnEffect : SetActive(false)

         self.btnBoxCollider.enabled = true

         self.btnLabel.text = XStringManager : Sp() : GetString(991)  --已领取

         XUIDynamicAtlas : Sp() : SetSprite(self.btnSprite, 1816, "yellow_btn_2")

     elseif self.btnState == 0 then

         self.btnEffect : SetActive(false)

         self.btnBoxCollider.enabled = true

         self.btnLabel.text = XStringManager : Sp() : GetString(15968)  --未购买

         XUIDynamicAtlas : Sp() : SetSprite(self.btnSprite, 1815, "yellow_btn_2")

     end

end

function RareShopUI : SetLeftTime()

       local subAct = ActivityManager : GetModuleBymid(ActDef.JcRareGift)

       if subAct == nil or not subAct : IsActive() then

          print("活动未激活")

          return

       end

       lcoal timeInfo = subAct : GetShowTimeInfo()

       if timeInfo == nil then return end

       if self._luaLeftTime == nil then

          self._luaLeftTime = LuaLeftTime()

          self._luaLeftTime : SetCountFunc(function(leftTimeTxt, leftTimeTick)

               self : UpdateTimeTick(leftTimeTick)

          end)

      end

      self._luaLeftTime : SetEndMiniTime(timeInfo.endTime)

end

function RareShopUI : UpdateTimeTick(leftTime)

       leftTime = math.floor(leftTime)

       local sec = math.floor(leftTime % 3600 % 60)

       local min = math.floor(leftTime % 3600 / 60)

       local hour = math.floor(leftTime / 3600)

       self.timeValue.text = XStringManager : Sp() : GetString(11865)..string.format("[28e628]%02d : %02d[-]", hour, min, sec)

end

function RareShopUI : SetItemShow()

      self.itemServerCfg = UnlResourcesManager : GetRareCfg()

      if self.itemServerCfg == nil then return end

      self.itemList = {}

      for i = 0, self.itemServerCfg.rewardId.Length - 1 do

                self.itemList [ i +1 ] = {}

                self.itemList [ i + 1 ].this = XUtil.Instantiate(self.item, self.itemGrid.transform)

                XSpringActivity.MakeNewActionIcon(self.itemList [ i + 1 ].this, self.itemServerCfg.rewardId [ i ], 0, 0, self.itemServerCfg.rewardCount[ i ], 0)

      end

end

return RareShopUI

 

 

 

 

 

 

 

 

    

               

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值