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