源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

433 lines
13 KiB

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