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