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

987 行
36 KiB

  1. RankView = RankView or BaseClass(BaseView)
  2. local RankView = RankView
  3. --Alert:排行榜页签顺序必须遵循123456递进排序,如果要后面新增排行榜,直接加就行,如果要插入排行榜,务必保证id顺序无误
  4. --Alert:添加或插入排行榜后,需要同步修改索引的地方如下:
  5. --RankModel | RankModel.TabId | 索引值,改好后从上到下调好顺序
  6. --RankView | RankView.TabData | 从上到下调好顺序
  7. --ConfigRank | Config.ConfigRank.RankTab | 修改id,并从上到下调好顺序
  8. RankView.TabData = {
  9. --前三个页签为开服冲榜专用,不要进行注释屏蔽操作,如果要屏蔽去RankModel:GetFinalRankTabData操作
  10. {id = RankModel.TabId.KfRush_1, name = "---", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,5) , open_task = 0},
  11. {id = RankModel.TabId.KfRush_2, name = "---", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,5) , open_task = 0},
  12. {id = RankModel.TabId.KfRush_3, name = "---", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,5) , open_task = 0},
  13. {id = RankModel.TabId.Power, name = "战力", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,1) , open_task = 0},
  14. {id = RankModel.TabId.Level, name = "等级", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,2) , open_task = 0},
  15. {id = RankModel.TabId.Equip, name = "装备", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,3) , open_task = 0},
  16. {id = RankModel.TabId.WarSoul, name = "战魂", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,0) , open_task = 0},
  17. {id = RankModel.TabId.Advance, name = "进阶", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,5) , open_task = 0},
  18. {id = RankModel.TabId.AIGirl, name = "AI娘", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,6) , open_task = 0},
  19. {id = RankModel.TabId.Fashion, name = "收集", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,4) , open_task = 0},
  20. {id = RankModel.TabId.Charm, name = "魅力", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,7) , open_task = 0},
  21. }
  22. RankView.CSTabData = {
  23. {id = RankModel.CSTabId.Power, name = "战力", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,1) , open_task = 0},
  24. {id = RankModel.CSTabId.Level, name = "等级", abName = "rank_asset", open_lv = GetModuleOpenLevel(221,2) , open_task = 0},
  25. }
  26. function RankView:__init()
  27. self.base_file = "rank"
  28. self.layout_file = "RankView"
  29. self.layer_name = "UI"
  30. self.destroy_imm = true
  31. self.use_background = true
  32. self.change_scene_close = true
  33. self.model_activity_bg = true
  34. self.model_activity_bg_pos = Vector2(-294,100)
  35. self.full_screen = true
  36. self.ani_left = -200
  37. self.ani_right = 200
  38. self.hide_maincancas = true --是否隐藏主界面
  39. self.append_to_ctl_queue = true --是否要添加进界面堆栈
  40. self.need_show_money = false --是否要显示顶部的金钱栏
  41. self.model = RankModel:getInstance()
  42. self.need_tab_id = self.model:GetRankSubTypeData(false) --打开界面前获取一次排行榜子类型列表(Config.ConfigRank)
  43. self.cur_need_tab_data = false
  44. self.cur_tab_index = 1
  45. self.item_list = {} -- 左侧子类型按钮列表
  46. self.top_item_list = {}
  47. self.now_select_rank_data = nil -- 当前选中的玩家的排行榜信息
  48. self.kf_rush_rank_tab_item_list = {}
  49. self.hide_clear_role_model = false
  50. self.fire_change_visible_event = true
  51. self.rank_equip_view = false
  52. self.load_callback = function ()
  53. self:LoadSuccess()
  54. self:AddEvent()
  55. end
  56. self.open_callback = function ( )
  57. self.tabWindowComponent:SetTabBarIndex(self.current_index or 1,self.current_sub_id or 1)
  58. self:ShowTabRedPointState()
  59. end
  60. self.switch_callback = function(index,sub_id)
  61. self:SwitchTab(index or 1,sub_id or 1)
  62. end
  63. self.close_win_callback = function ( )
  64. self:Close()
  65. end
  66. self.destroy_callback = function ( )
  67. self:DestroySuccess()
  68. end
  69. end
  70. function RankView:Open(index,sub_id)
  71. self.current_index = index or 1
  72. self.current_sub_id = sub_id or 1
  73. BaseView.Open(self)
  74. end
  75. function RankView:LoadSuccess()
  76. local nodes = {
  77. "winCon",
  78. "mid/figureCon/figure_bg:raw:obj",
  79. ------ 左边子类型选择栏
  80. "left/subTypeScrollView/Viewport/subTypeCon:obj",
  81. "left/kfRankIcon:obj:img",
  82. "left/kfRankIcon/kfEffect",
  83. "left/fosterIcon:obj:img",
  84. ------ 中间形象展示栏
  85. "mid/figureCon:obj",
  86. "mid/figureCon/equip_con:obj", --装备栏
  87. "mid/figureCon/warSoul_con:obj", --战魂栏
  88. "mid/figureCon/role_Con:obj",--模型展示容器
  89. "mid/figureCon/like_red:obj:imgex",--点赞按钮
  90. "mid/figureCon/rank_power:txt",--排行分数,不一定就是战力
  91. "mid/figureCon/like_num:tmp",--点赞数
  92. "mid/figureCon/designation_con:obj",--称号栏
  93. "mid/figureCon/designation_con/designation_image:img:obj",
  94. "mid/figureCon/designation_con/name_text:tmp",
  95. "mid/figureCon/designation_con/effect",
  96. "mid/figureCon/designation_con/designation_small_image:img:obj",
  97. "mid/figureCon/power_type_label:tmp",
  98. ------ 右侧排行榜栏
  99. "right/rankCon/my_rank_num:tmp",--排名txt
  100. "right/rankCon/ScrollView/Viewport/Content","right/rankCon/ScrollView",--排行榜容器
  101. "right/rankCon/my_rank_power:tmp",--我的当前排行榜类型分数
  102. "right/emptyCon:obj",
  103. "right/rankCon/my_vip_icon", "right/rankCon/my_sex_icon:img", "right/rankCon/my_name:tmp",
  104. "right/rankCon/topCon",
  105. "right/rankCon/title_top_bg:img",
  106. "left/mainTypeCon:obj",
  107. "left/mainTypeCon/rankTypeBtn:obj:img", "left/mainTypeCon/csTypeBtn:obj:img",
  108. "left/mainTypeCon/rankTypeBtn/rankTypeBtnText:tmp", "left/mainTypeCon/csTypeBtn/csBtnText:tmp",
  109. "right/tipCon",
  110. "right/tipCon/refreshTip:tmp",
  111. "right/kfRushCon:obj",
  112. }
  113. self:GetChildren(nodes)
  114. self.myVipItem = RoleVipItem.New(self.my_vip_icon)
  115. lua_resM:setOutsideRawImage(self, self.figure_bg_raw, GameResPath.GetRankBg("rank_role_di"))
  116. lua_resM:setOutsideImageSprite(self, self.title_top_bg_img, GameResPath.GetRankBg("rank_di"))
  117. lua_resM:setImageSprite(self, self.kfRankIcon_img, "activityIcon_asset","icon_99_99001")
  118. lua_resM:setImageSprite(self, self.fosterIcon_img, "activityIcon_asset","icon_146_0_1")
  119. local final_rank_tab_data = self.model:GetFinalRankTabData()
  120. local now_rank_tab_data = self.model.is_cs_rank and RankView.CSTabData or final_rank_tab_data
  121. self.need_tab_id = self.model:GetRankSubTypeData(self.model.is_cs_rank)
  122. self.tabWindowComponent = UITabWindow.New(self.transform,now_rank_tab_data,self.switch_callback,
  123. self.close_win_callback,self.background_wnd,self.winCon, UITabWindow.SizeLarge, false,6,true)
  124. self.tabWindowComponent:SetTitleText("排行")
  125. self.tabWindowComponent:SetUIBack({target = self, bg1 = GameResPath.GetViewBigBg("default_bg_2")})
  126. -- self:MoveUIToBack(self.figure_bg)
  127. self:UpdateMainTypeTabCon()
  128. end
  129. function RankView:UpdateKfRushCon( )
  130. local rush_tab_list = self.model:GetTodayKfRushTabList()
  131. if #rush_tab_list == 0 or self.model.is_cs_rank then
  132. self.kfRushCon_obj:SetActive(false)
  133. else
  134. self.kfRushCon_obj:SetActive(true)
  135. local function click_call_back(index,sub_id)
  136. self:SwitchTab(index,sub_id)
  137. end
  138. for k,v in pairs(self.kf_rush_rank_tab_item_list) do
  139. v:SetVisible(false)
  140. end
  141. for i,v in ipairs(rush_tab_list) do
  142. local item = self.kf_rush_rank_tab_item_list[i]
  143. if not item then
  144. item = RankKfRushTabItem.New(self.kfRushCon)
  145. self.kf_rush_rank_tab_item_list[i] = item
  146. end
  147. item:SetVisible(true)
  148. item:SetData(v,click_call_back)
  149. if i == 1 then
  150. item:SetAnchoredPosition(0, 0)
  151. elseif i == 2 then
  152. item:SetAnchoredPosition(0, -52)
  153. end
  154. end
  155. end
  156. end
  157. function RankView:UpdateMainTypeTabCon( )
  158. if self.model.is_cs_rank then
  159. lua_resM:setImageSprite(self, self.rankTypeBtn_img, "uiComponent_asset","com_empty")
  160. lua_resM:setImageSprite(self, self.csTypeBtn_img, "rank_asset","rank_cs_tab_select")
  161. self.refreshTip_tmp.text = "榜单每<#f3fcff>十分钟</color>刷新一次"
  162. else
  163. lua_resM:setImageSprite(self, self.rankTypeBtn_img, "rank_asset","rank_cs_tab_select")
  164. lua_resM:setImageSprite(self, self.csTypeBtn_img, "uiComponent_asset","com_empty")
  165. self.refreshTip_tmp.text = "榜单每<#f3fcff>五分钟</color>刷新一次"
  166. end
  167. local csTypeBtnMat = self.model.is_cs_rank and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab or ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault
  168. local rankTypeBtnMat = self.model.is_cs_rank and ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault or ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab
  169. SetTMPSharedMaterial(self.csBtnText_tmp, csTypeBtnMat)
  170. SetTMPSharedMaterial(self.rankTypeBtnText_tmp, rankTypeBtnMat)
  171. local csBtnColor = self.model.is_cs_rank and "#ffffff" or "#9eb3cf"
  172. local rankBtnColor = self.model.is_cs_rank and "#9eb3cf" or "#ffffff"
  173. self.csBtnText_tmp.color = ColorUtil:ConvertHexToRGBColor(csBtnColor)
  174. self.rankTypeBtnText_tmp.color = ColorUtil:ConvertHexToRGBColor(rankBtnColor)
  175. -- self:UpdateKfRushCon()
  176. end
  177. function RankView:AddEvent()
  178. local on_click = function ( click_obj )
  179. if self.like_red_obj == click_obj then
  180. --点赞
  181. if self.now_select_rank_data then
  182. if self.model.selectId == 407 then--社团点赞
  183. self.model:Fire(RankModel.REQUEST_CCMD_EVENT,22104,self.now_select_rank_data.guild_id,self.model.selectId)
  184. else
  185. self.model:Fire(RankModel.REQUEST_CCMD_EVENT,22104,self.now_select_rank_data.role_id,self.model.selectId)
  186. end
  187. end
  188. elseif self.rankTypeBtn_obj == click_obj then
  189. if self.model.is_cs_rank then
  190. self.model:Fire(RankModel.CHANGE_RANK_MIAN_TYPE)
  191. end
  192. elseif self.csTypeBtn_obj == click_obj then
  193. local is_kf_state = true
  194. local info = KfWorldModel:GetInstance():GetKfWorldInfo()
  195. if IsTableEmpty(info) then
  196. is_kf_state = false
  197. end
  198. if info and info.stage and info.stage == 0 then
  199. is_kf_state = false
  200. end
  201. if not is_kf_state then
  202. Message.show("跨服暂未开启")
  203. return
  204. end
  205. if not self.model.is_cs_rank then
  206. self.model:Fire(RankModel.CHANGE_RANK_MIAN_TYPE)
  207. end
  208. elseif self.kfRankIcon_obj == click_obj then
  209. self:Close()
  210. OpenFun.Open(331,10)
  211. elseif self.fosterIcon_obj == click_obj then
  212. if self.model.selectId == 1461 then--座驾
  213. self:Close()
  214. OpenFun.Open(146,1)
  215. elseif self.model.selectId == 1462 then--炫翼
  216. self:Close()
  217. OpenFun.Open(146,2)
  218. elseif self.model.selectId == 1463 then--宝具
  219. self:Close()
  220. OpenFun.Open(146,3)
  221. elseif self.model.selectId == 1464 then--武器
  222. self:Close()
  223. OpenFun.Open(146,4)
  224. elseif self.model.selectId == 1465 then--AI娘
  225. self:Close()
  226. OpenFun.Open(146,5)
  227. elseif self.model.selectId == 1466 then--磁炮
  228. self:Close()
  229. OpenFun.Open(146,6)
  230. elseif self.model.selectId == 1467 then--星翼
  231. self:Close()
  232. OpenFun.Open(146,7)
  233. elseif self.model.selectId == 1468 then--幻甲
  234. self:Close()
  235. OpenFun.Open(146,8)
  236. end
  237. -- self:Close()
  238. end
  239. end
  240. AddClickEvent(self.like_red_obj, on_click)
  241. AddClickEvent(self.rankTypeBtn_obj, on_click)
  242. AddClickEvent(self.csTypeBtn_obj, on_click)
  243. AddClickEvent(self.kfRankIcon_obj, on_click)
  244. AddClickEvent(self.fosterIcon_obj, on_click)
  245. --切换跨服排行和本服排行
  246. local function on_change_rank_main_type()
  247. if self.tabWindowComponent then
  248. self.tabWindowComponent:DeleteMe()
  249. self.tabWindowComponent = nil
  250. end
  251. self.model.is_cs_rank = not self.model.is_cs_rank
  252. local final_rank_tab_data = self.model:GetFinalRankTabData()
  253. local now_rank_tab_data = self.model.is_cs_rank and RankView.CSTabData or final_rank_tab_data
  254. self.need_tab_id = self.model:GetRankSubTypeData(self.model.is_cs_rank)
  255. self.tabWindowComponent = UITabWindow.New(self.transform,now_rank_tab_data,self.switch_callback,
  256. self.close_win_callback,self.background_wnd,self.winCon, UITabWindow.SizeLarge, false,6,true)
  257. self.tabWindowComponent:SetTitleText("排行")
  258. self.tabWindowComponent:SetUIBack({target = self, bg1 = GameResPath.GetViewBigBg("default_bg_2")})
  259. -- self:MoveUIToBack(self.figure_bg)
  260. self:ShowTabRedPointState()
  261. --清空当前榜单信息,重新请求协议
  262. self.model.selectId = 0
  263. self.model.rank_info = nil
  264. self.tabWindowComponent:SetTabBarIndex(1,1)
  265. self:UpdateMainTypeTabCon()
  266. end
  267. self:BindEvent(self.model,RankModel.CHANGE_RANK_MIAN_TYPE,on_change_rank_main_type)
  268. --刷新排行列表 每次打开一个榜单时都会请求协议刷新列表
  269. local function on_update_rank_content()
  270. self:CreateRankItems()
  271. end
  272. self:BindEvent(self.model,RankModel.UPDATE_RANK_CONTENT,on_update_rank_content)
  273. --刷新点赞栏状态
  274. local function on_update_like_con()
  275. if self.model.selectId and self.now_select_rank_data then
  276. local is_liked = self.model:GetRankLikeStateByTypeId(self.model.selectId, self.now_select_rank_data.role_id)
  277. self.like_red_imgex.gray = not is_liked
  278. end
  279. end
  280. self:BindEvent(self.model,RankModel.UPDATE_LIKE_CON,on_update_like_con)
  281. --刷新点赞数
  282. local function on_update_rank_like_num(rank_type,role_id,praise_num)
  283. if self.model.selectId == 407 then
  284. if rank_type == self.model.selectId and self.now_select_rank_data and self.now_select_rank_data.guild_id == role_id then
  285. self.like_num_tmp.text = praise_num
  286. end
  287. else
  288. if rank_type == self.model.selectId and self.now_select_rank_data and self.now_select_rank_data.role_id == role_id then
  289. self.like_num_tmp.text = praise_num
  290. end
  291. end
  292. end
  293. self:BindEvent(self.model,RankModel.UPDATE_LIKE_NUM,on_update_rank_like_num)
  294. --刷新跨服人物形象展示
  295. local function on_update_cs_role_show(vo)
  296. if self.model.is_cs_rank and self.now_select_rank_data and self.now_select_rank_data.player_id and self.now_select_rank_data.player_id == vo.role_id then
  297. self:UpdateCSRoleShow(vo)
  298. end
  299. end
  300. self:BindEvent(self.model,RankModel.UPDATE_CS_ROLE_SHOW,on_update_cs_role_show)
  301. local function on_ans_update_red_dot()
  302. self:ShowTabRedPointState()
  303. end
  304. self:BindEvent(self.model, RankModel.ANS_UPDATE_RED_DOT, on_ans_update_red_dot)
  305. local function ChangeVisible( flag )
  306. if not flag then
  307. return
  308. end
  309. self:UpdateRoleShow(self.now_choose_rank_item_index)
  310. end
  311. self:BindEvent(GlobalEventSystem, BaseView.ChangeVisible, ChangeVisible)
  312. end
  313. function RankView:ShowTabRedPointState()
  314. if self.model.is_cs_rank then
  315. for k,v in pairs(Config.ConfigRank.CSRankTab) do
  316. self.tabWindowComponent:ShowRedPoint(v.id, false)
  317. end
  318. else
  319. local red_info = self.model:GetAllRedDot()
  320. for k,v in pairs(Config.ConfigRank.RankTab) do
  321. if v.id >= 1 and v.id <= 3 then
  322. self.tabWindowComponent:ShowRedPoint(v.id, false)
  323. else
  324. self.tabWindowComponent:ShowRedPoint(v.id, red_info[v.id])
  325. end
  326. end
  327. end
  328. end
  329. --创建排行榜列表并自动选中第一位,展示第一位的形象
  330. function RankView:CreateRankItems()
  331. local rank_info = self.model.rank_info
  332. if rank_info == nil then
  333. return
  334. end
  335. local top_data = {}
  336. if self.model.is_cs_rank then
  337. for i=1,3 do
  338. if rank_info.top_three and rank_info.top_three[i] then
  339. table.insert(top_data,rank_info.top_three[i])
  340. else
  341. local temp = {empty_data = true}
  342. table.insert(top_data,temp)
  343. end
  344. end
  345. else
  346. for i=1,3 do
  347. if rank_info.rank_list and rank_info.rank_list[i] then
  348. table.insert(top_data,rank_info.rank_list[i])
  349. else
  350. local temp = {empty_data = true}
  351. table.insert(top_data,temp)
  352. end
  353. end
  354. end
  355. for k,v in pairs(self.top_item_list) do
  356. v:SetVisible(false)
  357. end
  358. for i,v in ipairs(top_data) do
  359. local item = self.top_item_list[i]
  360. if not item then
  361. item = RankTopItem.New(self.topCon)
  362. self.top_item_list[i] = item
  363. end
  364. item:SetVisible(true)
  365. item:SetData(v,i)
  366. if i == 1 then
  367. item:SetAnchoredPosition(168, -14)
  368. elseif i == 2 then
  369. item:SetAnchoredPosition(-2, -14)
  370. elseif i == 3 then
  371. item:SetAnchoredPosition(338, -14)
  372. end
  373. end
  374. local tar_index = 1
  375. local update_item_fun = function (item, i, v)
  376. local call_back = function (index)
  377. tar_index = index
  378. self:UpdateRoleShow(index)
  379. self:UpdateEquipCon(index)
  380. self:UpdateWarSoulCon(index)
  381. self.rankitem_list_com:IterateItems(function( item, i )
  382. item:SetSelect(i == tar_index)
  383. end)
  384. end
  385. item:SetData(i,v,call_back, self.cur_need_tab_data, self.cur_tab_index)
  386. item:SetSelect(i == tar_index)
  387. end
  388. self.rankitem_list_com = self.rankitem_list_com or self:AddUIComponent(UI.ItemListCreator)
  389. self.rankitem_list_com:Reset()
  390. local rankitem_all_info = {
  391. data_list = rank_info.rank_list,
  392. item_con = self.Content,
  393. item_class = RankItem,
  394. item_width = 511,
  395. item_height = 51,
  396. space_x = 0,
  397. space_y = 0,
  398. scroll_view = self.ScrollView,
  399. create_frequency = 0.01,
  400. reuse_item_num = 16,
  401. on_update_item = update_item_fun,
  402. }
  403. self.rankitem_list_com:UpdateItems(rankitem_all_info)
  404. --默认选中
  405. if rank_info.rank_list[1] then
  406. self.figureCon_obj:SetActive(true)
  407. self.emptyCon_obj:SetActive(false)
  408. self:UpdateRoleShow(1)
  409. self:UpdateEquipCon(1)
  410. self:UpdateWarSoulCon(1)
  411. else
  412. self.figureCon_obj:SetActive(false)
  413. self.emptyCon_obj:SetActive(true)
  414. end
  415. --刷新个人排行栏
  416. self:UpdateMyRank(rank_info)
  417. end
  418. --刷新我的排名栏
  419. function RankView:UpdateMyRank(rank_info)
  420. --自己的排行分数
  421. local rank_score = 0
  422. rank_score = rank_info.sel_val
  423. self.myVipItem:SetData(RoleManager.Instance.mainRoleInfo.vip_flag,RoleManager.Instance.mainRoleInfo.sup_vip_type)
  424. if self.model.is_cs_rank then
  425. self.my_name_tmp.text = GetCSLongName(RoleManager.Instance.mainRoleInfo.name, RoleManager.Instance.mainRoleInfo.server_num)
  426. else
  427. self.my_name_tmp.text = RoleManager.Instance.mainRoleInfo.name
  428. end
  429. lua_resM:setImageSprite(self, self.my_sex_icon_img, "common_asset", RoleManager.Instance.mainRoleInfo.sex == 1 and "com_boy" or "com_girl",true)
  430. local pos_x, pox_y = GetAnchoredPosition(self.my_name)
  431. SetAnchoredPositionX(self.my_sex_icon,pos_x + self.my_name_tmp.preferredWidth -18)
  432. --排名
  433. if rank_info.role_rank >= 1 then
  434. self.my_rank_num_tmp.fontSize = 22
  435. self.my_rank_num_tmp.text = rank_info.role_rank
  436. elseif rank_info.role_rank == 0 then
  437. self.my_rank_num_tmp.fontSize = 16
  438. self.my_rank_num_tmp.text = "榜外"
  439. end
  440. if self.model.selectId >= 2000 and self.model.selectId <= 2004 then--战力榜
  441. self.my_rank_power_tmp.text = "战力:"..rank_score
  442. elseif self.model.selectId >= 3000 and self.model.selectId <= 3004 then--等级榜
  443. self.my_rank_power_tmp.text = "等级:"..rank_score
  444. elseif self.model.selectId >= 1520 and self.model.selectId <= 1524 then--装备榜
  445. self.my_rank_power_tmp.text = "战力:"..rank_score
  446. elseif self.model.selectId == 411 or self.model.selectId == 413 or self.model.selectId == 112 then--称号&时装&聊天装扮
  447. local my_suit_num = 0
  448. if rank_info.sel_sec_val then
  449. my_suit_num = rank_info.sel_sec_val
  450. end
  451. if self.model.selectId == 112 then
  452. my_suit_num = rank_info.sel_val
  453. end
  454. self.my_rank_power_tmp.text = "收集数:"..my_suit_num
  455. elseif self.model.selectId >= 1461 and self.model.selectId <= 1464 then--进阶
  456. local foster_type_id = self.model.selectId - 1460
  457. local my_grade, my_star = FosterModel:getInstance():GetGradeStarByType(foster_type_id)
  458. self.my_rank_power_tmp.text = string.format(" %s阶%s星", my_grade, my_star)
  459. elseif self.model.selectId >= 1465 and self.model.selectId <= 1468 then--ai娘
  460. self.my_rank_power_tmp.text = "等级:"..rank_info.sel_sec_val
  461. elseif self.model.selectId == 2231 then--人气值
  462. self.my_rank_power_tmp.text = "人气:"..rank_score
  463. elseif self.model.selectId == 2232 then--壕气值
  464. self.my_rank_power_tmp.text = "壕气:"..rank_score
  465. elseif self.model.selectId == 143 then--战魂
  466. self.my_rank_power_tmp.text = "战力:"..rank_score
  467. elseif self.model.selectId == 14600 then--进阶战力榜
  468. self.my_rank_power_tmp.text = "战力:"..rank_score
  469. elseif self.model.selectId == 14601 then--ai娘战力榜
  470. self.my_rank_power_tmp.text = "战力:"..rank_score
  471. end
  472. end
  473. --选中rankitem后展示形象的总入口
  474. function RankView:UpdateRoleShow(index)
  475. if not self.model.rank_info then return end
  476. if not self.model.rank_info.rank_list then return end
  477. local rank_data = self.model.rank_info.rank_list[index] -- 拿到排行榜数据列表
  478. if not rank_data then return end
  479. self.now_select_rank_data = rank_data
  480. self.now_choose_rank_item_index = index
  481. if self.model.is_cs_rank then--跨服排行榜不能直接拿到figure数据,需要单独请求
  482. local cs_role_id = rank_data.player_id
  483. self.model:Fire(RankModel.REQUEST_CCMD_EVENT, 22109, cs_role_id)
  484. return
  485. end
  486. self:UpdateRankPower(rank_data)--形象栏战力 (跨服等级榜拿了figure再执行)
  487. self:UpdateNameCon(rank_data)--名字栏
  488. self:UpdateLikeCon(rank_data)--点赞栏 (跨服榜隐藏)
  489. self.role_Con_obj:SetActive(true)
  490. self.figure_bg_obj:SetActive(false)
  491. if self.model.selectId >= 2000 and self.model.selectId <= 2004 then--战力榜
  492. self:UpdateFigureShow(rank_data)--刷新人物模型
  493. elseif self.model.selectId >= 3000 and self.model.selectId <= 3004 then--等级榜
  494. self:UpdateFigureShow(rank_data)--刷新人物模型
  495. elseif self.model.selectId >= 1520 and self.model.selectId <= 1524 then--装备榜
  496. self.role_Con_obj:SetActive(false)--隐藏人物con
  497. -- self.figure_bg_obj:SetActive(true)
  498. elseif self.model.selectId == 411 or self.model.selectId == 413 or self.model.selectId == 112 then--称号&时装&聊天装扮
  499. self:UpdateFigureShow(rank_data)--刷新人物模型
  500. elseif self.model.selectId == 163 then--孩子
  501. self:UpdateOtherFigureShow(rank_data)--刷新非人模型
  502. elseif self.model.selectId >= 1461 and self.model.selectId <= 1468 then--进阶
  503. self:UpdateOtherFigureShow(rank_data)--刷新非人模型
  504. elseif self.model.selectId >= 2231 and self.model.selectId <= 2232 then--魅力
  505. self:UpdateFigureShow(rank_data)--刷新人物模型
  506. elseif self.model.selectId == 143 then--战魂
  507. self.role_Con_obj:SetActive(false)--隐藏人物con
  508. elseif self.model.selectId == 14600 then--进阶战力榜
  509. self:UpdateFigureShow(rank_data)--刷新人物模型
  510. elseif self.model.selectId == 14601 then--ai娘战力榜
  511. self:UpdateOtherFigureShow(rank_data)--刷新非人模型
  512. end
  513. end
  514. function RankView:UpdateCSRoleShow(vo)
  515. self.role_Con_obj:SetActive(true)
  516. self.figure_bg_obj:SetActive(false)
  517. self:UpdateRankPower(self.now_select_rank_data,vo)--形象栏战力 (跨服等级榜拿了figure再执行)
  518. self:UpdateLikeCon(self.now_select_rank_data)--点赞栏 (跨服榜隐藏)
  519. if self.model.selectId >= 2000 and self.model.selectId <= 2004 then--战力榜
  520. self:UpdateFigureShow(vo)--刷新人物模型
  521. elseif self.model.selectId >= 3000 and self.model.selectId <= 3004 then--等级榜
  522. self:UpdateFigureShow(vo)--刷新人物模型
  523. end
  524. end
  525. function RankView:UpdateEquipCon(index)
  526. if self.model.selectId >= 1520 and self.model.selectId <= 1524 then--装备榜 then
  527. self.equip_con_obj:SetActive(true)
  528. else
  529. self.equip_con_obj:SetActive(false)
  530. return
  531. end
  532. local rank_data = self.model.rank_info.rank_list[index] -- 拿到排行榜数据列表
  533. self.now_select_rank_data = rank_data
  534. if not self.rank_equip_view then
  535. self.rank_equip_view = RankEquipView.New(self.equip_con)
  536. end
  537. self.rank_equip_view:SetData(self.now_select_rank_data)
  538. end
  539. function RankView:UpdateWarSoulCon(index)
  540. if self.model.selectId == 143 then
  541. self.warSoul_con_obj:SetActive(true)
  542. else
  543. self.warSoul_con_obj:SetActive(false)
  544. return
  545. end
  546. local rank_data = self.model.rank_info.rank_list[index] -- 拿到排行榜数据列表
  547. self.now_select_rank_data = rank_data
  548. if not self.rank_warSoul_view then
  549. self.rank_warSoul_view = RankWarSoulView.New(self.warSoul_con)
  550. end
  551. self.rank_warSoul_view:SetAnchoredPosition(-15,0)
  552. self.rank_warSoul_view:SetData(rank_data)
  553. end
  554. --刷新称号栏
  555. function RankView:UpdateNameCon(rank_data)
  556. self.designation_con_obj:SetActive(false)
  557. if self.model.selectId >= 2000 and self.model.selectId <= 2004 --战力榜
  558. or self.model.selectId >= 3000 and self.model.selectId <= 3004 --等级榜
  559. or self.model.selectId == 2231 --人气值
  560. or self.model.selectId == 407 --社团
  561. or self.model.selectId == 2232 then--壕气值
  562. --无
  563. elseif self.model.selectId >= 1520 and self.model.selectId <= 1524 then --装备榜
  564. --无
  565. elseif self.model.selectId == 411 or self.model.selectId == 413 or self.model.selectId == 112 then--称号&时装&聊天装扮
  566. self.designation_con_obj:SetActive(true)
  567. self.designation_small_image_obj:SetActive(false)
  568. self.designation_image_obj:SetActive(false)
  569. self.name_text_tmp.text = ""
  570. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.designation_image)
  571. local dsgt_cfg = Config.Dsgt[rank_data.dsgt_id]
  572. if self.dynamic_image_obj then
  573. self.dynamic_image_obj:SetActive(false)
  574. end
  575. if dsgt_cfg then
  576. if dsgt_cfg.type == 1 then--文字称号(文字称号也用图片了)
  577. lua_resM:setOutsideImageSprite(self, self.designation_small_image_img, GameResPath.GetDesignImage(dsgt_cfg.id), true)
  578. self.designation_small_image_obj:SetActive(true)
  579. elseif dsgt_cfg.type == 2 then
  580. lua_resM:setOutsideImageSprite(self, self.designation_image_img, GameResPath.GetDesignImage(dsgt_cfg.id), true)
  581. self.designation_image_obj:SetActive(true)
  582. elseif dsgt_cfg.type == 3 then
  583. if not self.dynamic_image_obj then
  584. self.dynamic_image_obj = UiFactory.createChild(self.designation_image, UIType.Image, "dynamic_image")
  585. self.dynamic_image_img = self.dynamic_image_obj:GetComponent("Image")
  586. self.dynamic_image = self.dynamic_image_obj.transform
  587. SetAnchoredPosition(self.dynamic_image,0,0)
  588. else
  589. self.dynamic_image_obj:SetActive(true)
  590. end
  591. SetSizeDelta(self.designation_image, 210*0.8,90*0.8)
  592. self.designation_image_obj:SetActive(true)
  593. local data = DeepCopy(DesignationModel:GetInstance():GetDynamicDesignationCFG(dsgt_cfg.id))
  594. for i,v in ipairs(data) do
  595. v.not_auto_size = true
  596. end
  597. local res = Split(data[1].res,"_")--分割出来配置 然后取文字
  598. local font_res = res[1] or ""
  599. lua_resM:setImageSprite(self, self.dynamic_image_img, data[1].ab, font_res.."_font", false)
  600. local action = cc.Animation.New(data,0.15)
  601. cc.ActionManager:getInstance():addAction(cc.RepeatForever.New(action),self.designation_image.transform)
  602. end
  603. end
  604. elseif self.model.selectId == 143 then--战魂
  605. --无
  606. elseif self.model.selectId >= 1461 and self.model.selectId <= 1468 then--进阶
  607. --无
  608. elseif self.model.selectId == 14600 then--进阶战力榜
  609. --无
  610. elseif self.model.selectId == 14601 then--ai娘战力榜
  611. --无
  612. end
  613. end
  614. function RankView:GetFosterName(pet_type,id)
  615. local foster_type = pet_type - 1460
  616. for k,v in pairs(Config.Foster) do
  617. if foster_type == v.type and id == v.grade then
  618. return Trim(v.name)
  619. end
  620. end
  621. return "暂无数据"
  622. end
  623. function RankView:GetFosterResource(pet_type,id)
  624. id = id > 10 and 10 or id
  625. local foster_type = pet_type - 1460
  626. for k,v in pairs(Config.Foster) do
  627. if foster_type == v.type and id == v.grade then
  628. return v.resource
  629. end
  630. end
  631. return 1000
  632. end
  633. --刷新点赞栏
  634. function RankView:UpdateLikeCon(rank_data)
  635. if self.model.is_cs_rank then
  636. self.like_red_obj:SetActive(false)
  637. self.like_num_tmp.text = ""
  638. else
  639. self.like_red_obj:SetActive(true)
  640. local is_liked = self.model:GetRankLikeStateByTypeId(self.model.selectId, self.now_select_rank_data.role_id)
  641. self.like_red_imgex.gray = not is_liked
  642. self.like_num_tmp.text = rank_data.praise_num
  643. end
  644. end
  645. --刷新排行榜分数栏
  646. function RankView:UpdateRankPower(rank_data,figure)
  647. local power_type_label = "战力"
  648. if not self.model.is_cs_rank then
  649. if self.model.selectId >= 2000 and self.model.selectId <= 2004 then--战力榜
  650. self.rank_power_txt.text = rank_data.first_value
  651. elseif self.model.selectId >= 3000 and self.model.selectId <= 3004 then--等级榜
  652. self.rank_power_txt.text = rank_data.power
  653. elseif self.model.selectId >= 1520 and self.model.selectId <= 1524 then--装备榜
  654. self.rank_power_txt.text = rank_data.first_value
  655. elseif self.model.selectId == 411 or self.model.selectId == 413 or self.model.selectId == 112 then--称号&时装&聊天装扮
  656. self.rank_power_txt.text = rank_data.second_value
  657. elseif self.model.selectId >= 1461 and self.model.selectId <= 1468 then--进阶和ai娘
  658. self.rank_power_txt.text = rank_data.third_value
  659. local rank_tab_data = self.model:GetRankTabDataByType(self.model.selectId)
  660. if rank_tab_data then
  661. power_type_label = rank_tab_data.name.."战力"
  662. end
  663. elseif self.model.selectId == 2231 then--人气值
  664. self.rank_power_txt.text = rank_data.power
  665. elseif self.model.selectId == 2232 then--壕气值
  666. self.rank_power_txt.text = rank_data.power
  667. elseif self.model.selectId == 143 then--战魂
  668. self.rank_power_txt.text = rank_data.first_value
  669. elseif self.model.selectId == 14600 then--进阶战力榜
  670. self.rank_power_txt.text = rank_data.first_value
  671. elseif self.model.selectId == 14601 then--ai娘战力榜
  672. self.rank_power_txt.text = rank_data.first_value
  673. end
  674. elseif self.model.is_cs_rank and figure then
  675. if self.model.selectId >= 2000 and self.model.selectId <= 2004 then--战力榜
  676. self.rank_power_txt.text = rank_data.first_value
  677. elseif self.model.selectId >= 3000 and self.model.selectId <= 3004 then--等级榜
  678. self.rank_power_txt.text = figure.power
  679. end
  680. end
  681. if self.model.selectId >= 1461 and self.model.selectId <= 1468 then
  682. SetAnchoredPositionX(self.rank_power, 55)
  683. SetAnchoredPositionX(self.power_type_label, 55 - self.rank_power_txt.preferredWidth/2 -25 )
  684. else
  685. SetAnchoredPositionX(self.rank_power, 32)
  686. SetAnchoredPositionX(self.power_type_label, 32 - self.rank_power_txt.preferredWidth/2 -25 )
  687. end
  688. self.power_type_label_tmp.text = power_type_label
  689. end
  690. --展示人物模型(战力等级装备外观魅力等榜都需要展示人物模型)
  691. function RankView:UpdateFigureShow(rank_data)
  692. if self.model.selectId == 14600 then--进阶总战力榜 人物身上的翅膀武器宝具要替换成阶数对应的
  693. local f_grade_data = stringtotable(rank_data.extra_values)
  694. local talisman_id = nil
  695. local wing_id = nil
  696. local weapon_res_id = nil
  697. if f_grade_data then
  698. for k,v in pairs(f_grade_data) do
  699. if v[1] == FosterConst.ModuleId.FWing then--炫翼
  700. wing_id = self:GetFosterResource(v[1]+1460,v[2])
  701. elseif v[1] == FosterConst.ModuleId.FPearl then--宝具
  702. talisman_id = self:GetFosterResource(v[1]+1460,v[2])
  703. elseif v[1] == FosterConst.ModuleId.FWeapon then--武器
  704. weapon_res_id = GameResPath:GetFWeaponResName( rank_data.career,self:GetFosterResource(v[1]+1460,v[2]) )
  705. end
  706. end
  707. end
  708. local res_data = {
  709. father_node = self,
  710. transform = self.role_Con,
  711. fashion_type = FuncOpenModel.TypeId.Clothes,
  712. role_vo = rank_data,
  713. scale = 255,
  714. raycast_size = Vector2(340,460),
  715. ui_model_type = UIModelCommon.ModelType.BackModel,
  716. talisman_id = talisman_id,
  717. wing_id = wing_id,
  718. weapon_res_id = weapon_res_id,
  719. light_id = rank_data.light_id,
  720. -- position = Vector3(0,30,0)
  721. }
  722. FuncOpenModel:getInstance():SetModelRes(res_data)
  723. else
  724. local talisman_id = GetTalismanClotheId(rank_data)
  725. local res_data = {
  726. father_node = self,
  727. transform = self.role_Con,
  728. fashion_type = FuncOpenModel.TypeId.Clothes,
  729. role_vo = rank_data,
  730. scale = 255,
  731. raycast_size = Vector2(340,460),
  732. ui_model_type = UIModelCommon.ModelType.BackModel,
  733. talisman_id = talisman_id,
  734. light_id = rank_data.light_id,
  735. -- position = Vector3(0,30,0)
  736. }
  737. FuncOpenModel:getInstance():SetModelRes(res_data)
  738. end
  739. end
  740. --展示非人物模型
  741. function RankView:UpdateOtherFigureShow(rank_data)
  742. if self.model.selectId == 14601 then--ai娘战力榜 这个榜要展示ai娘的全套装备,要传一个show_jarvis_all_figure_data进去
  743. local f_grade_data = stringtotable(rank_data.extra_values)
  744. local show_jarvis_all_figure_data = nil
  745. if f_grade_data then
  746. show_jarvis_all_figure_data = {}
  747. for k,v in pairs(f_grade_data) do
  748. if v[1] == FosterConst.ModuleId.FJarvis then--AI娘
  749. show_jarvis_all_figure_data.f_jarvis_figure_id = self:GetFosterResource(v[1]+1460,v[2])
  750. elseif v[1] == FosterConst.ModuleId.FGun then--磁炮
  751. show_jarvis_all_figure_data.f_gun_figure_id = self:GetFosterResource(v[1]+1460,v[2])
  752. elseif v[1] == FosterConst.ModuleId.FCloud then--星翼
  753. show_jarvis_all_figure_data.f_cloud_figure_id = self:GetFosterResource(v[1]+1460,v[2])
  754. elseif v[1] == FosterConst.ModuleId.FArmour then--幻甲
  755. show_jarvis_all_figure_data.f_armour_figure_id = self:GetFosterResource(v[1]+1460,v[2])
  756. end
  757. end
  758. end
  759. local res_data = {
  760. father_node = self,
  761. transform = self.role_Con,
  762. fashion_type = 1005,
  763. figure_id = show_jarvis_all_figure_data and show_jarvis_all_figure_data.f_jarvis_figure_id or 0,
  764. show_jarvis_all_figure_data = show_jarvis_all_figure_data,
  765. -- scale = 255,
  766. raycast_size = Vector2(340,460),
  767. ui_model_type = UIModelCommon.ModelType.BackModel,
  768. }
  769. FuncOpenModel:getInstance():SetModelRes(res_data)
  770. else
  771. local res_data = {
  772. father_node = self,
  773. transform = self.role_Con,
  774. fashion_type = self.model.selectId-1460+1000,
  775. figure_id = self:GetFosterResource(self.model.selectId,rank_data.first_value),
  776. career = rank_data.career,
  777. -- scale = 255,
  778. raycast_size = Vector2(340,460),
  779. ui_model_type = UIModelCommon.ModelType.BackModel,
  780. }
  781. FuncOpenModel:getInstance():SetModelRes(res_data)
  782. end
  783. end
  784. --切换页签时候同时切换到该榜单的子类型榜单
  785. function RankView:SwitchTab(index,sub_id)
  786. --先创建子类型列表
  787. for k,v in pairs(self.item_list) do
  788. v:SetVisible(false)
  789. end
  790. --要是传进来的index所属的排行榜未开放,换一个榜显示
  791. if not self.need_tab_id[index] then
  792. -- local new_index = 0
  793. -- for k,v in pairs(self.need_tab_id) do
  794. -- new_index = v.id
  795. -- end
  796. -- if new_index ~= 0 then
  797. -- index = new_index
  798. -- else
  799. -- return
  800. -- end
  801. index = RankModel.TabId.Power
  802. end
  803. self.cur_tab_index = index
  804. self:DoOpenAni(index)
  805. self.tabWindowComponent:SetTabBarIndex(self.cur_tab_index,false,true)
  806. local function call_back(data)
  807. self.cur_need_tab_data = data
  808. if self.model.selectId == 407 then
  809. self.subTypeCon_obj:SetActive(false)
  810. else
  811. self.subTypeCon_obj:SetActive(true)
  812. end
  813. end
  814. for i,v in ipairs(self.need_tab_id[index].sub_tab) do
  815. local item = self.item_list[i]
  816. if not item then
  817. item = RankSubTypeItem.New(self.subTypeCon)
  818. self.item_list[i] = item
  819. end
  820. if self.model.is_cs_rank then
  821. item:SetVisible(true)
  822. else
  823. item:SetVisible(index > 3)
  824. end
  825. item:SetData(i,v,call_back,self.cur_tab_index)
  826. item:OnClick(sub_id)
  827. end
  828. self.kfRankIcon_obj:SetActive(index <= 3 and not self.model.is_cs_rank)
  829. self:AddUIEffect("ui_bianqiang", self.kfEffect, self.layer_name, nil, {x=1,y=1}, true, nil,nil,nil,nil,nil)
  830. self.fosterIcon_obj:SetActive(index <= 3 and not self.model.is_cs_rank)
  831. if self.model.is_cs_rank then
  832. self.mainTypeCon_obj:SetActive(true)
  833. else
  834. self.mainTypeCon_obj:SetActive(index > 3)
  835. end
  836. SetSizeDeltaY(self.subTypeCon, 72*#self.need_tab_id[index].sub_tab+2)
  837. end
  838. function RankView:DestroySuccess( )
  839. self.model:Reset()
  840. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.designation_image)
  841. self:ClearUIEffect(self.kfEffect)
  842. if self.tabWindowComponent then
  843. self.tabWindowComponent:DeleteMe()
  844. self.tabWindowComponent = nil
  845. end
  846. for i, v in ipairs(self.item_list) do
  847. v:DeleteMe()
  848. end
  849. self.item_list = {}
  850. for i, v in ipairs(self.kf_rush_rank_tab_item_list) do
  851. v:DeleteMe()
  852. end
  853. self.kf_rush_rank_tab_item_list = {}
  854. for i, v in ipairs(self.top_item_list) do
  855. v:DeleteMe()
  856. end
  857. self.top_item_list = {}
  858. if self.rank_equip_view then
  859. self.rank_equip_view:DeleteMe()
  860. self.rank_equip_view = nil
  861. end
  862. if self.rank_warSoul_view then
  863. self.rank_warSoul_view:DeleteMe()
  864. self.rank_warSoul_view = nil
  865. end
  866. if self.myVipItem then
  867. self.myVipItem:DeleteMe()
  868. self.myVipItem = nil
  869. end
  870. end