CommonModel = CommonModel or BaseClass(BaseVo, true) local CommonModel = CommonModel -- 右侧通用邀请弹窗的邀请类型 CommonModel.InviteTipsType = { GuildSpellList = 1, -- 社团拼单邀请 Team = 2, -- 组队 Crusade = 3, -- 组队讨伐 GuardinThree = 4, --绝地守卫 EventTips = 5, -- 活动tips } function CommonModel:__init() CommonModel.Instance = self self:Reset() end function CommonModel:Reset() self.list_act_notice = {} self.act_clock_mask_list = {} self.invite_data_cache = {} -- 邀请信息总缓存 self.event_invite_cache = {} -- 活动开启邀请tips缓存 self.act_tip_data_cache = {} -- 活动tips缓存 -- 活动通用弹窗界面使用,上线后一段时间内活动预告界面不开启倒计时和不自动进入活动 self.activity_login_time = TimeUtil:getServerTime() + 10 end function CommonModel:getInstance() if CommonModel.Instance == nil then CommonModel.Instance = CommonModel.New() end return CommonModel.Instance end --存储活动提示信息 function CommonModel:AddActivityNotice( module_id,sub_id,act_start_time,fixed_str,is_loading ) for k,v in pairs(self.list_act_notice) do --过滤掉重复调用的tip缓存 if v.module_id == module_id and v.sub_id == sub_id then return end end table.insert( self.list_act_notice, { module_id = module_id, sub_id = sub_id, act_start_time = act_start_time,--此参数暂时无用,被CommonController的EventName.SCENE_LOAD_VIEW_COMPLETE替代了 fixed_str = fixed_str, is_loading = is_loading }) -- 根据情况判断是否弹出活动邀请tips self:ShowInviteTipInSpercificScene(module_id, sub_id) end --获取一个活动提示数据 function CommonModel:GetActivityNotictOneInfo( delete_module_id,delete_sub_id ) --传值代表取出数据删除,不传表示取出列表第一个数据 delete_sub_id = delete_sub_id or 0 ------------------------- if delete_module_id then local result_data = false local new_tab = {} for k,v in pairs(self.list_act_notice) do if v.module_id == delete_module_id and (v.sub_id == delete_sub_id) then --从列表里面找到重复的,清理掉 result_data = v else table.insert( new_tab, v ) end end self.list_act_notice = new_tab return result_data else if self.list_act_notice[1] then return table.remove(self.list_act_notice,1) end end ------------------------- return false end --设置活动提示倒计时屏蔽 function CommonModel:GetActClockMaskList( module_id,sub_id ) return self.act_clock_mask_list[(module_id or 0).."@"..(sub_id or 0)] end function CommonModel:SetActClockMaskList( module_id,sub_id ) self.act_clock_mask_list[(module_id or 0).."@"..(sub_id or 0)] = true end --多开活动类,要加一个重置mask的接口 function CommonModel:ReSetActClockMaskList( module_id,sub_id ) self.act_clock_mask_list[(module_id or 0).."@"..(sub_id or 0)] = false end -- 通用邀请界面相关 -- 缓存邀请信息 function CommonModel:PushInviteDataCache(data) self.invite_data_cache = self.invite_data_cache or {} if data and data.invite_type then self.invite_data_cache[#self.invite_data_cache+1] = data end end function CommonModel:GetInviteDataCacheCount( ) return TableSize(self.invite_data_cache) end -- 推出最早的邀请信息 only_get_data:只拿数据,不退出列表 function CommonModel:PopInviteDataCache(only_get_data) if self:GetInviteDataCacheCount() > 0 then if only_get_data then return self.invite_data_cache[1] else return table.remove(self.invite_data_cache, 1) end else return nil end end -- 在特定场景中,如果活动开始,则需要弹出一个活动邀请的tips function CommonModel:ShowInviteTipInSpercificScene(module_id, sub_id) if not module_id or not sub_id then return end local key = module_id .. "@" .. sub_id if self.event_invite_cache[key] then return end -- 不仅只会弹出一次,而且无论是否在特定场景都要记录这个状态 self.event_invite_cache[key] = true -- 场景判断相关 local scene_mgr = SceneManager:getInstance() local is_in_guildScene = scene_mgr:IsGuildScene() -- 社团场景 local is_in_bossDeserted = scene_mgr:IsBossDesertedScene() -- 幻魔星域 local is_in_bossHome = scene_mgr:IsBossHomeScene() -- boss之家 -- 不在特定场景内,则不弹出tips if not is_in_guildScene and not is_in_bossDeserted and not is_in_bossHome then return end -- 特定场景内,一些活动不需要弹出邀请tips if is_in_guildScene then if module_id == 400 or module_id == 406 or module_id == 408 then -- 社团场景内的活动不需要在社团场景内弹出邀请tips return end end -- 获取活动配置 local ac_data for k, v in pairs(Config.Ac) do if v.module == module_id and v.module_sub == sub_id then ac_data = v break end end if ac_data then self:Fire(EventName.OPEN_SPERCIFIC_SCENE_ACT_TIPVIEW, true, ac_data) end end --调用之前检查上次场景是否需要过滤此次调用 function CommonModel:MaskOpenActTip( module_id,sub_id ) local last_scene = SceneManager.Instance:GetLastSceneId() ------------------------- if module_id == 418 then -- 温泉 return SceneManager.Instance:IsBeachScene(last_scene) elseif module_id == 600 then --无尽 return SceneManager.Instance:IsEndlessScene(last_scene) elseif module_id == 601 then --跨国团战 return SceneManager.Instance:IsCSGWarScene(last_scene) end return false end function CommonModel:PushActTipDataCache( act_data ) self.act_tip_data_cache = self.act_tip_data_cache or {} for k,v in pairs(self.act_tip_data_cache) do--相同的数据就别进来捣乱了 if v.winId == act_data.winId and (v.act_sub_type~=nil and v.act_sub_type == act_data.act_sub_type) and v.subId == act_data.subId then return end end self.act_tip_data_cache[#self.act_tip_data_cache + 1] = act_data end function CommonModel:GetActTipDataCacheCount( ) return TableSize(self.act_tip_data_cache) end --清除最早的信息 function CommonModel:PopActTipDataCache( ) if self:GetActTipDataCacheCount() > 0 then return table.remove(self.act_tip_data_cache, 1) else return nil end end ----------活动提醒弹窗相关-start--------- function CommonModel:PushActRemindTipDataCache( act_data ) self.act_remind_tip_data_cache = self.act_remind_tip_data_cache or {} for k,v in pairs(self.act_remind_tip_data_cache) do--相同的数据就别进来捣乱了 if v.winId == act_data.winId -- and (v.act_sub_type~=nil and v.act_sub_type == act_data.act_sub_type) and v.sub_type == act_data.sub_type then return end end self.act_remind_tip_data_cache[#self.act_remind_tip_data_cache + 1] = act_data end function CommonModel:GetActRemindTipDataCacheCount( ) return TableSize(self.act_remind_tip_data_cache) end --清除最早的信息 function CommonModel:PopActRemindTipDataCache( ) if self:GetActRemindTipDataCacheCount() > 0 then return table.remove(self.act_remind_tip_data_cache, 1) else return nil end end ----------活动提醒弹窗相关-end-----------