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