源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

244 行
9.7 KiB

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