EliteAssessModel = EliteAssessModel or BaseClass(BaseVo, true) local EliteAssessModel = EliteAssessModel EliteAssessModel.REQUEST_INFO = "EliteAssessModel.REQUEST_INFO" EliteAssessModel.OPEN_ELITE_ASSESS_VIEW = "EliteAssessModel.OPEN_ELITE_ASSESS_VIEW"--打开主界面 EliteAssessModel.UPDATE_ELITE_ASSESS_VIEW = "EliteAssessModel.UPDATE_ELITE_ASSESS_VIEW"--更新主界面 EliteAssessModel.REQUEST_INFO = "EliteAssessModel.REQUEST_INFO"--请求协议 EliteAssessModel.OPEN_ELITE_ASSESS_AWARD_SHOW_VIEW = "EliteAssessModel.OPEN_ELITE_ASSESS_AWARD_SHOW_VIEW"--打开精英考核奖励展示界面 EliteAssessModel.CLOSE_ELITE_ASSESS_VIEW = "EliteAssessModel.CLOSE_ELITE_ASSESS_VIEW"--关闭精英考核界面 EliteAssessModel.PLAY_ELITE_ASSESS_ACTION = "EliteAssessModel.PLAY_ELITE_ASSESS_ACTION"--章节二领完就要做动画了 EliteAssessModel.PLAY_MAINUI_EFFECT = "EliteAssessModel.PLAY_MAINUI_EFFECT"--主UI特效播放 function EliteAssessModel:__init() EliteAssessModel.Instance = self self:Reset() end function EliteAssessModel:Reset() self.view_info = {}--界面信息 self.tab_red_info_list = {} self.red_info_list = {}--红点信息列表 self:InitCfg() end function EliteAssessModel:getInstance() if EliteAssessModel.Instance == nil then EliteAssessModel.Instance = EliteAssessModel.New() end return EliteAssessModel.Instance end --初始化配置 function EliteAssessModel:InitCfg( ) self.eliteAssess_cfg = {}--精英考核总配置 local eliteAssess_cfg = DeepCopy(Config.Eliteassessreward) for k,v in pairs(eliteAssess_cfg) do local data = v data.reward = stringtotable(v.reward)--大奖奖励 data.client_show = stringtotable(v.client_show)--展示模型 self.eliteAssess_cfg[v.category] = data end self.eliteAssess_task_cfg = {}--精英考核任务总配置 self.eliteAssess_task_id_cfg = {}--精英考核任务总配置 self.eliteAssess_final_task_cfg = {}--精英考核章节总任务配置 local eliteAssess_task_cfg = DeepCopy(Config.Eliteassesstask) for k,v in pairs(eliteAssess_task_cfg) do local data = v data.reward = stringtotable(v.reward)--大奖奖励 data.content = stringtotable(v.content)--条件 data.jump = stringtotable(v.jump)--跳转 -- 取最后一个任务作为章节任务 单独拿出来 -- 这么写很怪,之后有空再改 -- author: lizhijian if v.task_id % 10 == 5 then self.eliteAssess_final_task_cfg[v.category] = data else if not self.eliteAssess_task_cfg[v.category] then self.eliteAssess_task_cfg[v.category] = {} end self.eliteAssess_task_cfg[v.category][v.task_id] = data self.eliteAssess_task_id_cfg[v.task_id] = data end end end --获取任务配置 function EliteAssessModel:GetTaskCfg( category ) if self.eliteAssess_task_cfg[category] then return self.eliteAssess_task_cfg[category] end end --获取任务配置通过task_id function EliteAssessModel:GetTaskCfgByTaskId( task_id ) return self.eliteAssess_task_id_cfg[task_id] end --获取章节配置 function EliteAssessModel:GetEliteAssessListCfg( category ) if not category then return self.eliteAssess_cfg else return self.eliteAssess_cfg[category] end end --获取章节任务配置 function EliteAssessModel:GetEliteAssessChapterTaskCfg( category ) if not category then return self.eliteAssess_final_task_cfg else return self.eliteAssess_final_task_cfg[category] end end --检查红点 function EliteAssessModel:CheckRedDot() local info = self:GetViewInfo() self.red_info_list = {} self.tab_red_info_list = {} local have_red = false if info then for category,task_list in pairs(info) do for task_id, task_info in pairs(task_list) do if task_info.status == 1 then self.red_info_list[task_id] = true self.tab_red_info_list[category] = true have_red = true end end end end local cur_category = self:GetCurCategory() local chapter_task_cfg = self:GetEliteAssessChapterTaskCfg(cur_category) local task_dun_cfg = chapter_task_cfg.content local dun_cfg = BaseDungeonModel:getInstance():GetDunCfg(task_dun_cfg[1][3]) local fight = dun_cfg.recommend_power -- local cur_fight = RoleManager.Instance.mainRoleInfo.fighting local chapter_task_status = self:GetTaskStatus(cur_category, chapter_task_cfg.task_id) local complete_num = self:GetProgressInCategory(cur_category) -- print("Lizhijian:EliteAssessModel [start:124] ") -- print(cur_fight, fight) -- print(chapter_task_status) -- print(complete_num) -- print("Lizhijian:EliteAssessModel [end:124] ") if cur_fight > fight and chapter_task_status == 0 and complete_num >= 4 then have_red = true end self.have_red = have_red -- print("huangcong:EliteAssessModel [start:93] self.red_info_list:", self.red_info_list) -- PrintTable(self.red_info_list) -- print("huangcong:EliteAssessModel [end]") end -- 总红点 给外部icon用 function EliteAssessModel:GetRedDot(force) if force then self:CheckRedDot() end return self.have_red end --检测精英考核活动图标是否需要开启[兼顾设置精英考核活动内部的活动列表] function EliteAssessModel:CheckIconBoolOpen() end -- 设置界面信息 -- 2021.7.21修改 -- 返回章节信息数组 但数组内只会有当前章节的信息 function EliteAssessModel:SetViewInfo( vo ) local new_list = {} for i,v in pairs(vo.category_list) do new_list[v.category] = {} for i1, v1 in pairs(v.task_list) do new_list[v.category][v1.task_id] = v1 end end -- print("Lizhijian:EliteAssessModel [start:132] ") -- PrintTable(new_list) -- print("Lizhijian:EliteAssessModel [end:132] ") self.view_info = new_list self:CheckRedDot() end --获取界面信息 function EliteAssessModel:GetViewInfo() return self.view_info end --获取当前章节 function EliteAssessModel:GetCurCategory() local view_info = self:GetViewInfo() local max = -1 for key, _ in pairs(view_info) do max = max > key and max or key end return max < 1 and nil or max end --获得当前需要展示的任务 function EliteAssessModel:GetCurShowTaskInfo() local server_info = self:GetViewInfo() -- return self.view_info[category] local category = self:GetCurCategory() if server_info and category and server_info[category] then local task_info = nil local can_get_info = nil for k,v in pairs(server_info.list) do--先寻找可领取的 local task_cfg = self:GetTaskCfgByTaskId(v.task_id) if task_cfg and task_cfg.category == category then if v.status == 1 then task_info = v can_get_info = true break end end end if not can_get_info then--没有可领取的找未完成的 for k,v in pairsByKeys(server_info.list) do local task_cfg = self:GetTaskCfgByTaskId(v.task_id) if task_cfg and task_cfg.category == category then if v.status ~= 2 then task_info = v break end end end end if task_info then local task_cfg = self:GetTaskCfgByTaskId(task_info.task_id) task_info = DeepCopy(task_info) task_info.task_cfg = DeepCopy(task_cfg) return task_info end end end function EliteAssessModel:GetProgressInCategory(category) local info = self:GetViewInfo() local count = 0 if info then for key, value in pairs(info) do if key == category then for k1, v1 in pairs(value) do if v1.status == 2 then count = count + 1 end end end end end -- 特殊处理 最后一个章节任务不算进完成进度内 return count > 4 and 4 or count end function EliteAssessModel:GetResouceByTaskId(task_id) if task_id then return Config.Eliteassesstaskresource[task_id] end end --获得任务进度Max值 function EliteAssessModel:GetTaskProMax( content ) local max = 0 if content[1][1] == "pass_dun" then max = 1 elseif content[1][1] == "open_func" then max = 1 elseif content[1][1] == "task" then max = 1 elseif content[1][1] == "fast_dun" then max = content[1][3] elseif content[1][1] == "normal_tower_dun" then max = content[1][2] - 7000 elseif content[1][1] == "diff_tower_dun" then max = 1 elseif content[1][1] == "person_boss" then max = 1 elseif content[1][1] == "deserted_boss" then max = content[1][3] elseif content[1][1] == "reward_boss" then max = 1 elseif content[1][1] == "enter_dungeon" then max = 1 elseif content[1][1] == "visus_dun" then max = content[1][3] elseif content[1][1] == "pet_dun" then max = content[1][2] - 12000 else max = content[1][2] end return max end function EliteAssessModel:GetTaskStatus(category, task_id) if category and task_id then local view_info = self:GetViewInfo() if view_info and view_info[category] and view_info[category][task_id] then return view_info[category][task_id].status end end return 0 end function EliteAssessModel:GetTaskLimit(task_id) local can_go = true local can_go_some = true local limit_str_go = "" local limit_str_go_some = "" local role_lv = RoleManager.Instance.mainRoleInfo.level local op_day = ServerTimeModel:getInstance():GetOpenServerDay() local power = RoleManager.Instance.mainRoleInfo.fighting if task_id then local task_cfg = self:GetTaskCfgByTaskId(task_id) if not task_cfg then return end if task_cfg.jump and task_cfg.jump[1] then local is_open, module_cfg = GetModuleIsOpen(task_cfg.jump[1], task_cfg.jump[2]) if not is_open then if role_lv < module_cfg.open_lv then can_go = false limit_str_go = string.format("等级%s解锁", ColorUtil.RED_DARK, module_cfg.open_lv) return can_go, limit_str_go end if op_day < module_cfg.open_day then can_go = false limit_str_go = string.format("开服%s天解锁", ColorUtil.RED_DARK, module_cfg.open_day) return can_go, limit_str_go end local task_model = TaskModel:getInstance() local need_task_id = module_cfg.task_id if not task_model:IsTaskFinished(need_task_id) then local task_data = task_model:GetTaskById(need_task_id) local temp_str = task_model:IsMainTask(need_task_id) and "主线" or "支线" can_go = false if not task_data then limit_str_go = string.format("%s级%s解锁", ColorUtil.RED_DARK, module_cfg.open_lv, temp_str) temp_str = "主线" else limit_str_go = string.format("%s级%s解锁", ColorUtil.RED_DARK, task_data.level, temp_str) end return can_go, limit_str_go end end end if task_cfg.content[1][1] == "fast_dun" then local cur_wave = ExpDunModel:getInstance():GetCurrentWave() local next_wave = cur_wave < TableSize(Config.Expdunwave) and cur_wave + 1 or cur_wave local wave_cfg = Config.Expdunwave[next_wave] local match_power = power >= wave_cfg.power_limit local match_level = role_lv >= wave_cfg.lv_limit if not match_level then can_go_some = false limit_str_go_some = string.format("需要等级%s", ColorUtil.RED_DARK,wave_cfg.lv_limit) return can_go, limit_str_go, can_go_some, limit_str_go_some end if not match_power then can_go_some = false limit_str_go_some = string.format("需要战力%s", ColorUtil.RED_DARK,wave_cfg.power_limit) return can_go, limit_str_go, can_go_some, limit_str_go_some end elseif task_cfg.content[1][1] == "reward_boss" then local boss_id = task_cfg.content[1][2] local limit_lv = BossModel:GetInstance():GetMoneyBossLimitLv(boss_id) local is_lock = RoleManager.Instance.mainRoleInfo.level < limit_lv ------------------------- if is_lock then can_go_some = false limit_str_go_some = string.format("需要等级%s", ColorUtil.RED_DARK, limit_lv) return can_go, limit_str_go, can_go_some, limit_str_go_some end elseif task_cfg.content[1][1] == "deserted_boss" then local boss_id = task_cfg.content[1][2] local limit_lv = BossModel:GetInstance():GetMoneyBossLimitLv(boss_id) local is_lock = RoleManager.Instance.mainRoleInfo.level < limit_lv ------------------------- if is_lock then can_go_some = false limit_str_go_some = string.format("需要等级%s", ColorUtil.RED_DARK, limit_lv) return can_go, limit_str_go, can_go_some, limit_str_go_some end elseif task_cfg.content[1][1] == "person_boss" then local grade = task_cfg.content[1][2] local boss_cfg_list = BossModel:GetInstance():GetPersonBossList() local min_lv = 0 for key, value in pairs(boss_cfg_list) do if value.grade == grade then min_lv = stringtotable(value.recommend_lv)[1][1] break end end local limit_lv = min_lv local is_lock = RoleManager.Instance.mainRoleInfo.level < limit_lv ------------------------- if is_lock then can_go_some = false limit_str_go_some = string.format("需要等级%s", ColorUtil.RED_DARK, limit_lv) return can_go, limit_str_go, can_go_some, limit_str_go_some end elseif task_cfg.content[1][1] == "diff_tower_dun" then BaseDungeonModel:getInstance().is_choose_hard_tower = true if role_lv < BaseDungeonModel.TowerdundiffcultLevel then can_go_some = false limit_str_go_some = string.format("需要等级%s", ColorUtil.RED_DARK, BaseDungeonModel.TowerdundiffcultLevel) return can_go, limit_str_go, can_go_some, limit_str_go_some end local base_cfg_list = BaseDungeonModel:getInstance():GetDunCfg(nil,BaseDungeonModel.DUN_TYPE.ONE_TOWER) local cfg_list = DeepCopy(base_cfg_list) local new_cfg_list = {} for i,v in pairs(cfg_list) do local dungeon_level = BaseDungeonModel:getInstance():GetDungeonOpenLevel(v.id) if role_lv >= dungeon_level then new_cfg_list[#new_cfg_list + 1] = v end end local diffcult_dun_list = {}--困难副本 for k,v in pairs(new_cfg_list) do if Config.Towerdundiffcult[v.id] then diffcult_dun_list[#diffcult_dun_list + 1] = v end end local sort_func = function ( a, b ) return a.id < b.id end table.sort(diffcult_dun_list, sort_func) local dun_cfg = diffcult_dun_list[1] if dun_cfg then local lock_cfg = Config.Towerdundiffcult[dun_cfg.id] if not lock_cfg then return end local lock_dun_cfg = BaseDungeonModel:getInstance():GetDunCfg(lock_cfg.need_unlock,nil) if lock_dun_cfg and lock_dun_cfg.id then local info = BaseDungeonModel:getInstance():GetDunProtoInfoByDunId(BaseDungeonModel.DUN_TYPE.ONE_TOWER,lock_dun_cfg.id) if info.is_pass ~= 1 then can_go_some = false limit_str_go_some = string.format("需通关简单%s", ColorUtil.RED_DARK,lock_dun_cfg.name) return can_go, limit_str_go, can_go_some, limit_str_go_some end end end elseif task_cfg.content[1][1] == "visus_dun" or task_cfg.content[1][1] == "pet_dun" then local dun_id = task_cfg.content[1][2] local dun_cfg = BaseDungeonModel:GetInstance():GetDunCfg(dun_id) for k,v in pairs(dun_cfg.condition) do if v[1] == "lv" then--要求等级 if role_lv < tonumber(v[2]) then can_go_some = false limit_str_go_some = string.format("需要等级%s", ColorUtil.RED_DARK,tonumber(v[2])) return can_go, limit_str_go, can_go_some, limit_str_go_some end -- elseif v[1] == "finish_dun_id" then--要求前置通关关卡 -- local pre_dun_proto_info = BaseDungeonModel:GetInstance():GetDunProtoInfoByDunId(BaseDungeonModel.DUN_TYPE.MAINPLOT,tonumber(v[2])) -- if pre_dun_proto_info and pre_dun_proto_info.is_pass ~= 1 then -- can_go_some = false -- limit_str_go_some = string.format("需要等级%s", ColorUtil.RED_DARK,wave_cfg.lv_limit) -- return can_go, limit_str_go, can_go_some, limit_str_go_some -- end elseif v[1] == "open_day" then if ServerTimeModel:getInstance():GetOpenServerDay() < tonumber(v[2]) then can_go_some = false limit_str_go_some = string.format("需要开服%s天", ColorUtil.RED_DARK,tonumber(v[2])) return can_go, limit_str_go, can_go_some, limit_str_go_some end end end end return can_go, limit_str_go, can_go_some, limit_str_go_some end end