|
ReincarnationModel = ReincarnationModel or BaseClass(BaseModel)
|
|
|
|
ReincarnationModel.OPEN_REIN_SUCCEED_VIEW = "ReincarnationModel.OPEN_REIN_SUCCEED_VIEW" -- 打开转职成功界面
|
|
ReincarnationModel.REFRESH_REIN_TASK = "ReincarnationModel.REFRESH_REIN_TASK" -- 刷新转职任务
|
|
ReincarnationModel.OPEN_REIN_MAIN_TASK_VIEW = "ReincarnationModel.OPEN_REIN_MAIN_TASK_VIEW" -- 打开转职弹出界面
|
|
-- ReincarnationModel.OPEN_REIN_TASK_VIEW = "ReincarnationModel.OPEN_REIN_TASK_VIEW" -- 打开转职任务界面
|
|
-----------------------------------------------------------------------------
|
|
-- ReincarnationModel.Init_Cur_Rein = "ReincarnationModel.Init_Cur_Rein" -- 初始化转职信息
|
|
-- ReincarnationModel.Update_Cur_Rein = "ReincarnationModel.Update_Cur_Rein" -- 更新当前转职信息
|
|
-- ReincarnationModel.Update_Finish_Rein = "ReincarnationModel.Update_Finish_Rein" -- 更新已完成转职信息
|
|
-- ReincarnationModel.Update_Cur_Stage = "ReincarnationModel.Update_Cur_Stage" -- 更新当前转职阶段数
|
|
-- ReincarnationModel.Update_Awaken_Cell = "ReincarnationModel.Update_Awaken_Cell" -- 更新命格点亮信息
|
|
-- ReincarnationModel.Request_Awaken_Cell = "ReincarnationModel.Request_Awaken_Cell" -- 请求所有命格点亮信息
|
|
-- ReincarnationModel.Send_Awaken_Cell = "ReincarnationModel.Send_Awaken_Cell" -- 发送命格点亮请求
|
|
-- ReincarnationModel.Close_Awaken_Cell_Info = "ReincarnationModel.Close_Awaken_Cell_Info"-- 关闭命格信息
|
|
|
|
-- ReincarnationModel.SHOW_REIN_SUCCESS_VIEW = "ReincarnationModel.SHOW_REIN_SUCCESS_VIEW" --转职成功的界面
|
|
-- ReincarnationModel.SHOW_REIN_CASHEXP_VIEW = "ReincarnationModel.SHOW_REIN_CASHEXP_VIEW" --打开兑换星魂碎片的界面
|
|
-- ReincarnationModel.SHOW_REIN_ITEM_INFO_VIEW = "ReincarnationModel.SHOW_REIN_ITEM_INFO_VIEW" --打开四转、五转等界面的星魂格子的详细信息界面
|
|
-- ReincarnationModel.CLOSE_REIN_ITEM_INFO_VIEW = "ReincarnationModel.CLOSE_REIN_ITEM_INFO_VIEW" --关闭上面的格子信息界面
|
|
-- ReincarnationModel.UPDATE_REIN_FIVE_VIEW = "ReincarnationModel.UPDATE_REIN_FIVE_VIEW" --更新五转的界面
|
|
|
|
-- 转职界面立绘初始大小
|
|
ReincarnationModel.SP_SIZE = {
|
|
|
|
}
|
|
|
|
function ReincarnationModel:__init()
|
|
ReincarnationModel.Instance = self
|
|
-----------------------------
|
|
self.rein_lv_stage_cfg = {} -- 转职等级相关配置
|
|
self.rein_career_total_cfg = {} -- 转职名称头像配置
|
|
-----------------------------
|
|
-- self.turn_state_list = {[1] = false, [2] = false, [3] = false, [4] = false, [5] = false} -- 当前n转的完成状态
|
|
self.turn_state_list = {} -- 当前n转的完成状态
|
|
self.tab_content_list = {} -- 当前需要呈现的标签内容
|
|
self.cur_rein_task_id = nil -- 当前转职任务id
|
|
self.cur_rein_task_vo = nil -- 当前转职信息
|
|
self.cur_turn = 0 -- 当前处于的转职序号
|
|
self.cur_stage = 0 -- 当前处于的转职阶段
|
|
|
|
self.rein_red = false -- 转职系统红点
|
|
end
|
|
|
|
function ReincarnationModel:getInstance()
|
|
if ReincarnationModel.Instance == nil then
|
|
ReincarnationModel.New()
|
|
end
|
|
return ReincarnationModel.Instance
|
|
end
|
|
--------------------------------------------------------
|
|
-- 明日项目使用例
|
|
-- 根据参数获取对应转职数的任务和属性配置
|
|
function ReincarnationModel:GetReinLvStageData(lv)
|
|
if not lv then return nil end
|
|
if not self.rein_lv_stage_cfg[lv] then
|
|
local _tb = {}
|
|
for k, v in pairs(Config.Transfer) do
|
|
if v.id == lv then
|
|
_tb[#_tb+1] = v
|
|
end
|
|
end
|
|
-- 根据阶段排序
|
|
local sort_func = function ( a, b )
|
|
return a.stage < b.stage
|
|
end
|
|
table.sort(_tb, sort_func)
|
|
self.rein_lv_stage_cfg[lv] = _tb
|
|
end
|
|
return self.rein_lv_stage_cfg[lv]
|
|
end
|
|
-- 根据键值获取对应职业转职数的头像配置
|
|
function ReincarnationModel:GetReinCareerHeadData(career, turn)
|
|
career = career or RoleManager.Instance.mainRoleInfo.career
|
|
turn = turn or RoleManager.Instance.mainRoleInfo.turn
|
|
local key = career .. "@" .. turn
|
|
return Config.Transfercareer[key]
|
|
end
|
|
-- 获取当前职业的转职全部名称头像配置
|
|
function ReincarnationModel:GetTotalReinTransferCfg(career)
|
|
career = career or RoleManager.Instance.mainRoleInfo.career
|
|
if not self.rein_career_total_cfg[career] then
|
|
local tb = {}
|
|
for k, v in pairs(Config.Transfercareer) do
|
|
if v.career == career then
|
|
tb[#tb+1] = v
|
|
end
|
|
end
|
|
local sort_func = function ( a, b )
|
|
return a.transfer_id < b.transfer_id
|
|
end
|
|
table.sort(tb, sort_func)
|
|
self.rein_career_total_cfg[career] = tb
|
|
end
|
|
return self.rein_career_total_cfg[career]
|
|
end
|
|
function ReincarnationModel:GetMaxReinTransferByCareer(career)
|
|
local career_data = self:GetTotalReinTransferCfg(career)
|
|
if career_data then
|
|
return career_data[#career_data].transfer_id
|
|
end
|
|
return 1
|
|
end
|
|
--------------------------------------------------------
|
|
|
|
function ReincarnationModel:GetTurnState(index)
|
|
if self.turn_state_list[index] ~= nil then
|
|
return self.turn_state_list[index]
|
|
end
|
|
end
|
|
|
|
function ReincarnationModel:SetTurnState(index,value)
|
|
self.turn_state_list[index] = value
|
|
end
|
|
|
|
function ReincarnationModel:InitCurRein()
|
|
local mainVo = RoleManager.Instance:GetMainRoleVo()
|
|
-- 2021年2月27日修改 增加容错,防止超过配置的最高转职数
|
|
local max_transfer_id = self:GetMaxReinTransferByCareer(mainVo.career)
|
|
self.cur_turn = mainVo.turn < max_transfer_id and mainVo.turn + 1 or mainVo.turn
|
|
self.cur_stage = mainVo.turn_stage
|
|
self.turn_state_list = {}
|
|
if mainVo.turn > 0 then
|
|
for i = 1,mainVo.turn do
|
|
self:SetTurnState(i,true)
|
|
end
|
|
end
|
|
print("---------------转职信息------------------------")
|
|
print("转职数turn = ",self.cur_turn," 阶段数stage = ",self.cur_stage)
|
|
end
|
|
|
|
-- 更新当前转职任务信息
|
|
function ReincarnationModel:UpdateCurReinTask()
|
|
local task_model = TaskModel:getInstance()
|
|
self.cur_rein_task_id = nil
|
|
self.cur_rein_task_vo = nil
|
|
local taskVo = task_model:GetTaskByType(TaskType.TRUN_LINE) or nil
|
|
if taskVo then
|
|
self.cur_rein_task_id = taskVo.id
|
|
task_model:MakeTaskTip(taskVo) -- 拼接任务提示,此时获得的taskVo不一定已经刷新提示文字
|
|
self.cur_rein_task_vo = taskVo
|
|
end
|
|
-- 更新任务的时候检测一次红点
|
|
self:CheckReinRed()
|
|
end
|
|
|
|
function ReincarnationModel:GetCurTurn()
|
|
return self.cur_turn
|
|
end
|
|
function ReincarnationModel:SetCurStage(num)
|
|
if self.cur_stage then
|
|
self.cur_stage = num
|
|
end
|
|
end
|
|
function ReincarnationModel:GetCurStage()
|
|
return self.cur_stage
|
|
end
|
|
function ReincarnationModel:GetCurTaskId( )
|
|
return self.cur_rein_task_id
|
|
end
|
|
function ReincarnationModel:GetCurTaskVo()
|
|
return self.cur_rein_task_vo
|
|
end
|
|
|
|
-- 检查转职任务是否满足开服天数
|
|
function ReincarnationModel:CheckReinOpenDayLimit(turn, turn_stage)
|
|
turn = turn or RoleManager.Instance.mainRoleInfo.turn
|
|
turn_stage = turn_stage or RoleManager.Instance.mainRoleInfo.turn_stage
|
|
local rein_task_cfg = self:GetReinLvStageData(turn+1)
|
|
local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
|
|
-- 区分两种情况进行任务开启的检测
|
|
for k, v in pairs(rein_task_cfg) do
|
|
if turn_stage == 0 or v.stage == turn_stage then
|
|
return v.open_day <= open_day
|
|
end
|
|
end
|
|
-- return true
|
|
end
|
|
|
|
-- 判断角色当前是否在转职过程中,主要用于转职图标的显隐判断
|
|
function ReincarnationModel:FindIsInTurn()
|
|
local is_in_turn = TaskModel:getInstance():FindHaveTaskByType(TaskType.TRUN_LINE)
|
|
return is_in_turn
|
|
end
|
|
|
|
-- 获取转职成功时解锁的内容,包括技能和装备系数和展示装备
|
|
function ReincarnationModel:GetReinSucceedUnlockData(rein_lv)
|
|
local main_vo = RoleManager.Instance.mainRoleInfo
|
|
rein_lv = rein_lv or main_vo.turn
|
|
local data = {skill_list = {}, equip_list = {}, equip_series = 0}
|
|
if rein_lv == 0 then -- 0转特殊处理,加载4个初始技能
|
|
local basic_skill_list = Config.ConfigSkillUI.CareerSkill[main_vo.career][1]
|
|
for k = 1, 4 do -- 选前面四个主动技
|
|
data.skill_list[#data.skill_list+1] = {skill_data = basic_skill_list[k]}
|
|
end
|
|
else
|
|
local rein_lv_cfg = self:GetReinLvStageData(rein_lv)
|
|
local cfg = rein_lv_cfg[#rein_lv_cfg]
|
|
if cfg then
|
|
-- 插入对应职业技能
|
|
local skill_cfg = stringtotable(cfg.skill_list)
|
|
for k, v in pairs(skill_cfg) do
|
|
if v[1] == main_vo.career then
|
|
for k2, v2 in ipairs(v[2]) do
|
|
data.skill_list[#data.skill_list+1] = {skill_data = v2}
|
|
end
|
|
break
|
|
end
|
|
end
|
|
-- 插入解锁装备代数
|
|
data.equip_series = cfg.equipment_series
|
|
-- data[#data+1] = {type = 2, content = cfg.equipment_series}
|
|
-- 插入解锁装备奖励预览道具
|
|
local reward_list = stringtotable(cfg.show_reward)
|
|
for k, v in ipairs(reward_list) do
|
|
if v[1] == main_vo.career then
|
|
for k2, v2 in ipairs(v[2]) do
|
|
data.equip_list[#data.equip_list+1] = {equip_data = v2}
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return data
|
|
end
|
|
|
|
-- 检测转职系统红点
|
|
function ReincarnationModel:CheckReinRed( )
|
|
local mainVo = RoleManager.Instance.mainRoleInfo
|
|
-- 当前有转职任务且任务已经完成的情况下会有红点,其他情况没有
|
|
self.rein_red = self.cur_rein_task_vo and self.cur_rein_task_vo.taskTips[1] and self.cur_rein_task_vo.taskTips[1].isFinish == 1 or false
|
|
-- 保险起见,检查一波转职的开服天数限制
|
|
self.rein_red = self.rein_red and self:CheckReinOpenDayLimit(mainVo.trun, mainVo.trun_stage)
|
|
local cur_turn = self:GetCurTurn()
|
|
-- 刷新主界面按钮的红点
|
|
GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS, 16400 + cur_turn, self.rein_red)
|
|
-- 刷新角色界面的红点
|
|
NewMainRoleModel:getInstance():Fire(NewMainRoleModel.UPDATE_RED_DOT, NewMainRoleModel.TabId.REIN)
|
|
end
|
|
|
|
function ReincarnationModel:GetReinRed( )
|
|
return self.rein_red
|
|
end
|