PIU Phoenix

PIU Phoenix Score&Title Analyser Patch 1.0.2

  1. // ==UserScript==
  2. // @name PIU Phoenix
  3. // @license MIT
  4. // @namespace https://github.com/numbuh1/pump-it-up-phoenix-bookmarklet
  5. // @version 1.2
  6. // @description PIU Phoenix Score&Title Analyser Patch 1.0.2
  7. // @author numbuh1
  8. // @match https://piugame.com/my_page/my_best_score.php
  9. // @icon <$ICON$>
  10. // @require https://code.jquery.com/jquery-3.7.0.min.js
  11. // ==/UserScript==
  12.  
  13. const rating_text = {
  14. 'sss_p': 'SSS+',
  15. 'sss': 'SSS',
  16. 'ss_p': 'SS+',
  17. 'ss': 'SS',
  18. 's_p': 'S+',
  19. 's': 'S',
  20. 'aaa_p': 'AAA+',
  21. 'aaa': 'AAA',
  22. 'aa_p': 'AA+',
  23. 'aa': 'AA',
  24. 'a_p': 'A+',
  25. 'a': 'A',
  26. 'b': 'B',
  27. 'c': 'C',
  28. 'd': 'D',
  29. 'f': 'F',
  30. };
  31. const plate_text = {
  32. 'pg': 'PERFECT GAME',
  33. 'ug': 'ULTIMATE GAME',
  34. 'eg': 'EXTREME GAME',
  35. 'sg': 'SUPERB GAME',
  36. 'mg': 'MARVELOUS GAME',
  37. 'tg': 'TALENTED GAME',
  38. 'fg': 'FAIR GAME',
  39. 'rg': 'ROUGH GAME'
  40. };
  41. const expert_titles = [
  42. {
  43. name: 'THE MASTER',
  44. description: '[Lv.28] 1,900 rating',
  45. tier: 'platinum',
  46. type: 'rating',
  47. level: '28',
  48. rating: '1900'
  49. },
  50. {
  51. name: 'EXPERT Lv.10',
  52. description: '[Lv.27] 7,000 rating',
  53. tier: 'platinum',
  54. type: 'rating',
  55. level: '27',
  56. rating: '7000'
  57. },
  58. {
  59. name: 'EXPERT Lv.9',
  60. description: '[Lv.27] 3,500 rating',
  61. tier: 'gold',
  62. type: 'rating',
  63. level: '27',
  64. rating: '3500'
  65. },
  66. {
  67. name: 'EXPERT Lv.8',
  68. description: '[Lv.26] 26,000 rating',
  69. tier: 'gold',
  70. type: 'rating',
  71. level: '26',
  72. rating: '26000'
  73. },
  74. {
  75. name: 'EXPERT Lv.7',
  76. description: '[Lv.26] 13,000 rating',
  77. tier: 'gold',
  78. type: 'rating',
  79. level: '26',
  80. rating: '13000'
  81. },
  82. {
  83. name: 'EXPERT Lv.6',
  84. description: '[Lv.25] 40,000 rating',
  85. tier: 'gold',
  86. type: 'rating',
  87. level: '25',
  88. rating: '40000'
  89. },
  90. {
  91. name: 'EXPERT Lv.5',
  92. description: '[Lv.25] 20,000 rating',
  93. tier: 'gold',
  94. type: 'rating',
  95. level: '25',
  96. rating: '20000'
  97. },
  98. {
  99. name: 'EXPERT Lv.4',
  100. description: '[Lv.24] 60,000 rating',
  101. tier: 'gold',
  102. type: 'rating',
  103. level: '24',
  104. rating: '60000'
  105. },
  106. {
  107. name: 'EXPERT Lv.3',
  108. description: '[Lv.24] 30,000 rating',
  109. tier: 'gold',
  110. type: 'rating',
  111. level: '24',
  112. rating: '30000'
  113. },
  114. {
  115. name: 'EXPERT Lv.2',
  116. description: '[Lv.23] 80,000 rating',
  117. tier: 'gold',
  118. type: 'rating',
  119. level: '23',
  120. rating: '80000'
  121. },
  122. {
  123. name: 'EXPERT Lv.1',
  124. description: '[Lv.23] 40,000 rating',
  125. tier: 'gold',
  126. type: 'rating',
  127. level: '23',
  128. rating: '40000'
  129. },
  130. {
  131. name: 'ADVANCED Lv.10',
  132. description: '[Lv.22] 70,000 rating',
  133. tier: 'silver',
  134. type: 'rating',
  135. level: '22',
  136. rating: '70000'
  137. },
  138. {
  139. name: 'ADVANCED Lv.9',
  140. description: '[Lv.22] 52,500 rating',
  141. tier: 'silver',
  142. type: 'rating',
  143. level: '22',
  144. rating: '52500'
  145. },
  146. {
  147. name: 'ADVANCED Lv.8',
  148. description: '[Lv.22] 35,000 rating',
  149. tier: 'silver',
  150. type: 'rating',
  151. level: '22',
  152. rating: '35000'
  153. },
  154. {
  155. name: 'ADVANCED Lv.7',
  156. description: '[Lv.22] 17,500 rating',
  157. tier: 'silver',
  158. type: 'rating',
  159. level: '22',
  160. rating: '17500'
  161. },
  162. {
  163. name: 'ADVANCED Lv.6',
  164. description: '[Lv.21] 45,000 rating',
  165. tier: 'silver',
  166. type: 'rating',
  167. level: '21',
  168. rating: '45000'
  169. },
  170. {
  171. name: 'ADVANCED Lv.5',
  172. description: '[Lv.21] 30,000 rating',
  173. tier: 'silver',
  174. type: 'rating',
  175. level: '21',
  176. rating: '30000'
  177. },
  178. {
  179. name: 'ADVANCED Lv.4',
  180. description: '[Lv.21] 15,000 rating',
  181. tier: 'silver',
  182. type: 'rating',
  183. level: '21',
  184. rating: '15000'
  185. },
  186. {
  187. name: 'ADVANCED Lv.3',
  188. description: '[Lv.20] 39,000 rating',
  189. tier: 'silver',
  190. type: 'rating',
  191. level: '20',
  192. rating: '39000'
  193. },
  194. {
  195. name: 'ADVANCED Lv.2',
  196. description: '[Lv.20] 26,000 rating',
  197. tier: 'silver',
  198. type: 'rating',
  199. level: '20',
  200. rating: '26000'
  201. },
  202. {
  203. name: 'ADVANCED Lv.1',
  204. description: '[Lv.20] 13,000 rating',
  205. tier: 'silver',
  206. type: 'rating',
  207. level: '20',
  208. rating: '13000'
  209. },
  210. {
  211. name: 'INTERMEDIATE Lv.10',
  212. description: '[Lv.19] 11,000 rating',
  213. tier: 'bronze',
  214. type: 'rating',
  215. level: '19',
  216. rating: '11000'
  217. },
  218. {
  219. name: 'INTERMEDIATE Lv.9',
  220. description: '[Lv.18] 9,200 rating',
  221. tier: 'bronze',
  222. type: 'rating',
  223. level: '18',
  224. rating: '9200'
  225. },
  226. {
  227. name: 'INTERMEDIATE Lv.8',
  228. description: '[Lv.17] 7,600 rating',
  229. tier: 'bronze',
  230. type: 'rating',
  231. level: '17',
  232. rating: '7600'
  233. },
  234. {
  235. name: 'INTERMEDIATE Lv.7',
  236. description: '[Lv.16] 6,200 rating',
  237. tier: 'bronze',
  238. type: 'rating',
  239. level: '16',
  240. rating: '6200'
  241. },
  242. {
  243. name: 'INTERMEDIATE Lv.6',
  244. description: '[Lv.15] 5,000 rating',
  245. tier: 'bronze',
  246. type: 'rating',
  247. level: '15',
  248. rating: '5000'
  249. },
  250. {
  251. name: 'INTERMEDIATE Lv.5',
  252. description: '[Lv.14] 4,000 rating',
  253. tier: 'bronze',
  254. type: 'rating',
  255. level: '14',
  256. rating: '4000'
  257. },
  258. {
  259. name: 'INTERMEDIATE Lv.4',
  260. description: '[Lv.13] 3,200 rating',
  261. tier: 'bronze',
  262. type: 'rating',
  263. level: '13',
  264. rating: '3200'
  265. },
  266. {
  267. name: 'INTERMEDIATE Lv.3',
  268. description: '[Lv.12] 2,600 rating',
  269. tier: 'bronze',
  270. type: 'rating',
  271. level: '12',
  272. rating: '2600'
  273. },
  274. {
  275. name: 'INTERMEDIATE Lv.2',
  276. description: '[Lv.11] 2,200 rating',
  277. tier: 'bronze',
  278. type: 'rating',
  279. level: '11',
  280. rating: '2200'
  281. },
  282. {
  283. name: 'INTERMEDIATE Lv.1',
  284. description: '[Lv.10] 2,000 rating',
  285. tier: 'bronze',
  286. type: 'rating',
  287. level: '10',
  288. rating: '2000'
  289. },
  290. {
  291. name: 'SPECIALIST',
  292. description: 'All skill titles',
  293. tier: 'platinum',
  294. type: 'skill_collect',
  295. collect_type: 'skill',
  296. count: 60
  297. },
  298. {
  299. name: '[BRACKET] EXPERT',
  300. description: 'All Bracket titles',
  301. tier: 'platinum',
  302. type: 'skill_collect',
  303. collect_type: 'bracket',
  304. count: 10
  305. },
  306. {
  307. name: '[BRACKET] Lv.10',
  308. description: 'Phalanx D24',
  309. tier: 'platinum',
  310. type: 'skill',
  311. collect_type: 'bracket',
  312. song: 'Phalanx',
  313. diff: 'D24'
  314. },
  315. {
  316. name: '[BRACKET] Lv.9',
  317. description: 'Scorpion King D23',
  318. tier: 'platinum',
  319. type: 'skill',
  320. collect_type: 'bracket',
  321. song: 'Scorpion King',
  322. diff: 'D23'
  323. },
  324. {
  325. name: '[BRACKET] Lv.8',
  326. description: 'Pop Sequence D23',
  327. tier: 'gold',
  328. type: 'skill',
  329. collect_type: 'bracket',
  330. song: 'Pop Sequence',
  331. diff: 'D23'
  332. },
  333. {
  334. name: '[BRACKET] Lv.7',
  335. description: 'What Happened D23',
  336. tier: 'gold',
  337. type: 'skill',
  338. collect_type: 'bracket',
  339. song: 'What Happened',
  340. diff: 'D23'
  341. },
  342. {
  343. name: '[BRACKET] Lv.6',
  344. description: 'Meteo5cience D22',
  345. tier: 'silver',
  346. type: 'skill',
  347. collect_type: 'bracket',
  348. song: 'Meteo5cience',
  349. diff: 'D22'
  350. },
  351. {
  352. name: '[BRACKET] Lv.5',
  353. description: 'Phalanx S22',
  354. tier: 'silver',
  355. type: 'skill',
  356. collect_type: 'bracket',
  357. song: 'Phalanx',
  358. diff: 'S22'
  359. },
  360. {
  361. name: '[BRACKET] Lv.4',
  362. description: 'What Happened S21',
  363. tier: 'silver',
  364. type: 'skill',
  365. collect_type: 'bracket',
  366. song: 'What Happened',
  367. diff: 'S21'
  368. },
  369. {
  370. name: '[BRACKET] Lv.3',
  371. description: 'Meteo5cience D21',
  372. tier: 'bronze',
  373. type: 'skill',
  374. collect_type: 'bracket',
  375. song: 'Meteo5cience',
  376. diff: 'D21'
  377. },
  378. {
  379. name: '[BRACKET] Lv.2',
  380. description: 'Mad5cience S20',
  381. tier: 'bronze',
  382. type: 'skill',
  383. collect_type: 'bracket',
  384. song: 'Mad5cience',
  385. diff: 'S20'
  386. },
  387. {
  388. name: '[BRACKET] Lv.1',
  389. description: 'Allegro furioso D20',
  390. tier: 'bronze',
  391. type: 'skill',
  392. collect_type: 'bracket',
  393. song: 'Allegro furioso',
  394. diff: 'D20'
  395. },
  396. {
  397. name: '[HALF] EXPERT',
  398. description: 'All Half titles',
  399. tier: 'platinum',
  400. type: 'skill_collect',
  401. collect_type: 'half',
  402. count: 10
  403. },
  404. {
  405. name: '[HALF] Lv.10',
  406. description: 'Imprinting D24',
  407. tier: 'platinum',
  408. type: 'skill',
  409. collect_type: 'half',
  410. song: 'Imprinting',
  411. diff: 'D24'
  412. },
  413. {
  414. name: '[HALF] Lv.9',
  415. description: 'Love is a Danger Zone 2 Try To B.P.M D23',
  416. tier: 'platinum',
  417. type: 'skill',
  418. collect_type: 'half',
  419. song: 'Love is a Danger Zone 2 Try To B.P.M',
  420. diff: 'D23'
  421. },
  422. {
  423. name: '[HALF] Lv.8',
  424. description: 'Redline D22',
  425. tier: 'gold',
  426. type: 'skill',
  427. collect_type: 'half',
  428. song: 'Redline',
  429. diff: 'D22'
  430. },
  431. {
  432. name: '[HALF] Lv.7',
  433. description: 'Witch Doctor #1 D21',
  434. tier: 'gold',
  435. type: 'skill',
  436. collect_type: 'half',
  437. song: 'Witch Doctor #1',
  438. diff: 'D21'
  439. },
  440. {
  441. name: '[HALF] Lv.6',
  442. description: 'Utsushiyo No Kaze D20',
  443. tier: 'silver',
  444. type: 'skill',
  445. collect_type: 'half',
  446. song: 'Utsushiyo No Kaze',
  447. diff: 'D20'
  448. },
  449. {
  450. name: '[HALF] Lv.5',
  451. description: 'Phantom D19',
  452. tier: 'silver',
  453. type: 'skill',
  454. collect_type: 'half',
  455. song: 'Phantom',
  456. diff: 'D19'
  457. },
  458. {
  459. name: '[HALF] Lv.4',
  460. description: 'Super Fantasy D18',
  461. tier: 'silver',
  462. type: 'skill',
  463. collect_type: 'half',
  464. song: 'Super Fantasy',
  465. diff: 'D18'
  466. },
  467. {
  468. name: '[HALF] Lv.3',
  469. description: 'Shub Niggurath D18',
  470. tier: 'bronze',
  471. type: 'skill',
  472. collect_type: 'half',
  473. song: 'Shub Niggurath',
  474. diff: 'D18'
  475. },
  476. {
  477. name: '[HALF] Lv.2',
  478. description: 'Butterfly D17',
  479. tier: 'bronze',
  480. type: 'skill',
  481. collect_type: 'half',
  482. song: 'Butterfly',
  483. diff: 'D17'
  484. },
  485. {
  486. name: '[HALF] Lv.1',
  487. description: 'Mopemope D17',
  488. tier: 'bronze',
  489. type: 'skill',
  490. collect_type: 'half',
  491. song: 'Mopemope',
  492. diff: 'D17'
  493. },
  494. {
  495. name: '[GIMMICK] EXPERT',
  496. description: 'All Gimmick titles',
  497. tier: 'platinum',
  498. type: 'skill_collect',
  499. collect_type: 'gimmick',
  500. count: 10
  501. },
  502. {
  503. name: '[GIMMICK] Lv.10',
  504. description: 'Everybody Got 2 Know S21',
  505. tier: 'platinum',
  506. type: 'skill',
  507. collect_type: 'gimmick',
  508. song: 'Everybody Got 2 Know',
  509. diff: 'S21'
  510. },
  511. {
  512. name: '[GIMMICK] Lv.9',
  513. description: '8 6 S20',
  514. tier: 'platinum',
  515. type: 'skill',
  516. collect_type: 'gimmick',
  517. song: '8 6',
  518. diff: 'S20'
  519. },
  520. {
  521. name: '[GIMMICK] Lv.8',
  522. description: 'Twist of Fate (feat. Ruriling) S19',
  523. tier: 'gold',
  524. type: 'skill',
  525. collect_type: 'gimmick',
  526. song: 'Twist of Fate (feat. Ruriling)',
  527. diff: 'S19'
  528. },
  529. {
  530. name: '[GIMMICK] Lv.7',
  531. description: 'Nakakapagpabagabag S19',
  532. tier: 'gold',
  533. type: 'skill',
  534. collect_type: 'gimmick',
  535. song: 'Nakakapagpabagabag',
  536. diff: 'S19'
  537. },
  538. {
  539. name: '[GIMMICK] Lv.6',
  540. description: 'Miss S\' story S19',
  541. tier: 'silver',
  542. type: 'skill',
  543. collect_type: 'gimmick',
  544. song: 'Miss S\' story',
  545. diff: 'S19'
  546. },
  547. {
  548. name: '[GIMMICK] Lv.5',
  549. description: 'Rock the house - SHORT CUT - S18',
  550. tier: 'silver',
  551. type: 'skill',
  552. collect_type: 'gimmick',
  553. song: 'Rock the house - SHORT CUT -',
  554. diff: 'S18'
  555. },
  556. {
  557. name: '[GIMMICK] Lv.4',
  558. description: 'Come to Me S17',
  559. tier: 'silver',
  560. type: 'skill',
  561. collect_type: 'gimmick',
  562. song: 'Come to Me',
  563. diff: 'S17'
  564. },
  565. {
  566. name: '[GIMMICK] Lv.3',
  567. description: 'Ugly Dee S17',
  568. tier: 'bronze',
  569. type: 'skill',
  570. collect_type: 'gimmick',
  571. song: 'Ugly Dee',
  572. diff: 'S17'
  573. },
  574. {
  575. name: '[GIMMICK] Lv.2',
  576. description: '8 6 S16',
  577. tier: 'bronze',
  578. type: 'skill',
  579. collect_type: 'gimmick',
  580. song: '8 6',
  581. diff: 'S16'
  582. },
  583. {
  584. name: '[GIMMICK] Lv.1',
  585. description: 'Yeo rae a S13',
  586. tier: 'bronze',
  587. type: 'skill',
  588. collect_type: 'gimmick',
  589. song: 'Yeo rae a',
  590. diff: 'S13'
  591. },
  592. {
  593. name: '[DRILL] EXPERT',
  594. description: 'All Drill titles',
  595. tier: 'platinum',
  596. type: 'skill_collect',
  597. collect_type: 'drill',
  598. count: 10
  599. },
  600. {
  601. name: '[DRILL] Lv.10',
  602. description: 'WI-EX-DOC-VA D24',
  603. tier: 'platinum',
  604. type: 'skill',
  605. collect_type: 'drill',
  606. song: 'WI-EX-DOC-VA',
  607. diff: 'D24'
  608. },
  609. {
  610. name: '[DRILL] Lv.9',
  611. description: 'Witch Doctor D23',
  612. tier: 'platinum',
  613. type: 'skill',
  614. collect_type: 'drill',
  615. song: 'Witch Doctor',
  616. diff: 'D23'
  617. },
  618. {
  619. name: '[DRILL] Lv.8',
  620. description: 'Rock the house D22',
  621. tier: 'gold',
  622. type: 'skill',
  623. collect_type: 'drill',
  624. song: 'Rock the house',
  625. diff: 'D22'
  626. },
  627. {
  628. name: '[DRILL] Lv.7',
  629. description: 'Sorceress Elise S21',
  630. tier: 'gold',
  631. type: 'skill',
  632. collect_type: 'drill',
  633. song: 'Sorceress Elise',
  634. diff: 'S21'
  635. },
  636. {
  637. name: '[DRILL] Lv.6',
  638. description: 'Overblow S20',
  639. tier: 'silver',
  640. type: 'skill',
  641. collect_type: 'drill',
  642. song: 'Overblow',
  643. diff: 'S20'
  644. },
  645. {
  646. name: '[DRILL] Lv.5',
  647. description: 'Vacuum S19',
  648. tier: 'silver',
  649. type: 'skill',
  650. collect_type: 'drill',
  651. song: 'Vacuum',
  652. diff: 'S19'
  653. },
  654. {
  655. name: '[DRILL] Lv.4',
  656. description: 'Moonlight S18',
  657. tier: 'silver',
  658. type: 'skill',
  659. collect_type: 'drill',
  660. song: 'Moonlight',
  661. diff: 'S18'
  662. },
  663. {
  664. name: '[DRILL] Lv.3',
  665. description: 'Gun Rock S17',
  666. tier: 'bronze',
  667. type: 'skill',
  668. collect_type: 'drill',
  669. song: 'Gun Rock',
  670. diff: 'S17'
  671. },
  672. {
  673. name: '[DRILL] Lv.2',
  674. description: 'Vook S16',
  675. tier: 'bronze',
  676. type: 'skill',
  677. collect_type: 'drill',
  678. song: 'Vook',
  679. diff: 'S16'
  680. },
  681. {
  682. name: '[DRILL] Lv.1',
  683. description: 'Hellfire S13',
  684. tier: 'bronze',
  685. type: 'skill',
  686. collect_type: 'drill',
  687. song: 'Hellfire',
  688. diff: 'S13'
  689. },
  690. {
  691. name: '[RUN] EXPERT',
  692. description: 'All Run titles',
  693. tier: 'platinum',
  694. type: 'skill_collect',
  695. collect_type: 'run',
  696. count: 10
  697. },
  698. {
  699. name: '[RUN] Lv.10',
  700. description: 'Yog-Sothoth D24',
  701. tier: 'platinum',
  702. type: 'skill',
  703. collect_type: 'run',
  704. song: 'Yog-Sothoth',
  705. diff: 'D24'
  706. },
  707. {
  708. name: '[RUN] Lv.9',
  709. description: 'Baroque Virus - FULL SONG - D23',
  710. tier: 'platinum',
  711. type: 'skill',
  712. collect_type: 'run',
  713. song: 'Baroque Virus - FULL SONG -',
  714. diff: 'D23'
  715. },
  716. {
  717. name: '[RUN] Lv.8',
  718. description: 'Gargoyle - FULL SONG - D22',
  719. tier: 'gold',
  720. type: 'skill',
  721. collect_type: 'run',
  722. song: 'Gargoyle - FULL SONG -',
  723. diff: 'D22'
  724. },
  725. {
  726. name: '[RUN] Lv.7',
  727. description: 'Sarabande D21',
  728. tier: 'gold',
  729. type: 'skill',
  730. collect_type: 'run',
  731. song: 'Sarabande',
  732. diff: 'D21'
  733. },
  734. {
  735. name: '[RUN] Lv.6',
  736. description: 'Bee D20',
  737. tier: 'silver',
  738. type: 'skill',
  739. collect_type: 'run',
  740. song: 'Bee',
  741. diff: 'D20'
  742. },
  743. {
  744. name: '[RUN] Lv.5',
  745. description: 'Napalm S19',
  746. tier: 'silver',
  747. type: 'skill',
  748. collect_type: 'run',
  749. song: 'Napalm',
  750. diff: 'S19'
  751. },
  752. {
  753. name: '[RUN] Lv.4',
  754. description: 'Gothique Resonance S18',
  755. tier: 'silver',
  756. type: 'skill',
  757. collect_type: 'run',
  758. song: 'Gothique Resonance',
  759. diff: 'S18'
  760. },
  761. {
  762. name: '[RUN] Lv.3',
  763. description: 'Pavane S17',
  764. tier: 'bronze',
  765. type: 'skill',
  766. collect_type: 'run',
  767. song: 'Pavane',
  768. diff: 'S17'
  769. },
  770. {
  771. name: '[RUN] Lv.2',
  772. description: 'Super Fantasy S16',
  773. tier: 'bronze',
  774. type: 'skill',
  775. collect_type: 'run',
  776. song: 'Super Fantasy',
  777. diff: 'S16'
  778. },
  779. {
  780. name: '[RUN] Lv.1',
  781. description: 'Switronic S13',
  782. tier: 'bronze',
  783. type: 'skill',
  784. collect_type: 'run',
  785. song: 'Switronic',
  786. diff: 'S13'
  787. },
  788. {
  789. name: '[TWIST] EXPERT',
  790. description: 'All Twist titles',
  791. tier: 'platinum',
  792. type: 'skill_collect',
  793. collect_type: 'twist',
  794. count: 10
  795. },
  796. {
  797. name: '[TWIST] Lv.10',
  798. description: 'Bee D24',
  799. tier: 'platinum',
  800. type: 'skill',
  801. collect_type: 'twist',
  802. song: 'Bee',
  803. diff: 'D24'
  804. },
  805. {
  806. name: '[TWIST] Lv.9',
  807. description: 'Love Is A Danger Zone(Cranky Mix) D23',
  808. tier: 'platinum',
  809. type: 'skill',
  810. collect_type: 'twist',
  811. song: 'Love Is A Danger Zone(Cranky Mix)',
  812. diff: 'D23'
  813. },
  814. {
  815. name: '[TWIST] Lv.8',
  816. description: 'Super Fantasy D22',
  817. tier: 'gold',
  818. type: 'skill',
  819. collect_type: 'twist',
  820. song: 'Super Fantasy',
  821. diff: 'D22'
  822. },
  823. {
  824. name: '[TWIST] Lv.7',
  825. description: 'Love is a Danger Zone D21',
  826. tier: 'gold',
  827. type: 'skill',
  828. collect_type: 'twist',
  829. song: 'Love is a Danger Zone',
  830. diff: 'D21'
  831. },
  832. {
  833. name: '[TWIST] Lv.6',
  834. description: 'Witch Doctor #1 D20',
  835. tier: 'silver',
  836. type: 'skill',
  837. collect_type: 'twist',
  838. song: 'Witch Doctor #1',
  839. diff: 'D20'
  840. },
  841. {
  842. name: '[TWIST] Lv.5',
  843. description: 'U GOT 2 KNOW S19',
  844. tier: 'silver',
  845. type: 'skill',
  846. collect_type: 'twist',
  847. song: 'U GOT 2 KNOW',
  848. diff: 'S19'
  849. },
  850. {
  851. name: '[TWIST] Lv.4',
  852. description: 'Solitary 2 S18',
  853. tier: 'silver',
  854. type: 'skill',
  855. collect_type: 'twist',
  856. song: 'Solitary 2',
  857. diff: 'S18'
  858. },
  859. {
  860. name: '[TWIST] Lv.3',
  861. description: 'U Got Me Rocking S17',
  862. tier: 'bronze',
  863. type: 'skill',
  864. collect_type: 'twist',
  865. song: 'U Got Me Rocking',
  866. diff: 'S17'
  867. },
  868. {
  869. name: '[TWIST] Lv.2',
  870. description: 'Street show down S16',
  871. tier: 'bronze',
  872. type: 'skill',
  873. collect_type: 'twist',
  874. song: 'Street show down',
  875. diff: 'S16'
  876. },
  877. {
  878. name: '[TWIST] Lv.1',
  879. description: 'Scorpion King S13',
  880. tier: 'bronze',
  881. type: 'skill',
  882. collect_type: 'twist',
  883. song: 'Scorpion King',
  884. diff: 'S13'
  885. },
  886. {
  887. name: '[XX] Double',
  888. description: '1949 D28',
  889. tier: 'platinum',
  890. type: 'boss',
  891. song: '1949',
  892. diff: 'D28'
  893. },
  894. {
  895. name: '[XX] Single',
  896. description: 'ERRORCODE: 0 S25',
  897. tier: 'gold',
  898. type: 'boss',
  899. song: 'ERRORCODE: 0',
  900. diff: 'S25'
  901. },
  902. {
  903. name: '[PRIME2] Double',
  904. description: 'Shub Sothoth D27',
  905. tier: 'platinum',
  906. type: 'boss',
  907. song: 'Shub Sothoth',
  908. diff: 'D27'
  909. },
  910. {
  911. name: '[PRIME2] Single',
  912. description: 'Shub Sothoth S25',
  913. tier: 'gold',
  914. type: 'boss',
  915. song: 'Shub Sothoth',
  916. diff: 'S25'
  917. },
  918. {
  919. name: '[PRIME] Double',
  920. description: 'Paradoxx D28',
  921. tier: 'platinum',
  922. type: 'boss',
  923. song: 'Paradoxx',
  924. diff: 'D28'
  925. },
  926. {
  927. name: '[PRIME] Single',
  928. description: 'Paradoxx S26',
  929. tier: 'gold',
  930. type: 'boss',
  931. song: 'Paradoxx',
  932. diff: 'S26'
  933. },
  934. {
  935. name: '[FIESTA2] Double',
  936. description: 'Ignis Fatuus D25',
  937. tier: 'gold',
  938. type: 'boss',
  939. song: 'Ignis Fatuus',
  940. diff: 'D25'
  941. },
  942. {
  943. name: '[FIESTA2] Single',
  944. description: 'Ignis Fatuus S22',
  945. tier: 'silver',
  946. type: 'boss',
  947. song: 'Ignis Fatuus',
  948. diff: 'S22'
  949. },
  950. {
  951. name: '[FIESTA EX] Double',
  952. description: 'Vacuum Cleaner D26',
  953. tier: 'gold',
  954. type: 'boss',
  955. song: 'Vacuum Cleaner',
  956. diff: 'D26'
  957. },
  958. {
  959. name: '[FIESTA EX] Single',
  960. description: 'Vacuum Cleaner S25',
  961. tier: 'gold',
  962. type: 'boss',
  963. song: 'Vacuum Cleaner',
  964. diff: 'S25'
  965. },
  966. {
  967. name: '[FIESTA] Double',
  968. description: 'Vacuum D25',
  969. tier: 'gold',
  970. type: 'boss',
  971. song: 'Vacuum',
  972. diff: 'D25'
  973. },
  974. {
  975. name: '[FIESTA] Single',
  976. description: 'Vacuum S23',
  977. tier: 'silver',
  978. type: 'boss',
  979. song: 'Vacuum',
  980. diff: 'S23'
  981. },
  982. {
  983. name: '[NXA] Double',
  984. description: 'Final Audition Ep. 2-X D24',
  985. tier: 'gold',
  986. type: 'boss',
  987. song: 'Final Audition Ep. 2-X',
  988. diff: 'D24'
  989. },
  990. {
  991. name: '[NXA] Single',
  992. description: 'Final Audition Ep. 2-X S23',
  993. tier: 'silver',
  994. type: 'boss',
  995. song: 'Final Audition Ep. 2-X',
  996. diff: 'S23'
  997. },
  998. {
  999. name: '[NX2] Double',
  1000. description: 'Banya-P Guitar Remix D24',
  1001. tier: 'gold',
  1002. type: 'boss',
  1003. song: 'Banya-P Guitar Remix',
  1004. diff: 'D24'
  1005. },
  1006. {
  1007. name: '[NX2] Single',
  1008. description: 'Banya-P Guitar Remix S22',
  1009. tier: 'silver',
  1010. type: 'boss',
  1011. song: 'Banya-P Guitar Remix',
  1012. diff: 'S22'
  1013. },
  1014. {
  1015. name: '[NX] Double',
  1016. description: 'Bemera D26',
  1017. tier: 'gold',
  1018. type: 'boss',
  1019. song: 'Bemera',
  1020. diff: 'D26'
  1021. },
  1022. {
  1023. name: '[NX] Single',
  1024. description: 'Bemera S24',
  1025. tier: 'silver',
  1026. type: 'boss',
  1027. song: 'Bemera',
  1028. diff: 'S24'
  1029. },
  1030. {
  1031. name: '[ZERO] Double',
  1032. description: 'Love is a Danger Zone pt. 2 D24',
  1033. tier: 'silver',
  1034. type: 'boss',
  1035. song: 'Love is a Danger Zone pt. 2',
  1036. diff: 'D24'
  1037. },
  1038. {
  1039. name: '[ZERO] Single',
  1040. description: 'Love is a Danger Zone pt. 2 S22',
  1041. tier: 'silver',
  1042. type: 'boss',
  1043. song: 'Love is a Danger Zone pt. 2',
  1044. diff: 'S22'
  1045. },
  1046. {
  1047. name: '[EXCEED2] Double',
  1048. description: 'Canon D D23',
  1049. tier: 'silver',
  1050. type: 'boss',
  1051. song: 'Canon D',
  1052. diff: 'D23'
  1053. },
  1054. {
  1055. name: '[EXCEED2] Single',
  1056. description: 'Canon D S20',
  1057. tier: 'silver',
  1058. type: 'boss',
  1059. song: 'Canon D',
  1060. diff: 'S20'
  1061. },
  1062. {
  1063. name: '[EXCEED] Double',
  1064. description: 'Dignity D24',
  1065. tier: 'gold',
  1066. type: 'boss',
  1067. song: 'Dignity',
  1068. diff: 'D24'
  1069. },
  1070. {
  1071. name: '[EXCEED] Single',
  1072. description: 'Dignity S21',
  1073. tier: 'silver',
  1074. type: 'boss',
  1075. song: 'Dignity',
  1076. diff: 'S21'
  1077. },
  1078. {
  1079. name: '[THE PREX3]',
  1080. description: 'Bee S17',
  1081. tier: 'bronze',
  1082. type: 'boss',
  1083. song: 'Bee',
  1084. diff: 'S17'
  1085. },
  1086. {
  1087. name: '[THE REBIRTH]',
  1088. description: 'Love is a Danger Zone S17',
  1089. tier: 'bronze',
  1090. type: 'boss',
  1091. song: 'Love is a Danger Zone',
  1092. diff: 'S17'
  1093. },
  1094. {
  1095. name: '[EXTRA]',
  1096. description: 'Radetzky Can Can D18',
  1097. tier: 'bronze',
  1098. type: 'boss',
  1099. song: 'Radetzky Can Can',
  1100. diff: 'D18'
  1101. },
  1102. {
  1103. name: '[Perfect Collection]',
  1104. description: 'Slam S18',
  1105. tier: 'bronze',
  1106. type: 'boss',
  1107. song: 'Slam',
  1108. diff: 'S18'
  1109. },
  1110. {
  1111. name: '[The O.B.G SE]',
  1112. description: 'Mr. Larpus S15',
  1113. tier: 'bronze',
  1114. type: 'boss',
  1115. song: 'Mr. Larpus',
  1116. diff: 'S15'
  1117. },
  1118. {
  1119. name: '[The O.B.G]',
  1120. description: 'Turkey March S12',
  1121. tier: 'bronze',
  1122. type: 'boss',
  1123. song: 'Turkey March',
  1124. diff: 'S12'
  1125. },
  1126. {
  1127. name: '[The 2nd]',
  1128. description: 'Extravaganza S11',
  1129. tier: 'bronze',
  1130. type: 'boss',
  1131. song: 'Extravaganza',
  1132. diff: 'S11'
  1133. },
  1134. {
  1135. name: '[The 1st]',
  1136. description: 'Another Truth S6',
  1137. tier: 'bronze',
  1138. type: 'boss',
  1139. song: 'Another Truth',
  1140. diff: 'S6'
  1141. },
  1142. ];
  1143.  
  1144. fetchAllScores();
  1145.  
  1146. function fetchAllScores() {
  1147. let pages = parseInt($('.board_paging button:last').attr('onclick').split('=')[2].split('\'')[0]);
  1148. $('head').append( $('<link rel="stylesheet" type="text/css" />').attr('href', 'https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css') );
  1149. $('#contents').css('background', '#1a1b1e');
  1150. $('#header').remove();
  1151. $('.pageWrap').html('');
  1152. showProgress(pages);
  1153. let scores = [];
  1154. let current_url = window.location.href;
  1155.  
  1156. if(window.location.href.indexOf('?') == -1) {
  1157. current_url = current_url + '?';
  1158. }
  1159.  
  1160. let mark = 1;
  1161. for (var i = 1; i <= pages; i++) {
  1162. fetchScores(current_url + '&&page=' + i)
  1163. .then((score) => {
  1164. console.log(mark + '/' + pages);
  1165. $('#current_progress_page').html(mark);
  1166. $('#fetch_progress_bar').css('width', ((mark/pages)*100) + '%');
  1167. for (var j = score.length - 1; j >= 0; j--) {
  1168. scores.push(score[j])
  1169. }
  1170. if(mark == pages) {
  1171. $('#progress_pane').hide();
  1172. run(scores)
  1173. }
  1174. mark++;
  1175. });
  1176. }
  1177. }
  1178.  
  1179.  
  1180. function run(scores) {
  1181. scores.sort(function(a, b){
  1182. var a1 = a.rating, b1 = b.rating;
  1183. if(a1 == b1) {
  1184. var a2 = a.score, b2 = b.score;
  1185. if(a2 == b2) {
  1186. return 0;
  1187. }
  1188. return a2 > b2 ? -1 : 1;
  1189. }
  1190. return a1 > b1 ? -1 : 1;
  1191. });
  1192.  
  1193. createAnalytic(scores);
  1194. }
  1195.  
  1196. function showProgress(page) {
  1197. $('.pageWrap').prepend('<div id="progress_pane"><h1 style="color:white">Fetching scores:</h1><div id="fetch_progress" class="progress" style="height: 30px;"></div>');
  1198. $('#fetch_progress').append('<div id="fetch_progress_bar" class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" ' +
  1199. 'aria-valuenow="0" aria-valuemin="0" aria-valuemax="' + page + '" style="width: 0%">'+
  1200. '<div style="position: absolute; text-align: center; line-height: 20px; overflow: hidden; color: black; right: 0; left: 0; top: 0;">'+
  1201. '<span style="font-size: 20px;"><span id="current_progress_page">0</span>/' + page + '</span></div></div>');
  1202. }
  1203.  
  1204. function createAnalytic(scores) {
  1205. console.log("Run Analytics");
  1206.  
  1207. $('.pageWrap').prepend('<div id="table_pane" class="row"><div id="table_pane_body" class="col-md-6"><table id="main_table" class="table table-dark table-striped"></table></div></div>');
  1208. $('#main_table').append('<thead class="thead-dark"><tr><th width="30">#</th><th>Song</th><th width="50">Diff</th><th width="100">Score</th><th width="50">Rank</th><th width="70">Rating</th></tr></thead>');
  1209. //$('#main_table').css('');
  1210. $('#main_table').append('<tbody id="main_table_body"><tbody>');
  1211.  
  1212. for (var i = 0; i < scores.length; i++) {
  1213. switch(scores[i].level_type) {
  1214. case 'single':
  1215. var level_style = 'style="font-weight: bolder; color: orangered;"';
  1216. break;
  1217. case 'double':
  1218. level_style = 'style="font-weight: bolder; color: lawngreen;"';
  1219. break;
  1220. case 'coop':
  1221. level_style = 'style="font-weight: bolder; color: yellow;"';
  1222. break;
  1223. default:
  1224. level_style = '';
  1225. }
  1226. switch(scores[i].score_rate) {
  1227. case 'sss_p':
  1228. case 'sss':
  1229. var score_style = 'style="font-weight: bolder; color: cyan;"';
  1230. break;
  1231. case 'ss_p':
  1232. case 'ss':
  1233. case 's_p':
  1234. case 's':
  1235. score_style = 'style="font-weight: bolder; color: gold;"';
  1236. break;
  1237. case 'aaa_p':
  1238. case 'aaa':
  1239. score_style = 'style="font-weight: bolder; color: silver;"';
  1240. break;
  1241. case 'aa_p':
  1242. case 'aa':
  1243. case 'a_p':
  1244. case 'a':
  1245. score_style = 'style="font-weight: bolder; color: orangered;"';
  1246. break;
  1247. default:
  1248. score_style = 'style="font-weight: bolder; color: greenyellow;"';
  1249. }
  1250. $('#main_table_body').append('<tr>' +
  1251. '<td>' + (i+1) + '</td>' +
  1252. '<td>' + scores[i].name + '</td>' +
  1253. '<td ' + level_style + '>' + scores[i].level_text + '</td>' +
  1254. '<td>' + scores[i].score_text + '</td>' +
  1255. '<td ' + score_style + '>' + scores[i].score_rate_text + '</td>' +
  1256. '<td>' + scores[i].rating + '</td>');
  1257. }
  1258.  
  1259.  
  1260. $('#table_pane').append('<div id="table_pane_progress" class="col-md-6"><table id="progress_table" class="table table-dark table-striped"></table></div>');
  1261. $('#progress_table').append('<thead class="thead-dark"><tr><th width="180">Title</th><th width="180">Description</th><th>Progress</th></tr></thead>');
  1262. $('#progress_table').append('<tbody id="progress_table_body"><tbody>');
  1263.  
  1264. var level_progress = [];
  1265. var level_progress_list = [];
  1266. var score_progress = scores;
  1267. score_progress.reduce(function(res, value) {
  1268. if (!res[value.level]) {
  1269. res[value.level] = { diff: value.level, rating: 0 };
  1270. level_progress_list.push(res[value.level])
  1271. }
  1272. res[value.level].rating += parseInt(value.rating);
  1273. return res;
  1274. }, {});
  1275. for (let i = 0; i < level_progress_list.length; i++) {
  1276. level_progress[level_progress_list[i].diff] = level_progress_list[i].rating;
  1277. }
  1278.  
  1279. for (let i = 0; i < expert_titles.length; i++) {
  1280. switch(expert_titles[i].tier) {
  1281. case 'platinum':
  1282. var title_style = 'style="font-weight: bolder; color: cyan;"';
  1283. break;
  1284. case 'gold':
  1285. title_style = 'style="font-weight: bolder; color: gold;"';
  1286. break;
  1287. case 'silver':
  1288. title_style = 'style="font-weight: bolder; color: silver;"';
  1289. break;
  1290. case 'bronze':
  1291. title_style = 'style="font-weight: bolder; color: orangered;"';
  1292. break;
  1293. default:
  1294. title_style = '';
  1295. }
  1296. switch(expert_titles[i].type) {
  1297. case 'rating':
  1298. var current_level = expert_titles[i].level;
  1299. var current_rating = level_progress[current_level] ? level_progress[current_level] : 0;
  1300. var max_rating = parseInt(expert_titles[i].rating);
  1301. var progress = Math.round((current_rating / max_rating) * 100);
  1302. if(progress >= 100) {
  1303. var bar_bg = 'bg-success';
  1304. } else {
  1305. bar_bg = 'bg-danger';
  1306. }
  1307. $('#progress_table_body').append('<tr>' +
  1308. '<td ' + title_style + '>' + expert_titles[i].name + '</td>' +
  1309. '<td>' + expert_titles[i].description + '</td>' +
  1310. '<td><div class="progress" style="position: relative;">' +
  1311. '<div class="progress-bar ' + bar_bg + ' progress-bar-striped progress-bar-animated" role="progressbar"' +
  1312. 'aria-valuenow="' + current_rating + '" aria-valuemin="0" aria-valuemax="' + max_rating + '" style="width: ' + progress + '%"></div>' +
  1313. '<div style="position: absolute; text-align: center; line-height: 20px; overflow: hidden; color: black; right: 0; left: 0; top: 0;">' + current_rating.toLocaleString() + '/' + max_rating.toLocaleString() + '</div>' +
  1314. '</div></td></tr>');
  1315. break;
  1316. case 'skill_collect':
  1317. $('#progress_table_body').append('<tr>' +
  1318. '<td ' + title_style + '>' + expert_titles[i].name + '</td>' +
  1319. '<td>' + expert_titles[i].description + '</td>' +
  1320. '<td><div class="progress" style="position: relative;">' +
  1321. '<div id="progress_bar_' + expert_titles[i].collect_type + '" class="progress-bar bg-danger progress-bar-striped progress-bar-animated" role="progressbar"' +
  1322. 'aria-valuenow="0" aria-valuemin="0" aria-valuemax="' + expert_titles[i].count + '" style="width: 0%"></div>' +
  1323. '<div id="progress_bar_' + expert_titles[i].collect_type + '_text" style="position: absolute; text-align: center; line-height: 20px; overflow: hidden; color: black; right: 0; left: 0; top: 0;">0/' + expert_titles[i].count + '</div>' +
  1324. '</div></td><tr><input type="hidden" id="skill_count_' + expert_titles[i].collect_type + '" value="0">');
  1325. break;
  1326. case 'skill':
  1327. var current_song = scores.find(o => o.name === expert_titles[i].song && o.level_text === expert_titles[i].diff);
  1328. if(current_song == undefined) {
  1329. var current_song_score = 0;
  1330. var score_text = 0;
  1331. } else {
  1332. current_song_score = current_song.score;
  1333. score_text = current_song.score_text;
  1334. }
  1335. progress = Math.round(parseInt(current_song_score) / 1000000 * 100);
  1336. if(current_song_score > 990000) {
  1337. bar_bg = 'bg-success';
  1338.  
  1339. var skill_count = parseInt($('#skill_count_skill').val()) + 1;
  1340. $('#skill_count_skill').val(skill_count);
  1341. $('#progress_bar_skill').css('width', skill_count/60*100 + '%');
  1342. $('#progress_bar_skill_text').html(skill_count + '/60');
  1343. if(skill_count == 60) {
  1344. $('#progress_bar_skill').removeClass('bg-danger');
  1345. $('#progress_bar_skill').addClass('bg-success');
  1346. }
  1347.  
  1348.  
  1349. var sub_skill_count = parseInt($('#skill_count_' + expert_titles[i].collect_type).val()) + 1;
  1350. $('#skill_count_' + expert_titles[i].collect_type).val(sub_skill_count);
  1351. $('#progress_bar_' + expert_titles[i].collect_type).css('width', sub_skill_count/10*100 + '%');
  1352. $('#progress_bar_' + expert_titles[i].collect_type + '_text').html(sub_skill_count + '/10');
  1353. if(sub_skill_count == 10) {
  1354. $('#progress_bar_' + expert_titles[i].collect_type).removeClass('bg-danger');
  1355. $('#progress_bar_' + expert_titles[i].collect_type).addClass('bg-success');
  1356. }
  1357. } else {
  1358. bar_bg = 'bg-danger';
  1359. }
  1360. $('#progress_table_body').append('<tr>' +
  1361. '<td ' + title_style + '>' + expert_titles[i].name + '</td>' +
  1362. '<td>' + expert_titles[i].description + '</td>' +
  1363. '<td><div class="progress" style="position: relative;">' +
  1364. '<div class="progress-bar ' + bar_bg + ' progress-bar-striped progress-bar-animated" role="progressbar"' +
  1365. 'aria-valuenow="' + current_song_score + '" aria-valuemin="0" aria-valuemax="1000000" style="width: ' + progress + '%"></div>' +
  1366. '<div style="position: absolute; text-align: center; line-height: 20px; overflow: hidden; color: black; right: 0; left: 0; top: 0;">' + score_text + '/1,000,000</div>' +
  1367. '</div></td>');
  1368. break;
  1369. case 'boss':
  1370. current_song = scores.find(o => o.name === expert_titles[i].song && o.level_text === expert_titles[i].diff);
  1371. if(current_song == undefined) {
  1372. current_song_score = 0;
  1373. score_text = 0;
  1374. bar_bg = 'bg-danger';
  1375. } else {
  1376. current_song_score = current_song.score;
  1377. score_text = current_song.score_text;
  1378. bar_bg = 'bg-success';
  1379. }
  1380. progress = Math.round(parseInt(current_song_score) / 1000000 * 100);
  1381. $('#progress_table_body').append('<tr>' +
  1382. '<td ' + title_style + '>' + expert_titles[i].name + '</td>' +
  1383. '<td>' + expert_titles[i].description + '</td>' +
  1384. '<td><div class="progress" style="position: relative;">' +
  1385. '<div class="progress-bar ' + bar_bg + ' progress-bar-striped progress-bar-animated" role="progressbar"' +
  1386. 'aria-valuenow="' + current_song_score + '" aria-valuemin="0" aria-valuemax="1000000" style="width: ' + progress + '%"></div>' +
  1387. '<div style="position: absolute; text-align: center; line-height: 20px; overflow: hidden; color: black; right: 0; left: 0; top: 0;">' + score_text + '/1,000,000</div>' +
  1388. '</div></td>');
  1389. break;
  1390. default:
  1391. continue;
  1392. }
  1393. }
  1394. }
  1395.  
  1396. async function fetchScores(url) {
  1397. var dom = await fetchPage(url);
  1398. const rows = dom.querySelectorAll('.my_best_scoreList .in');
  1399. var songs = [];
  1400. for (var i = 0; i < rows.length; i++) {
  1401. var song = $(dom.querySelectorAll('.my_best_scoreList .in .song_name p')[i]).html();
  1402. var score = $(dom.querySelectorAll('.my_best_scoreList .in .num')[i]).html();
  1403. var score_rate = $(dom.querySelectorAll('.my_best_scoreList .in .etc_con .img:not(.st1) img')[i]).attr('src');
  1404. score_rate = score_rate.split('/grade/')[1].split('.png')[0];
  1405.  
  1406. var score_plate = $(dom.querySelectorAll('.my_best_scoreList .in .etc_con .st1 img')[i]).attr('src');
  1407. score_plate = score_plate.split('/plate/')[1].split('.png')[0];
  1408.  
  1409. var level_type_data = $(dom.querySelectorAll('.my_best_scoreList .in .stepBall_in')[i]).attr('style').split('full/')[1].split('_bg')[0];
  1410. switch(level_type_data) {
  1411. case 's':
  1412. var level_type = 'single';
  1413. break;
  1414. case 'd':
  1415. level_type = 'double';
  1416. break;
  1417. default:
  1418. level_type = 'coop';
  1419. }
  1420.  
  1421. var level = '';
  1422. var levels = $(dom.querySelectorAll('.my_best_scoreList .in .stepBall_in')[0]).find('.imG');
  1423.  
  1424. switch(level_type_data) {
  1425. case 's':
  1426. case 'd':
  1427. for (var j = 0; j < levels.length; j++) {
  1428. url = $(dom.querySelectorAll('.my_best_scoreList .in .stepBall_in')[i]).find('.imG img').eq(j).attr('src');
  1429. level += url.split('num_')[1].split('.png')[0];
  1430. }
  1431. var rating = calculateRating(level, rating_text[score_rate], 'normal');
  1432. var level_text = level_type_data + level;
  1433. level_text = level_text.toUpperCase();
  1434. break;
  1435. default:
  1436. url = $(dom.querySelectorAll('.my_best_scoreList .in .stepBall_in')[i]).find('.imG img').eq(1).attr('src');
  1437. level = url.split('num_')[1].split('.png')[0];
  1438. rating = calculateRating(null, rating_text[score_rate], 'coop');
  1439. level_text = 'Cx' + level;
  1440. }
  1441.  
  1442. song = {
  1443. name: song,
  1444. level_text: level_text,
  1445. score_text: score,
  1446. score_rate_text: rating_text[score_rate],
  1447. rating: rating,
  1448. score_plate_text: plate_text[score_plate],
  1449. level_type: level_type,
  1450. level: level,
  1451. score: score.replaceAll(',',''),
  1452. score_rate: score_rate,
  1453. score_plate: score_plate,
  1454. }
  1455.  
  1456. songs.push(song);
  1457. }
  1458.  
  1459. songs.sort(function(a, b){
  1460. var a1 = a.rating, b1 = b.rating;
  1461. if(a1 == b1) {
  1462. var a2 = a.score, b2 = b.score;
  1463. if(a2 == b2) {
  1464. return 0;
  1465. }
  1466. return a2 > b2 ? -1 : 1;
  1467. }
  1468. return a1 > b1 ? -1 : 1;
  1469. });
  1470.  
  1471. return songs;
  1472. }
  1473.  
  1474. async function fetchPage(url) {
  1475. const response = await fetch(url, {redirect: 'error'});
  1476. const html = await response.text();
  1477. const parser = new DOMParser();
  1478. return parser.parseFromString(html, 'text/html');
  1479. }
  1480.  
  1481. function calculateRating(level, rate, type) {
  1482. var rate_index = {
  1483. 'A':0.9,
  1484. 'A+':0.95,
  1485. 'AA':1,
  1486. 'AA+':1.05,
  1487. 'AAA':1.1,
  1488. 'AAA+':1.15,
  1489. 'S':1.2,
  1490. 'S+':1.26,
  1491. 'SS':1.32,
  1492. 'SS+':1.38,
  1493. 'SSS':1.44,
  1494. 'SSS+':1.5,
  1495. };
  1496.  
  1497. if(type == 'normal') {
  1498. var level_base = {
  1499. '10':100,
  1500. '11':110,
  1501. '12':130,
  1502. '13':160,
  1503. '14':200,
  1504. '15':250,
  1505. '16':310,
  1506. '17':380,
  1507. '18':460,
  1508. '19':550,
  1509. '20':650,
  1510. '21':760,
  1511. '22':880,
  1512. '23':1010,
  1513. '24':1150,
  1514. '25':1300,
  1515. '26':1460,
  1516. '27':1630,
  1517. '28':1810,
  1518. };
  1519. if(level < 10) return 0;
  1520. var rating = parseInt(level_base[level]) * parseFloat(rate_index[rate]);
  1521. } else if(type == 'coop') {
  1522. level_base = 2000;
  1523. rating = parseInt(level_base) * parseFloat(rate_index[rate]);
  1524. }
  1525. return Math.round(rating.toFixed(2));
  1526. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址