源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 

223 行
6.9 KiB

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-----------