|
|
- 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("等级<color=%s>%s</color>解锁", 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("开服<color=%s>%s</color>天解锁", 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("<color=%s>%s级%s</color>解锁", ColorUtil.RED_DARK, module_cfg.open_lv, temp_str)
- temp_str = "主线"
- else
- limit_str_go = string.format("<color=%s>%s级%s</color>解锁", 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("需要等级<color=%s>%s</color>", 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("需要战力<color=%s>%s</color>", 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("需要等级<color=%s>%s</color>", 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("需要等级<color=%s>%s</color>", 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("需要等级<color=%s>%s</color>", 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("需要等级<color=%s>%s</color>", 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("需通关<color=%s>简单%s</color>", 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("需要等级<color=%s>%s</color>", 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("<color=%s>需要等级%s</color>", 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("需要开服<color=%s>%s天</color>", 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
|