InfoCell

Some infos

  1. // ==UserScript==
  2. // @name InfoCell
  3. // @namespace http://tampermonkey.net/
  4. // @version 2024-09-28
  5. // @description Some infos
  6. // @author qwd
  7. // @match https://cellcraft.io/
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=cellcraft.io
  9. // @grant none
  10. // @license qwd
  11. // ==/UserScript==
  12.  
  13. function Accounts() {
  14. var wrapper = document.getElementById("overlays");
  15. var closeOpen = document.createElement("div");
  16. closeOpen.innerHTML = (`<div id="OpenClose" style="border-radius: 7px;">
  17. <img src="https://cdn.iconscout.com/icon/premium/png-256-thumb/dropdown-2425289-2035004.png?f=webp&w=256" style="width: 30px; background-color: white; margin-left: 2%; boder-radius: 7px; cursor: pointer">
  18. </div>`);
  19. var altBox = document.createElement("div");
  20. altBox.innerHTML = (`<div id="altBox" style="border: 2px solid white; width: 300px; height: 300px; overflow-y: auto; scrollbar-color: white; scrollbar-width: thin; background-color: black; color: white; margin-left: 2%; position: absolute; width: 25%; border-radius: 7px;">
  21. <p style="font-size: 30px; font-weight: 900; display: flex; justify-content: center">Accounts</p>
  22. <div style="display: flex">
  23. <p style="margin-left: 1%;">AccountName</p>
  24. <p style="margin-left: 22%;">Recs</p>
  25. <p style="margin-left: 5%;">Speeds</p>
  26. </div>
  27. <div id="accountBox"></div>
  28. <button id="addAccount" style="border: 2px solid white; background-color: black; color: white; padding: 5px; margin-left: 94%; border-radius: 7px;">+</button>
  29. </div>`);
  30. wrapper.appendChild(closeOpen);
  31. wrapper.appendChild(altBox);
  32.  
  33. var status = 1;
  34. closeOpen.addEventListener("click", closeOpenFunc);
  35. function closeOpenFunc() {
  36. if (status === 0) {
  37. altBox.style.display="block";
  38. status++
  39. }
  40. else {
  41. altBox.style.display="none";
  42. status--
  43. }
  44. }
  45.  
  46. var addBtn = document.getElementById("addAccount");
  47. addBtn.addEventListener("click", addAccount);
  48.  
  49. var accounts = [];
  50.  
  51. loadAccounts();
  52.  
  53. function addAccount() {
  54. var accountIndex = accounts.length;
  55. var accountline = createAccountLine(accountIndex, "", "", "");
  56. document.getElementById("accountBox").appendChild(accountline);
  57. accounts.push({ index: accountIndex, name: "", rec: "", speed: "" });
  58. saveAccounts();
  59. }
  60.  
  61. function createAccountLine(index, name, rec, speed) {
  62. var accountline = document.createElement("div");
  63. accountline.setAttribute('id', `acc${index}`);
  64. accountline.setAttribute('style', "display: flex; gap: 10px; padding: 5px;");
  65.  
  66. accountline.innerHTML = `
  67. <div id="acc${index}name" contenteditable="true" style="width: 200px; color: white; border: 1px solid white; padding: 5px; border-radius: 7px;" placeholder="name">${name}</div>
  68. <div id="acc${index}rec" contenteditable="true" style="width: 50px; color: white; border: 1px solid white; padding: 5px;border-radius: 7px;" placeholder="rec">${rec}</div>
  69. <div id="acc${index}speed" contenteditable="true" style="width: 50px; color: white; border: 1px solid white; padding: 5px;border-radius: 7px;" placeholder="speed">${speed}</div>
  70. `;
  71.  
  72. attachInputListeners(accountline, index);
  73.  
  74. var setRecNullBtn = document.createElement("button");
  75. setRecNullBtn.textContent = "0";
  76. setRecNullBtn.setAttribute('style', "width: 30px; background-color: #2e3034; border-radius: 7px;");
  77. setRecNullBtn.addEventListener('click', function() {
  78. setToNull(index, 'rec');
  79. });
  80.  
  81. var setSpeedNullBtn = document.createElement("button");
  82. setSpeedNullBtn.textContent = "0";
  83. setSpeedNullBtn.setAttribute('style', "width: 30px; background-color: #2e3034; border-radius: 7px;");
  84. setSpeedNullBtn.addEventListener('click', function() {
  85. setToNull(index, 'speed');
  86. });
  87.  
  88. var removeBtn = document.createElement("button");
  89. removeBtn.textContent = "-";
  90. removeBtn.setAttribute('style', "width: 30px; background-color: red;");
  91. removeBtn.addEventListener('click', function() {
  92. removeAccount(index);
  93. });
  94.  
  95. accountline.appendChild(setRecNullBtn);
  96. accountline.appendChild(setSpeedNullBtn);
  97. accountline.appendChild(removeBtn);
  98.  
  99. return accountline;
  100. }
  101.  
  102. function attachInputListeners(accountline, index) {
  103. const nameDiv = accountline.querySelector(`#acc${index}name`);
  104. const recDiv = accountline.querySelector(`#acc${index}rec`);
  105. const speedDiv = accountline.querySelector(`#acc${index}speed`);
  106.  
  107. nameDiv.addEventListener('input', function() {
  108. accounts[index].name = this.innerText;
  109. saveAccounts();
  110. });
  111.  
  112. recDiv.addEventListener('input', function() {
  113. accounts[index].rec = this.innerText;
  114. saveAccounts();
  115. });
  116.  
  117. speedDiv.addEventListener('input', function() {
  118. accounts[index].speed = this.innerText;
  119. saveAccounts();
  120. });
  121. }
  122.  
  123. function setToNull(id, field) {
  124. document.getElementById(`acc${id}${field}`).innerText = "0";
  125. accounts[id][field] = "0";
  126. saveAccounts();
  127. }
  128.  
  129. function removeAccount(accountIndex) {
  130. var accountToRemove = document.getElementById(`acc${accountIndex}`);
  131. if (accountToRemove) {
  132. accountToRemove.remove();
  133. }
  134.  
  135. accounts.splice(accountIndex, 1);
  136. updateAccounts();
  137. saveAccounts();
  138. }
  139.  
  140. function updateAccounts() {
  141. accounts.forEach((account, index) => {
  142. var accountDiv = document.getElementById(`acc${index}`);
  143. if (accountDiv) {
  144. accountDiv.setAttribute('id', `acc${index}`);
  145. var divs = accountDiv.querySelectorAll('div');
  146. divs[0].setAttribute('id', `acc${index}name`);
  147. divs[1].setAttribute('id', `acc${index}rec`);
  148. divs[2].setAttribute('id', `acc${index}speed`);
  149.  
  150. divs[0].innerText = account.name;
  151. divs[1].innerText = account.rec;
  152. divs[2].innerText = account.speed;
  153.  
  154. attachInputListeners(accountDiv, index);
  155. }
  156. });
  157. }
  158.  
  159. function saveAccounts() {
  160. localStorage.setItem('accounts', JSON.stringify(accounts));
  161. }
  162.  
  163. function loadAccounts() {
  164. var storedAccounts = localStorage.getItem('accounts');
  165. if (storedAccounts) {
  166. accounts = JSON.parse(storedAccounts);
  167. accounts.forEach(account => {
  168. var accountIndex = account.index;
  169. addAccountFromData(accountIndex, account.name, account.rec, account.speed);
  170. });
  171. }
  172. }
  173.  
  174. function addAccountFromData(index, name, rec, speed) {
  175. var accountline = createAccountLine(index, name, rec, speed);
  176. document.getElementById("accountBox").appendChild(accountline);
  177. }
  178. }
  179.  
  180. setTimeout(Accounts, 3000);
  181.  
  182. function infos() {
  183. var canvas = document.querySelector(".inner-overlays");
  184. var box = document.createElement("div");
  185. box.innerHTML = (`
  186. <div style="background-color: white; margin-top: 200px; position: absolute; z-index: +1; border-radius: 7px; margin-left: 5%; padding: 20px; width: 300px;">
  187. Info by qwd
  188. <div id="Levelq">Level: Loading</div>
  189. <div id="Progressq">XP Gained: Loading</div>
  190. <div id="coinsq">Coins: Loading</div>
  191. <div id="coinsgained">Coins gained: Loading</div>
  192. <div id="playedq">Played: Loading</div>
  193. </div>
  194. `);
  195. canvas.appendChild(box);
  196.  
  197. var level = document.getElementById("Levelq");
  198. var xpbarRaw = document.querySelector(".exp-bar").textContent;
  199. var xpbar = parseInt(xpbarRaw);
  200. var progress = document.getElementById("Progressq");
  201. var coins = document.getElementById("coinsq");
  202. var coinsgained = document.getElementById("coinsgained");
  203. var coinsStatusRawOld = document.getElementById("coinsDash").textContent;
  204. var coinsStatusOld = parseInt(coinsStatusRawOld);
  205. function update() {
  206. var lvl = document.getElementById("level").textContent;
  207. level.innerHTML = "Level: " + lvl;
  208.  
  209. var xpbarNewRaw = document.querySelector(".exp-bar").textContent;
  210. var xpbarNew = parseInt(xpbarNewRaw);
  211. var xpProgress = xpbarNew - xpbar;
  212. progress.innerHTML = "XP Gained: " + xpProgress + "%";
  213.  
  214. var coinsStatusRaw = document.getElementById("coinsDash").textContent;
  215. coins.innerHTML = "Coins: " + coinsStatusRaw;
  216.  
  217. var coinsStatus = parseInt(coinsStatusRaw);
  218. var coinsgainedValue = coinsStatus - coinsStatusOld;
  219. coinsgained.innerHTML = "Coins gained: " + coinsgainedValue;
  220. }
  221. setInterval(update, 2000)
  222.  
  223. let seconds = 0;
  224. var timer = document.getElementById("playedq");
  225.  
  226. function formatTimeUnit(unit) {
  227. return unit < 10 ? '0' + unit : unit;
  228. }
  229.  
  230. function updateTimer() {
  231. seconds++;
  232.  
  233. const days = Math.floor(seconds / (60 * 60 * 24));
  234. const hours = Math.floor((seconds % (60 * 60 * 24)) / (60 * 60));
  235. const minutes = Math.floor((seconds % (60 * 60)) / 60);
  236. const secs = seconds % 60;
  237.  
  238. let displayTime = '';
  239.  
  240. if (days > 0) {
  241. displayTime += formatTimeUnit(days) + ' d ';
  242. }
  243. if (hours > 0 || days > 0) {
  244. displayTime += formatTimeUnit(hours) + ' h ';
  245. }
  246. if (minutes > 0 || hours > 0 || days > 0) {
  247. displayTime += formatTimeUnit(minutes) + ' m ';
  248. }
  249.  
  250. displayTime += formatTimeUnit(secs) + ' s';
  251. timer.innerHTML = "Played: " + displayTime;
  252. }
  253.  
  254. setInterval(updateTimer, 1000);
  255. }
  256. setTimeout(infos, 3000);
  257.  
  258.  
  259.  
  260.