Zombs.io Bad Hack

The best public script for zombs.io

当前为 2022-04-09 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Zombs.io Bad Hack
  3. // @namespace https://tampermonkey.net/
  4. // @version 4.2
  5. // @description The best public script for zombs.io
  6. // @author vn_Havy
  7. // @match http://zombs.io/*
  8. // @require https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js
  9. // ==/UserScript==
  10.  
  11. document.querySelectorAll('.ad-unit, .ad-unit-medrec, .hud-intro-guide-hints, .hud-intro-left, .hud-intro-youtuber, .hud-intro-footer, .hud-intro-stone, .hud-intro-tree, .hud-intro-social, .hud-intro-more-games, .hud-intro-guide, .hud-day-night-overlay, .hud-respawn-share, .hud-party-joining, .hud-respawn-corner-bottom-left').forEach(el => el.remove());
  12. document.getElementsByClassName('hud-intro-name')[0].setAttribute('maxlength', 29);
  13. document.getElementsByClassName('hud-party-tag')[0].setAttribute('maxlength', 49);
  14.  
  15. document.getElementsByClassName("hud-top-center")[0].innerHTML = `
  16. <a id="shopshortcut1"><img src="http://zombs.io/asset/image/ui/inventory/inventory-pickaxe-t7.svg"></a>
  17. <a id="shopshortcut2"><img src="http://zombs.io/asset/image/ui/inventory/inventory-spear-t7.svg"></a>
  18. <a id="shopshortcut3"><img src="http://zombs.io/asset/image/ui/inventory/inventory-bow-t7.svg"></a>
  19. <a id="shopshortcut4"><img src="http://zombs.io/asset/image/ui/inventory/inventory-bomb-t7.svg"></a>
  20. <a id="shopshortcut5"><img src="http://zombs.io/asset/image/ui/inventory/inventory-health-potion.svg"></a>
  21. <a id="shopshortcut6"><img src="http://zombs.io/asset/image/ui/inventory/inventory-pet-health-potion.svg"></a>
  22. <a id="shopshortcut7"><img src="http://zombs.io/asset/image/ui/inventory/inventory-shield-t10.svg"></a>
  23. <a id="shopshortcut8"><img src="http://zombs.io/asset/image/ui/inventory/inventory-pet-ghost-t1.svg"></a>
  24. <a id="shopshortcut9"><img src="http://zombs.io/asset/image/ui/inventory/inventory-pet-miner-t8.svg"></a>
  25. <a id="shopshortcut10"><img src="http://zombs.io/asset/image/ui/inventory/inventory-pet-carl-t8.svg"></a>
  26. `;
  27.  
  28. document.getElementById('shopshortcut1').addEventListener('click', buyPickaxe);
  29. document.getElementById('shopshortcut2').addEventListener('click', buySpear);
  30. document.getElementById('shopshortcut3').addEventListener('click', buyBow);
  31. document.getElementById('shopshortcut4').addEventListener('click', buyBomb);
  32. document.getElementById('shopshortcut5').addEventListener('click', () => {shopShortcut("HealthPotion", 1)});
  33. document.getElementById('shopshortcut6').addEventListener('click', () => {shopShortcut("PetHealthPotion", 1)});
  34. document.getElementById('shopshortcut7').addEventListener('click', buyZombieShield);
  35. document.getElementById('shopshortcut8').addEventListener('click', () => {Game.currentGame.network.sendRpc({name: "DeleteBuilding", uid: game.ui.getPlayerPetUid()})});
  36. document.getElementById('shopshortcut9').addEventListener('click', () => {buyPet("PetMiner", getPetTier(6))});
  37. document.getElementById('shopshortcut10').addEventListener('click', () => {buyPet("PetCARL", getPetTier(5))});
  38.  
  39. function buyPet(item, tier) {
  40. if (game.ui.getPlayerPetName() == item) {
  41. shopShortcut("PetRevive", 1)
  42. } else {
  43. let i = 0
  44. let j = setInterval(function() {
  45. shopShortcut(item, tier)
  46. i++
  47. if (i >= 25 || game.ui.getPlayerPetName() == item) {
  48. i = 0
  49. clearInterval(j)
  50. }
  51. },250);
  52. }
  53. }
  54.  
  55. function getPetTier(num) {
  56. if (document.querySelectorAll(".hud-shop-item-tier")[5].childNodes[0].textContent.match(/\d+/) != null) {
  57. let petLevel = document.querySelectorAll(".hud-shop-item-tier")[num].childNodes[0].textContent.match(/\d+/)[0]
  58. if (petLevel <= 8) return 1
  59. if (petLevel <= 16) return 2
  60. if (petLevel <= 24) return 3
  61. if (petLevel <= 32) return 4
  62. if (petLevel <= 48) return 5
  63. if (petLevel <= 64) return 6
  64. if (petLevel <= 96) return 7
  65. if (petLevel > 96) return 8
  66. } else return 8
  67. }
  68.  
  69. function equipItem(item, tier) {
  70. game.network.sendRpc({
  71. name: "EquipItem",
  72. itemName: item,
  73. tier: tier
  74. })
  75. };
  76.  
  77. function buyItem(item, tier) {
  78. game.network.sendRpc({
  79. name: "BuyItem",
  80. itemName: item,
  81. tier: tier
  82. })
  83. }
  84.  
  85. function shopShortcut(item, tier) {
  86. buyItem(item, tier)
  87. if (game.ui.playerWeaponName !== item) {
  88. equipItem(item, tier)
  89. }
  90. }
  91.  
  92.  
  93.  
  94. function buyPickaxe() {
  95. let gold = game.ui.playerTick.gold
  96. let pickaxe = game.ui.inventory.Pickaxe
  97. if (pickaxe.tier == 1 && gold >= 1000) {
  98. shopShortcut("Pickaxe", 2)
  99. return
  100. }
  101. if (pickaxe.tier == 2 && gold >= 3000) {
  102. shopShortcut("Pickaxe", 3);
  103. return
  104. }
  105. if (pickaxe.tier == 3 && gold >= 5000) {
  106. shopShortcut("Pickaxe", 4);
  107. return
  108. }
  109. if (pickaxe.tier == 4 && gold >= 8000) {
  110. shopShortcut("Pickaxe", 5);
  111. return
  112. }
  113. if (pickaxe.tier == 5 && gold >= 24000) {
  114. shopShortcut("Pickaxe", 6);
  115. return
  116. }
  117. if (pickaxe.tier == 6 && gold >= 90000) {
  118. shopShortcut("Pickaxe", 7);
  119. return
  120. } else if (game.ui.playerWeaponName !== "Pickaxe") {
  121. equipItem("Pickaxe", game.ui.inventory.Pickaxe.tier)
  122. }
  123. }
  124.  
  125. function buySpear() {
  126. let gold = game.ui.playerTick.gold
  127. let spear = game.ui.inventory.Spear
  128. if (!spear && gold >= 1400) {
  129. shopShortcut("Spear", 1)
  130. return
  131. }
  132. if (spear.tier == 1 && gold >= 2800) {
  133. shopShortcut("Spear", 2)
  134. return
  135. }
  136. if (spear.tier == 2 && gold >= 5600) {
  137. shopShortcut("Spear", 3)
  138. return
  139. }
  140. if (spear.tier == 3 && gold >= 11200) {
  141. shopShortcut("Spear", 4)
  142. return
  143. }
  144. if (spear.tier == 4 && gold >= 22500) {
  145. shopShortcut("Spear", 5)
  146. return
  147. }
  148. if (spear.tier == 5 && gold >= 45000) {
  149. shopShortcut("Spear", 6)
  150. return
  151. }
  152. if (spear.tier == 6 && gold >= 90000) {
  153. shopShortcut("Spear", 7)
  154. return
  155. } else if (game.ui.playerWeaponName !== "Spear"){
  156. equipItem("Spear", game.ui.inventory.Spear.tier)
  157. }
  158. }
  159.  
  160. function buyBow() {
  161. let gold = game.ui.playerTick.gold
  162. let bow = game.ui.inventory.Bow
  163. if (!bow && gold >= 100) {
  164. shopShortcut("Bow", 1)
  165. return
  166. }
  167. if (bow.tier == 1 && gold >= 400) {
  168. shopShortcut("Bow", 2)
  169. return
  170. }
  171. if (bow.tier == 2 && gold >= 2000) {
  172. shopShortcut("Bow", 3)
  173. return
  174. }
  175. if (bow.tier == 3 && gold >= 7000) {
  176. shopShortcut("Bow", 4)
  177. return
  178. }
  179. if (bow.tier == 4 && gold >= 24000) {
  180. shopShortcut("Bow", 5)
  181. return
  182. }
  183. if (bow.tier == 5 && gold >= 30000) {
  184. shopShortcut("Bow", 6)
  185. return
  186. }
  187. if (bow.tier == 6 && gold >= 90000) {
  188. shopShortcut("Bow", 7)
  189. return
  190. } else if (game.ui.playerWeaponName !== "Bow"){
  191. equipItem("Bow", game.ui.inventory.Bow.tier)
  192. }
  193. }
  194.  
  195. function buyBomb() {
  196. let gold = game.ui.playerTick.gold
  197. let bomb = game.ui.inventory.Bomb
  198. if (!bomb && gold >= 100) {
  199. shopShortcut("Bomb", 1)
  200. return
  201. }
  202. if (bomb.tier == 1 && gold >= 400) {
  203. shopShortcut("Bomb", 2)
  204. return
  205. }
  206. if (bomb.tier == 2 && gold >= 3000) {
  207. shopShortcut("Bomb", 3)
  208. return
  209. }
  210. if (bomb.tier == 3 && gold >= 5000) {
  211. shopShortcut("Bomb", 4)
  212. return
  213. }
  214. if (bomb.tier == 4 && gold >= 24000) {
  215. shopShortcut("Bomb", 5)
  216. return
  217. }
  218. if (bomb.tier == 5 && gold >= 50000) {
  219. shopShortcut("Bomb", 6)
  220. return
  221. }
  222. if (bomb.tier == 6 && gold >= 90000) {
  223. shopShortcut("Bomb", 7)
  224. return
  225. } else if (game.ui.playerWeaponName !== "Bomb"){
  226. equipItem("Bomb", game.ui.inventory.Bomb.tier)
  227. }
  228. }
  229.  
  230. function buyZombieShield() {
  231. let gold = game.ui.playerTick.gold
  232. let shield = game.ui.inventory.ZombieShield
  233. if (!shield && gold >= 1000) {
  234. buyItem("ZombieShield", 1)
  235. return
  236. }
  237. if (shield.tier == 1 && gold >= 3000) {
  238. buyItem("ZombieShield", 2)
  239. return
  240. }
  241. if (shield.tier == 2 && gold >= 7000) {
  242. buyItem("ZombieShield", 3)
  243. return
  244. }
  245. if (shield.tier == 3 && gold >= 14000) {
  246. buyItem("ZombieShield", 4)
  247. return
  248. }
  249. if (shield.tier == 4 && gold >= 18000) {
  250. buyItem("ZombieShield", 5)
  251. return
  252. }
  253. if (shield.tier == 5 && gold >= 22000) {
  254. buyItem("ZombieShield", 6)
  255. return
  256. }
  257. if (shield.tier == 6 && gold >= 24000) {
  258. buyItem("ZombieShield", 7)
  259. return
  260. }
  261. if (shield.tier == 7 && gold >= 30000) {
  262. buyItem("ZombieShield", 8)
  263. return
  264. }
  265. if (shield.tier == 8 && gold >= 45000) {
  266. buyItem("ZombieShield", 9)
  267. return
  268. }
  269. if (shield.tier == 9 && gold >= 70000) {
  270. buyItem("ZombieShield", 10)
  271. return
  272. }
  273. }
  274.  
  275. //Iframe start
  276. document.querySelector('#hud').insertAdjacentHTML('beforeend', `
  277. <div class="hud-menu-more">
  278. <button class="bad-btn bad-cyan" id="newalt">New Alt</button>
  279. <button class="bad-btn bad-red" id="delalt">Delete Alt</button>
  280. <input class="bad-textbox" id="delid" style="width: 10%" placeholder="Alt's Id">
  281. <button class="bad-btn bad-red" id="delallalt">Delete All Alt</button>
  282. </div>
  283.  
  284. <style>
  285. .hud-menu-more{
  286. text-align: center;
  287. display: none;
  288. position: fixed;
  289. padding: 20px 0px;
  290. top: 48%;
  291. left: 50%;
  292. width: 1100px;
  293. height: 740px;
  294. transform: translate(-50%, -52%);
  295. background: rgba(0, 0, 0, 0.6);
  296. color: #eee;
  297. z-index: 5;
  298. }
  299. .frames{
  300. width: 100%;
  301. height: 100%;
  302. }
  303. .frameholder{
  304. width: 1060px;
  305. height: 680px;
  306. margin: auto;
  307. padding: 10px 0px;
  308. overFlow: hidden;
  309. }
  310. .hud-menu-icons .hud-menu-icon[data-type=Iframe]::before {
  311. background-image: url("https://media.discordapp.net/attachments/870020008128958525/876133010360107048/unknown.png");
  312. background-size: 30px;
  313. }
  314. </style>
  315. `)
  316. function moreMenu() {
  317. let mm = document.getElementsByClassName("hud-menu-more")[0];
  318. if(["none", ""].includes(mm.style.display)) {
  319. mm.style.display = "block";
  320. for(let i of Array.from(document.getElementsByClassName("hud-menu"))) {
  321. if(i.classList.contains('hud-menu-more')) { return; };
  322. i.style.display = "none";
  323. };
  324. } else {
  325. mm.style.display = "none";
  326. };
  327. };
  328.  
  329. document.getElementsByClassName("hud-menu-icons")[0].insertAdjacentHTML("beforeend", `<div class="hud-menu-icon" data-type="Iframe"></div>`);
  330. document.querySelectorAll(".hud-menu-icon")[3].addEventListener("click", moreMenu)
  331. document.getElementsByClassName("hud-menu-more")[0].style.overflow = "auto";
  332.  
  333. for (let i of Array.from(document.querySelector("#hud").childNodes)) {
  334. if (i.className != "hud-menu-more" && !document.querySelector("#hud-menu-icons > div:nth-child(4)")) {
  335. i.addEventListener('click', function() {
  336. if (document.getElementsByClassName("hud-menu-more")[0].style.display == "block") {
  337. document.getElementsByClassName("hud-menu-more")[0].style.display = "none";
  338. };
  339. });
  340. };
  341. };
  342.  
  343. for (let i of Array.from(document.getElementsByClassName("hud-menu-icon"))) {
  344. if (i.dataset.type !== "Iframe") {
  345. i.addEventListener('click', function() {
  346. if (document.getElementsByClassName("hud-menu-more")[0].style.display == "block") {
  347. document.getElementsByClassName("hud-menu-more")[0].style.display = "none";
  348. };
  349. });
  350. };
  351. };
  352. let numOfAlts = 0
  353. document.getElementById("newalt").addEventListener("click", function() {
  354. numOfAlts++;
  355. let newDiv = document.createElement('div');
  356. newDiv.className = "frameholder";
  357. newDiv.id = "frame" + numOfAlts;
  358. let newIframe = document.createElement('iFrame');
  359. newIframe.className = "frames";
  360. newIframe.src = `http://zombs.io/#/${game.options.serverId}/${game.ui.playerPartyShareKey}`;
  361.  
  362. document.getElementsByClassName("hud-menu-more")[0].insertBefore(newDiv, null);
  363. newDiv.appendChild(newIframe);
  364. });
  365.  
  366. document.getElementById("delallalt").addEventListener("click", function F_deleteAllAlt() {
  367. for (let i = 1; i <= numOfAlts; i++) {
  368. document.getElementById("frame" + i).remove();
  369. }
  370. numOfAlts = 0;
  371. });
  372.  
  373. document.getElementById("delalt").addEventListener("click", function F_deleteAlt() {
  374. let deletealtnum = parseInt(document.getElementById('delid').value);
  375. document.getElementById("frame" + deletealtnum).remove();
  376. for (let i = 1; i <= (numOfAlts - deletealtnum); i++) {
  377. document.getElementById("frame" + (deletealtnum + i)).id = "frame" + (deletealtnum + i - 1);
  378. }
  379. numOfAlts--;
  380. });
  381.  
  382.  
  383. //Iframe end
  384.  
  385. let mapTimeouts = [];
  386.  
  387. function createCoordinates() {
  388. let x = document.createElement('div')
  389. x.style = 'position: relative;top: 17px;right: 0px;font-weight: 600;font-family: "Hammersmith One";text-shadow: 1px 0 0 #fff, -1px 0 0 #fff, 0 1px 0 #fff, 0 -1px 0 #fff, 0.5px 0.5px #fff, -0.5px -0.5px 0 #fff, 0.5px -0.5px 0 #fff, -0.5px 0.5px 0 #fff;';
  390. x.innerHTML = `<p id="coords";">X: 0, Y: 0</p>`
  391. x.style.textAlign = "center"
  392. document.querySelector("#hud > div.hud-bottom-left").append(x)
  393. }
  394.  
  395. let mapMouseX;
  396. let mapMouseY;
  397. let hasBeenInWorld = false;
  398.  
  399. game.network.addEnterWorldHandler(function () {
  400. if(!hasBeenInWorld) {
  401. hasBeenInWorld = true
  402. setInterval(() => {
  403. document.querySelector("#coords")
  404. .innerText = `X: ${game.world.localPlayer.entity.targetTick.position.x}, Y: ${game.world.localPlayer.entity.targetTick.position.y}`
  405. }, 16)
  406. createCoordinates()
  407. }
  408. setTimeout(() => {
  409. document.querySelectorAll(".hud-shop-item-social")[0].childNodes[1].href = "javascript:void(0)"
  410. document.querySelectorAll(".hud-shop-item-social")[0].childNodes[1].removeAttribute('target')
  411. setTimeout(() => {
  412. document.querySelectorAll(".hud-shop-social-twitter.is-disabled")[0].click()
  413. },2000)
  414. }, 4000);
  415. })
  416.  
  417. var mousemove;
  418. addEventListener('mousemove', (e) => {
  419. mousemove = e;
  420. })
  421.  
  422. var isSpamming = 0;
  423.  
  424. function pauseChatSpam(e) {
  425. if (!isSpamming) {
  426. window.spammer = setInterval(() => {
  427. game.network.sendRpc({
  428. name: "SendChatMessage",
  429. channel: "Local",
  430. message: e
  431. })
  432. }, 100)
  433. } else if (isSpamming) {
  434. clearInterval(window.spammer)
  435. }
  436. isSpamming = !isSpamming
  437. }
  438.  
  439. var autoRespawn = false
  440.  
  441. game.network.addRpcHandler('ReceiveChatMessage', function(e) {
  442. if(e.uid == game.ui.playerTick.uid) {
  443. if(e.message == "!boss") {
  444. setTimeout(() => {
  445. game.network.sendRpc({
  446. name: "SendChatMessage",
  447. message: "9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97, 105, 121",
  448. channel: "Local"
  449. });
  450. }, 1000);
  451. };
  452. if(e.message == "!marker") {
  453. var map = document.getElementById("hud-map");
  454. map.insertAdjacentHTML("beforeend", `<div style="color: red; display: block; left: ${parseInt(game.ui.components.Map.playerElems[game.world.getMyUid()].marker.style.left)}%; top: ${parseInt(game.ui.components.Map.playerElems[game.world.getMyUid()].marker.style.top)}%; position: absolute;" class='hud-map-player'></div>`)
  455. game.ui.components.PopupOverlay.showHint(`Added Marker`);
  456. };
  457. };
  458. });
  459.  
  460. function getEntitiesByModel(type) {
  461. let entities = []
  462. Object.entries(game.world.entities)
  463. .forEach((item => {
  464. if (item[1].targetTick.model == type) {
  465. entities.push(item)
  466. }
  467. }))
  468. return entities;
  469. }
  470.  
  471. function moveUp() {
  472. game.inputPacketScheduler.scheduleInput({
  473. down: 0,
  474. up: 1
  475. })
  476. }
  477.  
  478. function moveDown() {
  479. game.inputPacketScheduler.scheduleInput({
  480. up: 0,
  481. down: 1
  482. })
  483. }
  484.  
  485. function moveLeft() {
  486. game.inputPacketScheduler.scheduleInput({
  487. right: 0,
  488. left: 1
  489. })
  490. }
  491.  
  492. function moveRight() {
  493. game.inputPacketScheduler.scheduleInput({
  494. left: 0,
  495. right: 1
  496. })
  497. }
  498. var danceCounter = 0
  499. var danceRandom = true
  500. var botMode = false
  501. var danceInterval = setInterval(() => {
  502. if (botMode) {
  503. if (danceCounter < moves.length) {
  504. moves[danceCounter]()
  505. if (danceRandom) {
  506. danceCounter = Math.floor(Math.random() * moves.length)
  507. } else {
  508. danceCounter++
  509. }
  510. } else {
  511. danceCounter = 0;
  512. }
  513. }
  514. }, 500)
  515. var respawnInterval = setInterval(() => {
  516. if (document.querySelector('.hud-respawn').style.display == "block" && autoRespawn) {
  517. document.querySelector('.hud-respawn-btn').click()
  518. }
  519. }, 50)
  520. var moves = [moveUp, moveRight, moveDown, moveLeft]
  521.  
  522. window.useSamePI = false
  523.  
  524. window.showpriv = true
  525. if (game.world.inWorld === false) {
  526. game.network.addPreEnterWorldHandler(() => {
  527. setInterval(() => {
  528. document.getElementsByClassName('hud-party-grid')[0].innerHTML = '';
  529.  
  530. function checkStatus(party) {
  531. if (window.showpriv == true) {
  532. if(party.isOpen == 1) {
  533. return '<a style = "color: #00e700;opacity: 0.8;">[Open]<a/>';
  534. } else if(!party.isOpen == 1) {
  535. return '<a style = "color:red;opacity: 0.8;">[Private]<a/>';
  536. }
  537. } else {
  538. return '';
  539. }
  540. };
  541.  
  542.  
  543. let all_parties = game.ui.parties;
  544.  
  545. for(let i in all_parties) {
  546. let parties = all_parties[i];
  547. let tab = document.createElement('div');
  548. tab.classList.add('hud-party-link');
  549. tab.classList.add('custom-party');
  550. tab.id = parties.partyId;
  551. tab.isPublic = parties.isOpen;
  552. tab.name = parties.partyName;
  553. tab.members = parties.memberCount;
  554. tab.innerHTML = `
  555. <strong>${parties.partyName} ${checkStatus(parties)}<strong/>
  556. <small>id: ${parties.partyId}</small> <span>${parties.memberCount}/4<span/>
  557. `;
  558.  
  559. if(parties.memberCount == 4) {
  560. tab.classList.add('is-disabled');
  561. } else {
  562. tab.style.display = 'block';
  563. }
  564. if(parties.partyName == document.getElementsByClassName('hud-party-tag')[0].value) {
  565. tab.classList.add('is-active');
  566. }
  567. if (parties.isOpen !== 1 && window.showpriv == false) {
  568. tab.style.display = 'none';
  569. }
  570. //function for requesting
  571. tab.addEventListener('click', function() {
  572. let isJoining = true;
  573. if(tab.isPublic == 1 && tab.members < 4) {
  574. isJoining = true;
  575. game.network.sendRpc({
  576. name: 'JoinParty',
  577. partyId: Math.floor(tab.id)
  578. });
  579. } else if(!tab.isPublic == 1) {
  580. isJoining = false;
  581. game.ui.components.PopupOverlay.showHint("You can't request private parties!");
  582. }
  583. });
  584. document.getElementsByClassName('hud-party-grid')[0].appendChild(tab);
  585. };
  586. },5000);
  587. });
  588. }
  589.  
  590. window.isInMenu = false;
  591.  
  592. function movePlayer(e) {
  593. if (!_isInChatbox) {
  594. switch (e.toLowerCase()
  595. .replaceAll(' ', '')) {
  596. case "a":
  597. Game.currentGame.network.sendInput({
  598. left: 1
  599. })
  600. break;
  601. case "d":
  602. Game.currentGame.network.sendInput({
  603. right: 1
  604. })
  605. break;
  606. case "w":
  607. Game.currentGame.network.sendInput({
  608. up: 1
  609. })
  610. break;
  611. case "s":
  612. Game.currentGame.network.sendInput({
  613. down: 1
  614. })
  615. break;
  616. }
  617. }
  618. }
  619.  
  620. var lpinterval = setInterval(function () { // loaded player info, ahrc, isInMenu, noob = chatbot
  621. document.querySelector('#lpi')
  622. .innerText = "Loaded Player Info: " + JSON.stringify(window.loadedIDS())
  623. window.isInMenu = document.querySelector('#hud-menu-settings')
  624. .style.display == "block" ? true : false
  625. }, 250)
  626.  
  627. let settingsHTML = `
  628. <div style="text-align: center">
  629. <button class="bad-btn bad-magenta" id="lagspam-btn">Lag Spam Off</button>
  630. <button class="bad-btn bad-magenta" id="spamchatbtn">Split Chat</button>
  631. <button class="bad-btn bad-magenta" id="togglespmch">Chat Spam Off</button>
  632. <input type="text" id="spamchat" placeholder="Message" class="bad-textbox" style="width: 40%">
  633. <hr>
  634. <input type="text" class="bad-textbox" value="150" id="sell-input" style="width: 15%" placeholder="100-250ms">
  635. <button id="sellall" class="bad-btn bad-red">Sell All</button>
  636. <button id="sellwall" class="bad-btn bad-red">Wall</button>
  637. <button id="selldoor" class="bad-btn bad-red">Door</button>
  638. <button id="selltrap" class="bad-btn bad-red">Slow Trap</button>
  639. <button id="sellharvester" class="bad-btn bad-red">Harvester</button>
  640. <br>
  641. <button id="sellarrow" class="bad-btn bad-red">Arrow</button>
  642. <button id="sellcannon" class="bad-btn bad-red">Cannon</button>
  643. <button id="sellmelee" class="bad-btn bad-red">Melee</button>
  644. <button id="sellbomb" class="bad-btn bad-red">Bomb</button>
  645. <button id="sellmagic" class="bad-btn bad-red">Mage</button>
  646. <button id="sellminer" class="bad-btn bad-red">Gold Miner</button>
  647. <hr>
  648. <button class="bad-btn bad-yellow" id="menu-leaveparty-btn">Leave Party</button>
  649. <button class="bad-btn bad-yellow" id="menu-jpbsk-btn" onclick='Game.currentGame.network.sendRpc({name:"JoinPartyByShareKey", partyShareKey: document.querySelector("#menu-jpbsk-input").value})'>Join Party</button>
  650. <input type="text" class="bad-textbox" id="menu-jpbsk-input" style="width: 40%" placeholder="Share Key">
  651. <button class="bad-btn bad-yellow" id="autoaccept-btn">Accepter Off</button>
  652. <br>
  653. <button class="bad-btn bad-yellow" id="spamallparty-btn">Spam All Party Off</button>
  654. <button class="bad-btn bad-yellow" id="spampartybyid-btn">Spam Party By ID Off</button>
  655. <input type="text" class="bad-textbox" id="party-id-input" style="width: 20%" placeholder="Party ID">
  656. <button class="bad-btn bad-yellow" id="newtab">New Party Tab</button>
  657. <hr>
  658. <button id="healplayer" class="bad-btn bad-green">Heal PLayer On</button>
  659. <input type="text" class="bad-textbox" value="20" id="healplayerinput" style="width: 8%">
  660. <button id="healpet" class="bad-btn bad-green">Heal Pet On</button>
  661. <input type="text" class="bad-textbox" value="30" id="healpetinput" style="width: 8%">
  662. <button id="revivepet" class="bad-btn bad-green">Revive On</button>
  663. <button id="evolvepet" class="bad-btn bad-green">Evolve On</button>
  664. <hr>
  665. <button class="bad-btn bad-blue" id="clearchat-btn">Clear Chat Off</button>
  666. <button class="bad-btn bad-blue" id="autoupgradeall-btn">Upgrade Off</button>
  667. <button class="bad-btn bad-blue" id="togglespinner">Spinner Off</button>
  668. <button class="bad-btn bad-blue" id="toggleaim">Aim Off</button>
  669. <select id="aimOptions" class="bad-textbox"><option value="pl" selected>Players</option><option value="zo">Zombies</option></select>
  670. <br>
  671. <button class="bad-btn bad-blue" id="toggleahrc">AHRC Off</button>
  672. <button class="bad-btn bad-blue" id="toggleresp">Respawn Off</button>
  673. <button class="bad-btn bad-blue" id="togglebot">Bot Off</button>
  674. <button class="bad-btn bad-blue" id="toggleswing">Swing Off</button>
  675. <button class="bad-btn bad-blue" id="togglerb">Rebuild Off</button>
  676. <hr>
  677. <button id="hidechat" class="bad-btn bad-pink">Hide Chat</button>
  678. <button id="hidepop" class="bad-btn bad-pink">Hide Popup</button>
  679. <button id="hideldb" class="bad-btn bad-pink">Hide Leaderboard</button>
  680. <button id="hidemap" class="bad-btn bad-pink">Hide Map</button>
  681. <button id="hidess" class="bad-btn bad-pink">Hide Shop Shortcut</button>
  682. <hr>
  683. <button id="hideground" class="bad-btn bad-cyan">Hide Ground</button>
  684. <button id="hidenpcs" class="bad-btn bad-cyan">Hide NPCs</button>
  685. <button id="hideenv" class="bad-btn bad-cyan">Hide Env</button>
  686. <button id="hideproj" class="bad-btn bad-cyan">Hide Proj</button>
  687. <button id="hideall" class="bad-btn bad-cyan">Hide All</button>
  688. <button id="freezegame" class="bad-btn bad-cyan">Stop Game</button>
  689. <hr>
  690. <button class="bad-btn bad-gray" onclick="Game.currentGame.network.disconnect()">Disconnect</button>
  691. </div>
  692. <hr>
  693. <p style="font-size:14px;">Advanced Player Info?</p><input type="checkbox" id="advancedlpi">
  694. <br>
  695. <p style="font-size:14px;">Zoom On Scroll?</p><input type="checkbox" id="zos">
  696. <br>
  697. <p id="lpi">Loaded Player Info: </p>
  698. <style>
  699. .bad-btn{
  700. border: none;
  701. color: white;
  702. padding: 10px 20px;
  703. text-align: center;
  704. font-size: 14px;
  705. margin: 2px 0px;
  706. opacity: 0.9;
  707. transition: 0.2s;
  708. display: inline-block;
  709. border-radius: 15px;
  710. cursor: pointer;
  711. text-shadow: -1px 1px 1.5px #242526;
  712. }
  713. .bad-btn:hover{
  714. opacity: 1
  715. }
  716. .bad-blue{
  717. background-color: #5463FF
  718. }
  719. .bad-magenta{
  720. background-color: #E900FF
  721. }
  722. .bad-gray{
  723. background-color: #606060
  724. }
  725. .bad-yellow{
  726. background-color: #FFC600
  727. }
  728. .bad-red{
  729. background-color: #FF1818
  730. }
  731. .bad-green{
  732. background-color: #06FF00
  733. }
  734. .bad-pink{
  735. background-color: #FF6B6B
  736. }
  737. .bad-cyan{
  738. background-color: #39AEA9
  739. }
  740. .bad-textbox{
  741. border: none;
  742. color: white;
  743. padding: 10px 10px;
  744. text-align: center;
  745. font-size: 14px;
  746. margin: 2px 0px;
  747. opacity: 0.9;
  748. transition: 0.2s;
  749. display: inline-block;
  750. border-radius: 15px;
  751. background-color: #606060;
  752. text-shadow: -1px 1px 1.5px #242526;
  753. }
  754.  
  755. </style>
  756. `
  757. document.getElementById("hud-menu-settings").childNodes[3].innerHTML = "Bad Hack by ︵ℌαʋү༉"
  758. document.getElementsByClassName("hud-settings-grid")[0].innerHTML = settingsHTML;
  759.  
  760. let cssMain = `
  761. #hud-menu-shop {
  762. top: 58%;
  763. left: 51%;
  764. width: 690px;
  765. height: 450px;
  766. margin: -350px 0 0 -350px;
  767. padding: 20px 20px 20px 20px;
  768. }
  769. .hud-menu-shop .hud-shop-grid {
  770. height: 330px;
  771. }
  772. #hud-menu-settings {
  773. top: 55%;
  774. left: 48%;
  775. width: 780px;
  776. height: 500px;
  777. margin: -350px 0 0 -350px;
  778. padding: 20px 20px 20px 20px;
  779. }
  780. .hud-menu-settings .hud-settings-grid {
  781. width: 750px;
  782. height: 420px;
  783.  
  784. `;
  785.  
  786. let stylesMain = document.createElement("style");
  787. stylesMain.appendChild(document.createTextNode(cssMain));
  788. document.head.appendChild(stylesMain);
  789. stylesMain.type = "text/css";
  790.  
  791. document.getElementById('lagspam-btn').addEventListener('click', lagSpam)
  792. document.getElementById('lagspam-btn').addEventListener('click', lagSpambtn)
  793. document.getElementById("spamallparty-btn").addEventListener("click", spamAllParty);
  794. document.getElementById("spamallparty-btn").addEventListener("click", spamAllPartybtn);
  795. document.getElementById("newtab").addEventListener("click", () => window.open(`http://zombs.io/#/${game.options.serverId}/${game.ui.getPlayerPartyShareKey()}`));
  796. document.getElementById("autoupgradeall-btn").addEventListener("click", autoUpgradeAll);
  797. document.getElementById("autoupgradeall-btn").addEventListener("click", autoUpgradeAllbtn);
  798. document.getElementById("spampartybyid-btn").addEventListener("click", spamPartyByID);
  799. document.getElementById("spampartybyid-btn").addEventListener("click", spamPartyByIDbtn);
  800. document.getElementById("autoaccept-btn").addEventListener("click", autoAcceptParty);
  801. document.getElementById("autoaccept-btn").addEventListener("click", autoAcceptPartybtn);
  802. document.getElementById("toggleswing").addEventListener("click", toggleSwing)
  803. document.getElementById("toggleahrc").addEventListener("click", toggleAHRC)
  804. document.getElementById("toggleaim").addEventListener("click", toggleAim)
  805. document.getElementById("togglerb").addEventListener("click", toggleRebuild);
  806. document.getElementById("togglespinner").addEventListener("click", spinnerbtn);
  807. document.getElementById("togglespinner").addEventListener("click", F_spinner);
  808. document.getElementById("healplayer").addEventListener("click", toggleHealPlayer);
  809. document.getElementById("healpet").addEventListener("click", toggleHealPet);
  810. document.getElementById("revivepet").addEventListener("click", toggleRevivePet);
  811. document.getElementById("evolvepet").addEventListener("click", toggleEvolvePet);
  812. document.getElementById("sellwall").addEventListener('click', () => { sellAllByType("Wall") });
  813. document.getElementById("selldoor").addEventListener('click', () => { sellAllByType("Door") });
  814. document.getElementById("selltrap").addEventListener('click', () => { sellAllByType("SlowTrap") });
  815. document.getElementById("sellarrow").addEventListener('click', () => { sellAllByType("ArrowTower") });
  816. document.getElementById("sellcannon").addEventListener('click', () => { sellAllByType("CannonTower") });
  817. document.getElementById("sellmelee").addEventListener('click', () => { sellAllByType("MeleeTower") });
  818. document.getElementById("sellbomb").addEventListener('click', () => { sellAllByType("BombTower") });
  819. document.getElementById("sellmagic").addEventListener('click', () => { sellAllByType("MagicTower") });
  820. document.getElementById("sellminer").addEventListener('click', () => { sellAllByType("GoldMine") });
  821. document.getElementById("sellharvester").addEventListener('click', () => { sellAllByType("Harvester") });
  822. document.getElementById("hidechat").addEventListener("click", hideChat);
  823. document.getElementById("hidepop").addEventListener("click", hidePopupOverlay);
  824. document.getElementById("hideldb").addEventListener("click", hideLeaderboard);
  825. document.getElementById("hidemap").addEventListener("click", hideMap);
  826. document.getElementById("hidess").addEventListener("click", hideShopShortcut);
  827. document.getElementById("hideground").addEventListener("click", hideGround);
  828. document.getElementById("hidenpcs").addEventListener("click", hideNPCs);
  829. document.getElementById("hideenv").addEventListener("click", hideEnviroment);
  830. document.getElementById("hideproj").addEventListener("click", hideProjectiles);
  831. document.getElementById("hideall").addEventListener("click", hideAll);
  832. document.getElementById("freezegame").addEventListener("click", freezeGame);
  833.  
  834. document.querySelector('#clearchat-btn').addEventListener('click', clearChat)
  835. document.querySelector('#clearchat-btn').addEventListener('click', clearChatbtn)
  836. document.querySelector('#menu-leaveparty-btn').addEventListener('click', onLeaveParty)
  837. document.querySelector('#spamchatbtn').addEventListener('click', spamchatclick)
  838.  
  839. function hideGround() {
  840. if (document.getElementById("hideground").innerHTML == "Show Ground") {
  841. document.getElementById("hideground").innerHTML = "Hide Ground"
  842. game.renderer.ground.setVisible(true)
  843. } else {
  844. document.getElementById("hideground").innerHTML = "Show Ground"
  845. game.renderer.ground.setVisible(false)
  846. }
  847. }
  848. function hideNPCs() {
  849. if (document.getElementById("hidenpcs").innerHTML == "Show NPCs") {
  850. document.getElementById("hidenpcs").innerHTML = "Hide NPCs"
  851. game.renderer.npcs.setVisible(true)
  852. } else {
  853. document.getElementById("hidenpcs").innerHTML = "Show NPCs"
  854. game.renderer.npcs.setVisible(false)
  855. }
  856. }
  857. function hideEnviroment() {
  858. if (document.getElementById("hideenv").innerHTML == "Show Env") {
  859. document.getElementById("hideenv").innerHTML = "Hide Env"
  860. game.renderer.scenery.setVisible(true)
  861. } else {
  862. document.getElementById("hideenv").innerHTML = "Show Env"
  863. game.renderer.scenery.setVisible(false)
  864. }
  865. }
  866. function hideProjectiles() {
  867. if (document.getElementById("hideproj").innerHTML == "Show Proj") {
  868. document.getElementById("hideproj").innerHTML = "Hide Proj"
  869. game.renderer.projectiles.setVisible(true)
  870. } else {
  871. document.getElementById("hideproj").innerHTML = "Show Proj"
  872. game.renderer.projectiles.setVisible(false)
  873. }
  874. }
  875. function hideAll() {
  876. if (document.getElementById("hideall").innerHTML == "Show All") {
  877. document.getElementById("hideall").innerHTML = "Hide All"
  878. game.renderer.scene.setVisible(true)
  879. } else {
  880. document.getElementById("hideall").innerHTML = "Show All"
  881. game.renderer.scene.setVisible(false)
  882. }
  883. }
  884. function freezeGame() {
  885. if (document.getElementById("freezegame").innerHTML == "Start Game") {
  886. document.getElementById("freezegame").innerHTML = "Stop Game"
  887. game.start()
  888. } else {
  889. document.getElementById("freezegame").innerHTML = "Start Game"
  890. game.stop()
  891. }
  892. }
  893.  
  894. let sellUid = []
  895. function sellAllByType(type) {
  896. let buildings = Object.values(game.ui.buildings)
  897. for (let i = 0; i < buildings.length; i++){
  898. if (Object.values(Object.values(game.ui.buildings)[i])[2] == type){
  899. sellUid.push(Object.values(Object.values(game.ui.buildings)[i])[4])
  900. }
  901. }
  902. let sellInterval = setInterval(() => {
  903. if (sellUid.length > 0 && game.ui.playerPartyCanSell) {
  904. game.network.sendRpc({
  905. name: "DeleteBuilding",
  906. uid: parseInt(sellUid.shift())
  907. })
  908. } else {
  909. clearInterval(sellInterval)
  910. }
  911. },document.getElementById("sell-input").value);
  912. }
  913.  
  914. document.getElementById("sellall").addEventListener('click', function() {
  915. Game.currentGame.ui.getComponent("PopupOverlay").showConfirmation("Are you sure you want to delete all towers?", 1e4, function() {
  916. let buildings = Object.values(game.ui.buildings)
  917. for (let i = 0; i < buildings.length; i++){
  918. if (Object.values(Object.values(game.ui.buildings)[i])[2] != "GoldStash"){
  919. sellUid.push(Object.values(Object.values(game.ui.buildings)[i])[4])
  920. }
  921. }
  922. let sellInterval = setInterval(() => {
  923. if (sellUid.length > 0 && game.ui.playerPartyCanSell) {
  924. game.network.sendRpc({
  925. name: "DeleteBuilding",
  926. uid: parseInt(sellUid.shift())
  927. })
  928. } else {
  929. clearInterval(sellInterval)
  930. }
  931. },document.getElementById("sell-input").value);
  932. })
  933. })
  934.  
  935.  
  936. function onLeaveParty() {
  937. Game.currentGame.network.sendRpc({
  938. name: "LeaveParty"
  939. })
  940. }
  941.  
  942. function hideChat() {
  943. if (document.getElementsByClassName("hud-top-left")[0].style.display === "none" && document.getElementById("hidechat").innerHTML == "Show Chat"){
  944. document.getElementsByClassName("hud-top-left")[0].style.display = "block";
  945. document.getElementById("hidechat").innerHTML = "Hide Chat";
  946. } else {
  947. document.getElementsByClassName("hud-top-left")[0].style.display = "none";
  948. document.getElementById("hidechat").innerHTML = "Show Chat";
  949. }
  950. }
  951. function hidePopupOverlay() {
  952. if (document.getElementById("hud-popup-overlay").style.display === "none" && document.getElementById("hidepop").innerHTML == "Show Popup") {
  953. document.getElementById("hud-popup-overlay").style.display = "block";
  954. document.getElementById("hidepop").innerHTML = "Hide Popup";
  955. } else {
  956. document.getElementById("hud-popup-overlay").style.display = "none";
  957. document.getElementById("hidepop").innerHTML = "Show Popup";
  958. }
  959. }
  960. function hideLeaderboard() {
  961. if (document.getElementById("hud-leaderboard").style.display === "none" && document.getElementById("hideldb").innerHTML == "Show Leaderboard") {
  962. document.getElementById("hud-leaderboard").style.display = "block";
  963. document.getElementById("hideldb").innerHTML = "Hide Leaderboard";
  964. } else {
  965. document.getElementById("hud-leaderboard").style.display = "none";
  966. document.getElementById("hideldb").innerHTML = "Show Leaderboard";
  967. }
  968. }
  969. function hideMap() {
  970. if (document.getElementsByClassName("hud-bottom-left")[0].style.display === "none" && document.getElementById("hidemap").innerHTML == "Show Map") {
  971. document.getElementsByClassName("hud-bottom-left")[0].style.display = "block";
  972. document.getElementById("hidemap").innerHTML = "Hide Map";
  973. } else {
  974. document.getElementsByClassName("hud-bottom-left")[0].style.display = "none";
  975. document.getElementById("hidemap").innerHTML = "Show Map";
  976. }
  977. }
  978. function hideShopShortcut() {
  979. if (document.getElementsByClassName("hud-top-center")[0].style.display === "none" && document.getElementById("hidess").innerHTML == "Show Shop Shortcut"){
  980. document.getElementsByClassName("hud-top-center")[0].style.display = "block";
  981. document.getElementById("hidess").innerHTML = "Hide Shop Shortcut";
  982. } else {
  983. document.getElementsByClassName("hud-top-center")[0].style.display = "none";
  984. document.getElementById("hidess").innerHTML = "Show Shop Shortcut";
  985. }
  986. }
  987.  
  988. function lagSpambtn() {
  989. if (document.getElementById("lagspam-btn").innerHTML == "Lag Spam On") {
  990. document.getElementById("lagspam-btn").innerHTML = "Lag Spam Off";
  991. } else {
  992. document.getElementById("lagspam-btn").innerHTML = "Lag Spam On";
  993. }
  994. }
  995. let availableCharacters = ""
  996. let textLength = 70;
  997. fetch('https://raw.githubusercontent.com/bits/UTF-8-Unicode-Test-Documents/master/UTF-8_sequence_unseparated/utf8_sequence_0-0xffff_assigned_printable_unseparated.txt')
  998. .then(response => response.text())
  999. .then(data => {
  1000. availableCharacters = data;
  1001. });
  1002.  
  1003. var chatSpam = null;
  1004. function lagSpam() {
  1005. clearInterval(chatSpam);
  1006. if (chatSpam !== null) {
  1007. chatSpam = null;
  1008. } else {
  1009. chatSpam = setInterval(function() {
  1010. let text = ""
  1011. for (let i = 0; i < textLength; i++) text += availableCharacters[Math.floor(Math.random() * availableCharacters.length)];
  1012. game.network.sendRpc({
  1013. name: "SendChatMessage",
  1014. channel: "Local",
  1015. message: text
  1016. });
  1017. },1050);
  1018. };
  1019. };
  1020.  
  1021. function spamAllPartybtn() {
  1022. if (document.getElementById("spamallparty-btn").innerHTML == "Spam All Party On") {
  1023. document.getElementById("spamallparty-btn").innerHTML = "Spam All Party Off";
  1024. } else {
  1025. document.getElementById("spamallparty-btn").innerHTML = "Spam All Party On";
  1026. }
  1027. }
  1028. var partyspam = null;
  1029. function spamAllParty() {
  1030. clearInterval(partyspam);
  1031. if (partyspam !== null) {
  1032. partyspam = null;
  1033. } else {
  1034. partyspam = setInterval(function() {
  1035. var party = document.getElementsByClassName('hud-party-link');
  1036. for (var i = 0; i < party.length; i++) {
  1037. var link = party[i];
  1038. link.click();
  1039. }
  1040. var confirm = document.getElementsByClassName("btn btn-green hud-confirmation-accept");
  1041. for (var j = 0; j < confirm.length; j++) {
  1042. var accept = confirm[j];
  1043. accept.click();
  1044. }
  1045. },10);
  1046. }
  1047. }
  1048.  
  1049. function autoAcceptPartybtn() {
  1050. if (document.getElementById("autoaccept-btn").innerHTML == "Accepter On") {
  1051. document.getElementById("autoaccept-btn").innerHTML = "Accepter Off";
  1052. } else {
  1053. document.getElementById("autoaccept-btn").innerHTML = "Accepter On";
  1054. }
  1055. }
  1056. var acceptparty = null;
  1057. function autoAcceptParty() {
  1058. clearInterval(acceptparty);
  1059. if (acceptparty !== null) {
  1060. acceptparty = null;
  1061. } else {
  1062. acceptparty = setInterval(function() {
  1063. var confirm = document.getElementsByClassName("btn btn-green hud-confirmation-accept");
  1064. for (var j = 0; j < confirm.length; j++) {
  1065. confirm[j].click();
  1066. }
  1067. },10);
  1068. }
  1069. }
  1070.  
  1071. function autoUpgradeAllbtn() {
  1072. if (document.getElementById("autoupgradeall-btn").innerHTML == "Upgrade On") {
  1073. document.getElementById("autoupgradeall-btn").innerHTML = "Upgrade Off";
  1074. } else {
  1075. document.getElementById("autoupgradeall-btn").innerHTML = "Upgrade On";
  1076. }
  1077. }
  1078. var autoupgradeall = null;
  1079. function autoUpgradeAll() {
  1080. clearInterval(autoupgradeall);
  1081. if (autoupgradeall !== null) {
  1082. autoupgradeall = null;
  1083. } else {
  1084. autoupgradeall = setInterval(function() {
  1085. var entities = Game.currentGame.world.entities;
  1086. for (var uid in entities) {
  1087. if (!entities.hasOwnProperty(uid)) continue;
  1088. var obj = entities[uid];
  1089. Game.currentGame.network.sendRpc({
  1090. name: "UpgradeBuilding",
  1091. uid: obj.fromTick.uid
  1092. })
  1093. }
  1094. },1000)
  1095. }
  1096. }
  1097.  
  1098. function spamPartyByIDbtn() {
  1099. if (document.getElementById("spampartybyid-btn").innerHTML == "Spam Party By ID On") {
  1100. document.getElementById("spampartybyid-btn").innerHTML = "Spam Party By ID Off";
  1101. } else {
  1102. document.getElementById("spampartybyid-btn").innerHTML = "Spam Party By ID On";
  1103. }
  1104. }
  1105. var spampartyid = null;
  1106. function spamPartyByID() {
  1107. clearInterval(spampartyid);
  1108. if (spampartyid !== null) {
  1109. spampartyid = null;
  1110. } else {
  1111. spampartyid = setInterval(function() {
  1112. game.network.sendRpc({
  1113. name: "JoinParty",
  1114. partyId: parseInt(document.querySelector("#party-id-input").value)
  1115. })
  1116. },0)
  1117. }
  1118. }
  1119.  
  1120. function clearChatbtn() {
  1121. if (document.getElementById("clearchat-btn").innerHTML == "Clear Chat On") {
  1122. document.getElementById("clearchat-btn").innerHTML = "Clear Chat Off";
  1123. } else {
  1124. document.getElementById("clearchat-btn").innerHTML = "Clear Chat On";
  1125. }
  1126. }
  1127. var shouldClearChat = null;
  1128. function clearChat() {
  1129. clearInterval(shouldClearChat);
  1130. if (shouldClearChat !== null) {
  1131. shouldClearChat = null;
  1132. } else {
  1133. shouldClearChat = setInterval(function () {
  1134. document.querySelector('.hud-chat-messages').innerHTML = ""
  1135. },500)
  1136. }
  1137. }
  1138.  
  1139. function spinnerbtn() {
  1140. if (document.getElementById("togglespinner").innerHTML == "Spinner On") {
  1141. document.getElementById("togglespinner").innerHTML = "Spinner Off";
  1142. } else {
  1143. document.getElementById("togglespinner").innerHTML = "Spinner On";
  1144. }
  1145. }
  1146. var spinner = null;
  1147. function F_spinner() {
  1148. clearInterval(spinner);
  1149. if (spinner !== null) {
  1150. spinner = null;
  1151. } else {
  1152. let yaw = 0
  1153. spinner = setInterval(function () {
  1154. game.inputPacketCreator.lastAnyYaw = yaw;
  1155. game.network.sendPacket(3, {mouseMoved: yaw});
  1156. yaw += 60
  1157. if (yaw >= 359) yaw = 0
  1158. },40)
  1159. }
  1160. }
  1161.  
  1162. function toggleRebuild() {
  1163. if (!shouldAutoRebuild) {
  1164. shouldAutoRebuild = true
  1165. document.getElementById("togglerb").innerHTML = "Rebuild On";
  1166. } else {
  1167. shouldAutoRebuild = false
  1168. document.getElementById("togglerb").innerHTML = "Rebuild Off";
  1169. }
  1170. }
  1171.  
  1172. function toggleSwing () {
  1173. if (!autoSwing) {
  1174. autoSwing = true;
  1175. document.getElementById("toggleswing").innerHTML = "Swing On";
  1176. } else {
  1177. autoSwing = false;
  1178. document.getElementById("toggleswing").innerHTML = "Swing Off";
  1179. }
  1180. }
  1181. function toggleAHRC () {
  1182. if (!shouldAHRC) {
  1183. shouldAHRC = true;
  1184. document.getElementById("toggleahrc").innerHTML = "AHRC On";
  1185. } else {
  1186. shouldAHRC = false;
  1187. document.getElementById("toggleahrc").innerHTML = "AHRC Off";
  1188. }
  1189. }
  1190. function toggleAim () {
  1191. if (!shouldAutoAim) {
  1192. shouldAutoAim = true;
  1193. document.getElementById("toggleaim").innerHTML = "Aim On";
  1194. } else {
  1195. shouldAutoAim = false;
  1196. document.getElementById("toggleaim").innerHTML = "Aim Off";
  1197. }
  1198. }
  1199. function toggleHealPet () {
  1200. if (!shouldAutoHealPet) {
  1201. shouldAutoHealPet = true;
  1202. document.getElementById("healpet").innerHTML = "Heal Pet On";
  1203. } else {
  1204. shouldAutoHealPet = false;
  1205. document.getElementById("healpet").innerHTML = "Heal Pet Off";
  1206. }
  1207. }
  1208. function toggleRevivePet () {
  1209. if (!shouldAutoRevivePet) {
  1210. shouldAutoRevivePet = true
  1211. document.getElementById("revivepet").innerHTML = "Revive On";
  1212. } else {
  1213. shouldAutoRevivePet = false
  1214. document.getElementById("revivepet").innerHTML = "Revive Off";
  1215. }
  1216. }
  1217. function toggleEvolvePet () {
  1218. if (!shouldAutoEvolvePet) {
  1219. shouldAutoEvolvePet = true
  1220. document.getElementById("evolvepet").innerHTML = "Evolve On";
  1221. } else {
  1222. shouldAutoEvolvePet = false
  1223. document.getElementById("evolvepet").innerHTML = "Evolve Off";
  1224. }
  1225. }
  1226. function toggleHealPlayer () {
  1227. if (!shouldAutoHealPlayer) {
  1228. shouldAutoHealPlayer = true
  1229. document.getElementById("healplayer").innerHTML = "Heal Player On"
  1230. } else {
  1231. shouldAutoHealPlayer = false
  1232. document.getElementById("healplayer").innerHTML = "Heal Player Off"
  1233. }
  1234. }
  1235. let lockedYaw
  1236. let shouldLockYaw = false
  1237. let shouldAutoRebuild = false
  1238. let autoSwing = false
  1239. let shouldAHRC = false
  1240. let shouldAutoAim = false
  1241. let shouldAutoHealPet = true
  1242. let shouldAutoRevivePet = true
  1243. let shouldAutoEvolvePet = true
  1244. let shouldAutoHealPlayer = true
  1245. let petSpawned = false
  1246. let myPet = {};
  1247. let myPlayer = {};
  1248. game.network.addEntityUpdateHandler((data) => {
  1249. if (game.world.inWorld) {
  1250. if (game.ui.playerTick.petUid !== 0) {
  1251. petSpawned = true;
  1252. if (game.world.entities[game.ui.playerTick.petUid]) {
  1253. let petHealth = (myPet.health/myPet.maxHealth) * 100
  1254. myPet = game.world.entities[game.ui.playerTick.petUid].fromTick;
  1255. if (shouldAutoHealPet && petHealth < document.getElementById("healpetinput").value && petHealth > 0 && game.ui.playerTick.gold >= 100 && shouldAutoHealPet) {
  1256. if (!window.healPet) {
  1257. shopShortcut("PetHealthPotion", 1)
  1258. window.healPet = true;
  1259. setTimeout(() => {
  1260. window.healPet = false;
  1261. }, 300);
  1262. }
  1263.  
  1264. }
  1265. if (shouldAutoEvolvePet && petHealth > 0 && game.world.entities[game.ui.playerTick.uid].fromTick.health > 0) {
  1266. let model = game.world.entities[game.ui.playerTick.petUid].fromTick.model
  1267. let tokens = document.querySelectorAll(".hud-shop-item-tokens")
  1268. let pToken = game.ui.playerTick.token
  1269. let evolvebtn = document.querySelectorAll(".hud-shop-actions-evolve")
  1270. if (!evolvebtn[0].classList[1] && pToken >= tokens[0].innerHTML && model == "PetCARL") {
  1271. buyItem("PetCARL", getPetTier(5))
  1272. }
  1273. if (!evolvebtn[1].classList[1] && pToken >= tokens[1].innerHTML && model == "PetMiner") {
  1274. buyItem("PetMiner", getPetTier(6))
  1275. }
  1276. }
  1277. }
  1278. }
  1279. if (petSpawned && shouldAutoRevivePet && !game.world.entities[game.ui.playerTick.petUid] && myPlayer.health > 0) {
  1280. shopShortcut("PetRevive", 1)
  1281. }
  1282. myPlayer = game.world.entities[game.ui.playerTick.uid].fromTick
  1283. let playerHealth = (myPlayer.health/myPlayer.maxHealth) * 100;
  1284. if (playerHealth <= document.getElementById("healplayerinput").value && playerHealth > 0 && game.ui.playerTick.gold >= 100 && shouldAutoHealPlayer) {
  1285. if (!window.playerTimeout_1) {
  1286. shopShortcut("HealthPotion", 1)
  1287. window.playerTimeout_1 = true;
  1288. setTimeout(() => {
  1289. window.playerTimeout_1 = false;
  1290. }, 300)
  1291. }
  1292. }
  1293. if (shouldAHRC) {
  1294. let entities = Game.currentGame.world.entities;
  1295. for (let uid in entities) {
  1296. let obj = entities[uid];
  1297. if (obj.fromTick.model == "Harvester") {
  1298. let amount = obj.fromTick.tier * 0.05 - 0.02;
  1299. game.network.sendRpc({name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: amount});
  1300. game.network.sendRpc({name: "CollectHarvester", uid: obj.fromTick.uid});
  1301. };
  1302. };
  1303. };
  1304. if (shouldAutoAim) {
  1305. window.targets = [];
  1306. let entities = game.renderer.npcs.attachments;
  1307.  
  1308. for (let i in entities) {
  1309. if (document.getElementById('aimOptions').value == 'pl' ?
  1310. (entities[i].fromTick.model == "GamePlayer" && entities[i].fromTick.uid !== game.ui.playerTick.uid && entities[i].targetTick.partyId !== game.ui.playerPartyId && entities[i].fromTick.dead == 0) :
  1311. (entities[i].fromTick.model !== "GamePlayer" && entities[i].entityClass !== "Projectile" && entities[i].fromTick.model !== "NeutralTier1")) {
  1312. window.targets.push(entities[i].fromTick);
  1313. };
  1314. };
  1315. if (window.targets.length > 0) {
  1316. const myPos = game.ui.playerTick.position;
  1317. window.targets.sort((a, b) => {
  1318. return measureDistance(myPos, a.position) - measureDistance(myPos, b.position);
  1319. });
  1320.  
  1321. const target = window.targets[0];
  1322. let reversedAim = game.inputPacketCreator.screenToYaw((target.position.x - myPos.x) * 100, (target.position.y - myPos.y) * 100);
  1323. game.inputPacketCreator.lastAnyYaw = reversedAim;
  1324. game.network.sendPacket(3, {mouseMoved: reversedAim});
  1325. }
  1326. };
  1327. if (autoSwing) {
  1328. game.network.sendInput({space: 0})
  1329. game.network.sendInput({space: 1})
  1330. }
  1331. if (shouldLockYaw && game.ui.playerTick.aimingYaw != lockedYaw) {
  1332. game.inputPacketCreator.lastAnyYaw = lockedYaw;
  1333. game.network.sendPacket(3, {mouseMoved: lockedYaw});
  1334. }
  1335. }
  1336. })
  1337.  
  1338. game.network.addRpcHandler("LocalBuilding", (data) => {
  1339. if (shouldAutoRebuild) {
  1340. for(let e of data) {
  1341. if(!!e.dead) {
  1342. let snb = e;
  1343. snb.name = "MakeBuilding";
  1344. snb.yaw = 0;
  1345. game.network.sendRpc(snb);
  1346. };
  1347. };
  1348. };
  1349. });
  1350.  
  1351. function loadedPlayers() { // loaded player names
  1352. var returns = []
  1353. Object.entries(Game.currentGame.world.entities)
  1354. .forEach((stuff => {
  1355. if (stuff[1].targetTick.entityClass == "PlayerEntity" && ((stuff[1].targetTick.uid !== Game.currentGame.world.entities[Game.currentGame.world.getMyUid()].targetTick.uid) || window.useSamePI)) {
  1356. returns.push(stuff[1].targetTick.name)
  1357. }
  1358. }))
  1359. return returns;
  1360. }
  1361. window.loadedIDS = function () {
  1362. var returns = []
  1363. Object.entries(Game.currentGame.world.entities)
  1364. .forEach((stuff => {
  1365. if (stuff[1].targetTick.entityClass == "PlayerEntity" && ((stuff[1].targetTick.uid !== Game.currentGame.world.entities[Game.currentGame.world.getMyUid()].targetTick.uid) || window.useSamePI)) {
  1366. var h = stuff[1].targetTick
  1367. if (document.querySelector('#advancedlpi')
  1368. .checked) {
  1369. returns.push(JSON.stringify(h))
  1370. } else {
  1371. returns.push(stuff[1].targetTick.name + " - Wood: " + Game.currentGame.world.entities[stuff[1].targetTick.uid].targetTick.wood +
  1372. ", Stone: " + Game.currentGame.world.entities[stuff[1].targetTick.uid].targetTick.stone + ", Gold: " + Game.currentGame
  1373. .world.entities[stuff[1].targetTick.uid].targetTick.gold)
  1374. }
  1375. }
  1376. }))
  1377. return returns;
  1378. }
  1379.  
  1380. function spamchatclick() { // used to be called spam chat, its split chat now
  1381. var user = document.querySelector('#spamchat')
  1382. .value
  1383. splitChatLength(user)
  1384. }
  1385.  
  1386. let dimension = 1;
  1387. const onWindowResize = () => {
  1388. if (!window.isInMenu && window.zoomonscroll) {
  1389. const renderer = Game.currentGame.renderer;
  1390. let canvasWidth = window.innerWidth * window.devicePixelRatio;
  1391. let canvasHeight = window.innerHeight * window.devicePixelRatio;
  1392. let ratio = canvasHeight / (1080 * dimension);
  1393. renderer.scale = ratio;
  1394. renderer.entities.setScale(ratio);
  1395. renderer.ui.setScale(ratio);
  1396. renderer.renderer.resize(canvasWidth, canvasHeight);
  1397. renderer.viewport.width = renderer.renderer.width / renderer.scale + 2 * renderer.viewportPadding;
  1398. renderer.viewport.height = renderer.renderer.height / renderer.scale + 2 * renderer.viewportPadding;
  1399. }
  1400. } // Zoom by Apex, modified by eh
  1401. onWindowResize();
  1402. var transparentMenu = false;
  1403. window.onresize = onWindowResize;
  1404. window.onwheel = e => {
  1405. if (e.deltaY > 0) {
  1406. dimension += 0.09;
  1407. onWindowResize();
  1408. } else if (e.deltaY < 0) {
  1409. dimension -= 0.09;
  1410. onWindowResize();
  1411. }
  1412. }
  1413. var _isInChatbox = false;
  1414.  
  1415. function doNewSend(sender) {
  1416. if (sender[0] == "ch") {
  1417. Game.currentGame.network.sendRpc({
  1418. name: "SendChatMessage",
  1419. channel: "Local",
  1420. message: sender[1][0]
  1421. })
  1422. }
  1423. }
  1424.  
  1425. function measureDistance(obj1, obj2) {
  1426. if (!(obj1.x && obj1.y && obj2.x && obj2.y)) return Infinity;
  1427. let xDif = obj2.x - obj1.x;
  1428. let yDif = obj2.y - obj1.y;
  1429. return Math.abs((xDif**2) + (yDif**2));
  1430. };
  1431.  
  1432. function splitChatLength(text) {
  1433. let i = 0;
  1434. window.chatSetInterval = setInterval(function () {
  1435. if (i < text.length) {
  1436. doNewSend(['ch', [text.slice(i, i + 45)]])
  1437. i += 45;
  1438. } else {
  1439. clearInterval(window.chatSetInterval)
  1440. }
  1441. }, 1050)
  1442. }
  1443. addEventListener('keydown', function (e) {
  1444. if(document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") {
  1445. if (e.key == "=") {
  1446. game.ui.getComponent("PopupOverlay").showHint(
  1447. 'Press [/] for menu, left click somewhere on the minimap to automatically move there, press [?] to lock angle, type !boss for boss wave, !marker to leave a mark on map.',
  1448. 1.5e4
  1449. )
  1450. }
  1451. if (e.key == "/") {
  1452. document.querySelector("#hud-menu-settings")
  1453. .style.display = document.querySelector("#hud-menu-settings")
  1454. .style.display == "none" ? "block" : "none"
  1455. document.querySelector("#hud-menu-shop")
  1456. .style.display = "none"
  1457. document.querySelector("#hud-menu-party")
  1458. .style.display = "none"
  1459. }
  1460. if (e.key == "`") {
  1461. game.inputManager.onKeyRelease({
  1462. keyCode: 117
  1463. })
  1464. }
  1465. if (e.keyCode == 27) {
  1466. let mb = document.getElementsByClassName("hud")[0];
  1467. if (mb.style.display === "none") {
  1468. mb.style.display = "block";
  1469. } else {
  1470. mb.style.display = "none";
  1471. };
  1472. }
  1473. if (e.key == "?"){
  1474. if (!shouldLockYaw) {
  1475. lockedYaw = game.ui.playerTick.aimingYaw
  1476. shouldLockYaw = true
  1477. game.ui.getComponent("PopupOverlay").showHint('Yaw locked, press [?] to unlock',1.5e4)
  1478. } else {
  1479. shouldLockYaw = false
  1480. game.ui.getComponent("PopupOverlay").showHint('Yaw unlocked',1.5e4)
  1481. }
  1482. }
  1483. }
  1484. })
  1485.  
  1486. document.querySelector('#advancedlpi')
  1487. .addEventListener('change', function (e) {
  1488. var THIS_LPI_EVENT = this;
  1489. })
  1490. document.querySelector('#zos')
  1491. .addEventListener('change', function (e) {
  1492. var THIS_ZOS_EVENT = this;
  1493. window.zoomonscroll = THIS_ZOS_EVENT.checked
  1494. })
  1495.  
  1496. document.querySelector('#togglebot')
  1497. .addEventListener('click', function () {
  1498. botMode = !botMode
  1499. this.innerText = botMode ? "Bot On" : "Bot Off"
  1500. })
  1501. document.querySelector('#toggleresp')
  1502. .addEventListener('click', function () {
  1503. autoRespawn = !autoRespawn
  1504. this.innerText = autoRespawn ? "Respawn On" : "Respawn Off"
  1505. })
  1506. document.querySelector('#togglespmch')
  1507. .addEventListener('click', function () {
  1508. pauseChatSpam(document.querySelector('#spamchat').value)
  1509. this.innerText = isSpamming ? "Spam Chat On" : "Spam Chat Off"
  1510. })
  1511.  
  1512. function moveNext(targetX, targetY) {
  1513. let player = game.world.localPlayer.entity.targetTick.position
  1514. if (player.x <= targetX && player.y <= targetY) {
  1515. game.network.sendInput({
  1516. right: 1,
  1517. left: 0,
  1518. up: 0,
  1519. down: 1
  1520. })
  1521. } else if (player.x >= targetX && player.y <= targetY) {
  1522. game.network.sendInput({
  1523. right: 0,
  1524. left: 1,
  1525. up: 0,
  1526. down: 1
  1527. })
  1528. } else if (player.x <= targetX && player.y >= targetY) {
  1529. game.network.sendInput({
  1530. right: 1,
  1531. left: 0,
  1532. up: 1,
  1533. down: 0
  1534. })
  1535. } else if (player.x >= targetX && player.y >= targetY) {
  1536. game.network.sendInput({
  1537. right: 0,
  1538. left: 1,
  1539. up: 1,
  1540. down: 0
  1541. })
  1542. }
  1543. }
  1544.  
  1545. function isXYCloseTo(x, y) {
  1546. let playerTargetTick = game.world.localPlayer.entity.targetTick.position;
  1547. const radius = 50;
  1548. return ((x <= (playerTargetTick.x + radius) && x >= (playerTargetTick.x - radius)) && (y <= (playerTargetTick.y + radius) && y >= (playerTargetTick.y - radius)));
  1549. }
  1550.  
  1551. let moveIsActive = false;
  1552.  
  1553. function goToPos(x, y) {
  1554. moveIsActive = true;
  1555. window.goToPosInterval = setInterval(() => {
  1556. moveNext(x, y)
  1557. }, 250)
  1558. window.checkPosInterval = setInterval(() => {
  1559. if (moveIsActive) {
  1560. if (isXYCloseTo(x, y)) {
  1561. game.network.sendInput({
  1562. left: 0,
  1563. right: 0,
  1564. up: 0,
  1565. down: 0
  1566. })
  1567. game.ui.getComponent('PopupOverlay')
  1568. .showHint('Finished moving!', 1e4)
  1569. moveIsActive = false;
  1570. mapTimeouts.forEach((item => { clearTimeout(item) }))
  1571. clearInterval(window.goToPosInterval)
  1572. clearInterval(window.checkPosInterval)
  1573. }
  1574. } else {
  1575. game.network.sendInput({
  1576. left: 0,
  1577. right: 0,
  1578. up: 0,
  1579. down: 0
  1580. })
  1581. doNewSend(['ch', ['MapMover: Unexpectedly shut down']])
  1582. mapTimeouts.forEach((item => { clearTimeout(item) }))
  1583. game.ui.getComponent('PopupOverlay')
  1584. .showHint('MapMover unexpectedly stopped', 1e4)
  1585. clearInterval(window.checkPosInterval)
  1586. }
  1587. }, 10)
  1588. let g = setTimeout(() => {
  1589. clearInterval(window.goToPosInterval)
  1590. game.ui.getComponent('PopupOverlay')
  1591. .showHint('It has been 4 minutes to move to the position on the map, so it has automatically stopped to prevent infinite loops.', 1e4)
  1592. moveIsActive = false;
  1593. game.network.sendInput({
  1594. left: 0,
  1595. right: 0,
  1596. up: 0,
  1597. down: 0
  1598. })
  1599. }, 240000)
  1600. mapTimeouts.push(g)
  1601. }
  1602. let mapContainer = document.createElement('div')
  1603.  
  1604. mapContainer.id = "hud-map-container"
  1605. document.querySelector('.hud-bottom-left')
  1606. .append(mapContainer)
  1607. $('#hud-map')
  1608. .appendTo(document.querySelector('#hud-map-container'))
  1609. document.querySelector("#hud-map-container")
  1610. .addEventListener('mousemove', function (e) {
  1611. var offset = $('#hud-map-container')
  1612. .offset();
  1613. // Then refer to
  1614. mapMouseX = e.pageX - offset.left;
  1615. mapMouseY = e.pageY - offset.top;
  1616. })
  1617.  
  1618. document.querySelector("#hud-map-container")
  1619. .addEventListener('click', function (e) {
  1620. if (!moveIsActive) {
  1621. mapTimeouts.forEach((item => { clearTimeout(item) }))
  1622. let yn = "y"
  1623. game.ui.getComponent('PopupOverlay').showConfirmation('Are you sure you want to move to X:' + (mapMouseX * 170.4390625) + ",Y:" + (mapMouseY * 171.9977142857143) + '? You can right click the minimap to cancel this at any time.', 5e3, function() {
  1624. if (yn.toLowerCase() == "y") {
  1625. game.ui.getComponent('PopupOverlay').showHint('Starting MapMove...', 3e3)
  1626. let moveToMapX = (mapMouseX * 170.4390625)
  1627. let moveToMapY = (mapMouseY * 171.9977142857143)
  1628. goToPos(moveToMapX, moveToMapY)
  1629. }
  1630. }, function() {
  1631. game.ui.getComponent('PopupOverlay').showHint('OK, did not start MapMove', 3e3)
  1632. })
  1633. } else {
  1634. moveIsActive = false;
  1635. clearInterval(window.goToPosInterval)
  1636. clearInterval(window.checkPosInterval)
  1637. game.network.sendInput({
  1638. left: 0,
  1639. right: 0,
  1640. up: 0,
  1641. down: 0
  1642. })
  1643. mapTimeouts.forEach((item => { clearTimeout(item) }))
  1644. game.ui.getComponent('PopupOverlay').showHint('MapMove is already in process. Restarting and moving to X:' + (mapMouseX * 170.4390625) + ",Y:" + (mapMouseY * 171.9977142857143) + '. You can right click the minimap to cancel this at any time.', 5e3)
  1645. let yn = "y"
  1646. if (yn.toLowerCase() == "y") {
  1647. let moveToMapX = (mapMouseX * 170.4390625)
  1648. let moveToMapY = (mapMouseY * 171.9977142857143)
  1649. goToPos(moveToMapX, moveToMapY)
  1650. }
  1651. }
  1652. })
  1653.  
  1654. document.querySelector('#hud-map-container').addEventListener('contextmenu', function(ev) {
  1655. ev.preventDefault();
  1656. if(moveIsActive) {
  1657. game.ui.getComponent('PopupOverlay').showConfirmation('Are you sure you want to cancel the current MapMove process?', 5e3, function() {
  1658. moveIsActive = false;
  1659. clearInterval(window.goToPosInterval)
  1660. clearInterval(window.checkPosInterval)
  1661. game.network.sendInput({
  1662. left: 0,
  1663. right: 0,
  1664. up: 0,
  1665. down: 0
  1666. })
  1667. game.ui.getComponent('PopupOverlay').showHint('Successfully stopped MapMover.', 3e3)
  1668. mapTimeouts.forEach((item => { clearTimeout(item) }))
  1669. }, function() {
  1670. game.ui.getComponent('PopupOverlay').showHint('OK, did not stop MapMover.', 3e3)
  1671. })
  1672. } else {
  1673. game.ui.getComponent('PopupOverlay').showHint('You are not in a MapMover process right now. Left click somewhere on the minimap to start one.')
  1674. }
  1675. return false;
  1676. }, false);
  1677.  
  1678. !game.world.removeEntity2 && (game.world.removeEntity2 = game.world.removeEntity);
  1679. game.world.removeEntity = (uid) => {
  1680. if (game.world.entities[uid].fromTick.model == "Tree" || game.world.entities[uid].fromTick.model == "Stone" || game.world.entities[uid].fromTick.model == "NeutralCamp") return;
  1681. game.world.removeEntity2(uid);
  1682. }