SevenDayTargetModel = SevenDayTargetModel or BaseClass(BaseModel)
|
|
|
|
local SevenDayTargetModel = SevenDayTargetModel
|
|
|
|
SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO = "SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO"
|
|
SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD = "SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD"
|
|
SevenDayTargetModel.OPEN_SEVEN_DAY_TARGET_MAIN_VIEW = "SevenDayTargetModel.OPEN_SEVEN_DAY_TARGET_MAIN_VIEW"
|
|
SevenDayTargetModel.CLOSE_SEVEN_DAY_TARGET_MAIN_VIEW = "SevenDayTargetModel.CLOSE_SEVEN_DAY_TARGET_MAIN_VIEW"
|
|
SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_RED_INFO = "SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_RED_INFO"
|
|
SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_BTN = "SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_BTN"
|
|
|
|
local table_insert = table.insert
|
|
function SevenDayTargetModel:__init()
|
|
SevenDayTargetModel.Instance = self
|
|
self.seven_day_target_task_cfg = {}
|
|
self:Reset( )
|
|
end
|
|
|
|
function SevenDayTargetModel:getInstance()
|
|
if SevenDayTargetModel.Instance==nil then
|
|
SevenDayTargetModel.New()
|
|
end
|
|
return SevenDayTargetModel.Instance
|
|
end
|
|
|
|
function SevenDayTargetModel:GetInstance()
|
|
if SevenDayTargetModel.Instance==nil then
|
|
SevenDayTargetModel.New()
|
|
end
|
|
return SevenDayTargetModel.Instance
|
|
end
|
|
|
|
function SevenDayTargetModel:Reset( )
|
|
self.seven_day_target_info = {}
|
|
self.seven_day_target_red_data = {}
|
|
end
|
|
|
|
function SevenDayTargetModel:SetSevenDayTargetInfo( vo )
|
|
local data = {}
|
|
-- for i,v in ipairs(vo.task_state) do
|
|
-- if not data[v.days] then
|
|
-- data[v.days] = {}
|
|
-- end
|
|
-- if not data[v.days][v.mod_id] then
|
|
-- data[v.days][v.mod_id] = {}
|
|
-- end
|
|
-- if not data[v.days][v.mod_id][v.sub_id] then
|
|
-- data[v.days][v.mod_id][v.sub_id] = {}
|
|
-- end
|
|
-- data[v.days][v.mod_id][v.sub_id][v.diff] = v
|
|
-- end
|
|
for i,v in ipairs(vo.task_state) do
|
|
if not data[v.days] then
|
|
data[v.days] = {}
|
|
end
|
|
data[v.days][self:GetKeyValve(v.days, v.mod_id, v.sub_id)] = v
|
|
end
|
|
vo.task_state = data
|
|
|
|
local score_state = {}
|
|
for i,v in ipairs(vo.score_state) do
|
|
score_state[v.score_id] = true
|
|
end
|
|
vo.score_state = score_state
|
|
|
|
local skill_state = {}
|
|
for i,v in ipairs(vo.skill_state) do
|
|
skill_state[v.days] = true
|
|
end
|
|
vo.skill_state = skill_state
|
|
|
|
self.seven_day_target_info = vo
|
|
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO)
|
|
self:CheckSevenDayTargetRed()
|
|
end
|
|
|
|
function SevenDayTargetModel:GetKeyValve( days, mod_id, sub_id )
|
|
return days * 100000 + mod_id * 100 + sub_id
|
|
end
|
|
|
|
function SevenDayTargetModel:GetSevenDayTargetInfo( day )
|
|
if day and TableSize(self.seven_day_target_info) > 0 then
|
|
return self.seven_day_target_info.task_state[day]
|
|
end
|
|
return self.seven_day_target_info
|
|
end
|
|
|
|
function SevenDayTargetModel:SetSevenDayTargetOneInfo( vo,is_get_award )
|
|
local data = self:GetSevenDayTargetInfo()
|
|
if data and TableSize(data) > 0 then
|
|
if not is_get_award then
|
|
data.score = vo.score
|
|
end
|
|
if data.task_state[vo.days] and data.task_state[vo.days][self:GetKeyValve(vo.days, vo.mod_id, vo.sub_id)] then
|
|
local temp_data = data.task_state[vo.days][self:GetKeyValve(vo.days, vo.mod_id, vo.sub_id)]
|
|
if temp_data then -- 有数据
|
|
if is_get_award then
|
|
temp_data.is_receive = 1
|
|
else
|
|
temp_data.progress = vo.progress
|
|
end
|
|
self.seven_day_target_info = data
|
|
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO, is_get_award)
|
|
self:CheckSevenDayTargetRed(vo.days)
|
|
return
|
|
end
|
|
-- for i,v in pairs(data.task_state[vo.days]) do
|
|
-- if i == vo.mod_id then
|
|
-- for ii,vv in pairs(v) do
|
|
-- if ii == vo.sub_id then
|
|
-- for iii,vvv in pairs(vv) do
|
|
-- if vvv.diff == vo.diff then
|
|
-- if is_get_award then
|
|
-- vvv.is_receive = 1
|
|
-- else
|
|
-- vvv.progress = vo.progress
|
|
-- end
|
|
-- self.seven_day_target_info = data
|
|
-- self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO, is_get_award)
|
|
-- self:CheckSevenDayTargetRed(vo.days)
|
|
-- return
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- end
|
|
end
|
|
--跑完上面的 没找到 只能给他加进去了
|
|
-- if not data.task_state[vo.days][vo.mod_id] then
|
|
-- data.task_state[vo.days][vo.mod_id] = {}
|
|
-- end
|
|
if not data.task_state[vo.days] then
|
|
data.task_state[vo.days] = {}
|
|
end
|
|
data.task_state[vo.days][self:GetKeyValve(vo.days, vo.mod_id, vo.sub_id)] = {
|
|
days = vo.days,
|
|
mod_id = vo.mod_id,
|
|
sub_id = vo.sub_id,
|
|
-- diff = vo.diff,
|
|
progress = vo.progress or 0, --这个只是为了容错的 一般不会有没数据却能领取奖励的情况
|
|
is_receive = 0,
|
|
}
|
|
self.seven_day_target_info = data
|
|
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO)
|
|
self:CheckSevenDayTargetRed(vo.days)
|
|
end
|
|
end
|
|
|
|
function SevenDayTargetModel:SetSevenDayTargetRewardInfo( vo )
|
|
local data = self:GetSevenDayTargetInfo()
|
|
if TableSize(data) > 0 then
|
|
if vo.type == 1 then--积分奖励
|
|
data.score_state[vo.reward_id] = true
|
|
else
|
|
data.skill_state[vo.reward_id] = true
|
|
end
|
|
self.seven_day_target_info = data
|
|
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO)
|
|
if vo.type == 1 then--积分奖励
|
|
self:CheckSevenDayTargetRed(nil,true)
|
|
else
|
|
self:CheckSevenDayTargetRed(vo.reward_id)
|
|
end
|
|
end
|
|
end
|
|
|
|
function SevenDayTargetModel:InitSevenDayTargetTaskCFG( )
|
|
self.seven_day_target_task_cfg = {}
|
|
local cfg = Config.Sevengoaltask
|
|
for k,v in pairs(cfg) do
|
|
if not self.seven_day_target_task_cfg[v.days] then
|
|
self.seven_day_target_task_cfg[v.days] = {}
|
|
end
|
|
v.limit_condition = stringtotable(v.condition)
|
|
for ii,vv in ipairs(v.limit_condition) do
|
|
if vv[1] == "limit_times" then
|
|
v.limit_times = vv[2]
|
|
break
|
|
end
|
|
end
|
|
v.reward_info = stringtotable(v.reward)
|
|
table_insert(self.seven_day_target_task_cfg[v.days], v)
|
|
end
|
|
end
|
|
|
|
function SevenDayTargetModel:GetSevenDayTargetTaskCFGByDay( day )
|
|
if TableSize(self.seven_day_target_task_cfg) == 0 then
|
|
self:InitSevenDayTargetTaskCFG()
|
|
end
|
|
return self.seven_day_target_task_cfg[day]
|
|
end
|
|
|
|
function SevenDayTargetModel:GetSevenDayTargetTaskOneCFG( day,mod_id,sub_id )
|
|
local cfg = self:GetSevenDayTargetTaskCFGByDay(day)
|
|
if cfg then
|
|
for i,v in pairs(cfg) do
|
|
if v.mod_id == mod_id and v.sub_id == sub_id then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function SevenDayTargetModel:GetSevenDayTargetLoginDay( )
|
|
if TableSize(self.seven_day_target_info) > 0 then
|
|
if self.seven_day_target_info.login_days > 7 then -- 第八天以后 默认是7
|
|
return 7
|
|
end
|
|
return self.seven_day_target_info.login_days
|
|
end
|
|
end
|
|
|
|
function SevenDayTargetModel:GetSevenDayTargetScoreInfo( )
|
|
local data = self:GetSevenDayTargetInfo()
|
|
return data.score or 0, data.score_state or {}
|
|
end
|
|
|
|
function SevenDayTargetModel:GetSevenDayTargetSkillInfo( )
|
|
local data = self:GetSevenDayTargetInfo()
|
|
return data.skill_state or {}
|
|
end
|
|
--check_reward是否要检查积分奖励是否可领取
|
|
function SevenDayTargetModel:CheckSevenDayTargetRed( day,check_reward)
|
|
if not self:IsSevenDayTargetOpen() then--如果已经不开放了就没必要算红点了 直接把图标杀了吧
|
|
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_BTN)
|
|
-- GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS,176,false)
|
|
return
|
|
end
|
|
if day then--如果有这东西 就意味着能不用跑完下面的了
|
|
local server_data = self:GetSevenDayTargetInfo(day) or {}
|
|
self.seven_day_target_red_data[day] = nil
|
|
local cur_num = 0
|
|
for i,v in pairs(server_data) do
|
|
|
|
-- for ii,vv in pairs(v) do
|
|
-- for iii,vvv in pairs(vv) do
|
|
local cfg = self:GetSevenDayTargetTaskOneCFG(v.days, v.mod_id, v.sub_id)
|
|
if cfg then
|
|
if v.progress >= cfg.limit_times then--已完成的任务
|
|
cur_num = cur_num + 1
|
|
if v.is_receive == 0 then--如果还没领取就有红点
|
|
self.seven_day_target_red_data[day] = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
-- end
|
|
-- if self.seven_day_target_red_data[day] then--有红点了就跳出吧
|
|
-- break
|
|
-- end
|
|
-- end
|
|
if self.seven_day_target_red_data[day] then--有红点了就跳出吧
|
|
break
|
|
end
|
|
end
|
|
--如果上面的跑完没红点 那完成当天所有任务并且没有领取技能的情况下 有红点
|
|
local server_data = self:GetSevenDayTargetInfo()
|
|
if not server_data.skill_state[day] and not self.seven_day_target_red_data[day] then
|
|
local skill_cfg = self:GetSevenDayTargetTaskCFGByDay(day)
|
|
self.seven_day_target_red_data[day] = cur_num >= TableSize(skill_cfg) and not server_data.skill_state[day]
|
|
end
|
|
--积分奖励能否领取
|
|
self.seven_day_target_red_data.score_red = nil
|
|
local score_cfg = Config.Sevengoalscore
|
|
local cur_score, server_score_data = self:GetSevenDayTargetScoreInfo()
|
|
for k,v in pairs(score_cfg) do
|
|
if v.score <= cur_score and not server_score_data[v.score] then--没领的就有红点
|
|
self.seven_day_target_red_data.score_red = true
|
|
break
|
|
end
|
|
end
|
|
elseif check_reward then--意味着是领取积分奖励进来的也就是17602
|
|
--积分奖励能否领取
|
|
self.seven_day_target_red_data.score_red = nil
|
|
local score_cfg = Config.Sevengoalscore
|
|
local cur_score, server_score_data = self:GetSevenDayTargetScoreInfo()
|
|
for k,v in pairs(score_cfg) do
|
|
if v.score <= cur_score and not server_score_data[v.score] then--没领的就有红点
|
|
self.seven_day_target_red_data.score_red = true
|
|
break
|
|
end
|
|
end
|
|
else--以下是全检查
|
|
self.seven_day_target_red_data = {}
|
|
local server_data = self:GetSevenDayTargetInfo()
|
|
if server_data.task_state then
|
|
for login_day=1,server_data.login_days do
|
|
if server_data.task_state[login_day] then
|
|
local cur_num = 0
|
|
for i,v in pairs(server_data.task_state[login_day]) do
|
|
|
|
-- for ii,vv in pairs(v) do
|
|
-- for iii,vvv in pairs(vv) do
|
|
local cfg = self:GetSevenDayTargetTaskOneCFG(v.days, v.mod_id, v.sub_id)
|
|
if cfg then
|
|
if v.progress >= cfg.limit_times then--已完成的任务
|
|
cur_num = cur_num + 1
|
|
if v.is_receive == 0 then--如果还没领取就有红点
|
|
self.seven_day_target_red_data[login_day] = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
-- end
|
|
-- if self.seven_day_target_red_data[login_day] then--有红点了就跳出吧
|
|
-- break
|
|
-- end
|
|
-- end
|
|
if self.seven_day_target_red_data[login_day] then--有红点了就跳出吧
|
|
break
|
|
end
|
|
end
|
|
--如果上面的跑完没红点 那完成当天所有任务并且没有领取技能的情况下 有红点
|
|
if not server_data.skill_state[login_day] and not self.seven_day_target_red_data[login_day] then
|
|
local skill_cfg = self:GetSevenDayTargetTaskCFGByDay(login_day)
|
|
self.seven_day_target_red_data[login_day] = cur_num >= TableSize(skill_cfg) and not server_data.skill_state[day]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
--积分奖励能否领取
|
|
if server_data.score_state then
|
|
self.seven_day_target_red_data.score_red = false
|
|
local score_cfg = Config.Sevengoalscore
|
|
local cur_score, server_score_data = self:GetSevenDayTargetScoreInfo()
|
|
for k,v in pairs(score_cfg) do
|
|
if v.score <= cur_score and not server_score_data[v.score] then--没领的就有红点
|
|
self.seven_day_target_red_data.score_red = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_RED_INFO)
|
|
for k,v in pairs(self.seven_day_target_red_data) do
|
|
if v then
|
|
GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS,176,true)
|
|
return true
|
|
end
|
|
end
|
|
GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS,176,false)
|
|
return false
|
|
end
|
|
|
|
function SevenDayTargetModel:GetSevenDayTargetRedData( )
|
|
return self.seven_day_target_red_data
|
|
end
|
|
--判断七日目标是否还在开放
|
|
function SevenDayTargetModel:IsSevenDayTargetOpen( )
|
|
local server_data = self:GetSevenDayTargetInfo()
|
|
if TableSize(server_data) > 0 then
|
|
if server_data.real_time - TimeUtil:getServerTime() <= 0 then
|
|
return true
|
|
end
|
|
if TableSize(server_data.score_state) < 5 then--小于5个积分奖励都不用判断了 肯定还没领完的
|
|
return true
|
|
end
|
|
--走到这里就要查一下是否领完了奖励了
|
|
if server_data.task_state then
|
|
if server_data.login_days < 7 then--小于7天都不用判断了 肯定还没领完的
|
|
return true
|
|
end
|
|
if TableSize(server_data.skill_state) < 7 then--只有技能激活数少于7才需要判断下面的任务奖励是否领取
|
|
for login_day=1,server_data.login_days do
|
|
if server_data.task_state[login_day] then
|
|
local len = TableSize(server_data.task_state[login_day])
|
|
--如果服务端任务数据比配置少 那肯定也还没领完
|
|
local skill_cfg = self:GetSevenDayTargetTaskCFGByDay(login_day)
|
|
if len < TableSize(skill_cfg) then
|
|
return true
|
|
else--走到这里说明数据有了 先看看技能奖励领取了没 没领就活动还没完成
|
|
if not server_data.skill_state[login_day] then
|
|
return true
|
|
else--技能奖励已经领取了 也要看看是不是每一个任务都是领取了奖励的了 但凡有一个任务没领 活动就没完成
|
|
for i,v in pairs(server_data.task_state[login_day]) do
|
|
for ii,vv in pairs(v) do
|
|
for iii,vvv in pairs(vv) do
|
|
if vvv.is_receive == 0 then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function SevenDayTargetModel:IsSevenDayTargetSkill( skill_id )
|
|
for i,v in ipairs(Config.Sevenskillreward) do
|
|
if v.skill_reward == skill_id then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
----------领取动画状态-start---------
|
|
function SevenDayTargetModel:SetTaskItemAnimState( is_anim )
|
|
self.task_item_is_animing = is_anim
|
|
end
|
|
|
|
function SevenDayTargetModel:TaskItemIsAniming( )
|
|
return self.task_item_is_animing
|
|
end
|
|
----------领取动画状态-end-----------
|