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