源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

388 行
13 KiB

MobilizationModel = MobilizationModel or BaseClass(BaseVo, true)
local MobilizationModel = MobilizationModel
MobilizationModel.REQUEST_INFO = "MobilizationModel.REQUEST_INFO"
MobilizationModel.OPEN_MOBILIZATION_VIEW = "MobilizationModel.OPEN_MOBILIZATION_VIEW"--打开主界面
MobilizationModel.UPDATE_MOBILIZATION_VIEW = "MobilizationModel.UPDATE_MOBILIZATION_VIEW"--更新主界面
MobilizationModel.REQUEST_INFO = "MobilizationModel.REQUEST_INFO"--请求协议
function MobilizationModel:__init()
MobilizationModel.Instance = self
self:Reset()
end
function MobilizationModel:Reset()
self.view_info = {}--界面信息
self.tab_red_dot_info = {}--主页签红点信息
self.sub_tab_red_dot_info = {}--子页签红点信息
self.act_day = {}--活动天数
self:InitCfg()--初始化配置
end
function MobilizationModel:getInstance()
if MobilizationModel.Instance == nil then
MobilizationModel.Instance = MobilizationModel.New()
end
return MobilizationModel.Instance
end
--初始化配置
function MobilizationModel:InitCfg( )
self.mobilization_task_cfg = {}--每日任务配置
local mobilization_task_cfg = DeepCopy(Config.Mobilizetask)
for k,v in pairs(mobilization_task_cfg) do
local data = v
if not self.mobilization_task_cfg[v.subtype] then
self.mobilization_task_cfg[v.subtype] = {}
end
if not self.mobilization_task_cfg[v.subtype][v.day] then
self.mobilization_task_cfg[v.subtype][v.day] = {}
end
self.mobilization_task_cfg[v.subtype][v.day][v.task_type] = data
end
self.mobilization_task_award_cfg = {}--任务奖励配置
local mobilization_task_award_cfg = DeepCopy(Config.Mobilizetaskaward)
for k,v in pairs(mobilization_task_award_cfg) do
local data = v
data.gain_con = stringtotable(data.gain_con)
data.desc = Trim(data.desc)
data.gain_desc = Trim(data.gain_desc)
data.reward = stringtotable(data.reward)
data.gain_link = stringtotable(data.gain_link)
if not self.mobilization_task_award_cfg[v.task_type] then
self.mobilization_task_award_cfg[v.task_type] = {}
end
self.mobilization_task_award_cfg[v.task_type][v.task_id] = data
end
self.mobilization_task_day_cfg = {}--全天奖励配置
local mobilization_task_day_cfg = DeepCopy(Config.Mobilizetaskday)
for k,v in pairs(mobilization_task_day_cfg) do
local data = v
data.reward = stringtotable(data.reward)
data.show_model = stringtotable(data.show_model)
if not self.mobilization_task_day_cfg[v.subtype] then
self.mobilization_task_day_cfg[v.subtype] = {}
end
self.mobilization_task_day_cfg[v.subtype][#self.mobilization_task_day_cfg[v.subtype] + 1] = data
end
self.mobilization_task_type_cfg = {}--任务类型配置
local mobilization_task_type_cfg = DeepCopy(Config.Mobilizetasktype)
for k,v in pairs(mobilization_task_type_cfg) do
local data = v
data.task_string = Trim(data.task_string)--任务关键词
data.desc = Trim(data.desc)--任务描述
data.link = stringtotable(data.link)--完成跳转
self.mobilization_task_type_cfg[v.task_type] = data
end
end
--获得任务奖励配置
function MobilizationModel:GetTaskAwardCfg( task_type,award_id )
if task_type and not award_id then
return self.mobilization_task_award_cfg[task_type]
elseif task_type then
return self.mobilization_task_award_cfg[task_type][award_id]
end
end
--获得任务类型配置
function MobilizationModel:GetTaskTypeCfg( task_type )
return self.mobilization_task_type_cfg[task_type]
end
--获得每日任务配置
function MobilizationModel:GetDayTaskCfg( sub_type,day )
if day and self.mobilization_task_day_cfg[sub_type] then
local day = self:GetCurActDay(sub_type) or 1
for i,v in ipairs(self.mobilization_task_day_cfg[sub_type]) do
if v.day <= day and v.end_day >= day then
return v
end
end
elseif not day and self.mobilization_task_day_cfg[sub_type] then
return self.mobilization_task_day_cfg[sub_type]
end
end
--获得每天的任务总配置
function MobilizationModel:GetTaskCfg( sub_type,day )
if sub_type and day then
local task_cfg_list = {}
for i,v in pairs(Config.Mobilizetask) do
if v.day <= day and v.end_day >= day and sub_type == v.subtype then
task_cfg_list[#task_cfg_list + 1] = v
end
end
return task_cfg_list
else
return self.mobilization_task_cfg[sub_type]
end
end
--检查主界面红点
function MobilizationModel:CheckMainIconRedDot(sub_type)
local bool = false
local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION
if sub_type then
local icon_sub_type = base_type*1000 + sub_type
if sub_type >= 10001 then
icon_sub_type = base_type*100000 + sub_type
end
local red_info = self.tab_red_dot_info[sub_type]
if red_info and TableSize(red_info) > 0 then
for k,v in pairs(red_info) do
if v then
bool = true
break
end
end
end
GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS, icon_sub_type, bool)
end
end
--检测全民动员活动图标是否需要开启[兼顾设置全民动员活动内部的活动列表]
function MobilizationModel:CheckIconBoolOpen(sub_type)
local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION
local sub_type = CustomActivityModel:getInstance():getActMinSubType(base_type)
local level = RoleManager.Instance.mainRoleInfo.level
local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type)
local is_open = false
local end_time = 0
local icon_sub_type = base_type*1000 + sub_type
if sub_type >= 10001 then
icon_sub_type = base_type*100000 + sub_type
end
if act_list and act_list.etime then
local have_time = TimeUtil:getServerTime( ) - act_list.stime
if have_time > 0 then
self.act_day[sub_type] = math.ceil(have_time/24/3600) <= 0 and 1 or math.ceil(have_time/24/3600)
end
end_time = act_list.etime - TimeUtil:getServerTime()
end_time = end_time%(24*3600)
is_open = end_time > 0
if GetModuleIsOpen(331,base_type) then
if is_open then
local cur_day = self:GetCurActDay(sub_type)
local end_day = cur_day
for k,v in pairs(Config.Mobilizetaskday) do
if v.day <= cur_day and v.end_day >= cur_day then
end_day = v.end_day
end
end
local str = nil
local server_info = self:GetServerInfo(sub_type)
local sec = act_list.stime + end_day*24*3600 - TimeUtil:getServerTime( )
if server_info and server_info.list then
local cur_day = self:GetCurActDay(sub_type)
local cur_day_data = server_info.list[cur_day]
local task_cfg = self:GetDayTaskCfg(sub_type,cur_day)
if task_cfg and cur_day_data then
local cur = HtmlColorTxt(cur_day_data.complete_day_task_num, cur_day_data.complete_day_task_num < task_cfg.need_num and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK)
str = string.format("进度 %s/%s", cur,task_cfg.need_num)
if cur_day_data.complete_day_task_num >= task_cfg.need_num then
str = nil
sec = -1
end
end
end
--2021.8.2日鸿杰说双服屏蔽
str = nil
sec = -1
ActivityIconManager:getInstance():addIcon(icon_sub_type, sec, str)
else
ActivityIconManager:getInstance():deleteIcon(icon_sub_type)
end
else
-- print("huangcong:MobilizationModel [62]: ",key)
end
else
ActivityIconManager:getInstance():deleteIcon(icon_sub_type)
end
end
--设置全民动员信息
function MobilizationModel:SetMobilizationInfo( scmd )
self.view_info[scmd.sub_type] = {}
local list = {}
local task_list = nil
local sort_func = function ( a, b )
return a.id < b.id
end
local task_type_complete_list = {}--任务完成列表
local day_task_num = 0--任务总数量
local complete_day_task_num = 0--任务完成总数量
for i,v in ipairs(scmd.list) do
task_list = {}
task_type_complete_list = {}
complete_day_task_num = 0--任务完成总数量
day_task_num = 0--任务总数量
for ii,vv in pairs(v.task_list) do
if not task_list[vv.task_type] then
task_list[vv.task_type] = {}
end
task_list[vv.task_type][vv.id] = vv
if not task_type_complete_list[vv.task_type] then
task_type_complete_list[vv.task_type] = 0
end
task_type_complete_list[vv.task_type] = task_type_complete_list[vv.task_type] + (vv.state == 2 and 1 or 0)
day_task_num = day_task_num + 1
complete_day_task_num = (vv.state == 2 and 1 or 0) + complete_day_task_num
end
v.complete_day_task_num = complete_day_task_num
v.day_task_num = day_task_num
v.task_list = task_list
v.task_type_complete_list = task_type_complete_list
local day = self:GetCurActDay(scmd.sub_type) or 1
v.day = day
if v.start_day <= day and v.end_day >= day then
list[day] = v
end
end
scmd.list = list
self.view_info[scmd.sub_type] = scmd
self:CheckGroupBuyingRed(scmd.sub_type)
end
function MobilizationModel:GetCurDayTaskTypePro( sub_type,day,task_type )
local cur_pro = 0
local scmd = self:GetServerInfo(sub_type)
if scmd and scmd.list and scmd.list[day] and scmd.list[day].task_type_complete_list then
cur_pro = scmd.list[day].task_type_complete_list[task_type] or 0
end
return cur_pro
end
--检查团购的红点并刷新主界面图标红点
function MobilizationModel:CheckGroupBuyingRed( sub_type )
local scmd = self:GetServerInfo(sub_type)
if not scmd then return end
self.tab_red_dot_info[scmd.sub_type] = {}--主页签红点信息
self.sub_tab_red_dot_info[scmd.sub_type] = {}--子页签红点信息
local sort_id = 0
-- print("huangcong:MobilizationModel [start:249] scmd.list:", scmd.list)
-- PrintTable(scmd.list)
-- print("huangcong:MobilizationModel [end]")
for i,v in pairs(scmd.list) do
self.tab_red_dot_info[scmd.sub_type][v.day] = v.total_state == 1
for ii,vv in pairs(v.task_list) do
if not self.sub_tab_red_dot_info[scmd.sub_type][v.day] then
self.sub_tab_red_dot_info[scmd.sub_type][v.day] = {}
end
for iii,vvv in pairs(vv) do
sort_id = nil
local cfg_list = self:GetTaskCfg(scmd.sub_type,v.day)
local cfg = nil
if cfg_list then
for l,n in pairs(cfg_list) do
if vvv.task_type == n.task_type then
cfg = n
break
end
end
end
if cfg then
sort_id = cfg.sort
if not self.tab_red_dot_info[scmd.sub_type][v.day] then
self.tab_red_dot_info[scmd.sub_type][v.day] = vvv.state == 1 and vvv.finish_pro == 1
end
if not self.sub_tab_red_dot_info[scmd.sub_type][v.day][sort_id] then
self.sub_tab_red_dot_info[scmd.sub_type][v.day][sort_id] = vvv.state == 1 and vvv.finish_pro == 1
end
if self.sub_tab_red_dot_info[scmd.sub_type][v.day][sort_id] and self.tab_red_dot_info[scmd.sub_type][v.day] then
break
end
end
end
end
end
-- print("huangcong:MobilizationModel [start:243] :", self.sub_tab_red_dot_info)
-- PrintTable(self.sub_tab_red_dot_info)
-- print("huangcong:MobilizationModel [end]")
--找到当前天数对应的团购类型
local base_type = CustomActivityModel.CustomActBaseType.KF_GROUP_BUYING
local act_list = CustomActivityModel:getInstance():getAllActListByBaseType(base_type) or {}
local group_buying_sub_type = nil
if not self.tab_red_dot_info[sub_type] then
self.tab_red_dot_info[sub_type] = {}
end
if act_list then
for i,v in pairs(act_list) do
for ii,vv in ipairs(v.condition_list) do
if vv[1] == "custom_act" then
if not self.tab_red_dot_info[sub_type][tonumber(vv[4])] then--这里主页签还是没有红点就要加上团购的红点
local bool = KfActivityModel:getInstance().act_red_dot_info[base_type]
and KfActivityModel:getInstance().act_red_dot_info[base_type][v.sub_type] or false
self.tab_red_dot_info[sub_type][tonumber(vv[4])] = bool
end
break
end
end
end
end
self:CheckMainIconRedDot(sub_type)
end
--获得全民动员信息
function MobilizationModel:GetServerInfo( sub_type )
return self.view_info[sub_type]
end
--获得页签信息
function MobilizationModel:GetTabInfo( )
return self.act_base_list
end
--获得活动当前天数
function MobilizationModel:GetCurActDay( sub_type )
local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION
local sub_type = CustomActivityModel:getInstance():getActMinSubType(base_type)
local level = RoleManager.Instance.mainRoleInfo.level
local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type)
local is_open = false
local end_time = 0
if act_list and act_list.etime then
local have_time = TimeUtil:getServerTime( ) - act_list.stime
if have_time > 0 then
self.act_day[sub_type] = math.ceil(have_time/24/3600) <= 0 and 1 or math.ceil(have_time/24/3600)
end
end
return self.act_day[sub_type] or 1
end
--检测全民动员活动是否开启
function MobilizationModel:CheckActOpen(sub_type)
local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION
local sub_type = CustomActivityModel:getInstance():getActMinSubType(base_type)
local level = RoleManager.Instance.mainRoleInfo.level
local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type)
local is_open = false
local end_time = 0
if act_list and act_list.etime then
local have_time = TimeUtil:getServerTime( ) - act_list.stime
if have_time > 0 then
self.act_day[sub_type] = math.ceil(have_time/24/3600) <= 0 and 1 or math.ceil(have_time/24/3600)
end
local icon_sub_type = base_type*1000 + sub_type
if sub_type >= 10001 then
icon_sub_type = base_type*100000 + sub_type
end
end_time = act_list.etime - TimeUtil:getServerTime()
is_open = end_time > 0
if GetModuleIsOpen(331,base_type) then
if is_open then
return true
end
end
end
return true
end