珍稀礼包系统
从周三至周五这三天时间我完成了一个简单的珍稀礼包系统。
包含的内容:该系统主要包括显示出珍稀物品、购买功能、购买后进入可领取状态以及用户当天首次登录的红点功能和物品已购买但未领取状态下的显示红点功能。
代码:
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