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