MWI-Equipment-Diff

Make life easier

目前為 2025-05-26 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name MWI-Equipment-Diff
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.7
  5. // @description Make life easier
  6. // @author BKN46
  7. // @match https://*.milkywayidle.com/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=milkywayidle.com
  9. // @grant none
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. let equipmentToDiff = {};
  17. const isZHInGameSetting = localStorage.getItem("i18nextLng")?.toLowerCase()?.startsWith("zh");
  18. let isZH = isZHInGameSetting;
  19.  
  20. function parseEquipmentModal(element) {
  21. const equipmentDetail = {};
  22. const detailLines = element.querySelectorAll('.EquipmentStatsText_stat__27Sus');
  23. for (const line of detailLines) {
  24. if (line.querySelector('.EquipmentStatsText_uniqueStat__2xvqX')) continue;
  25. const data = line.textContent.split(':');
  26. if (data.length === 2) {
  27. const key = data[0].trim();
  28. const value = data[1].split('(')[0].trim();
  29. if (value === 'N/A') continue;
  30. equipmentDetail[key] = value;
  31. }
  32. }
  33.  
  34. if (!element.querySelector('.diff-tooltip')) {
  35. const diffTooltip = document.createElement('div');
  36. diffTooltip.className = 'diff-tooltip';
  37. diffTooltip.textContent = isZH ? '按\'d\'来添加作为对比对象' : 'Press "d" to add to quick diff';
  38. diffTooltip.style = 'color:rgb(0, 108, 158); font-weight: bold;';
  39. element.appendChild(diffTooltip);
  40.  
  41. if (equipmentToDiff.data) {
  42. const diffRemoveTooltip = document.createElement('div');
  43. diffRemoveTooltip.className = 'diff-remove-tooltip';
  44. diffRemoveTooltip.textContent = isZH ? '按\'r\'来移除当前对比' : 'Press "r" to remove present quick diff';
  45. diffRemoveTooltip.style = 'color:rgb(0, 108, 158); font-weight: bold;';
  46. element.appendChild(diffRemoveTooltip);
  47. }
  48. }
  49. return equipmentDetail;
  50. }
  51.  
  52. function addDiffToModal(element, data) {
  53. if (element.querySelector('.diff-value')) return;
  54. const TextArea = element.querySelector('.EquipmentStatsText_equipmentStatsText__djKBS').firstChild;
  55. const detailLines = element.querySelectorAll('.EquipmentStatsText_stat__27Sus');
  56. for (const line of detailLines) {
  57. const key = line.textContent.split(':')[0].trim();
  58. const valueElement = line.querySelectorAll('span')[1];
  59. const diffSpan = document.createElement('span');
  60. diffSpan.className = 'diff-value';
  61. diffSpan.style = 'color: rgb(0, 108, 158); font-weight: bold;';
  62. if (key in equipmentToDiff.data) {
  63. const diffValue = equipmentToDiff.data[key];
  64. diffSpan.textContent = ` (${diffValue})`;
  65. if (data[key] === diffValue) {
  66. continue;
  67. }
  68. } else {
  69. diffSpan.textContent = ` (N/A)`;
  70. }
  71. valueElement.appendChild(diffSpan);
  72. }
  73. for (const key in equipmentToDiff.data) {
  74. if (!(key in data)) {
  75. const newLine = document.createElement('div');
  76. newLine.className = 'EquipmentStatsText_stat__27Sus';
  77.  
  78. const keySpan = document.createElement('span');
  79. keySpan.textContent = `${key}: `;
  80. newLine.appendChild(keySpan);
  81.  
  82. const valueSpan = document.createElement('span');
  83. valueSpan.textContent = 'N/A';
  84. newLine.appendChild(valueSpan);
  85.  
  86. const diffSpan = document.createElement('span');
  87. diffSpan.className = 'diff-value';
  88. diffSpan.textContent = ` (${equipmentToDiff.data[key]})`;
  89. diffSpan.style = 'color: rgb(0, 108, 158); font-weight: bold;';
  90. valueSpan.appendChild(diffSpan);
  91. TextArea.appendChild(newLine);
  92. }
  93. }
  94. }
  95.  
  96. setInterval(() => {
  97. const modal = document.querySelector('.MuiPopper-root');
  98. if (!modal) return;
  99. const equipmentDetail = modal.querySelector('.ItemTooltipText_equipmentDetail__3sIHT');
  100. if (!equipmentDetail) return;
  101.  
  102. const equipmentName = modal.querySelector('.ItemTooltipText_name__2JAHA').textContent.trim();
  103. const equipmentData = parseEquipmentModal(equipmentDetail);
  104.  
  105. if (equipmentToDiff.data) {
  106. addDiffToModal(equipmentDetail, equipmentData);
  107. }
  108.  
  109. document.onkeydown = (event) => {
  110. if (event.key === 'd') {
  111. // event.preventDefault();
  112. console.log(`Added to quick diff: ${equipmentName}`);
  113. equipmentToDiff = {
  114. data: equipmentData,
  115. name: equipmentName,
  116. };
  117. equipmentDetail.querySelector('.diff-tooltip').textContent = isZH ? '已添加作为对比' : 'Added to quick diff';
  118. } else if (event.key === 'r') {
  119. // event.preventDefault();
  120. console.log(`Removed from quick diff: ${equipmentName}`);
  121. equipmentToDiff = {};
  122. equipmentDetail.querySelector('.diff-tooltip').textContent = isZH ? '已移除对比' : 'Removed from quick diff';
  123. }
  124. };
  125.  
  126. }, 500)
  127.  
  128. })();