源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

359 行
14 KiB

  1. NewMainRoleModel = NewMainRoleModel or BaseClass(BaseModel)
  2. NewMainRoleModel.SET_DESIGNATION = "NewMainRoleModel.SET_DESIGNATION"
  3. NewMainRoleModel.SHOW_RED_DOT = "NewMainRoleModel.SHOW_RED_DOT"
  4. NewMainRoleModel.OPEN_ALL_ADDITION_VIEW = "NewMainRoleModel.OPEN_ALL_ADDITION_VIEW"
  5. NewMainRoleModel.REQUEST_OTHER_PLAYER_INFO = "NewMainRoleModel.REQUEST_OTHER_PLAYER_INFO"
  6. NewMainRoleModel.SEND_TURN_CAREER_PROTOCAL = "NewMainRoleModel.SEND_TURN_CAREER_PROTOCAL"
  7. NewMainRoleModel.RequestWorldLevel = "NewMainRoleModel.RequestWorldLevel"
  8. NewMainRoleModel.OPEN_HATRED_VIEW = "NewMainRoleModel.OPEN_HATRED_VIEW" -- 打开善恶值界面
  9. NewMainRoleModel.REFRESH_ROLE_HEAD_RED = "NewMainRoleModel.REFRESH_ROLE_HEAD_RED" -- 更新头像红点
  10. NewMainRoleModel.REFRESH_ROLE_HEAD_ACTIVATE = "NewMainRoleModel.REFRESH_ROLE_HEAD_ACTIVATE" -- 更新头像激活信息
  11. NewMainRoleModel.ANS_UPDATE_RED_DOT = "NewMainRoleModel.ANS_UPDATE_RED_DOT" -- 回应更新红点
  12. NewMainRoleModel.UPDATE_RED_DOT = "NewMainRoleModel.UPDATE_RED_DOT" -- 更新红点方法(数据刷新就发这个监听)
  13. NewMainRoleModel.CLOSE_NEW_MAIN_ROLE_VIEW = "NewMainRoleModel.CLOSE_NEW_MAIN_ROLE_VIEW" --关闭界面
  14. NewMainRoleModel.OTHER_PLAYER_INFO_MODULE_ID = {--其他玩家对应的模块id
  15. CSP = 650, --跨服3v3
  16. CS1VN = 621, --1vN
  17. KFRANK = 226, -- 跨服榜单
  18. }
  19. NewMainRoleModel.TabId = {
  20. ROLE = 1, -- 成就
  21. DESIGNATION = 2,
  22. FASHION = 3,
  23. Light = 5,
  24. -- NATURE = 6,
  25. SOULPOWER = 7,
  26. KFWORLD = 8,
  27. REIN = 100, -- 转职界面要放在最后面
  28. }
  29. -- 职业描述面板页签文本
  30. NewMainRoleModel.ProfressTabStr = {
  31. [0] = "敬请期待",
  32. [1] = "剑士",
  33. [2] = "灵师",
  34. }
  35. -- 职业描述界面展示的技能
  36. NewMainRoleModel.ProfressShowSkill = {
  37. [1] = {
  38. [0] = {101011,101021,101031,101041}, -- 0转
  39. [1] = {101051,101061,101071,101081}, -- 1转
  40. [2] = {101051,101061,101071,101081}, -- 2转
  41. },
  42. [2] = {
  43. [0] = {103011,103021,103031,103041}, -- 0转
  44. [1] = {103051,103061,103071,103081}, -- 1转
  45. [2] = {103051,103061,103071,103081}, -- 2转
  46. },
  47. }
  48. NewMainRoleModel.HeadType = 14
  49. NewMainRoleModel.HeadSubType = 2 -- 转职头像是1,运营道具头像是2
  50. function NewMainRoleModel:__init()
  51. NewMainRoleModel.Instance = self
  52. self.is_quick_use = false
  53. self.quick_use_num = 0
  54. self.redDotBit = 0
  55. self.head_basic_list = nil -- 头像道具配置
  56. self.activated_role_head_list = {} -- 已激活头像协议,内容为已激活的称号id列表
  57. self.role_head_status = {} -- 头像激活状态列表,格式为 称号物品id = status(1可激活 2已激活, 无状态则是未激活)
  58. self.role_head_info = nil -- 获取当前的头像信息
  59. self.role_rein_head_info = nil -- 获取当前角色职业及性别的配置默认头像
  60. self.mainrole_red_dot = {}--角色界面红点
  61. self.login_time_data = nil -- 登录时间查询返回数据
  62. self.is_today_first_login = false
  63. end
  64. function NewMainRoleModel:getInstance()
  65. if NewMainRoleModel.Instance == nil then
  66. NewMainRoleModel.New()
  67. end
  68. return NewMainRoleModel.Instance
  69. end
  70. function NewMainRoleModel:GetInstance()
  71. if NewMainRoleModel.Instance == nil then
  72. NewMainRoleModel.New()
  73. end
  74. return NewMainRoleModel.Instance
  75. end
  76. function NewMainRoleModel:SetRoleFigure( vo )
  77. self.other_player_vo = vo
  78. end
  79. -- function NewMainRoleModel:UpdateTabDot(type)
  80. -- local value
  81. -- if type == 1 then
  82. -- elseif type == 2 then
  83. -- value = false --DesignationModel:getInstance():CheckRedDot()
  84. -- end
  85. -- self:SetRedDot(type, value)
  86. -- end
  87. -- function NewMainRoleModel:SetRedDot(type, value)
  88. -- local newValue = self.redDotBit
  89. -- if value then
  90. -- newValue = bit.bor(self.redDotBit, bit.lshift(1, type))
  91. -- else
  92. -- newValue = bit.band(self.redDotBit, bit.bnot(bit.lshift(1, type)))
  93. -- end
  94. -- self:ChangeVar("redDotBit", newValue)
  95. -- GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_RED_POINT, 130, self.redDotBit > 0)
  96. -- end
  97. function NewMainRoleModel:IsNeedRedAll( )
  98. for k,v in pairs(NewMainRoleModel.TabId) do
  99. self:IsNeedRed(v)
  100. end
  101. end
  102. function NewMainRoleModel:IsNeedRed( tab_id )
  103. local bool = false
  104. if tab_id == NewMainRoleModel.TabId.ROLE then
  105. -- bool = AchieveModel:getInstance():CheckMainRoleInfoViewAchieveRed() -- 成就不在角色进了
  106. -- elseif tab_id == NewMainRoleModel.TabId.DESIGNATION then
  107. -- bool = DesignationModel:GetInstance():CheckDesignationRedDot()
  108. -- elseif tab_id == NewMainRoleModel.TabId.FASHION then
  109. -- bool = FashionModel:getInstance():CheckFashionRedDot(true) or FashionModel:GetInstance():IsFashionSuitNeedRed()
  110. elseif tab_id == NewMainRoleModel.TabId.Light then
  111. bool = LightModel:GetInstance():GetLightAllRed(true)
  112. elseif tab_id == NewMainRoleModel.TabId.NATURE then
  113. bool = NatureModel:getInstance():GetNatureAllRed(true)
  114. elseif tab_id == NewMainRoleModel.TabId.SOULPOWER then
  115. bool = SoulPowerModel:getInstance():IsSoulPowerRed()
  116. elseif tab_id == NewMainRoleModel.TabId.REIN then
  117. bool = ReincarnationModel:getInstance():GetReinRed()
  118. elseif tab_id == NewMainRoleModel.TabId.KFWORLD then
  119. bool = KfWorldModel:getInstance():GetRewardGetRed()
  120. end
  121. self.mainrole_red_dot[tab_id] = bool
  122. self:Fire(NewMainRoleModel.ANS_UPDATE_RED_DOT,tab_id,bool)
  123. end
  124. function NewMainRoleModel:GetAllRedDot( )
  125. return self.mainrole_red_dot
  126. end
  127. -- 获取物品配置中称号的部分内容 获取运营头像
  128. function NewMainRoleModel:GetHeadGoodsCfgData( )
  129. if not self.head_basic_list then
  130. self.head_basic_list = {}
  131. local career = RoleManager:getInstance().mainRoleInfo.career
  132. local turn = RoleManager:getInstance().mainRoleInfo.turn
  133. local career_list
  134. for k, v in pairs(Config.Profilephoto) do
  135. career_list = stringtotable(v.career)
  136. for k2, v2 in ipairs(career_list) do
  137. -- 目标转职是0且【目标职业是0】或【存在玩家本身的职业】,代表通用(即运营活动)头像
  138. if v.turn <= turn and ((#career_list == 1 and v2 == 0) or (#career_list > 1 and v2 == career)) then
  139. self.head_basic_list[#self.head_basic_list+1] = v
  140. break
  141. end
  142. end
  143. end
  144. end
  145. return DeepCopy(self.head_basic_list)
  146. end
  147. -- 获取背包中全部的头像道具
  148. function NewMainRoleModel:GetBagHeadItem()
  149. local head_goods_list = GoodsModel:getInstance():GetGoodsByType(NewMainRoleModel.HeadType, NewMainRoleModel.HeadSubType)
  150. local tb = {}
  151. for k, v in pairs(head_goods_list) do
  152. tb[v.type_id] = true
  153. end
  154. return tb
  155. end
  156. -- 通过13088协议来获取当前已经激活和背包中可以激活的称号
  157. function NewMainRoleModel:SetActivatedRoleHeadInfo( vo )
  158. if not vo then return end
  159. self.activated_role_head_list = {}
  160. for k, v in ipairs(vo) do
  161. self.activated_role_head_list[#self.activated_role_head_list+1] = v.id
  162. end
  163. -- print("Saber:NewMainRoleModel [start:167] self.activated_role_head_list ------------------------------------------")
  164. -- PrintTable(self.activated_role_head_list)
  165. self:UpdateRoleHeadStatus()
  166. end
  167. function NewMainRoleModel:UpdateActivatedRoleHeadData(photo_id)
  168. if not photo_id then return end
  169. self.activated_role_head_list = self.activated_role_head_list or {}
  170. self.activated_role_head_list[#self.activated_role_head_list+1] = photo_id
  171. self:UpdateRoleHeadStatus()
  172. end
  173. -- 更新道具激活状态
  174. function NewMainRoleModel:UpdateRoleHeadStatus()
  175. self.role_head_status = {}
  176. for k, v in pairs(self.activated_role_head_list) do
  177. self.role_head_status[v] = 2 -- 2为已激活
  178. end
  179. local head_item_list = self:GetBagHeadItem()
  180. for p_id, v in pairs(head_item_list) do
  181. -- 如果已激活的称号中不存在该背包中的称号,则表示有称号可以激活
  182. if not self.role_head_status[p_id] then
  183. self.role_head_status[p_id] = 1 -- 1为可激活
  184. end
  185. end
  186. -- 更新了道具就要顺便更一下红点
  187. self:RefreshRoleHeadRed()
  188. end
  189. -- 获取道具头像信息及激活状态
  190. function NewMainRoleModel:GetRoleHeadInfo( )
  191. -- 获取头像的基本配置
  192. local role_goods_head_info = self:GetHeadGoodsCfgData()
  193. local role_rein_head_info = self:GetRoleReinHeadInfo()
  194. for k, v in pairs(role_goods_head_info) do
  195. if self.role_head_status[v.photo_id] then -- 已激活&可激活
  196. v.status = self.role_head_status[v.photo_id]
  197. else -- 未激活
  198. v.status = 0
  199. end
  200. v.is_rein_head = false
  201. end
  202. local turn = RoleManager.Instance.mainRoleInfo.turn
  203. for k, v in pairs(role_rein_head_info) do
  204. v.status = v.turn <= turn and 2 or 0
  205. v.is_rein_head = true
  206. end
  207. self.role_head_info = TableConcat(role_rein_head_info, role_goods_head_info)
  208. -- 根据状态和道具id进行排序
  209. local arg = {"status", "photo_id"}
  210. local condition = {Array.UPPER, Array.LOWER}
  211. SortTools.MoreKeysSorter(self.role_head_info, arg, condition)
  212. -- print("Saber:NewMainRoleModel [start:183] self.role_head_info ------------------------------------------")
  213. -- PrintTable(self.role_head_info)
  214. return self.role_head_info
  215. end
  216. function NewMainRoleModel:GetRoleHeadInfoByPhotoId(photo_id)
  217. if not photo_id then return end
  218. local tb = self:GetRoleHeadInfo()
  219. for k, data in pairs(tb) do
  220. if data.photo_id == photo_id then
  221. return data
  222. end
  223. end
  224. return nil
  225. end
  226. -- 获取玩家的职业和性别的转生默认头像
  227. function NewMainRoleModel:GetRoleReinHeadInfo( )
  228. if not self.role_rein_head_info then
  229. self.role_rein_head_info = {}
  230. local mainRoleVo = RoleManager:getInstance().mainRoleInfo
  231. local career = mainRoleVo.career
  232. local sex = mainRoleVo.sex
  233. -- local turn = mainRoleVo.turn
  234. local career_list
  235. for k, v in pairs(Config.Profilephoto) do
  236. career_list = stringtotable(v.career)
  237. for k2, v2 in ipairs(career_list) do
  238. if #career_list == 1 and v2 == career then -- 职业列表只有一个值,而且还是自己的职业
  239. self.role_rein_head_info[#self.role_rein_head_info+1] = v
  240. break
  241. end
  242. end
  243. end
  244. end
  245. return DeepCopy(self.role_rein_head_info)
  246. end
  247. --获得玩家最大转生数(本来装备直接和转生相关 现在改额外逻辑了)
  248. function NewMainRoleModel:GetRoleReinMaxTurn( level)
  249. -- local role_rein_info = self:GetRoleReinHeadInfo()
  250. -- if role_rein_info then
  251. -- return TableSize(role_rein_info)
  252. -- end
  253. -- return 0
  254. local level = level or RoleManager.Instance.mainRoleInfo.level
  255. local turn = 1--展示最高代
  256. local really_turn = 0--当前真实代数
  257. local list = {}
  258. for k,v in ipairs(Config.Equipmentseriesopen) do
  259. if v.visible_lv <= level and TaskModel:getInstance():IsTaskFinished(v.task_id) then
  260. turn = v.series > turn and v.series or turn
  261. list[k] = v
  262. end
  263. if v.open_lv <= level then
  264. really_turn = really_turn + 1
  265. end
  266. end
  267. turn = EquipModel.getInstance():GetMaxSuitSeries()
  268. return turn,list,really_turn
  269. end
  270. -- 获取可激活头像的红点
  271. function NewMainRoleModel:GetRoleHeadRed( )
  272. local bool = false
  273. for k, v in pairs(self.role_head_status) do
  274. -- 如果已激活的称号中不存在该背包中的称号,则表示有称号可以激活
  275. if v == 1 then
  276. bool = true
  277. break
  278. end
  279. end
  280. return bool
  281. end
  282. function NewMainRoleModel:RefreshRoleHeadRed( )
  283. -- local red = self:GetRoleHeadRed()
  284. -- GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_RED_POINT, 130, red)
  285. -- self:Fire(NewMainRoleModel.REFRESH_ROLE_HEAD_RED, red)
  286. end
  287. --活动经验基准
  288. function NewMainRoleModel:GetRoleActivityBaseExp( )
  289. if Config.Expbase[RoleManager.Instance.mainRoleInfo.level] then
  290. return Config.Expbase[RoleManager.Instance.mainRoleInfo.level].exp
  291. else
  292. return 0
  293. end
  294. end
  295. -- 检查错误的玩家头像
  296. function NewMainRoleModel:CheckErrorRoleHead( )
  297. local photo_id = RoleManager.Instance.mainRoleInfo.profile_photo_id
  298. print("Saber:NewMainRoleModel [310] photo_id: ",photo_id)
  299. if photo_id == 0 then -- 头像为0不合法
  300. local head_info = self:GetRoleReinHeadInfo()
  301. for k, v in pairs(head_info) do
  302. if v.turn == 0 then -- 当前职业的0转头像
  303. print("Saber:NewMainRoleModel [316] v.photo_id: ",v.photo_id)
  304. GlobalEventSystem:Fire(EventName.REQ_CHANGE_ROLEHEAD, v.photo_id) -- 13090
  305. break
  306. end
  307. end
  308. end
  309. end
  310. -- 登录时间查询协议 13087
  311. function NewMainRoleModel:SetRoleLoginTimeData(req_time, last_login_time, cur_login_time, last_quit_time)
  312. self.login_time_data = {}
  313. self.login_time_data.req_time = req_time
  314. self.login_time_data.last_login_time = last_login_time
  315. self.login_time_data.cur_login_time = cur_login_time
  316. self.login_time_data.last_quit_time = last_quit_time
  317. self:UpdateTodayFirstLoginState()
  318. end
  319. function NewMainRoleModel:GetRoleLoginTimeData( )
  320. return self.login_time_data
  321. end
  322. function NewMainRoleModel:UpdateTodayFirstLoginState( )
  323. local last_zero_time = TimeUtil:GetFutureZeroStamp(0)
  324. if last_zero_time > self.login_time_data.last_login_time and self.login_time_data.cur_login_time > last_zero_time then
  325. self.is_today_first_login = true
  326. else
  327. self.is_today_first_login = false
  328. end
  329. end
  330. function NewMainRoleModel:IsTodayFirstLogin( )
  331. return self.is_today_first_login
  332. end