ContractModel = ContractModel or BaseClass(BaseVo, true)
|
|
local ContractModel = ContractModel
|
|
|
|
function ContractModel:__init()
|
|
ContractModel.Instance = self
|
|
self:Reset()
|
|
end
|
|
|
|
function ContractModel:Reset()
|
|
self.basic_data = {}
|
|
self.task_process_info = {}
|
|
self.week_task_refresh_time = {}
|
|
-------------------------
|
|
self.red_act = {}
|
|
self.red_lv_reward = {}
|
|
self.red_task = {}
|
|
self.need_open_fuli_view = false
|
|
self.first_login_cache = {} -- 记录每次登陆红点是否有点击过
|
|
-- self.red_login = {} -- 登陆红点
|
|
self.login_red = {} -- 每天首次登陆红点
|
|
end
|
|
|
|
function ContractModel:getInstance()
|
|
if ContractModel.Instance == nil then
|
|
ContractModel.Instance = ContractModel.New()
|
|
end
|
|
return ContractModel.Instance
|
|
end
|
|
|
|
--活动信息
|
|
function ContractModel:GetBasicData( sub_type )
|
|
return self.basic_data[sub_type]
|
|
end
|
|
function ContractModel:SetBasicData( value )
|
|
self.basic_data[value.sub_type] = value
|
|
end
|
|
function ContractModel:RefreshBasicLvAndScore( data )
|
|
local basic_data = self:GetBasicData( data.sub_type )
|
|
if basic_data then
|
|
basic_data.score = data.score
|
|
basic_data.con_lv = data.lv
|
|
basic_data.daily_score = data.daily_score
|
|
end
|
|
end
|
|
function ContractModel:RefreshBasicPayStatus( sub_type,state )
|
|
local basic_data = self:GetBasicData( sub_type )
|
|
if state and basic_data then
|
|
basic_data.is_pay = state
|
|
end
|
|
end
|
|
--任务完成进度信息
|
|
function ContractModel:GetTaskProcessInfo( sub_type )
|
|
return self.task_process_info[sub_type]
|
|
end
|
|
function ContractModel:SetTaskProcessInfo( value )
|
|
self.task_process_info[value.sub_type] = {}
|
|
self.week_task_refresh_time[value.sub_type] = value.update_time--周任务刷新时间
|
|
for k,v in pairs(value.task_list) do
|
|
self.task_process_info[value.sub_type][v.type] = v.tasks
|
|
end
|
|
end
|
|
|
|
--周任务刷新时间
|
|
function ContractModel:GetWeekTaskEndTime(sub_type)
|
|
return self.week_task_refresh_time[sub_type] or 0
|
|
end
|
|
function ContractModel:RefreshTaskProcess( sub_type,list )
|
|
if not list then return end
|
|
local task_process_info = self:GetTaskProcessInfo( sub_type )
|
|
if not task_process_info then return end
|
|
for k,v in pairs(list) do
|
|
for kk,vv in pairs(task_process_info[v.task_type] or {}) do
|
|
if vv.task_id == v.task_id then
|
|
vv.val = v.val
|
|
vv.status = v.status
|
|
end
|
|
end
|
|
end
|
|
end
|
|
-------------------------
|
|
--获取活动结束时间
|
|
function ContractModel:GetActivityEndTime( sub_type )
|
|
local base_type = CustomActivityModel.CustomActBaseType.CONTRACT
|
|
local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type)
|
|
-------------------------
|
|
if act_list and act_list.etime then
|
|
return act_list.etime
|
|
end
|
|
return 0
|
|
end
|
|
|
|
--等级配置
|
|
function ContractModel:GetLvConf( sub_type,lv )
|
|
sub_type = sub_type or CustomActivityModel:getInstance():getActMinSubType(CustomActivityModel.CustomActBaseType.CONTRACT)
|
|
if lv then
|
|
for k,v in pairs(Config.Contractrewards) do
|
|
return Config.Contractrewards[sub_type .. "@" .. lv]
|
|
end
|
|
else
|
|
return Config.Contractrewards
|
|
end
|
|
end
|
|
|
|
function ContractModel:GetRewardByLvAndOpTy( sub_type,lv,opty )
|
|
local conf = self:GetLvConf( sub_type,lv )
|
|
if not conf then return {} end
|
|
if opty == 1 then--普通
|
|
return stringtotable(conf.normal_rewards)
|
|
elseif opty == 2 then--王牌
|
|
return stringtotable(conf.luxury_rewards)
|
|
elseif opty == 3 then--都有
|
|
local tab_1 = stringtotable(conf.normal_rewards)
|
|
local tab_2 = stringtotable(conf.luxury_rewards)
|
|
for k,v in pairs(tab_2) do
|
|
table.insert( tab_1, v )
|
|
end
|
|
return tab_1
|
|
end
|
|
end
|
|
|
|
function ContractModel:GetMaxRewardLv( sub_type )
|
|
local max_lv = 1
|
|
for k,v in pairs(Config.Contractrewards) do
|
|
if v.sub_type == sub_type then
|
|
max_lv = max_lv > v.pass_lv and max_lv or v.pass_lv
|
|
end
|
|
end
|
|
return max_lv
|
|
end
|
|
|
|
--获得当前选中的等级
|
|
function ContractModel:GetCurLvSelect( sub_type )
|
|
local min_can_data = false--可领取的最低等级
|
|
local max_have_data = false--已领取的最大等级
|
|
local basic_data = self:GetBasicData( sub_type )
|
|
if basic_data then
|
|
for k,v in pairs(basic_data.reward_list) do
|
|
if v.normal_status == ContractConst.RewardState.Can or v.extra_status == ContractConst.RewardState.Can then
|
|
if min_can_data then
|
|
min_can_data = v.lv > min_can_data.lv and min_can_data or v
|
|
else
|
|
min_can_data = v
|
|
end
|
|
end
|
|
if v.normal_status == ContractConst.RewardState.Have then
|
|
if max_have_data then
|
|
max_have_data = v.lv > max_have_data.lv and v or max_have_data
|
|
else
|
|
max_have_data = v
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if min_can_data then
|
|
return min_can_data.lv
|
|
elseif max_have_data then
|
|
local max_lv = self:GetMaxRewardLv( sub_type )
|
|
return max_have_data.lv < max_lv and max_have_data.lv+1 or max_lv
|
|
end
|
|
return 1
|
|
end
|
|
|
|
--等级奖励红点
|
|
function ContractModel:GetLvRewardRed( need_new,sub_type )
|
|
if not need_new then
|
|
return self.red_lv_reward[sub_type]
|
|
end
|
|
self.red_lv_reward[sub_type] = false
|
|
local basic_data = self:GetBasicData( sub_type )
|
|
if basic_data then
|
|
for k,v in pairs(basic_data.reward_list) do
|
|
if v.normal_status == ContractConst.RewardState.Can or v.extra_status == ContractConst.RewardState.Can then
|
|
self.red_lv_reward[sub_type] = true
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
--获取王牌宝典状态
|
|
function ContractModel:GetPayState( sub_type )
|
|
local basic_data = self:GetBasicData( sub_type )
|
|
if basic_data then
|
|
return basic_data.is_pay
|
|
end
|
|
return ContractConst.PayState.Lock
|
|
end
|
|
|
|
function ContractModel:GetLvRewardStatus( sub_type,lv )
|
|
local basic_data = self:GetBasicData( sub_type )
|
|
if basic_data then
|
|
for k,v in pairs(basic_data.reward_list) do
|
|
if v.lv == lv then
|
|
return v.normal_status,v.extra_status
|
|
end
|
|
end
|
|
end
|
|
return ContractConst.RewardState.Cannot,ContractConst.RewardState.Cannot
|
|
end
|
|
|
|
function ContractModel:GetTaskPassConfByType( main_type,type_id,weekday )
|
|
for k,v in pairs(Config.Contractpasstask) do
|
|
if v.task_type_id == type_id and v.type == main_type and ((v.day == weekday) or (v.day == 0)) then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
|
|
function ContractModel:GetTaskConfByType( type_id )
|
|
for k,v in pairs(Config.Contracttasktype) do
|
|
if v.task_type_id == type_id then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
|
|
function ContractModel:GetPassBuyConf( sub_type )
|
|
sub_type = sub_type or CustomActivityModel:getInstance():getActMinSubType(CustomActivityModel.CustomActBaseType.CONTRACT)
|
|
for k,v in pairs(Config.Contractpassbuy) do
|
|
if v.sub_type == sub_type then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
|
|
function ContractModel:GetAllRed( need_new )
|
|
if need_new then
|
|
self.red_act = {}
|
|
local temp_list = CustomActivityModel:getInstance():getAllActListByBaseType(CustomActivityModel.CustomActBaseType.CONTRACT)
|
|
for i,v in pairs(temp_list or {}) do
|
|
self.red_act[v.sub_type] = self:GetAllRedBySubType(true,v.sub_type)
|
|
end
|
|
end
|
|
for k,v in pairs(self.red_act) do
|
|
if v then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function ContractModel:GetAllRedBySubType( need_new,sub_type )
|
|
if need_new then
|
|
self:GetTaskRed(true,sub_type)
|
|
self:GetLvRewardRed(true,sub_type)
|
|
self:GetLoginRed(true,sub_type)
|
|
end
|
|
return self:GetTaskRed(false,sub_type) or self:GetLvRewardRed(false,sub_type) or self:GetLoginRed(false,sub_type)
|
|
end
|
|
|
|
function ContractModel:GetTaskRed( need_new,sub_type )
|
|
if self:GetIsMaxLv(sub_type) then return false end
|
|
if need_new then
|
|
self.red_task[sub_type] = {}
|
|
local data = self:GetTaskProcessInfo(sub_type)
|
|
for k,v in pairs(data or {}) do
|
|
self.red_task[sub_type][k] = self:GetTaskRedByType( true,k,sub_type )
|
|
end
|
|
end
|
|
for k,v in pairs(self.red_task[sub_type] or {}) do
|
|
if v then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function ContractModel:GetTaskRedByType( need_new,type_id,sub_type )
|
|
if self:GetIsMaxLv(sub_type) then return false end
|
|
if need_new then
|
|
self.red_task[sub_type][type_id] = false
|
|
local data = self:GetTaskProcessInfo(sub_type)
|
|
for k,v in pairs(data and data[type_id] or {}) do
|
|
if v.status == ContractConst.RewardState.Can then
|
|
self.red_task[sub_type][type_id] = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return self.red_task[sub_type][type_id] and true or false
|
|
end
|
|
|
|
function ContractModel:GetIsMaxLv( sub_type )
|
|
local base_data = self:GetBasicData(sub_type)
|
|
if base_data then
|
|
return base_data.con_lv == self:GetMaxRewardLv(sub_type)
|
|
end
|
|
end
|
|
|
|
----------七天任务 每天首次登陆红点-start---------
|
|
-- 每天首次登陆红点cookie
|
|
function ContractModel:SetLoginCookie( sub_type, bool )
|
|
local list = self:GetLoginCookie() or {}
|
|
list[sub_type] = bool
|
|
CookieWrapper.Instance:SaveCookie(CookieLevelType.Account,
|
|
CookieTimeType.TYPE_DAY2, CookieKey.CONTRACT_WEEK_LOGIN_RED, list)
|
|
CookieWrapper.Instance:WriteAll()
|
|
end
|
|
|
|
--每天首次登陆红点cookie
|
|
function ContractModel:GetLoginCookie( )
|
|
local list = CookieWrapper.Instance:GetCookie(CookieLevelType.Account,
|
|
CookieKey.CONTRACT_WEEK_LOGIN_RED) or {}
|
|
return list
|
|
end
|
|
|
|
-- 检查有周任务可做时的首次登陆时给红点
|
|
function ContractModel:CheckLoginRed( sub_type )
|
|
local list = self:GetLoginCookie() or {}
|
|
if list[sub_type] == true then
|
|
self.login_red[sub_type] = false
|
|
else
|
|
self.login_red[sub_type] = self:CheckHasWeekTaskCanDo(sub_type)
|
|
end
|
|
self:Fire(ContractConst.REFRESH_RED_DOT)
|
|
-- 刷新福利页签红点
|
|
local temp_list = CustomActivityModel:getInstance():getAllActListByBaseType(CustomActivityModel.CustomActBaseType.CONTRACT)
|
|
for i,v in pairs(temp_list or {}) do
|
|
local id = 33100000 + CustomActivityModel.CustomActBaseType.CONTRACT * 1000 + v.sub_type
|
|
FuliModel:getInstance():Fire(FuliConst.UPDATE_FULI_RED_DOT,id)
|
|
FuliModel:getInstance():Fire(FuliConst.ANS_UPDATE_FULI_RED_DOT,id)
|
|
end
|
|
return self.login_red[sub_type]
|
|
end
|
|
|
|
function ContractModel:CheckHasWeekTaskCanDo( sub_type )
|
|
if self:GetIsMaxLv(sub_type) then return false end
|
|
local data = self:GetTaskProcessInfo(sub_type)
|
|
for k,v in pairs(data and data[ContractConst.TaskType.Week] or {}) do
|
|
if v.status ~= ContractConst.RewardState.Have then -- 只要有一个任务是可以做或可以领的就要红点
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function ContractModel:GetLoginRed( need_new,sub_type )
|
|
if need_new then
|
|
self:CheckLoginRed( sub_type )
|
|
end
|
|
return self.login_red[sub_type]
|
|
end
|
|
|
|
function ContractModel:SetLoginRed( sub_type, bool )
|
|
if self.login_red[sub_type] and bool == false then
|
|
self.login_red[sub_type] = false
|
|
self:SetLoginCookie( sub_type, true ) -- 今天点开过了
|
|
self:CheckLoginRed(sub_type)
|
|
end
|
|
end
|
|
----------七天任务 每天首次登陆红点-end-----------
|
|
|
|
----------每次登陆红点-start--------- 2021.6.23 运营说不要了
|
|
-- function ContractModel:CheckLoginRed( sub_type )
|
|
-- local type_daily = ContractConst.TaskType.Daily
|
|
-- local type_week = ContractConst.TaskType.Week
|
|
-- self.first_login_cache[sub_type] = self.first_login_cache[sub_type] or {}
|
|
-- self.red_login[sub_type] = self.red_login[sub_type] or {}
|
|
|
|
-- if not (self.task_process_info and
|
|
-- self.task_process_info[sub_type] and
|
|
-- self.task_process_info[sub_type][type_daily] and
|
|
-- self.task_process_info[sub_type][type_week]) then
|
|
-- return
|
|
-- end
|
|
-- -- 先查每天任务
|
|
-- if not self.first_login_cache[sub_type][type_daily] then
|
|
-- local bool = false
|
|
-- for i,v in pairs(self.task_process_info[sub_type][type_daily]) do
|
|
-- if v.status == 0 then
|
|
-- bool = true
|
|
-- break
|
|
-- end
|
|
-- end
|
|
-- self.red_login[sub_type][type_daily] = bool
|
|
-- else
|
|
-- self.red_login[sub_type][type_daily] = false
|
|
-- end
|
|
|
|
-- -- 查周任务
|
|
-- if not self.first_login_cache[sub_type][type_week] then
|
|
-- local bool = false
|
|
-- for i,v in pairs(self.task_process_info[sub_type][type_week]) do
|
|
-- if v.status == 0 then
|
|
-- bool = true
|
|
-- break
|
|
-- end
|
|
-- end
|
|
-- self.red_login[sub_type][type_week] = bool
|
|
-- else
|
|
-- self.red_login[sub_type][type_week] = false
|
|
-- end
|
|
-- end
|
|
|
|
-- function ContractModel:GetLoginRed( need_new,sub_type, task_type )
|
|
-- if need_new then
|
|
-- self:CheckLoginRed( sub_type )
|
|
-- end
|
|
-- self.red_login[sub_type] = self.red_login[sub_type] or {}
|
|
-- if task_type then
|
|
-- return self.red_login[sub_type][task_type] == true
|
|
-- else
|
|
-- for k,v in pairs(self.red_login[sub_type]) do
|
|
-- if v then
|
|
-- return true
|
|
-- end
|
|
-- end
|
|
-- return false
|
|
-- end
|
|
|
|
-- end
|
|
|
|
-- function ContractModel:SetLoginCache( sub_type, task_type )
|
|
-- if not sub_type or not task_type then
|
|
-- return
|
|
-- end
|
|
-- self.first_login_cache[sub_type] = self.first_login_cache[sub_type] or {}
|
|
-- if self.first_login_cache[sub_type][task_type] then -- 已经设置过 就不用设置了
|
|
-- return
|
|
-- end
|
|
-- self.first_login_cache[sub_type][task_type] = true
|
|
-- self:CheckLoginRed( sub_type )
|
|
-- self:Fire(ContractConst.REFRESH_RED_DOT)
|
|
-- -- 刷新福利页签红点
|
|
-- local temp_list = CustomActivityModel:getInstance():getAllActListByBaseType(CustomActivityModel.CustomActBaseType.CONTRACT)
|
|
-- for i,v in pairs(temp_list or {}) do
|
|
-- local id = 33100000 + CustomActivityModel.CustomActBaseType.CONTRACT * 1000 + v.sub_type
|
|
-- FuliModel:getInstance():Fire(FuliConst.UPDATE_FULI_RED_DOT,id)
|
|
-- FuliModel:getInstance():Fire(FuliConst.ANS_UPDATE_FULI_RED_DOT,id)
|
|
-- end
|
|
-- end
|
|
----------每次登陆红点-end-----------
|