NGA ui-崩铁罗盘求解器

一个基于nga-ui的罗盘求解器

  1. // ==UserScript==
  2. // @name NGA ui-崩铁罗盘求解器
  3. // @namespace https://gf.qytechs.cn/users/994825
  4. // @version 1.0
  5. // @description 一个基于nga-ui的罗盘求解器
  6. // @author InfSeinP
  7. // @match *://nga.178.com/*
  8. // @match *://ngabbs.com/*
  9. // @match *://bbs.nga.cn/*
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. // Init common
  17. const page = typeof unsafeWindow == 'undefined' ? window : unsafeWindow;
  18. const $ = page.$;
  19. const _$ = page._$;
  20. const commonui = page.commonui;
  21. if (!commonui) { return; }
  22.  
  23. // Core functions
  24. const _getN = (moon) => {
  25. return moon===4 ? 3 : 6/moon;
  26. }
  27. const _getM = (startRotate, moon, isAdd) => {
  28. for (let i = 0; i < 15; i++) {
  29. const curr = startRotate + (isAdd ? 1 : -1) * moon * 60 * i;
  30. if (curr % 360 === 0) { return i; }
  31. }
  32. return -1;
  33. }
  34. const _solve = (N1,N2,N3,M1,M2,M3) => {
  35. let x = 0;
  36. let y = 0;
  37. let z = 0;
  38. while (x <= 10 && y <= 10 && z <= 10) {
  39. if ((x + y) % N1 == M1) {
  40. if ((x + z) % N2 == M2) {
  41. if ((y + z) % N3 == M3) {
  42. return [x,y,z];
  43. }
  44. }
  45. }
  46. z++;
  47. if (z > 10) {
  48. z = 0;
  49. y++;
  50. }
  51. if (y > 10) {
  52. y = 0;
  53. x++;
  54. }
  55. }
  56. return [];
  57. }
  58.  
  59. // Add ui-entry
  60. commonui.mainMenu && commonui.mainMenu.addItemOnTheFly('罗盘求解器', null, () => {
  61. const w = commonui.createadminwindow();
  62. var csz, ft, bt, bs, bt1, bt2, bs1, bs2, blk;
  63. var xStart, xMoon, xNotAdd, yStart, yMoon, yNotAdd, zStart, zMoon, zNotAdd;
  64. w._.addContent(null);
  65. w._.addContent(
  66. '请观察游戏中的罗盘,填入相应的参数', _$('/br'),
  67. _$('/span','class','silver','innerHTML','注意: 只支持三个转动组都是2个圈一起转的罗盘!'), _$('/br'),
  68. _$('/table')._.add(_$('/tbody')._.add(_$('/tr')._.add(
  69. _$('/td','innerHTML','<strong>圈位 |</strong>','style','padding:3px;text-align:center;'),
  70. _$('/td','innerHTML','<strong>初始角度</strong>','style','padding:3px;text-align:center;'),
  71. _$('/td','innerHTML','<strong>| 亮起的月亮数</strong>','style','padding:3px;text-align:center;'),
  72. _$('/td','innerHTML','<strong>| 逆时针旋转</strong>','style','padding:3px;text-align:center;'),
  73. ))._.add(_$('/tr')._.add(
  74. _$('/td','innerHTML','<strong>内圈 |</strong>','style','padding:1px;text-align:center;'),
  75. _$('/td', xStart = _$('/input','id','csz','maxlength','3','style','width:45px;','placeholder','整数') ,'style','padding:1px;text-align:center;'),
  76. _$('/td', xMoon = _$('/input','id','csz','maxlength','1','style','width:50px;','placeholder','整数') ,'style','padding:1px;text-align:center;'),
  77. _$('/td', xNotAdd = _$('/input','type','checkbox') ,'style','padding:1px;text-align:center;'),
  78. ))._.add(_$('/tr')._.add(
  79. _$('/td','innerHTML','<strong>中圈 |</strong>','style','padding:1px;text-align:center;'),
  80. _$('/td', yStart = _$('/input','id','csz','maxlength','3','style','width:45px;','placeholder','整数') ,'style','padding:1px;text-align:center;'),
  81. _$('/td', yMoon = _$('/input','id','csz','maxlength','1','style','width:50px;','placeholder','整数') ,'style','padding:1px;text-align:center;'),
  82. _$('/td', yNotAdd = _$('/input','type','checkbox') ,'style','padding:1px;text-align:center;'),
  83. ))._.add(_$('/tr')._.add(
  84. _$('/td','innerHTML','<strong>外圈 |</strong>','style','padding:1px;text-align:center;'),
  85. _$('/td', zStart = _$('/input','id','csz','maxlength','3','style','width:45px;','placeholder','整数') ,'style','padding:1px;text-align:center;'),
  86. _$('/td', zMoon = _$('/input','id','csz','maxlength','1','style','width:50px;','placeholder','整数') ,'style','padding:1px;text-align:center;'),
  87. _$('/td', zNotAdd = _$('/input','type','checkbox') ,'style','padding:1px;text-align:center;'),
  88. ))),
  89. _$('/button','type','button','class','larger','innerHTML','确认','onclick',async () => {
  90. /** 获取输入数据 */
  91. const xS = parseInt(xStart.value); const xM = parseInt(xMoon.value); const xN = xNotAdd.checked;
  92. const yS = parseInt(yStart.value); const yM = parseInt(yMoon.value); const yN = yNotAdd.checked;
  93. const zS = parseInt(zStart.value); const zM = parseInt(zMoon.value); const zN = zNotAdd.checked;
  94. /** 检查输入数据的合法性 */
  95. let invalid = false; const errmsgs = [];
  96. if (xS % 60 !== 0 || yS % 60 !== 0 || zS % 60 !== 0) {
  97. invalid = true; errmsgs.push('起始角度不正确:应当是60度的整数倍')
  98. }
  99. if (xM<1||xM>4 || yM<1||yM>4 || zM<1||zM>4) {
  100. invalid = true; errmsgs.push('月亮数不正确:应当是1~4的整数')
  101. }
  102. if (invalid) {
  103. alert('输入的数据有错误,请检查:\n' + errmsgs.join('\n'))
  104. return
  105. }
  106. /** 组装公式数据 */
  107. const n1 = _getN(xM); const n2 = _getN(yM); const n3 = _getN(zM);
  108. const m1 = _getM(xS, xM, !xN); const m2 = _getM(yS, yM, !yN); const m3 = _getM(zS, zM, !zN);
  109. /** 对公式求解 */
  110. const result = _solve(n1,n2,n3,m1,m2,m3)
  111. if (!result || result.length < 3) {
  112. alert('求解失败。')
  113. } else {
  114. let msg = '求解成功! 请尝试这样操作:';
  115. if (result[0]) { msg += `\n\t[内圈]和[中圈]一起转动${result[0]}次`}
  116. if (result[1]) { msg += `\n\t[内圈]和[外圈]一起转动${result[1]}次`}
  117. if (result[2]) { msg += `\n\t[中圈]和[外圈]一起转动${result[2]}次`}
  118. alert(msg)
  119. }
  120. })
  121. );
  122. w._.addTitle('崩铁罗盘求解器');
  123. w._.show();
  124. });
  125. })();

QingJ © 2025

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