filter planet

Delete level 0 & level 1 planet of dark forest

目前为 2022-04-21 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name filter planet
  3. // @namespace http://github.com/harryhare
  4. // @version 0.1.2
  5. // @description Delete level 0 & level 1 planet of dark forest
  6. // @author You
  7. // @match https://zkga.me/play/*
  8. // @match https://dfgame.277dao.com/play/*
  9. // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
  10. // @grant none
  11. // @license GPL3.0
  12. // ==/UserScript==
  13.  
  14. function get_planet_level(id) {
  15. let str = id.substring(8, 14);
  16. let s = parseInt(str, 16);
  17. //const PLANET_LEVEL_THRESHOLDS=df.contractConstants.planetLevelThresholds;
  18. const PLANET_LEVEL_THRESHOLDS = [
  19. 16777216,
  20. 4194292,
  21. 1048561,
  22. 262128,
  23. 65520,
  24. 16368,
  25. 4080,
  26. 1008,
  27. 240,
  28. 48
  29. ];
  30. let level = -1;
  31. for (let i = 9; i >= 0; i--) {
  32. if (s < PLANET_LEVEL_THRESHOLDS[i]) {
  33. level = i;
  34. break;
  35. }
  36. }
  37. return level;
  38. }
  39.  
  40. function delete_small(value) {
  41. let filtered = [];
  42. for (let i = 0; i < value.l.length; i++) {
  43. const h = value.l[i].h;
  44. const level = get_planet_level(h);
  45. if (level >= 2) {
  46. filtered.push(value.l[i]);
  47. }
  48. }
  49. console.log(filtered.length);
  50. value.l = filtered;
  51. return value;
  52. }
  53.  
  54.  
  55. async function openDB(db_name) {
  56. return new Promise((resolve, reject) => {
  57. let request = indexedDB.open(db_name);
  58. request.onupgradeneeded = function (event) {
  59. console.log("upgrade needed");
  60. resolve(event.target.result);
  61. };
  62. request.onsuccess = function (event) {
  63. resolve(event.target.result);
  64. };
  65. request.onerror = function (event) {
  66. reject(event.target.error);
  67. };
  68. });
  69. }
  70.  
  71. function update(db, table_name, key, value) {
  72. return new Promise((resolve, reject) => {
  73. let request = db.transaction(table_name, "readwrite").objectStore(table_name).put(value, key);
  74. request.onsuccess = function (event) {
  75. resolve(event.target.result);
  76. console.log("update", key);
  77. };
  78. request.onerror = function (event) {
  79. reject(event.target.error);
  80. };
  81. });
  82. }
  83.  
  84. function filterAll(db) {
  85. return new Promise((resolve, reject) => {
  86. const table_name = "knownBoard";
  87. var request = db.transaction(table_name).objectStore(table_name).openCursor();
  88. request.onsuccess = function (event) {
  89. var cursor = event.target.result;
  90. if (cursor) {
  91. console.log('id: ', cursor.id);
  92. console.log('key: ', cursor.key);
  93. console.log('value: ', cursor.value);
  94. update(db, table_name, cursor.key, delete_small(cursor.value));
  95. cursor.continue();
  96. } else {
  97. console.log('没有更多数据了!');
  98. resolve(event.target.result);
  99. }
  100. };
  101.  
  102. request.onerror = function (event) {
  103. reject(event.target.error);
  104. };
  105. });
  106. }
  107.  
  108. (function () {
  109. 'use strict';
  110. let container = document.createElement("div");
  111. container.style.position = "fixed";
  112. container.style.top = "0";
  113. container.style.left = "0";
  114. container.style.height = "200px";
  115. container.style.width = "200px";
  116.  
  117.  
  118. let input = document.createElement("input");
  119. input.style.width = "100%";
  120. input.placeholder = "address";
  121.  
  122. let button = document.createElement("button");
  123. button.style.width = "100%";
  124. button.style.backgroundColor = "grey";
  125. button.innerText = "过滤星球";
  126. button.onclick = async () => {
  127. let gameId = window.location.href.substring("31");
  128. //let userId = '0xb4de376b58a5a0e0b57ccf497ae902d8f2101588';
  129. let userId = input.value;
  130. if (gameId.length !== 42) {
  131. return;
  132. }
  133. if (userId.length !== 42) {
  134. return;
  135. }
  136. //db_name = "darkforest-0x65580edf65670620be0965d22544a8e9c7955eb1-0xb4de376b58a5a0e0b57ccf497ae902d8f2101588";
  137. let db_name = `darkforest-${gameId}-${userId}`;
  138. console.log(db_name);
  139.  
  140. button.innerText="过滤中...";
  141. button.disabled=true;
  142.  
  143. let db = await openDB(db_name);
  144. await filterAll(db);
  145.  
  146. button.innerText="过滤星球";
  147. button.disabled=false;
  148. };
  149.  
  150.  
  151. container.appendChild(input);
  152. container.appendChild(button);
  153. document.body.appendChild(container);
  154. })();