IdlePixel Var Viewer

Easily view all game variables in a table.

  1. // ==UserScript==
  2. // @name IdlePixel Var Viewer
  3. // @namespace com.anwinity.idlepixel
  4. // @version 1.2.7
  5. // @description Easily view all game variables in a table.
  6. // @author Anwinity
  7. // @license MIT
  8. // @match *://idle-pixel.com/login/play*
  9. // @grant none
  10. // @require https://gf.qytechs.cn/scripts/441206-idlepixel/code/IdlePixel+.js?anticache=20220905
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. class VarViewerPlugin extends IdlePixelPlusPlugin {
  17. constructor() {
  18. super("varviewer", {
  19. about: {
  20. name: GM_info.script.name,
  21. version: GM_info.script.version,
  22. author: GM_info.script.author,
  23. description: GM_info.script.description
  24. }
  25. });
  26. }
  27.  
  28. onLogin() {
  29. const usernameElement = $("#menu-bar-buttons item-display[data-key=username]");
  30. const onlineCount = $(".game-top-bar .gold:not(#top-bar-admin-link)");
  31. onlineCount.before(`
  32. <a href="#" class="hover float-end link-no-decoration" onclick="event.preventDefault(); IdlePixelPlus.setPanel('varviewer')" title="Open VarViewer">Vars&nbsp;&nbsp;&nbsp;</a>
  33. `);
  34.  
  35. IdlePixelPlus.addPanel("varviewer", "Var Viewer", function() {
  36. let content = `
  37. <style>
  38. #varviewer-table {
  39. margin-top: 0.25em;
  40. color: black;
  41. background-color: white;
  42. }
  43. #varviewer-table, #varviewer-table tr, #varviewer-table th, #varviewer-table td {
  44. border: 1px solid black;
  45. font-family: 'Courier New', monospace;
  46. }
  47. #varviewer-table th, #varviewer-table td {
  48. padding: 2px;
  49. }
  50. #varviewer-table td:last-child {
  51. text-align: right;
  52. }
  53. </style>
  54. <input id="varviewer-filter" type="text" placeholder="text or /regex/" style="min-width: 250px" onkeyup="IdlePixelPlus.plugins.varviewer.onFilterKeyUp(event)" />
  55. <button onclick="IdlePixelPlus.plugins.varviewer.refilter()">Filter / Refresh</button>
  56. <br />
  57. <table id="varviewer-table">
  58. <thead>
  59. <tr>
  60. <th>Key</th>
  61. <th>Value</th>
  62. </tr>
  63. </thead>
  64. <tbody>
  65. </tbody>
  66. </table>
  67. `;
  68. return content;
  69. });
  70. IdlePixelPlus.refreshPanel("varviewer");
  71. this.refilter();
  72. }
  73.  
  74. onFilterKeyUp(event) {
  75. if(event.keyCode === 13) {
  76. this.refilter();
  77. }
  78. return false;
  79. }
  80.  
  81. refilter() {
  82. const tbody = $("#varviewer-table tbody");
  83. const filter = ($("#varviewer-filter").val() || "").trim().toLowerCase();
  84. let regex = null;
  85. if(filter.startsWith("/") && filter.endsWith("/")) {
  86. try {
  87. regex = new RegExp(filter.substring(1, filter.length-1), 'i');
  88. }
  89. catch(err) {
  90.  
  91. }
  92. }
  93. let content = "";
  94. Object.keys(window)
  95. .filter(key => key.startsWith("var_"))
  96. .sort()
  97. .forEach(key => {
  98. let show = false;
  99. if(!filter) {
  100. show = true;
  101. }
  102. else if(regex) {
  103. const val = window[key];
  104. if(regex.test(key) || regex.test(val)) {
  105. show = true;
  106. }
  107. }
  108. else {
  109. const keyLower = key.toLowerCase();
  110. const valLower = `${window[key]}`.toLowerCase();
  111. if(keyLower.includes(filter) || valLower.includes(filter)) {
  112. show = true;
  113. }
  114. }
  115.  
  116. if(show) {
  117. let value = window[key] ?? "";
  118. if(key == "var_animal_data") {
  119. value = value.replace(/=/g, "=<br />");
  120. }
  121. content += `<tr><td>${key}</td><td>${value}</td></tr>`;
  122. }
  123. });
  124. tbody.empty();
  125. tbody.append(content);
  126. return false;
  127. }
  128.  
  129. }
  130.  
  131. const plugin = new VarViewerPlugin();
  132. IdlePixelPlus.registerPlugin(plugin);
  133.  
  134. })();

QingJ © 2025

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