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

243 行
9.7 KiB

  1. ReincarnationModel = ReincarnationModel or BaseClass(BaseModel)
  2. ReincarnationModel.OPEN_REIN_SUCCEED_VIEW = "ReincarnationModel.OPEN_REIN_SUCCEED_VIEW" -- 打开转职成功界面
  3. ReincarnationModel.REFRESH_REIN_TASK = "ReincarnationModel.REFRESH_REIN_TASK" -- 刷新转职任务
  4. ReincarnationModel.OPEN_REIN_MAIN_TASK_VIEW = "ReincarnationModel.OPEN_REIN_MAIN_TASK_VIEW" -- 打开转职弹出界面
  5. -- ReincarnationModel.OPEN_REIN_TASK_VIEW = "ReincarnationModel.OPEN_REIN_TASK_VIEW" -- 打开转职任务界面
  6. -----------------------------------------------------------------------------
  7. -- ReincarnationModel.Init_Cur_Rein = "ReincarnationModel.Init_Cur_Rein" -- 初始化转职信息
  8. -- ReincarnationModel.Update_Cur_Rein = "ReincarnationModel.Update_Cur_Rein" -- 更新当前转职信息
  9. -- ReincarnationModel.Update_Finish_Rein = "ReincarnationModel.Update_Finish_Rein" -- 更新已完成转职信息
  10. -- ReincarnationModel.Update_Cur_Stage = "ReincarnationModel.Update_Cur_Stage" -- 更新当前转职阶段数
  11. -- ReincarnationModel.Update_Awaken_Cell = "ReincarnationModel.Update_Awaken_Cell" -- 更新命格点亮信息
  12. -- ReincarnationModel.Request_Awaken_Cell = "ReincarnationModel.Request_Awaken_Cell" -- 请求所有命格点亮信息
  13. -- ReincarnationModel.Send_Awaken_Cell = "ReincarnationModel.Send_Awaken_Cell" -- 发送命格点亮请求
  14. -- ReincarnationModel.Close_Awaken_Cell_Info = "ReincarnationModel.Close_Awaken_Cell_Info"-- 关闭命格信息
  15. -- ReincarnationModel.SHOW_REIN_SUCCESS_VIEW = "ReincarnationModel.SHOW_REIN_SUCCESS_VIEW" --转职成功的界面
  16. -- ReincarnationModel.SHOW_REIN_CASHEXP_VIEW = "ReincarnationModel.SHOW_REIN_CASHEXP_VIEW" --打开兑换星魂碎片的界面
  17. -- ReincarnationModel.SHOW_REIN_ITEM_INFO_VIEW = "ReincarnationModel.SHOW_REIN_ITEM_INFO_VIEW" --打开四转、五转等界面的星魂格子的详细信息界面
  18. -- ReincarnationModel.CLOSE_REIN_ITEM_INFO_VIEW = "ReincarnationModel.CLOSE_REIN_ITEM_INFO_VIEW" --关闭上面的格子信息界面
  19. -- ReincarnationModel.UPDATE_REIN_FIVE_VIEW = "ReincarnationModel.UPDATE_REIN_FIVE_VIEW" --更新五转的界面
  20. -- 转职界面立绘初始大小
  21. ReincarnationModel.SP_SIZE = {
  22. }
  23. function ReincarnationModel:__init()
  24. ReincarnationModel.Instance = self
  25. -----------------------------
  26. self.rein_lv_stage_cfg = {} -- 转职等级相关配置
  27. self.rein_career_total_cfg = {} -- 转职名称头像配置
  28. -----------------------------
  29. -- self.turn_state_list = {[1] = false, [2] = false, [3] = false, [4] = false, [5] = false} -- 当前n转的完成状态
  30. self.turn_state_list = {} -- 当前n转的完成状态
  31. self.tab_content_list = {} -- 当前需要呈现的标签内容
  32. self.cur_rein_task_id = nil -- 当前转职任务id
  33. self.cur_rein_task_vo = nil -- 当前转职信息
  34. self.cur_turn = 0 -- 当前处于的转职序号
  35. self.cur_stage = 0 -- 当前处于的转职阶段
  36. self.rein_red = false -- 转职系统红点
  37. end
  38. function ReincarnationModel:getInstance()
  39. if ReincarnationModel.Instance == nil then
  40. ReincarnationModel.New()
  41. end
  42. return ReincarnationModel.Instance
  43. end
  44. --------------------------------------------------------
  45. -- 明日项目使用例
  46. -- 根据参数获取对应转职数的任务和属性配置
  47. function ReincarnationModel:GetReinLvStageData(lv)
  48. if not lv then return nil end
  49. if not self.rein_lv_stage_cfg[lv] then
  50. local _tb = {}
  51. for k, v in pairs(Config.Transfer) do
  52. if v.id == lv then
  53. _tb[#_tb+1] = v
  54. end
  55. end
  56. -- 根据阶段排序
  57. local sort_func = function ( a, b )
  58. return a.stage < b.stage
  59. end
  60. table.sort(_tb, sort_func)
  61. self.rein_lv_stage_cfg[lv] = _tb
  62. end
  63. return self.rein_lv_stage_cfg[lv]
  64. end
  65. -- 根据键值获取对应职业转职数的头像配置
  66. function ReincarnationModel:GetReinCareerHeadData(career, turn)
  67. career = career or RoleManager.Instance.mainRoleInfo.career
  68. turn = turn or RoleManager.Instance.mainRoleInfo.turn
  69. local key = career .. "@" .. turn
  70. return Config.Transfercareer[key]
  71. end
  72. -- 获取当前职业的转职全部名称头像配置
  73. function ReincarnationModel:GetTotalReinTransferCfg(career)
  74. career = career or RoleManager.Instance.mainRoleInfo.career
  75. if not self.rein_career_total_cfg[career] then
  76. local tb = {}
  77. for k, v in pairs(Config.Transfercareer) do
  78. if v.career == career then
  79. tb[#tb+1] = v
  80. end
  81. end
  82. local sort_func = function ( a, b )
  83. return a.transfer_id < b.transfer_id
  84. end
  85. table.sort(tb, sort_func)
  86. self.rein_career_total_cfg[career] = tb
  87. end
  88. return self.rein_career_total_cfg[career]
  89. end
  90. function ReincarnationModel:GetMaxReinTransferByCareer(career)
  91. local career_data = self:GetTotalReinTransferCfg(career)
  92. if career_data then
  93. return career_data[#career_data].transfer_id
  94. end
  95. return 1
  96. end
  97. --------------------------------------------------------
  98. function ReincarnationModel:GetTurnState(index)
  99. if self.turn_state_list[index] ~= nil then
  100. return self.turn_state_list[index]
  101. end
  102. end
  103. function ReincarnationModel:SetTurnState(index,value)
  104. self.turn_state_list[index] = value
  105. end
  106. function ReincarnationModel:InitCurRein()
  107. local mainVo = RoleManager.Instance:GetMainRoleVo()
  108. -- 2021年2月27日修改 增加容错,防止超过配置的最高转职数
  109. local max_transfer_id = self:GetMaxReinTransferByCareer(mainVo.career)
  110. self.cur_turn = mainVo.turn < max_transfer_id and mainVo.turn + 1 or mainVo.turn
  111. self.cur_stage = mainVo.turn_stage
  112. self.turn_state_list = {}
  113. if mainVo.turn > 0 then
  114. for i = 1,mainVo.turn do
  115. self:SetTurnState(i,true)
  116. end
  117. end
  118. print("---------------转职信息------------------------")
  119. print("转职数turn = ",self.cur_turn," 阶段数stage = ",self.cur_stage)
  120. end
  121. -- 更新当前转职任务信息
  122. function ReincarnationModel:UpdateCurReinTask()
  123. local task_model = TaskModel:getInstance()
  124. self.cur_rein_task_id = nil
  125. self.cur_rein_task_vo = nil
  126. local taskVo = task_model:GetTaskByType(TaskType.TRUN_LINE) or nil
  127. if taskVo then
  128. self.cur_rein_task_id = taskVo.id
  129. task_model:MakeTaskTip(taskVo) -- 拼接任务提示,此时获得的taskVo不一定已经刷新提示文字
  130. self.cur_rein_task_vo = taskVo
  131. end
  132. -- 更新任务的时候检测一次红点
  133. self:CheckReinRed()
  134. end
  135. function ReincarnationModel:GetCurTurn()
  136. return self.cur_turn
  137. end
  138. function ReincarnationModel:SetCurStage(num)
  139. if self.cur_stage then
  140. self.cur_stage = num
  141. end
  142. end
  143. function ReincarnationModel:GetCurStage()
  144. return self.cur_stage
  145. end
  146. function ReincarnationModel:GetCurTaskId( )
  147. return self.cur_rein_task_id
  148. end
  149. function ReincarnationModel:GetCurTaskVo()
  150. return self.cur_rein_task_vo
  151. end
  152. -- 检查转职任务是否满足开服天数
  153. function ReincarnationModel:CheckReinOpenDayLimit(turn, turn_stage)
  154. turn = turn or RoleManager.Instance.mainRoleInfo.turn
  155. turn_stage = turn_stage or RoleManager.Instance.mainRoleInfo.turn_stage
  156. local rein_task_cfg = self:GetReinLvStageData(turn+1)
  157. local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
  158. -- 区分两种情况进行任务开启的检测
  159. for k, v in pairs(rein_task_cfg) do
  160. if turn_stage == 0 or v.stage == turn_stage then
  161. return v.open_day <= open_day
  162. end
  163. end
  164. -- return true
  165. end
  166. -- 判断角色当前是否在转职过程中,主要用于转职图标的显隐判断
  167. function ReincarnationModel:FindIsInTurn()
  168. local is_in_turn = TaskModel:getInstance():FindHaveTaskByType(TaskType.TRUN_LINE)
  169. return is_in_turn
  170. end
  171. -- 获取转职成功时解锁的内容,包括技能和装备系数和展示装备
  172. function ReincarnationModel:GetReinSucceedUnlockData(rein_lv)
  173. local main_vo = RoleManager.Instance.mainRoleInfo
  174. rein_lv = rein_lv or main_vo.turn
  175. local data = {skill_list = {}, equip_list = {}, equip_series = 0}
  176. if rein_lv == 0 then -- 0转特殊处理,加载4个初始技能
  177. local basic_skill_list = Config.ConfigSkillUI.CareerSkill[main_vo.career][1]
  178. for k = 1, 4 do -- 选前面四个主动技
  179. data.skill_list[#data.skill_list+1] = {skill_data = basic_skill_list[k]}
  180. end
  181. else
  182. local rein_lv_cfg = self:GetReinLvStageData(rein_lv)
  183. local cfg = rein_lv_cfg[#rein_lv_cfg]
  184. if cfg then
  185. -- 插入对应职业技能
  186. local skill_cfg = stringtotable(cfg.skill_list)
  187. for k, v in pairs(skill_cfg) do
  188. if v[1] == main_vo.career then
  189. for k2, v2 in ipairs(v[2]) do
  190. data.skill_list[#data.skill_list+1] = {skill_data = v2}
  191. end
  192. break
  193. end
  194. end
  195. -- 插入解锁装备代数
  196. data.equip_series = cfg.equipment_series
  197. -- data[#data+1] = {type = 2, content = cfg.equipment_series}
  198. -- 插入解锁装备奖励预览道具
  199. local reward_list = stringtotable(cfg.show_reward)
  200. for k, v in ipairs(reward_list) do
  201. if v[1] == main_vo.career then
  202. for k2, v2 in ipairs(v[2]) do
  203. data.equip_list[#data.equip_list+1] = {equip_data = v2}
  204. end
  205. break
  206. end
  207. end
  208. end
  209. end
  210. return data
  211. end
  212. -- 检测转职系统红点
  213. function ReincarnationModel:CheckReinRed( )
  214. local mainVo = RoleManager.Instance.mainRoleInfo
  215. -- 当前有转职任务且任务已经完成的情况下会有红点,其他情况没有
  216. 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
  217. -- 保险起见,检查一波转职的开服天数限制
  218. self.rein_red = self.rein_red and self:CheckReinOpenDayLimit(mainVo.trun, mainVo.trun_stage)
  219. local cur_turn = self:GetCurTurn()
  220. -- 刷新主界面按钮的红点
  221. GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS, 16400 + cur_turn, self.rein_red)
  222. -- 刷新角色界面的红点
  223. NewMainRoleModel:getInstance():Fire(NewMainRoleModel.UPDATE_RED_DOT, NewMainRoleModel.TabId.REIN)
  224. end
  225. function ReincarnationModel:GetReinRed( )
  226. return self.rein_red
  227. end