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