AdvertisementModel = AdvertisementModel or BaseClass(BaseVo, true)
|
|
local AdvertisementModel = AdvertisementModel
|
|
AdvertisementModel.OPEN_ADVERTISEMENT_VIEW = "AdvertisementModel.OPEN_ADVERTISEMENT_VIEW"
|
|
AdvertisementModel.CLOSE_ADVERTISEMENT_VIEW = "AdvertisementModel.CLOSE_ADVERTISEMENT_VIEW"
|
|
|
|
-- 广告宣传图类型
|
|
AdvertisementModel.AD_TYPE = {
|
|
LOGIN = "login", -- 有跳转按钮
|
|
INSIDE = "inside", -- 无跳转按钮 隔几秒自动关闭
|
|
}
|
|
|
|
-- 与广告宣传图冲突的界面
|
|
AdvertisementModel.CONFLICT_VIEW = {
|
|
BEACH = "BEACH",
|
|
}
|
|
|
|
function AdvertisementModel:__init()
|
|
AdvertisementModel.Instance = self
|
|
self:Reset()
|
|
end
|
|
|
|
function AdvertisementModel:Reset()
|
|
self.advertisement_data = {}
|
|
self.ad_cookie = {}
|
|
self.conflict_view_list = {}
|
|
self.scene_is_load = false
|
|
end
|
|
|
|
function AdvertisementModel.getInstance()
|
|
if AdvertisementModel.Instance == nil then
|
|
AdvertisementModel.Instance = AdvertisementModel.New()
|
|
end
|
|
return AdvertisementModel.Instance
|
|
end
|
|
|
|
--[[
|
|
{
|
|
condition_list = table: 0x1b873c50
|
|
{
|
|
1 = table: 0x1b823c78
|
|
{
|
|
1 = open_lv
|
|
2 = 315
|
|
}
|
|
2 = table: 0x1b873c78
|
|
{
|
|
1 = adpic
|
|
2 = 1
|
|
}
|
|
3 = table: 0x1b873ce0
|
|
{
|
|
1 = login
|
|
2 = table: 0x1b873d28
|
|
{
|
|
1 = 331
|
|
2 = 70
|
|
}
|
|
}
|
|
}
|
|
stime = 1597248000
|
|
base_type = 73
|
|
sub_type = 101
|
|
etime = 1597939199
|
|
desc = 限时活动
|
|
condition = [{adpic,1},{login,{331,70}}]
|
|
is_first_open = 0
|
|
wlv = 335
|
|
name = 活动广告图
|
|
act_type = 3
|
|
}
|
|
--]]
|
|
-- 检查是否需要展示登陆活动广告
|
|
function AdvertisementModel:CheckAdNeedShow( vo )
|
|
local server_time = TimeUtil:getServerTime()
|
|
local cur_lv = RoleManager.Instance.mainRoleInfo.level
|
|
local need_lv = tonumber(vo.condition_list[1][2])
|
|
if server_time > vo.stime and vo.etime > server_time and need_lv <= cur_lv then
|
|
self:SetAdvertisementData(vo)
|
|
if self.advertisement_data[vo.sub_type].ad_tpye == AdvertisementModel.AD_TYPE.LOGIN and self:TodayIsFirstShow( vo.sub_type ) then
|
|
if self:CheckViewIsConflict() then -- 如果有互斥界面已经打开了 本次就不弹出了
|
|
return
|
|
end
|
|
-- self.ad_cookie[vo.sub_type] = false
|
|
-- self:SetADCookie()
|
|
self:Fire(AdvertisementModel.OPEN_ADVERTISEMENT_VIEW, vo.sub_type)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 打开运营活动界面后 检查是否需要展示活动广告
|
|
function AdvertisementModel:CheckAndShowActivityAd( base_type )
|
|
if not base_type then return end
|
|
for ad_sub_type, data in pairs(self.advertisement_data) do
|
|
if data.ad_tpye == AdvertisementModel.AD_TYPE.INSIDE and tonumber(data.module_data[2]) == base_type and self:TodayIsFirstShow( ad_sub_type ) then
|
|
self.ad_cookie[ad_sub_type] = false
|
|
self:SetADCookie()
|
|
self:Fire(AdvertisementModel.OPEN_ADVERTISEMENT_VIEW, ad_sub_type)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 检查是否可以开始检查
|
|
function AdvertisementModel:CheckAd( vo )
|
|
if self.scene_is_load then
|
|
self.need_login_check = false
|
|
self:CheckAdNeedShow(vo)
|
|
else
|
|
self.need_login_check = true
|
|
self.temp_vo_list = self.temp_vo_list or {}
|
|
table.insert(self.temp_vo_list, vo)
|
|
end
|
|
end
|
|
|
|
-- 设置登陆状态
|
|
function AdvertisementModel:SetSceneLoadState( )
|
|
self.scene_is_load = true
|
|
self:LoadADCookie()
|
|
self:UpdateCookie()
|
|
if self.need_login_check then
|
|
self.need_login_check = false
|
|
for i,v in ipairs(self.temp_vo_list) do
|
|
self:CheckAdNeedShow( v )
|
|
end
|
|
self.temp_vo_list = nil
|
|
end
|
|
end
|
|
|
|
-- 保存活动宣传图的数据
|
|
function AdvertisementModel:SetAdvertisementData( vo )
|
|
self.advertisement_data[vo.sub_type] = vo
|
|
local temp = self.advertisement_data[vo.sub_type]
|
|
|
|
temp.open_lv = vo.condition_list[1][2]
|
|
temp.ad_tpye = vo.condition_list[3][1]
|
|
temp.module_data = vo.condition_list[3][2]
|
|
temp.ad_pic = Trim( "ad_pic" .. tostring(vo.condition_list[2][2]) )
|
|
end
|
|
|
|
function AdvertisementModel:GetAdvertisementData( sub_type )
|
|
assert(self.advertisement_data[sub_type], "not data!")
|
|
return self.advertisement_data[sub_type]
|
|
end
|
|
|
|
function AdvertisementModel:TodayIsFirstShow( sub_type )
|
|
if self.ad_cookie[sub_type] == nil then
|
|
self.ad_cookie[sub_type] = true
|
|
end
|
|
return self.ad_cookie[sub_type]
|
|
end
|
|
|
|
|
|
function AdvertisementModel:SetSubTypeCookie( sub_type, bool )
|
|
self.ad_cookie[sub_type] = bool
|
|
self:SetADCookie()
|
|
end
|
|
|
|
-- cookie操作
|
|
--设置宣传图cookie
|
|
function AdvertisementModel:SetADCookie()
|
|
CookieWrapper.Instance:SaveCookie(CookieLevelType.Account, CookieTimeType.TYPE_ALWAYS, CookieKey.ADVERTISEMENT_SHOW, self.ad_cookie)
|
|
CookieWrapper.Instance:WriteAll()
|
|
end
|
|
|
|
--获取宣传图cookie
|
|
function AdvertisementModel:LoadADCookie()
|
|
local temp = CookieWrapper.Instance:GetCookie(CookieLevelType.Account, CookieKey.ADVERTISEMENT_SHOW)
|
|
self.ad_cookie = temp or {}
|
|
end
|
|
|
|
function AdvertisementModel:UpdateCookie( )
|
|
if NewMainRoleModel:getInstance():IsTodayFirstLogin() then
|
|
self.ad_cookie = {}
|
|
self:SetADCookie()
|
|
end
|
|
end
|
|
|
|
function AdvertisementModel:ResetCookieBySubType( sub_type )
|
|
self.ad_cookie[sub_type] = true
|
|
self:SetADCookie()
|
|
end
|
|
|
|
-- 设置互斥界面的开启状态 如果有互斥界面打开了, 触发关闭广告的事件
|
|
function AdvertisementModel:AddConflictViewState( conflict_view, is_open )
|
|
self.conflict_view_list = self.conflict_view_list or {}
|
|
self.conflict_view_list[conflict_view] = is_open
|
|
if is_open then
|
|
self:Fire(AdvertisementModel.CLOSE_ADVERTISEMENT_VIEW)
|
|
end
|
|
end
|
|
|
|
-- 检查是否有互斥的界面正在显示
|
|
function AdvertisementModel:CheckViewIsConflict( )
|
|
for k,v in pairs(self.conflict_view_list) do
|
|
if v then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|