188 lines
6.3 KiB
Lua
188 lines
6.3 KiB
Lua
local LimitDicretShopMgr2 = {
|
|
DataDic = Dictionary:New(),
|
|
IsInitCfg = false,
|
|
FreeGiftRemainTime = 0,
|
|
}
|
|
|
|
function LimitDicretShopMgr2:Initialize()
|
|
self.IsInitCfg = false
|
|
self.TipsMap = {}
|
|
GameCenter.RegFixEventHandle(LogicEventDefine.EID_EVENT_FIRSTENTERMAP, self.OnFirstEnterMap, self)
|
|
end
|
|
|
|
function LimitDicretShopMgr2:UnInitialize()
|
|
self.DataDic:Clear()
|
|
GameCenter.UnRegFixEventHandle(LogicEventDefine.EID_EVENT_FIRSTENTERMAP, self.OnFirstEnterMap, self)
|
|
end
|
|
|
|
function LimitDicretShopMgr2:InitCfg()
|
|
DataConfig.DataLimitGoldShop:Foreach(function(k, v)
|
|
local _item = {}
|
|
_item.Cfg = v
|
|
_item.BuyNum = v.BuyNum
|
|
_item.ID = k
|
|
if self.DataDic:ContainsKey(v.Group) then
|
|
self.DataDic[v.Group].DataList:Add(_item)
|
|
else
|
|
local _data = {}
|
|
_data.DataList = List:New()
|
|
_data.DataList:Add(_item)
|
|
_data.RemainTime = 0
|
|
self.DataDic:Add(v.Group, _data)
|
|
end
|
|
end)
|
|
self.IsInitCfg = true
|
|
end
|
|
|
|
function LimitDicretShopMgr2:Update(dt)
|
|
local _setFunc = false
|
|
local _keys = self.DataDic:GetKeys()
|
|
for i=1,#_keys do
|
|
local k = _keys[i]
|
|
local v = self.DataDic[k]
|
|
if v.RemainTime > 0 then
|
|
v.RemainTime = v.RemainTime - dt
|
|
if v.RemainTime <= 0 then
|
|
v.RemainTime = 0
|
|
_setFunc = true
|
|
elseif not self.TipsMap[k] and v.RemainTime <= 600 and v.RemainTime >= 599 and self:GoodsIsBuyOut(v) then
|
|
self.TipsMap[k] = true;
|
|
if not self.IsShowingTips then
|
|
self.IsShowingTips = true;
|
|
GameCenter.MsgPromptSystem:ShowMsgBox(true, DataConfig.DataMessageString.Get("LimitShopOutOfDateTips"), function(code)
|
|
if code == MsgBoxResultCode.Button2 then
|
|
GameCenter.PushFixEvent(UILuaEventDefine.UILimitDicretShopForm2_OPEN);
|
|
end
|
|
self.IsShowingTips = false;
|
|
end, false, false, 10);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if _setFunc then
|
|
self:SetFunctionVisible()
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LIMITDICRETESHOP_UPDATE, _setFunc)
|
|
end
|
|
if self.FreeGiftRemainTime > 0 then
|
|
self.FreeGiftRemainTime = self.FreeGiftRemainTime - dt
|
|
if self.FreeGiftRemainTime <= 0 then
|
|
self.FreeGiftRemainTime = 0
|
|
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.LimitDicretShop2, true)
|
|
end
|
|
end
|
|
end
|
|
|
|
function LimitDicretShopMgr2:GoodsIsBuyOut(v)
|
|
local _find = false
|
|
if v and v.DataList then
|
|
for j = 1, #v.DataList do
|
|
if v.DataList[j].BuyNum > 0 then
|
|
_find = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return _find
|
|
end
|
|
|
|
function LimitDicretShopMgr2:SetFunctionVisible()
|
|
local _isHave = false
|
|
self.DataDic:ForeachCanBreak(function(k, v)
|
|
if v.RemainTime > 0 and self:GoodsIsBuyOut(v) then
|
|
_isHave = true
|
|
return true
|
|
end
|
|
end)
|
|
GameCenter.MainFunctionSystem:SetFunctionVisible(FunctionStartIdCode.LimitDicretShop2, _isHave)
|
|
end
|
|
|
|
--获取某个折扣礼包的剩余时间
|
|
function LimitDicretShopMgr2:GetGoodsRemainTime(id)
|
|
local _rem = 0
|
|
local _idList = Utils.SplitNumber(id, '_')
|
|
if _idList and #_idList > 0 then
|
|
self.DataDic:ForeachCanBreak(function(k, v)
|
|
if _idList:Contains(k) then
|
|
for j = 1, #v.DataList do
|
|
if v.DataList[j].BuyNum > 0 and v.RemainTime > 0 then
|
|
_rem = v.RemainTime
|
|
break
|
|
end
|
|
end
|
|
if _rem > 0 then
|
|
return true
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
return _rem > 0
|
|
end
|
|
|
|
function LimitDicretShopMgr2:GetDataDic(type)
|
|
if not self.IsInitCfg then
|
|
self:InitCfg()
|
|
end
|
|
if type then
|
|
return self.DataDic[type]
|
|
end
|
|
return self.DataDic
|
|
end
|
|
|
|
function LimitDicretShopMgr2:OnFirstEnterMap(obj, sendeer)
|
|
self.IsEnterMap = true
|
|
if GameCenter.MainFunctionSystem:FunctionIsVisible(FunctionStartIdCode.LimitDicretShop2) then
|
|
GameCenter.Network.Send("MSG_Recharge.ReqDiscountRecharge", {type = 1})
|
|
GameCenter.MainFunctionSystem:SetFunctionVisible(FunctionStartIdCode.LimitDicretShop2, false)
|
|
end
|
|
end
|
|
|
|
--服务器数据下发
|
|
function LimitDicretShopMgr2:ResDiscountRechargeData(msg)
|
|
if not self.IsInitCfg then
|
|
self:InitCfg()
|
|
end
|
|
if not self.IsEnterMap then
|
|
return
|
|
end
|
|
if msg.freeGoodsRemainTime then
|
|
self.FreeGiftRemainTime = msg.freeGoodsRemainTime / 1000
|
|
else
|
|
self.FreeGiftRemainTime = 0
|
|
end
|
|
local _findKey = 1
|
|
if msg.items then
|
|
for i = 1, #msg.items do
|
|
self.DataDic:ForeachCanBreak(function(k, v)
|
|
local _find = false
|
|
for j = 1, #v.DataList do
|
|
if v.DataList[j].ID == msg.items[i].id then
|
|
v.DataList[j].BuyNum = v.DataList[j].BuyNum - msg.items[i].count
|
|
v.RemainTime = msg.items[i].timeout
|
|
_find = true
|
|
break
|
|
end
|
|
end
|
|
if _find then
|
|
_findKey = k
|
|
return true
|
|
end
|
|
end)
|
|
end
|
|
self:SetFunctionVisible()
|
|
end
|
|
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.LimitDicretShop2, self.FreeGiftRemainTime <= 0)
|
|
if msg.first and msg.first == 1 then
|
|
GameCenter.PushFixEvent(UILuaEventDefine.UILimitDicretShopForm2_OPEN, _findKey)
|
|
elseif msg.first and msg.first == 2 then
|
|
if not self.IsShowedOverTimeShop then
|
|
GameCenter.MsgPromptSystem:ShowMsgBox(true, DataConfig.DataMessageString.Get("LimitShopOutOfDateTipsAddTime"), function(code)
|
|
if code == MsgBoxResultCode.Button2 then
|
|
GameCenter.PushFixEvent(UILuaEventDefine.UILimitDicretShopForm2_OPEN);
|
|
end
|
|
end, false, false, 10);
|
|
self.IsShowedOverTimeShop = true;
|
|
end
|
|
end
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LIMITDICRETESHOP_UPDATE)
|
|
end
|
|
return LimitDicretShopMgr2 |