源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

458 lines
16 KiB

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