源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

631 line
18 KiB

  1. EquipCollectModel = EquipCollectModel or BaseClass(BaseModel)
  2. local table_insert = table.insert
  3. function EquipCollectModel:__init()
  4. EquipCollectModel.Instance = self
  5. self.equip_collect_cfg = {}--装备收集表
  6. self.equip_exam_task_cfg = {}--装备考核任务表
  7. self:Reset()
  8. end
  9. function EquipCollectModel:Reset()
  10. self.equip_collect_info = {}--装备大全基础信息
  11. self.equip_collect_progress = {}--装备大全收集进度
  12. self.equip_collect_red_data = {}--装备收集红点缓存信息
  13. self.equip_collect_tip_data = {}--弹出tips的缓存列表,等15218返回的时候会清零
  14. self.equip_exam_task_info = {}--装备考核任务信息
  15. self.equip_exam_task_red = {}--装备考核任务红点
  16. self.equip_exam_skill_info = {}--装备考核选择技能信息
  17. self.equip_exam_red_data = {}--装备考核整个的大红点
  18. self.mask_lead_effect = {}--重置引导特效标记
  19. self.equip_exam_boss_data = {} -- 幻魔首杀后端数据
  20. self.boss_left_btn_red_cache = {} -- 幻魔页签红点缓存
  21. end
  22. function EquipCollectModel:getInstance()
  23. if EquipCollectModel.Instance == nil then
  24. EquipCollectModel.New()
  25. end
  26. return EquipCollectModel.Instance
  27. end
  28. function EquipCollectModel:GetInstance()
  29. if EquipCollectModel.Instance == nil then
  30. EquipCollectModel.Instance = EquipCollectModel.New()
  31. end
  32. return EquipCollectModel.Instance
  33. end
  34. function EquipCollectModel:IsEquipExamNeedRed( tab_id )
  35. local bool = false
  36. if tab_id == EquipCollectConst.TAB_ID.COLLECT then
  37. bool = self:IsEquipCollectNeedRed()
  38. -- elseif tab_id == EquipCollectConst.TAB_ID.BOSS then
  39. -- bool = self:HasBossRewardCanGet()
  40. elseif tab_id == EquipCollectConst.TAB_ID.UPGRADE then
  41. bool = EquipModel:getInstance():GetCurHaveStarRedDot()
  42. -- elseif tab_id == EquipCollectConst.TAB_ID.TASK then
  43. -- bool = self:IsEquipCollectTaskNeedRed()
  44. end
  45. local is_module_open = GetModuleIsOpen(145, tab_id)
  46. self.equip_exam_red_data[tab_id] = bool and is_module_open
  47. self:Fire(EquipCollectConst.ANS_UPDATE_EQUIP_COLLECT_RED_DOT,tab_id,bool)
  48. end
  49. function EquipCollectModel:IsEquipExamNeedRedAll( )
  50. for k,v in pairs(EquipCollectConst.TAB_ID) do
  51. self:IsEquipExamNeedRed(v)
  52. end
  53. end
  54. function EquipCollectModel:GetAllEquipExamRedDot( )
  55. return self.equip_exam_red_data
  56. end
  57. function EquipCollectModel:GetTotalRed( )
  58. local red_dot = self:GetAllEquipExamRedDot()
  59. local bool = false
  60. for i,v in pairs(red_dot) do
  61. if v then
  62. bool = true
  63. break
  64. end
  65. end
  66. return bool
  67. end
  68. function EquipCollectModel:InitEquipCollectCFG( )
  69. local cfg = Config.Equipmentcollectgoods
  70. for k,v in pairsByKeys(cfg) do
  71. if not self.equip_collect_cfg[v.id] then
  72. self.equip_collect_cfg[v.id] = {}
  73. end
  74. if not self.equip_collect_cfg[v.id][v.sub_id] then
  75. self.equip_collect_cfg[v.id][v.sub_id] = {}
  76. end
  77. self.equip_collect_cfg[v.id][v.sub_id][v.pos] = v
  78. self.equip_collect_cfg[v.id][v.sub_id][v.pos].attr_list = stringtotable(v.attr_node)
  79. end
  80. end
  81. function EquipCollectModel:InitEquipExamTaskCFG( )
  82. local cfg = Config.Equipmenttask
  83. local content_data = {}
  84. for k,v in pairsByKeys(cfg) do
  85. if not self.equip_exam_task_cfg[v.mod] then
  86. self.equip_exam_task_cfg[v.mod] = {}
  87. end
  88. content_data = stringtotable(v.content)
  89. if TableSize(content_data) > 0 then
  90. v.limit_num = content_data[2] or content_data[1]
  91. else
  92. v.limit_num = 0
  93. end
  94. table_insert(self.equip_exam_task_cfg[v.mod], v)
  95. end
  96. end
  97. function EquipCollectModel:GetEquipCollectCFG(type,sub_type )
  98. if TableSize(self.equip_collect_cfg) == 0 then
  99. self:InitEquipCollectCFG()
  100. end
  101. if type and self.equip_collect_cfg[type] and sub_type then
  102. return self.equip_collect_cfg[type][sub_type]
  103. end
  104. if type then
  105. return self.equip_collect_cfg[type]
  106. end
  107. return self.equip_collect_cfg
  108. end
  109. function EquipCollectModel:GetEquipExmTaskCFG( type )
  110. if TableSize(self.equip_exam_task_cfg) == 0 then
  111. self:InitEquipExamTaskCFG()
  112. end
  113. if type then
  114. return self.equip_exam_task_cfg[type]
  115. end
  116. return self.equip_exam_task_cfg
  117. end
  118. function EquipCollectModel:SetEquipCollectInfo( vo )
  119. local cfg = Config.Equipment
  120. for i,v in ipairs(vo.list) do
  121. if not self.equip_collect_info[v.type] then
  122. self.equip_collect_info[v.type] = {}
  123. end
  124. if not self.equip_collect_progress[v.type] then
  125. self.equip_collect_progress[v.type] = {}
  126. end
  127. if not self.equip_collect_info[v.type][v.sub_type] then
  128. self.equip_collect_info[v.type][v.sub_type] = {}
  129. end
  130. if not self.equip_collect_progress[v.type][v.sub_type] then
  131. self.equip_collect_progress[v.type][v.sub_type] = {}
  132. end
  133. self.equip_collect_progress[v.type][v.sub_type].cur_active = v.active_progress
  134. self.equip_collect_progress[v.type][v.sub_type].can_active = TableSize(v.equipment_list)
  135. for ii,vv in ipairs(v.equipment_list) do
  136. --这个id其实是部位id 某天因为张龙的骚操作 吃书了修改 20200729HWR
  137. self.equip_collect_info[v.type][v.sub_type][vv.goods_id] = self:GetEquipCollectEquipId(v.type, v.sub_type, vv.goods_id)
  138. -- if cfg[vv.goods_id] then
  139. -- -- self.equip_collect_info[v.type][v.sub_type][cfg[vv.goods_id].equip_type] = vv.goods_id
  140. -- end
  141. end
  142. end
  143. local bool = self:IsEquipCollectNeedRed()
  144. GlobalEventSystem:Fire(EventName.UPDATE_BAG_RED)
  145. self:Fire(EquipCollectConst.ANS_EQUIP_COLLECT_INFO, self.equip_collect_info)
  146. end
  147. --获取装备收集信息
  148. function EquipCollectModel:GetEquipCollectInfo( id, sub_id )
  149. if id and sub_id then
  150. if self.equip_collect_info[id] then
  151. return self.equip_collect_info[id][sub_id] or {}
  152. else
  153. return {}
  154. end
  155. elseif id and not sub_id then
  156. return self.equip_collect_info[id] or {}
  157. else
  158. return self.equip_collect_info
  159. end
  160. end
  161. function EquipCollectModel:GetEquipCollectProgress( id, sub_id )
  162. if id and sub_id then
  163. if self.equip_collect_progress[id] then
  164. return self.equip_collect_progress[id][sub_id] or {}
  165. else
  166. return {}
  167. end
  168. elseif id and not sub_id then
  169. return self.equip_collect_progress[id] or {}
  170. else
  171. return self.equip_collect_progress
  172. end
  173. end
  174. function EquipCollectModel:AddOneEquipCollectInfo( )
  175. end
  176. function EquipCollectModel:GetEquipCollectSubTypeName(type,sub_type)
  177. local cfg = Config.Equipmentcollectsubtype
  178. local name = ""
  179. if type and sub_type then
  180. if cfg[type.."@"..sub_type] then
  181. name = cfg[type.."@"..sub_type].name
  182. end
  183. elseif type then
  184. cfg = Config.Equipmentcollecttype
  185. if cfg[type] then
  186. name = cfg[type].name
  187. end
  188. end
  189. return Trim(name)
  190. end
  191. function EquipCollectModel:GetEqipCollectAward( type,sub_type )
  192. local cfg = Config.Equipmentcollectsubtype
  193. local str = ""
  194. if type and sub_type then
  195. if cfg[type.."@"..sub_type] then
  196. str = cfg[type.."@"..sub_type].reward
  197. end
  198. end
  199. return str
  200. end
  201. function EquipCollectModel:IsEquipCollectNeedRed( )
  202. local bool = false
  203. local progress = self:GetEquipCollectProgress()
  204. self.equip_collect_red_data = {}
  205. local cfg = {}
  206. for i,v in pairs(progress) do
  207. for ii,vv in pairs(v) do
  208. if vv.cur_active and vv.can_active then
  209. if vv.can_active == 7 and vv.cur_active < 7 then
  210. bool = true
  211. if not self.equip_collect_red_data[i] then
  212. self.equip_collect_red_data[i] = {}
  213. end
  214. self.equip_collect_red_data[i][ii] = true
  215. end
  216. end
  217. end
  218. end
  219. return bool
  220. end
  221. --获取第一个子id
  222. function EquipCollectModel:GetFirstSubId( id )
  223. local cfg = self:GetEquipCollectCFG(id) or {}
  224. for k,v in pairsByKeys(cfg) do
  225. return k
  226. end
  227. end
  228. --获取当前激活的进度
  229. function EquipCollectModel:GetCurEquipCollectNum( )
  230. end
  231. --根据id来拿红点数据
  232. function EquipCollectModel:IsEquipCollectNeedRedById(id, sub_id)
  233. if id and sub_id then
  234. if self.equip_collect_red_data[id] then
  235. return self.equip_collect_red_data[id][sub_id] or false
  236. else
  237. return false
  238. end
  239. elseif id and not sub_id then
  240. return TableSize(self.equip_collect_red_data[id]) > 0
  241. else
  242. return TableSize(self.equip_collect_red_data) > 0
  243. end
  244. end
  245. --通过id来判断是否已经全收集激活了
  246. function EquipCollectModel:CheckIsAllEquipCollected( id, sub_id )
  247. local bool = false
  248. if id and sub_id then--判断小类是否全收集
  249. local progress_data = self:GetEquipCollectProgress(id,sub_id)
  250. --只有有数据 且当前激活数等于7的才判断为小类全收集
  251. if TableSize(progress_data) > 0 and progress_data.cur_active == 7 then
  252. bool = true
  253. end
  254. elseif id and not sub_id then--判断大类是否全收集
  255. local cfg = self:GetEquipCollectCFG(id, sub_id)
  256. local count = 0
  257. for k,v in pairs(cfg) do
  258. --遍历配置表的小类 看看是否全收集了
  259. local progress_data = self:GetEquipCollectProgress(id,k)
  260. --只有有数据 且当前激活数等于7的才判断为小类全收集
  261. if TableSize(progress_data) > 0 and progress_data.cur_active == 7 then
  262. count = count + 1
  263. end
  264. end
  265. if count == TableSize(cfg) then
  266. bool = true
  267. end
  268. else--其他情况不存在 没有判断全装备收集的需求
  269. end
  270. return bool
  271. end
  272. --需要弹tips的时候先保存列表
  273. function EquipCollectModel:SetEquipCollectNeedShowTipData( data )
  274. self.equip_collect_tip_data = data
  275. end
  276. function EquipCollectModel:CleanEquipCollectNeedShowTipData( )
  277. self.equip_collect_tip_data = {}
  278. end
  279. --判断是否是收集了一整套
  280. function EquipCollectModel:IsCollectSuit( )
  281. local data = self:GetEquipCollectNeedShowTipData()
  282. local server_data = self:GetEquipCollectInfo(data.id)
  283. local bool = false
  284. for i,v in pairsByKeys(server_data) do
  285. if TableSize(v) == 7 then--满足7件
  286. if not bool then--没找到的时候才要进来
  287. bool = not self:CheckIsAllEquipCollected(data.id, i)--并且没领奖励
  288. end
  289. end
  290. end
  291. return bool
  292. end
  293. function EquipCollectModel:IsNeedShowTip( )
  294. local is_in_level = (RoleManager.Instance.mainRoleInfo.level < EquipCollectConst.LIMIT_LEVEL and RoleManager.Instance.mainRoleInfo.level > EquipCollectConst.LIMIT_LEVEL_DOWN)
  295. return GetModuleIsOpen(145) and TableSize(self.equip_collect_tip_data) > 0 and (self:IsCollectSuit() or is_in_level)
  296. end
  297. function EquipCollectModel:GetEquipCollectNeedShowTipData( )
  298. return self.equip_collect_tip_data
  299. end
  300. function EquipCollectModel:GetEquipCollectTipData( id )
  301. local server_data = self:GetEquipCollectInfo(id)
  302. local tip_data = self:GetEquipCollectNeedShowTipData()--获取是哪个新增了
  303. self:CleanEquipCollectNeedShowTipData()
  304. local cur_num = 0
  305. local cur_data = {}
  306. --构造一个7个装备的数据
  307. local data = {}
  308. for i=1,7 do
  309. data[i] = {
  310. type_id = 0,
  311. pos_id = i,
  312. }
  313. for k,v in pairsByKeys(server_data) do
  314. if v[i] then
  315. data[i].type_id = v[i]
  316. if v[i] == tip_data.goods_id then
  317. data[i].need_action = true
  318. end
  319. end
  320. end
  321. end
  322. local function sortfunction( a,b )
  323. if a.type_id > 0 and b.type_id > 0 then
  324. return a.pos_id < b.pos_id
  325. elseif a.type_id == 0 and b.type_id == 0 then
  326. return a.pos_id < b.pos_id
  327. elseif b.type_id == 0 then
  328. return true
  329. else
  330. return false
  331. end
  332. end
  333. table.sort( data, sortfunction )
  334. return data
  335. end
  336. --获取刚进界面的跳转id
  337. --有红点跳红点位置
  338. function EquipCollectModel:GetEquipCollectJumpId( )
  339. local red_data = self.equip_collect_red_data
  340. local id = 1
  341. local sub_id = self:GetFirstSubId( id )
  342. if TableSize(red_data) > 0 then
  343. for k,v in pairsByKeys(red_data) do
  344. if TableSize(v) > 0 then
  345. id = k
  346. for kk,vv in pairsByKeys(v) do
  347. sub_id = kk
  348. return id, sub_id
  349. end
  350. end
  351. end
  352. else
  353. local cfg = Config.Equipmentcollecttype
  354. local turn = RoleManager.Instance.mainRoleInfo.turn
  355. for i,v in ipairs(cfg) do
  356. if turn >= v.open_lv then
  357. id = v.id
  358. end
  359. end
  360. sub_id = self:GetFirstSubId( id )
  361. end
  362. return id, sub_id
  363. end
  364. --根据传进来的代数品质部位获取配置的id
  365. function EquipCollectModel:GetEquipCollectEquipId(id,sub_id,pos_id )
  366. local cfg = Config.Equipmentcollectgoods
  367. local goods_id = 0
  368. if id and sub_id and pos_id then
  369. if cfg[id.."@"..sub_id.."@"..pos_id] then
  370. local data = stringtotable(cfg[id.."@"..sub_id.."@"..pos_id].goods_id)
  371. if data then
  372. local career = RoleManager.Instance.mainRoleInfo.career
  373. for k,v in pairs(data) do
  374. if v[1] == career then
  375. goods_id = v[2]
  376. end
  377. end
  378. end
  379. end
  380. end
  381. return goods_id
  382. end
  383. --检查主界面图标是否开启
  384. function EquipCollectModel:CheckMainIconOpen( )
  385. do return end --弃用
  386. if GetModuleIsOpen(145) and RoleManager.Instance.mainRoleInfo.level < EquipCollectConst.LIMIT_LEVEL then
  387. ActivityIconManager:getInstance():addIcon(15208, -1)
  388. else
  389. ActivityIconManager:getInstance():deleteIcon(15208)
  390. end
  391. end
  392. --检查装备套装代数是否开启
  393. function EquipCollectModel:CheckEquipCollectSuitIsOpen( id )
  394. local cfg = Config.Equipmentcollecttype
  395. local level = RoleManager.Instance.mainRoleInfo.level
  396. if cfg[id] and cfg[id].open_lv <= level then
  397. return true
  398. end
  399. return false
  400. end
  401. function EquipCollectModel:SetEquipCollectTaskInfo( vo )
  402. local data = {}
  403. for i,v in ipairs(vo.list) do
  404. data[v.task_id] = v
  405. end
  406. self.equip_exam_task_info = data
  407. self:ChangeVar("equip_exam_task_info", self.equip_exam_task_info, false, true)
  408. end
  409. function EquipCollectModel:GetEquipCollectTaskInfo( )
  410. return self.equip_exam_task_info
  411. end
  412. function EquipCollectModel:SetEquipCollectTaskOneInfo( vo )
  413. if not self.equip_exam_task_info[vo.task_id] then
  414. self.equip_exam_task_info[vo.task_id] = {}
  415. end
  416. self.equip_exam_task_info[vo.task_id].task_id = vo.task_id
  417. self.equip_exam_task_info[vo.task_id].process = vo.process
  418. self.equip_exam_task_info[vo.task_id].status = vo.status
  419. self:ChangeVar("equip_exam_task_info", self.equip_exam_task_info, false, true)
  420. end
  421. function EquipCollectModel:IsEquipCollectTaskNeedRed( )
  422. self.equip_exam_task_red = {}
  423. local server_data = self:GetEquipCollectTaskInfo()
  424. local cfg = Config.Equipmenttask
  425. local bool = false
  426. for k,v in pairs(server_data) do
  427. if v.status == 1 then
  428. if cfg[v.task_id] then
  429. if not self.equip_exam_task_red[cfg[v.task_id].mod] then
  430. self.equip_exam_task_red[cfg[v.task_id].mod] = {}
  431. end
  432. self.equip_exam_task_red[cfg[v.task_id].mod][v.task_id] = true
  433. bool = true
  434. end
  435. end
  436. end
  437. return bool
  438. end
  439. function EquipCollectModel:IsEquipCollectTaskNeedRedById( mod, task_id )
  440. if mod and task_id then
  441. if self.equip_exam_task_red[mod] then
  442. return self.equip_exam_task_red[mod][task_id] or false
  443. else
  444. return false
  445. end
  446. elseif mod and not task_id then
  447. return TableSize(self.equip_exam_task_red[mod]) > 0
  448. else
  449. return TableSize(self.equip_exam_task_red) > 0
  450. end
  451. end
  452. function EquipCollectModel:SetEquipExamSkillInfo( vo )
  453. for i,v in ipairs(vo) do
  454. self.equip_exam_skill_info[v.id] = v
  455. end
  456. end
  457. function EquipCollectModel:GetEquipExamSkillInfo( )
  458. return self.equip_exam_skill_info
  459. end
  460. ----------幻魔boss首杀-start---------
  461. -- 更新boss信息列表 14501
  462. function EquipCollectModel:SetBossData( vo )
  463. for k,v in pairs(vo.list) do
  464. self.equip_exam_boss_data[v.boss_id] = v
  465. end
  466. end
  467. -- 更新boss信息列表 14502
  468. function EquipCollectModel:UpdateBossData( vo )
  469. if self.equip_exam_boss_data[vo.boss_id] then
  470. if vo.type == 1 then -- 全服
  471. self.equip_exam_boss_data[vo.boss_id].server_award_status = 1
  472. elseif vo.type == 2 then
  473. self.equip_exam_boss_data[vo.boss_id].self_kill_status = 2
  474. end
  475. self:Fire(EquipCollectConst.UPDATE_BOSS_VIEW, vo.boss_id)
  476. self:Fire(EquipCollectConst.UPDATE_EQUIP_COLLECT_RED, EquipCollectConst.TAB_ID.BOSS)
  477. else -- 据然没数据 那就请求一遍
  478. self:Fire(EquipCollectConst.REQUEST_SCMD_EVENT, 14501)
  479. end
  480. end
  481. function EquipCollectModel:GetBossData( boss_id )
  482. if boss_id then
  483. return self.equip_exam_boss_data[boss_id] or {}
  484. else
  485. return self.equip_exam_boss_data
  486. end
  487. end
  488. -- boss首杀配置
  489. function EquipCollectModel:GetBossFirstBloodCfg( boss_id )
  490. if boss_id then
  491. return Config.Bossfirstblood[boss_id]
  492. else
  493. return Config.Bossfirstblood
  494. end
  495. end
  496. function EquipCollectModel:GetBossLeftTabData( )
  497. if not self.boss_left_data then
  498. self.boss_left_data = {} -- 存了左侧boss图标的顺序
  499. for k,v in pairs(Config.Rewardbossinfo) do
  500. local temp = {
  501. enter_lv = v.enter_lv,
  502. boss_id = v.boss_id
  503. }
  504. table.insert(self.boss_left_data, temp)
  505. end
  506. local sort_func = function ( a, b )
  507. return a.enter_lv < b.enter_lv
  508. end
  509. table.sort(self.boss_left_data, sort_func)
  510. end
  511. return self.boss_left_data
  512. end
  513. function EquipCollectModel:HasBossRewardCanGet()
  514. local bool = false
  515. self.can_get_reward_boss_id = nil
  516. for k,v in pairsByKeys(self.equip_exam_boss_data) do
  517. local selfkill_can_get = v.self_kill_status and v.self_kill_status == 1
  518. local firstblood_can_get = v.time and v.time > 0 and v.server_award_status == 0
  519. if selfkill_can_get or firstblood_can_get then
  520. self.can_get_reward_boss_id = v.boss_id
  521. bool = true
  522. break
  523. end
  524. end
  525. return bool
  526. end
  527. -- 打开界面默认选中的boss
  528. function EquipCollectModel:GetFirstCanKillBossIdAndIndex( )
  529. local boss_model = BossModel:GetInstance()
  530. local left_data = self:GetBossLeftTabData( )
  531. local not_kill_boss_id = left_data[1].boss_id
  532. for k,v in pairsByKeys(left_data) do
  533. local boss_data = self:GetBossData( v.boss_id )
  534. local kill_status = boss_data.self_kill_status and boss_data.self_kill_status or 0
  535. if v.enter_lv < RoleManager.Instance.mainRoleInfo.level and kill_status == 0 then
  536. not_kill_boss_id = v.boss_id
  537. break
  538. end
  539. end
  540. if self.can_get_reward_boss_id then -- 有可领的奖励哦 找可领奖励的
  541. for i,v in ipairs(left_data) do
  542. if self.can_get_reward_boss_id == v.boss_id then
  543. return v.boss_id, i
  544. end
  545. end
  546. else -- 没有可领奖励 找可击杀最低等级的
  547. for i,v in ipairs(left_data) do
  548. if not_kill_boss_id == v.boss_id then
  549. return v.boss_id, i
  550. end
  551. end
  552. end
  553. end
  554. -- 缓存一遍页签红点
  555. function EquipCollectModel:UpdateBossLeftBtnRed( )
  556. self.boss_left_btn_red_cache = {}
  557. for i,v in ipairs(self:GetBossLeftTabData()) do
  558. local boss_first_blood_data = self:GetBossData( v.boss_id ) -- 首杀后端数据
  559. -- 红点
  560. local selfkill_can_get = boss_first_blood_data.self_kill_status and boss_first_blood_data.self_kill_status == 1
  561. local firstblood_can_get = boss_first_blood_data.time and boss_first_blood_data.time > 0 and boss_first_blood_data.server_award_status == 0
  562. self.boss_left_btn_red_cache[i] = selfkill_can_get or firstblood_can_get
  563. end
  564. end
  565. function EquipCollectModel:GetBossLeftBtnRed( index )
  566. if self.boss_left_btn_red_cache[index] ~= nil then
  567. return self.boss_left_btn_red_cache[index]
  568. end
  569. return false
  570. end
  571. ----------幻魔boss首杀-end-----------
  572. -- 获取目标代数 收集好的套装数 和 总套装数
  573. function EquipCollectModel:GetCollectCountByID( id )
  574. if not id then return end
  575. local total_count = 0
  576. local has_get_count = 0
  577. for k,v in pairs(self:GetEquipCollectCFG(id)) do
  578. total_count = total_count + 1
  579. if self:CheckIsAllEquipCollected(v[1].id, v[1].sub_id) then
  580. has_get_count = has_get_count + 1
  581. end
  582. end
  583. return has_get_count, total_count
  584. end