源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

199 lines
5.4 KiB

пре 4 недеља
  1. AdvertisementModel = AdvertisementModel or BaseClass(BaseVo, true)
  2. local AdvertisementModel = AdvertisementModel
  3. AdvertisementModel.OPEN_ADVERTISEMENT_VIEW = "AdvertisementModel.OPEN_ADVERTISEMENT_VIEW"
  4. AdvertisementModel.CLOSE_ADVERTISEMENT_VIEW = "AdvertisementModel.CLOSE_ADVERTISEMENT_VIEW"
  5. -- 广告宣传图类型
  6. AdvertisementModel.AD_TYPE = {
  7. LOGIN = "login", -- 有跳转按钮
  8. INSIDE = "inside", -- 无跳转按钮 隔几秒自动关闭
  9. }
  10. -- 与广告宣传图冲突的界面
  11. AdvertisementModel.CONFLICT_VIEW = {
  12. BEACH = "BEACH",
  13. }
  14. function AdvertisementModel:__init()
  15. AdvertisementModel.Instance = self
  16. self:Reset()
  17. end
  18. function AdvertisementModel:Reset()
  19. self.advertisement_data = {}
  20. self.ad_cookie = {}
  21. self.conflict_view_list = {}
  22. self.scene_is_load = false
  23. end
  24. function AdvertisementModel.getInstance()
  25. if AdvertisementModel.Instance == nil then
  26. AdvertisementModel.Instance = AdvertisementModel.New()
  27. end
  28. return AdvertisementModel.Instance
  29. end
  30. --[[
  31. {
  32. condition_list = table: 0x1b873c50
  33. {
  34. 1 = table: 0x1b823c78
  35. {
  36. 1 = open_lv
  37. 2 = 315
  38. }
  39. 2 = table: 0x1b873c78
  40. {
  41. 1 = adpic
  42. 2 = 1
  43. }
  44. 3 = table: 0x1b873ce0
  45. {
  46. 1 = login
  47. 2 = table: 0x1b873d28
  48. {
  49. 1 = 331
  50. 2 = 70
  51. }
  52. }
  53. }
  54. stime = 1597248000
  55. base_type = 73
  56. sub_type = 101
  57. etime = 1597939199
  58. desc =
  59. condition = [{adpic,1},{login,{331,70}}]
  60. is_first_open = 0
  61. wlv = 335
  62. name = 广
  63. act_type = 3
  64. }
  65. --]]
  66. -- 检查是否需要展示登陆活动广告
  67. function AdvertisementModel:CheckAdNeedShow( vo )
  68. local server_time = TimeUtil:getServerTime()
  69. local cur_lv = RoleManager.Instance.mainRoleInfo.level
  70. local need_lv = tonumber(vo.condition_list[1][2])
  71. if server_time > vo.stime and vo.etime > server_time and need_lv <= cur_lv then
  72. self:SetAdvertisementData(vo)
  73. if self.advertisement_data[vo.sub_type].ad_tpye == AdvertisementModel.AD_TYPE.LOGIN and self:TodayIsFirstShow( vo.sub_type ) then
  74. if self:CheckViewIsConflict() then -- 如果有互斥界面已经打开了 本次就不弹出了
  75. return
  76. end
  77. -- self.ad_cookie[vo.sub_type] = false
  78. -- self:SetADCookie()
  79. self:Fire(AdvertisementModel.OPEN_ADVERTISEMENT_VIEW, vo.sub_type)
  80. end
  81. end
  82. end
  83. -- 打开运营活动界面后 检查是否需要展示活动广告
  84. function AdvertisementModel:CheckAndShowActivityAd( base_type )
  85. if not base_type then return end
  86. for ad_sub_type, data in pairs(self.advertisement_data) do
  87. if data.ad_tpye == AdvertisementModel.AD_TYPE.INSIDE and tonumber(data.module_data[2]) == base_type and self:TodayIsFirstShow( ad_sub_type ) then
  88. self.ad_cookie[ad_sub_type] = false
  89. self:SetADCookie()
  90. self:Fire(AdvertisementModel.OPEN_ADVERTISEMENT_VIEW, ad_sub_type)
  91. break
  92. end
  93. end
  94. end
  95. -- 检查是否可以开始检查
  96. function AdvertisementModel:CheckAd( vo )
  97. if self.scene_is_load then
  98. self.need_login_check = false
  99. self:CheckAdNeedShow(vo)
  100. else
  101. self.need_login_check = true
  102. self.temp_vo_list = self.temp_vo_list or {}
  103. table.insert(self.temp_vo_list, vo)
  104. end
  105. end
  106. -- 设置登陆状态
  107. function AdvertisementModel:SetSceneLoadState( )
  108. self.scene_is_load = true
  109. self:LoadADCookie()
  110. self:UpdateCookie()
  111. if self.need_login_check then
  112. self.need_login_check = false
  113. for i,v in ipairs(self.temp_vo_list) do
  114. self:CheckAdNeedShow( v )
  115. end
  116. self.temp_vo_list = nil
  117. end
  118. end
  119. -- 保存活动宣传图的数据
  120. function AdvertisementModel:SetAdvertisementData( vo )
  121. self.advertisement_data[vo.sub_type] = vo
  122. local temp = self.advertisement_data[vo.sub_type]
  123. temp.open_lv = vo.condition_list[1][2]
  124. temp.ad_tpye = vo.condition_list[3][1]
  125. temp.module_data = vo.condition_list[3][2]
  126. temp.ad_pic = Trim( "ad_pic" .. tostring(vo.condition_list[2][2]) )
  127. end
  128. function AdvertisementModel:GetAdvertisementData( sub_type )
  129. assert(self.advertisement_data[sub_type], "not data!")
  130. return self.advertisement_data[sub_type]
  131. end
  132. function AdvertisementModel:TodayIsFirstShow( sub_type )
  133. if self.ad_cookie[sub_type] == nil then
  134. self.ad_cookie[sub_type] = true
  135. end
  136. return self.ad_cookie[sub_type]
  137. end
  138. function AdvertisementModel:SetSubTypeCookie( sub_type, bool )
  139. self.ad_cookie[sub_type] = bool
  140. self:SetADCookie()
  141. end
  142. -- cookie操作
  143. --设置宣传图cookie
  144. function AdvertisementModel:SetADCookie()
  145. CookieWrapper.Instance:SaveCookie(CookieLevelType.Account, CookieTimeType.TYPE_ALWAYS, CookieKey.ADVERTISEMENT_SHOW, self.ad_cookie)
  146. CookieWrapper.Instance:WriteAll()
  147. end
  148. --获取宣传图cookie
  149. function AdvertisementModel:LoadADCookie()
  150. local temp = CookieWrapper.Instance:GetCookie(CookieLevelType.Account, CookieKey.ADVERTISEMENT_SHOW)
  151. self.ad_cookie = temp or {}
  152. end
  153. function AdvertisementModel:UpdateCookie( )
  154. if NewMainRoleModel:getInstance():IsTodayFirstLogin() then
  155. self.ad_cookie = {}
  156. self:SetADCookie()
  157. end
  158. end
  159. function AdvertisementModel:ResetCookieBySubType( sub_type )
  160. self.ad_cookie[sub_type] = true
  161. self:SetADCookie()
  162. end
  163. -- 设置互斥界面的开启状态 如果有互斥界面打开了, 触发关闭广告的事件
  164. function AdvertisementModel:AddConflictViewState( conflict_view, is_open )
  165. self.conflict_view_list = self.conflict_view_list or {}
  166. self.conflict_view_list[conflict_view] = is_open
  167. if is_open then
  168. self:Fire(AdvertisementModel.CLOSE_ADVERTISEMENT_VIEW)
  169. end
  170. end
  171. -- 检查是否有互斥的界面正在显示
  172. function AdvertisementModel:CheckViewIsConflict( )
  173. for k,v in pairs(self.conflict_view_list) do
  174. if v then
  175. return true
  176. end
  177. end
  178. return false
  179. end