AntiMooAddict

like moomoo.i ?

  1. // ==UserScript==
  2. // @name AntiMooAddict
  3. // @description like moomoo.i ?
  4. // @version Alpha
  5. // @author cah blX
  6. // @match *://sploop.io/*
  7. // @run-at document-start
  8. // @require http://code.jquery.com/jquery-3.3.1.min.js
  9. // @require https://code.jquery.com/ui/1.12.0/jquery-ui.min.js
  10. // @grant none
  11. // @namespace https://greasyfork.org/users/1456327
  12. // ==/UserScript==
  13.  
  14. /*
  15. Author: cah blX
  16. Discord: cahblx.rsc
  17. Description: my bundle.js
  18. Version: Alpha
  19. */
  20.  
  21. window.layerData = {};
  22. window.hatsData = {};
  23. window.itemData = {};
  24. window.AntiMooAddict = {};
  25.  
  26. Function("(" + ((GM_info) => {
  27. "use strict";
  28. var __webpack_modules__ = {
  29. 147: module => {
  30. module.exports = {
  31. i8: "1.0.21"
  32. };
  33. }
  34. };
  35. var __webpack_module_cache__ = {};
  36.  
  37. function __webpack_require__(moduleId) {
  38. var cachedModule = __webpack_module_cache__[moduleId];
  39. if (cachedModule !== undefined) {
  40. return cachedModule.exports;
  41. }
  42. var module = __webpack_module_cache__[moduleId] = {
  43. exports: {}
  44. };
  45. __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
  46. return module.exports;
  47. }
  48. (() => {
  49. __webpack_require__.d = (exports, definition) => {
  50. for (var key in definition) {
  51. if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
  52. Object.defineProperty(exports, key, {
  53. enumerable: true,
  54. get: definition[key]
  55. });
  56. }
  57. }
  58. };
  59. })();
  60. (() => {
  61. __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
  62. })();
  63. var __webpack_exports__ = {};
  64. (() => {
  65. __webpack_require__.d(__webpack_exports__, {
  66. sv: () => AntiMooAddict,
  67. lZ: () => pingCount,
  68. });
  69. var ELayer;
  70. (function(ELayer) {
  71. ELayer[ELayer.PLAYER = 0] = "PLAYER";
  72. ELayer[ELayer.STONE = 1] = "STONE";
  73. ELayer[ELayer.HARDSPIKE = 2] = "HARDSPIKE";
  74. ELayer[ELayer.TREE = 3] = "TREE";
  75. ELayer[ELayer.GOLD = 4] = "GOLD";
  76. ELayer[ELayer.BUSH = 5] = "BUSH";
  77. ELayer[ELayer.TRAP = 6] = "TRAP";
  78. ELayer[ELayer.SPIKE = 7] = "SPIKE";
  79. ELayer[ELayer.WOODWALL = 8] = "WOODWALL";
  80. ELayer[ELayer.PLATFORM = 9] = "PLATFORM";
  81. ELayer[ELayer.BOOST = 10] = "BOOST";
  82. ELayer[ELayer.LOOTBOX = 11] = "LOOTBOX";
  83. ELayer[ELayer.PROJECTILE = 12] = "PROJECTILE";
  84. ELayer[ELayer.WINDMILL = 13] = "WINDMILL";
  85. ELayer[ELayer.COW = 14] = "COW";
  86. ELayer[ELayer.SPAWN = 15] = "SPAWN";
  87. ELayer[ELayer.POWERMILL = 16] = "POWERMILL";
  88. ELayer[ELayer.CASTLESPIKE = 17] = "CASTLESPIKE";
  89. ELayer[ELayer.TURRET = 18] = "TURRET";
  90. ELayer[ELayer.WOODFARM = 19] = "WOODFARM";
  91. ELayer[ELayer.CHERRYWOODFARM = 20] = "CHERRYWOODFARM";
  92. ELayer[ELayer.STONEWARM = 21] = "STONEWARM";
  93. ELayer[ELayer.CASTLEWALL = 22] = "CASTLEWALL";
  94. ELayer[ELayer.SHARK = 23] = "SHARK";
  95. ELayer[ELayer.WOLF = 24] = "WOLF";
  96. ELayer[ELayer.GOLDENCOW = 25] = "GOLDENCOW";
  97. ELayer[ELayer.ROOF = 26] = "ROOF";
  98. ELayer[ELayer.DRAGON = 27] = "DRAGON";
  99. ELayer[ELayer.MAMMOTH = 28] = "MAMMOTH";
  100. ELayer[ELayer.FIREBALL = 29] = "FIREBALL";
  101. ELayer[ELayer.CHEST = 30] = "CHEST";
  102. ELayer[ELayer.DRAGONWALLBIG = 31] = "DRAGONWALLBIG";
  103. ELayer[ELayer.DRAGONWALLMEDIUM = 32] = "DRAGONWALLMEDIUM";
  104. ELayer[ELayer.DRAGONWALLSMALL = 33] = "DRAGONWALLSMALL";
  105. ELayer[ELayer.MAMMOTHWALL = 34] = "MAMMOTHWALL";
  106. ELayer[ELayer.MAMMOTHWALLSMALL = 35] = "MAMMOTHWALLSMALL";
  107. ELayer[ELayer.DUCK = 36] = "DUCK";
  108. ELayer[ELayer.TELEPORT = 37] = "TELEPORT";
  109. ELayer[ELayer.CACTUS = 38] = "CACTUS";
  110. ELayer[ELayer.TORNADO = 39] = "TORNADO";
  111. ELayer[ELayer.RUBY = 40] = "RUBY";
  112. })(ELayer || (ELayer = {}));
  113.  
  114. const LayerDataArray = [{
  115. id: ELayer.PLAYER,
  116. radius: 35,
  117. maxHealth: 100,
  118. Qa: 1
  119. }, {
  120. id: ELayer.STONE,
  121. shoot: true,
  122. radius: 75,
  123. Qa: 1,
  124. Pa: 1,
  125. pe: "rock"
  126. }, {
  127. id: ELayer.HARDSPIKE,
  128. shoot: true,
  129. qa: 35,
  130. radius: 45,
  131. maxHealth: 500,
  132. Qa: 1
  133. }, {
  134. id: ELayer.TREE,
  135. shoot: true,
  136. cannotShoot: true,
  137. radius: 90,
  138. Qa: 1,
  139. Ka: 1,
  140. pe: "tree"
  141. }, {
  142. id: ELayer.GOLD,
  143. shoot: true,
  144. radius: 76,
  145. Qa: 1,
  146. Xa: 5,
  147. pe: "gold"
  148. }, {
  149. id: ELayer.BUSH,
  150. shoot: true,
  151. radius: 50,
  152. Qa: 1,
  153. Na: 1,
  154. pe: "bush"
  155. }, {
  156. id: ELayer.TRAP,
  157. radius: 40,
  158. maxHealth: 500,
  159. Qa: 1
  160. }, {
  161. id: ELayer.SPIKE,
  162. shoot: true,
  163. qa: 20,
  164. radius: 45,
  165. maxHealth: 375,
  166. Ia: 20,
  167. Qa: 1
  168. }, {
  169. id: ELayer.WOODWALL,
  170. shoot: true,
  171. radius: 45,
  172. maxHealth: 380,
  173. Qa: 1
  174. }, {
  175. id: ELayer.PLATFORM,
  176. radius: 60,
  177. maxHealth: 300,
  178. Qa: 1
  179. }, {
  180. id: ELayer.BOOST,
  181. radius: 40,
  182. maxHealth: 300,
  183. Qa: 1
  184. }, {
  185. id: ELayer.LOOTBOX,
  186. radius: 40,
  187. maxHealth: 4,
  188. Qa: 1
  189. }, {
  190. id: ELayer.PROJECTILE,
  191. radius: 0,
  192. maxHealth: 0
  193. }, {
  194. id: ELayer.WINDMILL,
  195. shoot: true,
  196. radius: 45,
  197. maxHealth: 400,
  198. rotateSpeed: Math.PI / 4,
  199. Qa: 1
  200. }, {
  201. id: ELayer.COW,
  202. radius: 90,
  203. maxHealth: 380,
  204. animal: true,
  205. Qa: 1,
  206. Ja: 1.6,
  207. $a: 9,
  208. ts: 0
  209. }, {
  210. id: ELayer.SPAWN,
  211. shoot: true,
  212. radius: 50,
  213. maxHealth: 380,
  214. Qa: 1
  215. }, {
  216. id: ELayer.POWERMILL,
  217. shoot: true,
  218. radius: 54,
  219. maxHealth: 400,
  220. rotateSpeed: Math.PI / 2,
  221. Qa: 1
  222. }, {
  223. id: ELayer.CASTLESPIKE,
  224. shoot: true,
  225. qa: 5,
  226. radius: 42,
  227. maxHealth: 1200,
  228. Ia: 24,
  229. Qa: 1
  230. }, {
  231. id: ELayer.TURRET,
  232. shoot: true,
  233. radius: 45,
  234. maxHealth: 800,
  235. Qa: 1
  236. }, {
  237. id: ELayer.WOODFARM,
  238. shoot: true,
  239. cannotShoot: true,
  240. radius: 80,
  241. Qa: 1,
  242. Ka: 1,
  243. pe: "tree"
  244. }, {
  245. id: ELayer.CHERRYWOODFARM,
  246. shoot: true,
  247. cannotShoot: true,
  248. radius: 80,
  249. Qa: 1,
  250. Ka: 1,
  251. pe: "cherry_tree"
  252. }, {
  253. id: ELayer.STONEWARM,
  254. shoot: true,
  255. radius: 60,
  256. Qa: 1,
  257. Pa: 1,
  258. pe: "rock"
  259. }, {
  260. id: ELayer.CASTLEWALL,
  261. shoot: true,
  262. radius: 59,
  263. maxHealth: 1750,
  264. Qa: 1
  265. }, {
  266. id: ELayer.SHARK,
  267. radius: 90,
  268. maxHealth: 380,
  269. animal: true,
  270. Qa: 1,
  271. Ja: 1.2,
  272. $a: 49,
  273. qa: 14,
  274. ts: 3
  275. }, {
  276. id: ELayer.WOLF,
  277. radius: 50,
  278. maxHealth: 380,
  279. animal: true,
  280. Qa: 1,
  281. Ja: 1.6,
  282. $a: 17,
  283. qa: 14,
  284. ts: 0
  285. }, {
  286. id: ELayer.GOLDENCOW,
  287. radius: 90,
  288. maxHealth: 1e3,
  289. animal: true,
  290. Qa: 1,
  291. Ja: 1.6,
  292. $a: 17,
  293. qa: 19
  294. }, {
  295. id: ELayer.ROOF,
  296. radius: 50,
  297. maxHealth: 300,
  298. Qa: 1
  299. }, {
  300. id: ELayer.DRAGON,
  301. radius: 100,
  302. maxHealth: 5e3,
  303. animal: true,
  304. Qa: 1,
  305. Ja: 1.15,
  306. $a: 17,
  307. qa: 30,
  308. ts: 0
  309. }, {
  310. id: ELayer.MAMMOTH,
  311. radius: 90,
  312. maxHealth: 5e3,
  313. animal: true,
  314. Qa: 1,
  315. Ja: 1.6,
  316. $a: 17,
  317. qa: 30,
  318. ts: 1
  319. }, {
  320. id: ELayer.FIREBALL,
  321. radius: 100,
  322. maxHealth: 380,
  323. Qa: 1,
  324. Ja: .4,
  325. $a: 1,
  326. qa: 15,
  327. ts: 0
  328. }, {
  329. id: ELayer.CHEST,
  330. shoot: true,
  331. radius: 45,
  332. maxHealth: 380,
  333. Qa: 1,
  334. Xa: 50,
  335. Lr: 20
  336. }, {
  337. id: ELayer.DRAGONWALLBIG,
  338. shoot: true,
  339. radius: 92,
  340. Qa: 1,
  341. Pa: 1
  342. }, {
  343. id: ELayer.DRAGONWALLMEDIUM,
  344. shoot: true,
  345. radius: 92,
  346. Qa: 1,
  347. Pa: 1
  348. }, {
  349. id: ELayer.DRAGONWALLSMALL,
  350. shoot: true,
  351. radius: 58,
  352. Qa: 1,
  353. Pa: 1
  354. }, {
  355. id: ELayer.MAMMOTHWALL,
  356. shoot: true,
  357. radius: 92,
  358. Qa: 1,
  359. Pa: 0
  360. }, {
  361. id: ELayer.MAMMOTHWALLSMALL,
  362. shoot: true,
  363. radius: 20,
  364. Qa: 1,
  365. Pa: 0
  366. }, {
  367. id: ELayer.DUCK,
  368. radius: 20,
  369. maxHealth: 380,
  370. animal: true,
  371. Qa: 1,
  372. Ja: 1.6,
  373. $a: 9,
  374. ts: 0
  375. }, {
  376. id: ELayer.TELEPORT,
  377. shoot: true,
  378. radius: 35,
  379. maxHealth: 150,
  380. Qa: 1
  381. }, {
  382. id: ELayer.CACTUS,
  383. shoot: true,
  384. radius: 50,
  385. Qa: 1,
  386. Na: 5,
  387. qa: 20
  388. }, {
  389. id: ELayer.TORNADO,
  390. radius: 220,
  391. rotateSpeed: Math.PI / 4,
  392. Qa: 0,
  393. Na: 5,
  394. qa: 1
  395. }, {
  396. id: ELayer.RUBY,
  397. shoot: true,
  398. radius: 76,
  399. Qa: 1,
  400. Xa: 40,
  401. pe: "ruby"
  402. }];
  403. var Hat;
  404. (function(Hat) {
  405. Hat[Hat.UNEQUIP = 0] = "UNEQUIP";
  406. Hat[Hat.BUSH = 1] = "BUSH";
  407. Hat[Hat.BERSERKER = 2] = "BERSERKER";
  408. Hat[Hat.JUNGLE = 3] = "JUNGLE";
  409. Hat[Hat.CRYSTAL = 4] = "CRYSTAL";
  410. Hat[Hat.SPIKEGEAR = 5] = "SPIKEGEAR";
  411. Hat[Hat.IMMUNITY = 6] = "IMMUNITY";
  412. Hat[Hat.BOOST = 7] = "BOOST";
  413. Hat[Hat.APPLEHAT = 8] = "APPLEHAT";
  414. Hat[Hat.SCUBA = 9] = "SCUBA";
  415. Hat[Hat.HOOD = 10] = "HOOD";
  416. Hat[Hat.DEMOLIST = 11] = "DEMOLIST";
  417. })(Hat || (Hat = {}));
  418.  
  419. const Hats = [ {
  420. bought: true,
  421. equipped: true,
  422. default: true,
  423. price: 0
  424. }, {
  425. image: 109,
  426. price: 250,
  427. axisY: 0,
  428. description: "Become a bush",
  429. name: "Bush Hat",
  430. bought: false,
  431. equipped: false,
  432. rs: true
  433. }, {
  434. image: 41,
  435. price: 5e3,
  436. description: "Increased melee damage",
  437. axisY: 10,
  438. cs: 1.25,
  439. speed: .85,
  440. name: "Berserker Gear",
  441. bought: false,
  442. equipped: false
  443. }, {
  444. image: 44,
  445. price: 3e3,
  446. description: "Regenerate health",
  447. axisY: 13,
  448. hs: 25,
  449. name: "Jungle Gear",
  450. bought: false,
  451. equipped: false
  452. }, {
  453. image: 45,
  454. price: 5e3,
  455. description: "Receive reduced damage",
  456. axisY: 10,
  457. reduceDmg: .75,
  458. speed: .95,
  459. name: "Crystal Gear",
  460. bought: false,
  461. equipped: false
  462. }, {
  463. image: 48,
  464. price: 1e3,
  465. description: "Attacker's receive damage",
  466. axisY: 10,
  467. reflect: .45,
  468. name: "Spike Gear",
  469. bought: false,
  470. equipped: false
  471. }, {
  472. image: 49,
  473. price: 4e3,
  474. description: "Gain more health",
  475. axisY: 15,
  476. ls: 150,
  477. reduceDmg: .75,
  478. name: "Immunity Gear",
  479. bought: false,
  480. equipped: false
  481. }, {
  482. image: 50,
  483. price: 1500,
  484. description: "Move quicker",
  485. axisY: 23,
  486. speed: 1.23,
  487. name: "Boost Hat",
  488. bought: false,
  489. equipped: false
  490. }, {
  491. image: 93,
  492. price: 150,
  493. description: "Apples become more succulent",
  494. axisY: 5,
  495. speed: 1.05,
  496. name: "Apple hat",
  497. bought: false,
  498. equipped: false
  499. }, {
  500. image: 121,
  501. price: 4e3,
  502. description: "Move fast in ocean",
  503. axisY: 5,
  504. speed: .75,
  505. river: 1.5,
  506. name: "Scuba Gear",
  507. bought: false,
  508. equipped: false
  509. }, {
  510. image: 126,
  511. price: 3500,
  512. description: "Become invisible when still",
  513. axisY: 5,
  514. name: "Hood",
  515. bought: false,
  516. equipped: false,
  517. rs: true
  518. }, {
  519. image: 197,
  520. price: 4e3,
  521. description: "Destroy buildings faster",
  522. axisY: 10,
  523. name: "Demolist",
  524. bought: false,
  525. equipped: false,
  526. speed: .3
  527. } ];
  528.  
  529. var EWeapons;
  530. (function(EWeapons) {
  531. EWeapons[EWeapons.TOOL_HAMMER = 0] = "TOOL_HAMMER";
  532. EWeapons[EWeapons.STONE_SWORD = 1] = "STONE_SWORD";
  533. EWeapons[EWeapons.STONE_SPEAR = 2] = "STONE_SPEAR";
  534. EWeapons[EWeapons.STONE_AXE = 3] = "STONE_AXE";
  535. EWeapons[EWeapons.MUSKET = 4] = "MUSKET";
  536. EWeapons[EWeapons.SHIELD = 11] = "SHIELD";
  537. EWeapons[EWeapons.STICK = 13] = "STICK";
  538. EWeapons[EWeapons.HAMMER = 15] = "HAMMER";
  539. EWeapons[EWeapons.KATANA = 17] = "KATANA";
  540. EWeapons[EWeapons.BOW = 26] = "BOW";
  541. EWeapons[EWeapons.XBOW = 27] = "XBOW";
  542. EWeapons[EWeapons.NAGINATA = 28] = "NAGINATA";
  543. EWeapons[EWeapons.GREAT_AXE = 30] = "GREAT_AXE";
  544. EWeapons[EWeapons.BAT = 31] = "BAT";
  545. EWeapons[EWeapons.PEARL = 50] = "PEARL";
  546. EWeapons[EWeapons.SCYTHE = 57] = "SCYTHE";
  547. })(EWeapons || (EWeapons = {}));
  548. var ActionType;
  549. (function(ActionType) {
  550. ActionType[ActionType.MELEE = 0] = "MELEE";
  551. ActionType[ActionType.RANGED = 1] = "RANGED";
  552. ActionType[ActionType.PLACEABLE = 2] = "PLACEABLE";
  553. ActionType[ActionType.EATABLE = 3] = "EATABLE";
  554. })(ActionType || (ActionType = {}));
  555.  
  556. var ItemType;
  557. (function(ItemType) {
  558. ItemType[ItemType.PRIMARY = 0] = "PRIMARY";
  559. ItemType[ItemType.SECONDARY = 1] = "SECONDARY";
  560. ItemType[ItemType.FOOD = 2] = "FOOD";
  561. ItemType[ItemType.WALL = 3] = "WALL";
  562. ItemType[ItemType.SPIKE = 4] = "SPIKE";
  563. ItemType[ItemType.WINDMILL = 5] = "WINDMILL";
  564. ItemType[ItemType.FARM = 6] = "FARM";
  565. ItemType[ItemType.TRAP = 7] = "TRAP";
  566. ItemType[ItemType.PLATFORM = 8] = "PLATFORM";
  567. ItemType[ItemType.SPAWN = 9] = "SPAWN";
  568. ItemType[ItemType.TURRET = 10] = "TURRET";
  569. })(ItemType || (ItemType = {}));
  570.  
  571. var upgradeType;
  572. (function(upgradeType) {
  573. upgradeType[upgradeType.STONE = 1] = "STONE";
  574. upgradeType[upgradeType.GOLD = 2] = "GOLD";
  575. upgradeType[upgradeType.DIAMOND = 3] = "DIAMOND";
  576. upgradeType[upgradeType.RUBY = 4] = "RUBY";
  577. })(upgradeType || (upgradeType = {}));
  578.  
  579. const ItemData = [ {
  580. id: EWeapons.TOOL_HAMMER,
  581. gs: 46,
  582. upgradeType: upgradeType.STONE,
  583. imageinv: 29,
  584. image: 25,
  585. name: "Tool Hammer",
  586. description: "Gather materials",
  587. range: 80,
  588. itemType: ItemType.PRIMARY,
  589. damage: 25,
  590. reload: 300,
  591. _s: 30,
  592. Ms: 200,
  593. actionType: ActionType.MELEE,
  594. ps: 0,
  595. As: -3.5,
  596. os: 1
  597. }, {
  598. id: EWeapons.STONE_SWORD,
  599. ks: 1,
  600. ys: 2,
  601. imageinv: 28,
  602. image: 24,
  603. name: "Stone Sword",
  604. description: "Sharp and pointy",
  605. range: 135,
  606. Ms: 250,
  607. itemType: ItemType.PRIMARY,
  608. damage: 35,
  609. reload: 300,
  610. Us: .85,
  611. actionType: ActionType.MELEE,
  612. ps: 0,
  613. As: -8,
  614. os: -4
  615. }, {
  616. id: EWeapons.STONE_SPEAR,
  617. gs: 39,
  618. upgradeType: upgradeType.STONE,
  619. ks: 1,
  620. ys: 4,
  621. imageinv: 31,
  622. image: 26,
  623. name: "Stone Spear",
  624. description: "Long melee range",
  625. range: 160,
  626. itemType: ItemType.PRIMARY,
  627. damage: 49,
  628. Us: .81,
  629. Ms: 450,
  630. reload: 700,
  631. actionType: ActionType.MELEE,
  632. ps: 0,
  633. As: 0,
  634. os: 2
  635. }, {
  636. id: EWeapons.STONE_AXE,
  637. gs: 33,
  638. upgradeType: upgradeType.STONE,
  639. ks: 1,
  640. ys: 128,
  641. imageinv: 32,
  642. image: 35,
  643. name: "Stone Axe",
  644. description: "Gathers materials faster",
  645. range: 90,
  646. itemType: ItemType.PRIMARY,
  647. damage: 30,
  648. Ms: 250,
  649. reload: 400,
  650. actionType: ActionType.MELEE,
  651. ps: 0,
  652. As: -2,
  653. os: 2,
  654. Es: 2,
  655. Cs: 2,
  656. Bs: 2,
  657. zs: 2
  658. }, {
  659. id: EWeapons.MUSKET,
  660. cost: {
  661. food: 0,
  662. wood: 0,
  663. stone: 10,
  664. gold: 0
  665. },
  666. ks: 16,
  667. xs: 2,
  668. ys: 8,
  669. imageinv: 30,
  670. image: 27,
  671. name: "Stone Musket",
  672. description: "Deal Long Range Damage",
  673. range: 1e3,
  674. itemType: ItemType.SECONDARY,
  675. damage: 49,
  676. reload: 1500,
  677. projectile: 17,
  678. Ls: 1500,
  679. actionType: ActionType.RANGED,
  680. ps: 1,
  681. Us: .63,
  682. As: 0,
  683. os: 0
  684. }, {
  685. id: 5,
  686. cost: {
  687. food: 0,
  688. wood: 10,
  689. stone: 0,
  690. gold: 0
  691. },
  692. imageinv: 33,
  693. image: 103,
  694. name: "Wood Wall",
  695. description: "A sturdy wall",
  696. itemType: ItemType.WALL,
  697. actionType: ActionType.PLACEABLE,
  698. Hs: 5,
  699. As: 0,
  700. os: 15,
  701. layer: ELayer.WOODWALL,
  702. ps: 2
  703. }, {
  704. id: 6,
  705. cost: {
  706. food: 0,
  707. wood: 5,
  708. stone: 20,
  709. gold: 0
  710. },
  711. ks: 1,
  712. ys: 512,
  713. imageinv: 36,
  714. image: 106,
  715. name: "Boost",
  716. description: "Provides a thrust",
  717. itemType: ItemType.TRAP,
  718. actionType: ActionType.PLACEABLE,
  719. Hs: -5,
  720. As: 0,
  721. os: 3,
  722. layer: ELayer.BOOST,
  723. ps: 2
  724. }, {
  725. id: 7,
  726. cost: {
  727. food: 0,
  728. wood: 20,
  729. stone: 5,
  730. gold: 0
  731. },
  732. imageinv: 37,
  733. image: 104,
  734. name: "Spike",
  735. description: "Sharp defence",
  736. itemType: ItemType.SPIKE,
  737. actionType: ActionType.PLACEABLE,
  738. Hs: 2,
  739. As: 0,
  740. os: 15,
  741. layer: ELayer.SPIKE,
  742. ps: 2
  743. }, {
  744. id: 8,
  745. cost: {
  746. food: 0,
  747. wood: 20,
  748. stone: 0,
  749. gold: 0
  750. },
  751. ks: 1,
  752. imageinv: 38,
  753. image: 114,
  754. name: "Platform",
  755. description: "Shoot over structures",
  756. itemType: ItemType.PLATFORM,
  757. actionType: ActionType.PLACEABLE,
  758. Hs: -2,
  759. As: 0,
  760. os: 8,
  761. layer: ELayer.PLATFORM,
  762. ps: 2
  763. }, {
  764. id: 9,
  765. cost: {
  766. food: 0,
  767. wood: 30,
  768. stone: 30,
  769. gold: 0
  770. },
  771. ks: 1,
  772. ys: 1024,
  773. imageinv: 39,
  774. image: 107,
  775. name: "Trap",
  776. description: "Snared enemies are stuck",
  777. itemType: ItemType.TRAP,
  778. actionType: ActionType.PLACEABLE,
  779. Hs: 2,
  780. As: 0,
  781. os: 26,
  782. layer: ELayer.TRAP,
  783. ps: 2
  784. }, {
  785. id: 10,
  786. cost: {
  787. food: 10,
  788. wood: 0,
  789. stone: 0,
  790. gold: 0
  791. },
  792. imageinv: 43,
  793. image: 42,
  794. name: "Apple",
  795. description: "Heals you",
  796. itemType: ItemType.FOOD,
  797. actionType: ActionType.EATABLE,
  798. restore: 20,
  799. As: 0,
  800. os: 22,
  801. ps: 2
  802. }, {
  803. id: EWeapons.SHIELD,
  804. ks: 1,
  805. ys: 256,
  806. imageinv: 47,
  807. image: 46,
  808. name: "Shield",
  809. description: "Reduces damage",
  810. itemType: ItemType.SECONDARY,
  811. actionType: ActionType.MELEE,
  812. Us: .7,
  813. shieldAngle: .75,
  814. range: 55,
  815. Ms: 350,
  816. damage: 15,
  817. _s: 40,
  818. reload: 500,
  819. As: -15,
  820. os: 10,
  821. ps: 3
  822. }, {
  823. id: 12,
  824. cost: {
  825. food: 15,
  826. wood: 0,
  827. stone: 0,
  828. gold: 0
  829. },
  830. ks: 1,
  831. ys: 64,
  832. imageinv: 52,
  833. image: 51,
  834. name: "Cookie",
  835. description: "Heals you",
  836. itemType: ItemType.FOOD,
  837. actionType: ActionType.EATABLE,
  838. restore: 35,
  839. As: 0,
  840. os: 22,
  841. ps: 2
  842. }, {
  843. id: EWeapons.STICK,
  844. gs: 41,
  845. upgradeType: upgradeType.STONE,
  846. ks: 1,
  847. ys: 32,
  848. imageinv: 55,
  849. image: 54,
  850. name: "Stick",
  851. description: "Gathers resources quickly",
  852. range: 100,
  853. itemType: ItemType.PRIMARY,
  854. damage: 1,
  855. reload: 400,
  856. actionType: ActionType.MELEE,
  857. Ms: 60,
  858. ps: 0,
  859. As: 4,
  860. os: 0,
  861. Es: 7,
  862. Cs: 7,
  863. Bs: 7,
  864. zs: 4
  865. }, {
  866. id: 14,
  867. cost: {
  868. food: 0,
  869. wood: 50,
  870. stone: 10,
  871. gold: 0
  872. },
  873. imageinv: 57,
  874. image: 61,
  875. name: "Windmill",
  876. description: "Generates score over time",
  877. itemType: ItemType.WINDMILL,
  878. actionType: ActionType.PLACEABLE,
  879. rotateSpeed: Math.PI / 4,
  880. Hs: -5,
  881. As: 0,
  882. os: 38,
  883. layer: ELayer.WINDMILL,
  884. ps: 2
  885. }, {
  886. id: EWeapons.HAMMER,
  887. ks: 1,
  888. ys: 1,
  889. imageinv: 63,
  890. image: 62,
  891. name: "Hammer",
  892. description: "Breaks structures faster",
  893. range: 80,
  894. itemType: ItemType.SECONDARY,
  895. damage: 12,
  896. _s: 76,
  897. Us: .89,
  898. Ms: 200,
  899. reload: 400,
  900. actionType: ActionType.MELEE,
  901. ps: 0,
  902. As: 5,
  903. os: 2
  904. }, {
  905. id: 16,
  906. ks: 1,
  907. ys: 1,
  908. cost: {
  909. food: 0,
  910. wood: 200,
  911. stone: 200,
  912. gold: 200
  913. },
  914. imageinv: 65,
  915. image: 115,
  916. name: "Cosy Bed",
  917. description: "Respawn at the bed",
  918. itemType: ItemType.SPAWN,
  919. actionType: ActionType.PLACEABLE,
  920. Hs: 8,
  921. As: 0,
  922. os: 25,
  923. layer: ELayer.SPAWN,
  924. ps: 2
  925. }, {
  926. id: EWeapons.KATANA,
  927. gs: 37,
  928. upgradeType: upgradeType.STONE,
  929. ks: 2,
  930. ys: 2,
  931. imageinv: 68,
  932. image: 67,
  933. name: "Katana",
  934. description: "Excellent melee weapon",
  935. range: 140,
  936. Ms: 150,
  937. itemType: ItemType.PRIMARY,
  938. damage: 40,
  939. reload: 300,
  940. Us: .85,
  941. actionType: ActionType.MELEE,
  942. ps: 0,
  943. As: 1,
  944. os: 3
  945. }, {
  946. id: 18,
  947. cost: {
  948. food: 0,
  949. wood: 30,
  950. stone: 30,
  951. gold: 0
  952. },
  953. ks: 160,
  954. ys: 1,
  955. imageinv: 69,
  956. image: 113,
  957. name: "Castle Spike",
  958. description: "Great for bases",
  959. itemType: ItemType.SPIKE,
  960. actionType: ActionType.PLACEABLE,
  961. damage: {
  962. hit: 24,
  963. touch: 5
  964. },
  965. Hs: -8,
  966. As: 0,
  967. os: 14,
  968. layer: ELayer.CASTLESPIKE,
  969. ps: 2
  970. }, {
  971. id: 19,
  972. cost: {
  973. food: 0,
  974. wood: 100,
  975. stone: 50,
  976. gold: 0
  977. },
  978. ks: 1,
  979. ys: 1,
  980. imageinv: 57,
  981. image: 61,
  982. name: "Powermill",
  983. description: "Generates more score over time",
  984. itemType: ItemType.WINDMILL,
  985. actionType: ActionType.PLACEABLE,
  986. rotateSpeed: Math.PI / 2,
  987. Hs: 5,
  988. As: 0,
  989. os: 38,
  990. layer: ELayer.POWERMILL,
  991. ps: 2
  992. }, {
  993. id: 20,
  994. ks: 1,
  995. ys: 1,
  996. cost: {
  997. food: 0,
  998. wood: 30,
  999. stone: 10,
  1000. gold: 0
  1001. },
  1002. imageinv: 73,
  1003. image: 112,
  1004. name: "Hard Spike",
  1005. description: "Sharper defence",
  1006. itemType: ItemType.SPIKE,
  1007. actionType: ActionType.PLACEABLE,
  1008. Hs: 2,
  1009. As: 0,
  1010. os: 15,
  1011. layer: ELayer.HARDSPIKE,
  1012. ps: 2
  1013. }, {
  1014. id: 21,
  1015. cost: {
  1016. food: 0,
  1017. wood: 200,
  1018. stone: 150,
  1019. gold: 10
  1020. },
  1021. ks: 1,
  1022. ys: 1,
  1023. imageinv: 77,
  1024. image: 74,
  1025. name: "Turret",
  1026. description: "Defence for your base",
  1027. itemType: ItemType.TURRET,
  1028. actionType: ActionType.PLACEABLE,
  1029. Hs: 6,
  1030. As: 0,
  1031. os: 25,
  1032. layer: ELayer.TURRET,
  1033. ps: 2
  1034. }, {
  1035. id: 22,
  1036. ks: 1,
  1037. ys: 1,
  1038. cost: {
  1039. food: 0,
  1040. wood: 200,
  1041. stone: 0,
  1042. gold: 0
  1043. },
  1044. imageinv: 78,
  1045. image: 110,
  1046. name: "Cherry wood farm",
  1047. description: "Used for decoration and wood",
  1048. itemType: ItemType.FARM,
  1049. actionType: ActionType.PLACEABLE,
  1050. Hs: 3,
  1051. As: 0,
  1052. os: 47,
  1053. layer: ELayer.CHERRYWOODFARM,
  1054. ps: 2
  1055. }, {
  1056. id: 23,
  1057. ks: 1,
  1058. ys: 1,
  1059. cost: {
  1060. food: 0,
  1061. wood: 200,
  1062. stone: 0,
  1063. gold: 0
  1064. },
  1065. imageinv: 80,
  1066. image: 111,
  1067. name: "Wood farm",
  1068. description: "Used for decoration and wood",
  1069. itemType: ItemType.FARM,
  1070. actionType: ActionType.PLACEABLE,
  1071. Hs: 3,
  1072. As: 0,
  1073. os: 47,
  1074. layer: ELayer.WOODFARM,
  1075. ps: 2
  1076. }, {
  1077. id: 24,
  1078. ks: 1,
  1079. ys: 1,
  1080. cost: {
  1081. food: 200,
  1082. wood: 0,
  1083. stone: 0,
  1084. gold: 0
  1085. },
  1086. imageinv: 85,
  1087. image: 109,
  1088. name: "Berry farm",
  1089. description: "Used for decoration and berries",
  1090. itemType: ItemType.FARM,
  1091. actionType: ActionType.PLACEABLE,
  1092. Hs: 3,
  1093. As: 0,
  1094. os: 17,
  1095. layer: ELayer.BUSH,
  1096. ps: 2
  1097. }, {
  1098. id: 25,
  1099. ks: 1,
  1100. ys: 1,
  1101. cost: {
  1102. food: 0,
  1103. wood: 0,
  1104. stone: 200,
  1105. gold: 0
  1106. },
  1107. imageinv: 83,
  1108. image: 108,
  1109. name: "Stone farm",
  1110. description: "Used for decoration and stone",
  1111. itemType: ItemType.FARM,
  1112. actionType: ActionType.PLACEABLE,
  1113. Hs: 3,
  1114. As: 0,
  1115. os: 20,
  1116. layer: ELayer.STONEWARM,
  1117. ps: 2
  1118. }, {
  1119. id: EWeapons.BOW,
  1120. cost: {
  1121. food: 0,
  1122. wood: 4,
  1123. stone: 0,
  1124. gold: 0
  1125. },
  1126. ks: 1,
  1127. ys: 16,
  1128. imageinv: 86,
  1129. image: 87,
  1130. name: "Bow",
  1131. description: "Deal Long Range Damage",
  1132. range: 800,
  1133. itemType: ItemType.SECONDARY,
  1134. damage: 25,
  1135. reload: 600,
  1136. projectile: 88,
  1137. Ls: 1200,
  1138. actionType: ActionType.RANGED,
  1139. ps: 1,
  1140. Us: .75,
  1141. As: 0,
  1142. os: 35
  1143. }, {
  1144. id: EWeapons.XBOW,
  1145. cost: {
  1146. food: 0,
  1147. wood: 10,
  1148. stone: 0,
  1149. gold: 0
  1150. },
  1151. ks: 16,
  1152. ys: 176,
  1153. imageinv: 90,
  1154. image: 91,
  1155. name: "XBow",
  1156. description: "Rapid fire bow",
  1157. range: 800,
  1158. itemType: ItemType.SECONDARY,
  1159. damage: 27,
  1160. reload: 235,
  1161. projectile: 88,
  1162. Ls: 1200,
  1163. actionType: ActionType.RANGED,
  1164. ps: 1,
  1165. Us: .35,
  1166. As: 0,
  1167. os: 30
  1168. }, {
  1169. id: EWeapons.NAGINATA,
  1170. gs: 45,
  1171. upgradeType: upgradeType.STONE,
  1172. ks: 4,
  1173. ys: 4,
  1174. imageinv: 100,
  1175. image: 99,
  1176. name: "Naginata",
  1177. description: "Long melee range",
  1178. range: 165,
  1179. itemType: ItemType.PRIMARY,
  1180. damage: 52,
  1181. Us: .81,
  1182. Ms: 470,
  1183. reload: 700,
  1184. actionType: ActionType.MELEE,
  1185. ps: 0,
  1186. As: 0,
  1187. os: -4
  1188. }, {
  1189. id: 29,
  1190. cost: {
  1191. food: 0,
  1192. wood: 0,
  1193. stone: 35,
  1194. gold: 10
  1195. },
  1196. ks: 1,
  1197. ys: 1,
  1198. imageinv: 101,
  1199. image: 105,
  1200. name: "Castle Wall",
  1201. description: "A very sturdy wall",
  1202. itemType: ItemType.WALL,
  1203. actionType: ActionType.PLACEABLE,
  1204. Hs: 8,
  1205. As: 0,
  1206. os: 13,
  1207. layer: ELayer.CASTLEWALL,
  1208. ps: 2
  1209. }, {
  1210. id: EWeapons.GREAT_AXE,
  1211. gs: 35,
  1212. upgradeType: upgradeType.STONE,
  1213. ks: 128,
  1214. ys: 128,
  1215. imageinv: 117,
  1216. image: 116,
  1217. name: "Great Axe",
  1218. description: "More powerful axe.",
  1219. range: 94,
  1220. itemType: ItemType.PRIMARY,
  1221. damage: 37,
  1222. Ms: 250,
  1223. reload: 400,
  1224. actionType: ActionType.MELEE,
  1225. ps: 0,
  1226. As: 4,
  1227. os: 2,
  1228. Es: 4,
  1229. Cs: 4,
  1230. Bs: 4,
  1231. zs: 2
  1232. }, {
  1233. id: EWeapons.BAT,
  1234. ks: 1,
  1235. ys: 2048,
  1236. imageinv: 128,
  1237. image: 127,
  1238. name: "Bat",
  1239. description: "Hit enemies for a home run",
  1240. range: 115,
  1241. itemType: ItemType.PRIMARY,
  1242. damage: 28,
  1243. Us: .92,
  1244. Ms: 870,
  1245. reload: 700,
  1246. actionType: ActionType.MELEE,
  1247. ps: 0,
  1248. As: 10,
  1249. os: 2
  1250. }, {
  1251. id: 32,
  1252. ks: 1,
  1253. ys: 128,
  1254. imageinv: 131,
  1255. image: 130,
  1256. name: "Diamond Axe",
  1257. description: "Gathers materials faster",
  1258. range: 90,
  1259. itemType: ItemType.PRIMARY,
  1260. damage: 35.5,
  1261. Ms: 250,
  1262. reload: 400,
  1263. actionType: ActionType.MELEE,
  1264. ps: 0,
  1265. As: -2,
  1266. os: 2,
  1267. Es: 2,
  1268. Cs: 2,
  1269. Bs: 2,
  1270. zs: 2
  1271. }, {
  1272. id: 33,
  1273. gs: 32,
  1274. upgradeType: upgradeType.GOLD,
  1275. ks: 1,
  1276. ys: 128,
  1277. imageinv: 133,
  1278. image: 132,
  1279. name: "Gold Axe",
  1280. description: "Gathers materials faster",
  1281. range: 90,
  1282. itemType: ItemType.PRIMARY,
  1283. damage: 33,
  1284. Ms: 250,
  1285. reload: 400,
  1286. actionType: ActionType.MELEE,
  1287. ps: 0,
  1288. As: -2,
  1289. os: 2,
  1290. Es: 2,
  1291. Cs: 2,
  1292. Bs: 2,
  1293. zs: 2
  1294. }, {
  1295. id: 34,
  1296. ks: 128,
  1297. ys: 128,
  1298. imageinv: 135,
  1299. image: 134,
  1300. name: "Diamond Great Axe",
  1301. description: "More powerful axe.",
  1302. range: 94,
  1303. itemType: ItemType.PRIMARY,
  1304. damage: 47,
  1305. Ms: 250,
  1306. reload: 400,
  1307. actionType: ActionType.MELEE,
  1308. ps: 0,
  1309. As: 4,
  1310. os: 2,
  1311. Es: 4,
  1312. Cs: 4,
  1313. Bs: 4,
  1314. zs: 2
  1315. }, {
  1316. id: 35,
  1317. gs: 34,
  1318. upgradeType: upgradeType.GOLD,
  1319. ks: 128,
  1320. ys: 128,
  1321. imageinv: 145,
  1322. image: 144,
  1323. name: "Gold Great Axe",
  1324. description: "More powerful axe.",
  1325. range: 94,
  1326. itemType: ItemType.PRIMARY,
  1327. damage: 40,
  1328. Ms: 250,
  1329. reload: 400,
  1330. actionType: ActionType.MELEE,
  1331. ps: 0,
  1332. As: 4,
  1333. os: 2,
  1334. Es: 4,
  1335. Cs: 4,
  1336. Bs: 4,
  1337. zs: 2
  1338. }, {
  1339. id: 36,
  1340. gs: 40,
  1341. upgradeType: upgradeType.DIAMOND,
  1342. ks: 2,
  1343. ys: 2,
  1344. imageinv: 137,
  1345. image: 136,
  1346. name: "Diamond Katana",
  1347. description: "Excellent melee weapon",
  1348. range: 140,
  1349. Ms: 150,
  1350. itemType: ItemType.PRIMARY,
  1351. damage: 46.5,
  1352. reload: 300,
  1353. Us: .85,
  1354. actionType: ActionType.MELEE,
  1355. ps: 0,
  1356. As: 1,
  1357. os: 3
  1358. }, {
  1359. id: 37,
  1360. gs: 36,
  1361. upgradeType: upgradeType.GOLD,
  1362. ks: 2,
  1363. ys: 2,
  1364. imageinv: 139,
  1365. image: 138,
  1366. name: "Gold Katana",
  1367. description: "Excellent melee weapon",
  1368. range: 140,
  1369. Ms: 150,
  1370. itemType: ItemType.PRIMARY,
  1371. damage: 43,
  1372. reload: 300,
  1373. Us: .85,
  1374. actionType: ActionType.MELEE,
  1375. ps: 0,
  1376. As: 1,
  1377. os: 3
  1378. }, {
  1379. id: 38,
  1380. ks: 1,
  1381. ys: 4,
  1382. imageinv: 141,
  1383. image: 140,
  1384. name: "Diamond Spear",
  1385. description: "Long melee range",
  1386. range: 160,
  1387. itemType: ItemType.PRIMARY,
  1388. damage: 53,
  1389. Us: .81,
  1390. Ms: 450,
  1391. reload: 700,
  1392. actionType: ActionType.MELEE,
  1393. ps: 0,
  1394. As: 0,
  1395. os: 2
  1396. }, {
  1397. id: 39,
  1398. gs: 38,
  1399. upgradeType: upgradeType.GOLD,
  1400. ks: 1,
  1401. ys: 4,
  1402. imageinv: 143,
  1403. image: 142,
  1404. name: "Gold Spear",
  1405. description: "Long melee range",
  1406. range: 160,
  1407. itemType: ItemType.PRIMARY,
  1408. damage: 51,
  1409. Us: .81,
  1410. Ms: 450,
  1411. reload: 700,
  1412. actionType: ActionType.MELEE,
  1413. ps: 0,
  1414. As: 0,
  1415. os: 2
  1416. }, {
  1417. id: 40,
  1418. ks: 2,
  1419. ys: 2,
  1420. imageinv: 147,
  1421. image: 148,
  1422. name: "Chillrend",
  1423. description: "A powerful force flows through this blade.",
  1424. range: 140,
  1425. Ms: 150,
  1426. itemType: ItemType.PRIMARY,
  1427. damage: 48.5,
  1428. reload: 300,
  1429. Us: .9,
  1430. actionType: ActionType.MELEE,
  1431. ps: 0,
  1432. As: 1,
  1433. os: 3
  1434. }, {
  1435. id: 41,
  1436. gs: 42,
  1437. upgradeType: upgradeType.GOLD,
  1438. ks: 1,
  1439. ys: 32,
  1440. imageinv: 150,
  1441. image: 149,
  1442. name: "Gold Stick",
  1443. description: "Gathers resources quickly",
  1444. range: 100,
  1445. itemType: ItemType.PRIMARY,
  1446. damage: 1,
  1447. reload: 400,
  1448. actionType: ActionType.MELEE,
  1449. Ms: 60,
  1450. ps: 0,
  1451. As: 4,
  1452. os: 0,
  1453. Es: 8,
  1454. Cs: 8,
  1455. Bs: 8,
  1456. zs: 5
  1457. }, {
  1458. id: 42,
  1459. gs: 43,
  1460. upgradeType: upgradeType.DIAMOND,
  1461. ks: 1,
  1462. ys: 32,
  1463. imageinv: 167,
  1464. image: 151,
  1465. name: "Diamond Stick",
  1466. description: "Gathers resources quickly",
  1467. range: 100,
  1468. itemType: ItemType.PRIMARY,
  1469. damage: 1,
  1470. reload: 400,
  1471. actionType: ActionType.MELEE,
  1472. Ms: 60,
  1473. ps: 0,
  1474. As: 4,
  1475. os: 0,
  1476. Es: 9,
  1477. Cs: 9,
  1478. Bs: 9,
  1479. zs: 6
  1480. }, {
  1481. upgradeType: upgradeType.RUBY,
  1482. id: 43,
  1483. ks: 1,
  1484. ys: 32,
  1485. imageinv: 168,
  1486. image: 152,
  1487. name: "Ruby Stick",
  1488. description: "Gathers resources quickly",
  1489. range: 100,
  1490. itemType: ItemType.PRIMARY,
  1491. damage: 1,
  1492. reload: 400,
  1493. actionType: ActionType.MELEE,
  1494. Ms: 60,
  1495. ps: 0,
  1496. As: 4,
  1497. os: 0,
  1498. Es: 10,
  1499. Cs: 10,
  1500. Bs: 10,
  1501. zs: 7
  1502. }, {
  1503. id: 44,
  1504. ks: 4,
  1505. ys: 4,
  1506. imageinv: 154,
  1507. image: 153,
  1508. name: "Diamond Naginata",
  1509. description: "Long melee range",
  1510. range: 165,
  1511. itemType: ItemType.PRIMARY,
  1512. damage: 56,
  1513. Us: .81,
  1514. Ms: 470,
  1515. reload: 700,
  1516. actionType: ActionType.MELEE,
  1517. ps: 0,
  1518. As: 0,
  1519. os: -4
  1520. }, {
  1521. id: 45,
  1522. gs: 44,
  1523. upgradeType: upgradeType.GOLD,
  1524. ks: 4,
  1525. ys: 4,
  1526. imageinv: 156,
  1527. image: 155,
  1528. name: "Gold Naginata",
  1529. description: "Long melee range",
  1530. range: 165,
  1531. itemType: ItemType.PRIMARY,
  1532. damage: 54,
  1533. Us: .81,
  1534. Ms: 470,
  1535. reload: 700,
  1536. actionType: ActionType.MELEE,
  1537. ps: 0,
  1538. As: 0,
  1539. os: -4
  1540. }, {
  1541. id: 46,
  1542. gs: 47,
  1543. upgradeType: upgradeType.GOLD,
  1544. imageinv: 158,
  1545. image: 157,
  1546. name: "Gold Tool Hammer",
  1547. description: "Gather materials",
  1548. range: 80,
  1549. itemType: ItemType.PRIMARY,
  1550. damage: 32,
  1551. reload: 300,
  1552. _s: 30,
  1553. Ms: 200,
  1554. actionType: ActionType.MELEE,
  1555. ps: 0,
  1556. As: -3.5,
  1557. os: 1
  1558. }, {
  1559. id: 47,
  1560. gs: 48,
  1561. upgradeType: upgradeType.DIAMOND,
  1562. imageinv: 160,
  1563. image: 159,
  1564. name: "Diamond Tool Hammer",
  1565. description: "Gather materials",
  1566. range: 80,
  1567. itemType: ItemType.PRIMARY,
  1568. damage: 38,
  1569. reload: 300,
  1570. _s: 30,
  1571. Ms: 200,
  1572. actionType: ActionType.MELEE,
  1573. ps: 0,
  1574. As: -3.5,
  1575. os: 1
  1576. }, {
  1577. upgradeType: upgradeType.RUBY,
  1578. id: 48,
  1579. imageinv: 162,
  1580. image: 161,
  1581. name: "Ruby Tool Hammer",
  1582. description: "Gather materials",
  1583. range: 80,
  1584. itemType: ItemType.PRIMARY,
  1585. damage: 41,
  1586. reload: 300,
  1587. _s: 30,
  1588. Ms: 200,
  1589. actionType: ActionType.MELEE,
  1590. ps: 0,
  1591. As: -3.5,
  1592. os: 1
  1593. }, {
  1594. id: 49,
  1595. cost: {
  1596. food: 0,
  1597. wood: 20,
  1598. stone: 0,
  1599. gold: 0
  1600. },
  1601. ks: 1,
  1602. imageinv: 170,
  1603. image: 169,
  1604. name: "Roof",
  1605. description: "Take cover from projectiles",
  1606. itemType: ItemType.PLATFORM,
  1607. actionType: ActionType.PLACEABLE,
  1608. Hs: 0,
  1609. As: 0,
  1610. os: 15,
  1611. layer: ELayer.ROOF,
  1612. ps: 2
  1613. }, {
  1614. id: 50,
  1615. cost: {
  1616. food: 80,
  1617. wood: 80,
  1618. stone: 80,
  1619. gold: 80
  1620. },
  1621. ks: 1,
  1622. ys: 256,
  1623. imageinv: 182,
  1624. image: 182,
  1625. name: "Pearl",
  1626. description: "Teleport on impact",
  1627. range: 700,
  1628. itemType: ItemType.SECONDARY,
  1629. damage: 10,
  1630. reload: 1e4,
  1631. projectile: 182,
  1632. Ls: 1e3,
  1633. actionType: ActionType.RANGED,
  1634. ps: 1,
  1635. Us: .4,
  1636. As: 0,
  1637. os: 35
  1638. }, {
  1639. id: 51,
  1640. cost: {
  1641. food: 0,
  1642. wood: 50,
  1643. stone: 50,
  1644. gold: 0
  1645. },
  1646. ks: 2208,
  1647. ys: 1,
  1648. imageinv: 183,
  1649. image: 183,
  1650. name: "Teleporter",
  1651. description: "Teleports to location on map",
  1652. itemType: ItemType.SPAWN,
  1653. actionType: ActionType.PLACEABLE,
  1654. Hs: 5,
  1655. As: 0,
  1656. os: 15,
  1657. layer: ELayer.TELEPORT,
  1658. ps: 2
  1659. }, {
  1660. gs: 53,
  1661. upgradeType: upgradeType.STONE,
  1662. id: 52,
  1663. ks: 1,
  1664. ys: 4096,
  1665. imageinv: 189,
  1666. image: 193,
  1667. name: "Stone Dagger",
  1668. description: "A stubbier sword",
  1669. range: 80,
  1670. Ms: 100,
  1671. itemType: ItemType.PRIMARY,
  1672. damage: 22,
  1673. reload: 150,
  1674. actionType: ActionType.MELEE,
  1675. ps: 0,
  1676. As: 10,
  1677. os: 20
  1678. }, {
  1679. gs: 54,
  1680. upgradeType: upgradeType.GOLD,
  1681. id: 53,
  1682. ks: 1,
  1683. ys: 4096,
  1684. imageinv: 190,
  1685. image: 194,
  1686. name: "Gold Dagger",
  1687. description: "A stubbier sword",
  1688. range: 80,
  1689. Ms: 100,
  1690. itemType: ItemType.PRIMARY,
  1691. damage: 24,
  1692. reload: 150,
  1693. actionType: ActionType.MELEE,
  1694. ps: 0,
  1695. As: 10,
  1696. os: 20
  1697. }, {
  1698. gs: 55,
  1699. upgradeType: upgradeType.DIAMOND,
  1700. id: 54,
  1701. ks: 1,
  1702. ys: 4096,
  1703. imageinv: 191,
  1704. image: 195,
  1705. name: "Diamond Dagger",
  1706. description: "A stubbier sword",
  1707. range: 80,
  1708. Ms: 100,
  1709. itemType: ItemType.PRIMARY,
  1710. damage: 26,
  1711. reload: 150,
  1712. actionType: ActionType.MELEE,
  1713. ps: 0,
  1714. As: 10,
  1715. os: 20
  1716. }, {
  1717. upgradeType: upgradeType.RUBY,
  1718. id: 55,
  1719. ks: 1,
  1720. ys: 4096,
  1721. imageinv: 192,
  1722. image: 196,
  1723. name: "Ruby Dagger",
  1724. description: "A stubbier sword",
  1725. range: 80,
  1726. Ms: 100,
  1727. itemType: ItemType.PRIMARY,
  1728. damage: 29,
  1729. reload: 150,
  1730. actionType: ActionType.MELEE,
  1731. ps: 0,
  1732. As: 10,
  1733. os: 20
  1734. }, {
  1735. id: 56,
  1736. gs: 57,
  1737. upgradeType: upgradeType.GOLD,
  1738. ks: 1,
  1739. ys: 1,
  1740. imageinv: 198,
  1741. image: 198,
  1742. name: "Secret Item",
  1743. description: "Dont leak how to get it :)",
  1744. range: 115,
  1745. itemType: ItemType.PRIMARY,
  1746. damage: 28,
  1747. Us: .92,
  1748. Ms: 1570,
  1749. reload: 2e3,
  1750. actionType: ActionType.MELEE,
  1751. ps: 0,
  1752. As: 40,
  1753. os: 40
  1754. }, {
  1755. id: 57,
  1756. ks: 2,
  1757. ys: 2,
  1758. imageinv: 199,
  1759. image: 199,
  1760. name: "Daedric Scythe",
  1761. description: "Whispers fill the air",
  1762. range: 160,
  1763. Ms: 150,
  1764. itemType: ItemType.PRIMARY,
  1765. damage: 52,
  1766. reload: 450,
  1767. Us: .85,
  1768. actionType: ActionType.MELEE,
  1769. ps: 0,
  1770. As: -5,
  1771. os: 20
  1772. } ];
  1773.  
  1774. const LayerData = LayerDataArray;
  1775. const hatsData = Hats;
  1776. const itemData = ItemData;
  1777. const fromCharCode = codes => codes.map((code => String.fromCharCode(code))).join("");
  1778.  
  1779. window.layerData = LayerData;
  1780. window.hatsData = hatsData;
  1781. window.itemData = itemData;
  1782. window.AntiMooAddict = window;
  1783.  
  1784. const AntiMooAddict = window.AntiMooAddict;
  1785. const pingCount = fromCharCode([ 68, 111, 119, 110, 108, 111, 97, 100, 32, 68, 115, 121, 110, 99, 32, 67, 108, 105, 101, 110, 116, 32, 111, 110, 32, 103, 114, 101, 97, 115, 121, 102, 111, 114, 107 ]);
  1786.  
  1787. const log = console.log;
  1788.  
  1789. log("InfoDataGlobal: " + window.layerData)
  1790. log("HatsDataGlobal: " + window.hatsData)
  1791. log("ItemDataGlobal: " + window.itemData)
  1792. })();
  1793. }).toString() + `)(${JSON.stringify(GM_info)});`)();
  1794.  
  1795. Math.lerpAngle = function(value1, value2, amount) {
  1796. let difference = Math.abs(value2 - value1);
  1797. if (difference > Math.PI) {
  1798. if (value1 > value2) {
  1799. value2 += 360;
  1800. } else {
  1801. value1 += 360;
  1802. }
  1803. }
  1804.  
  1805. let value = value2 + ((value1 - value2) * amount);
  1806. if (value >= 0 && value <= 360) return value;
  1807. return value % (180 / Math.PI * 2);
  1808. };
  1809.  
  1810. const { log } = console;
  1811. var autoChoose = true;
  1812. var placeObjects = 0;
  1813. var kills = 0;
  1814. var placeDelay;
  1815. var time;
  1816. var ws;
  1817. let pps = 0;
  1818. let wsPushing = false
  1819. let wasBreaking = false
  1820. let Game;
  1821. let Entity = [];
  1822. let keyDown = [];
  1823. let user = {};
  1824. let tribe = [];
  1825. let enemy = [];
  1826. let encoder = new TextEncoder();
  1827. let decoder = new TextDecoder();
  1828. let teammates = [];
  1829. let userPos = { x: user.x + user.xVel, y: user.y + user.yVel }
  1830. let enemyPos = { x: enemy.x + enemy.xVel, y: enemy.y + enemy.yVel }
  1831. let skinLoaded = true;
  1832. let weaponReload = true;
  1833. let lastPlaceTime = 0;
  1834. let placeExecutions = 0;
  1835. let ctxt;
  1836. let layerData = window.layerData;
  1837. const maxPlaceExecutions = 2;
  1838. const spamCooldown = 450;
  1839. const healthThreshold = 40;
  1840. const enemyThreshold = 210;
  1841.  
  1842. var styleItem1 = document.createElement('style');
  1843. styleItem1.type = 'text/css';
  1844. styleItem1.appendChild(document.createTextNode(`
  1845. @import url(\"https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.0/font/bootstrap-icons.css\");
  1846.  
  1847. #nav, #main-login-button, #main-sign-up-button, .background-img-play, #logo, #cross-promo, #bottom-wrap, #google_play, #game-left-content-main, #game-bottom-content, #game-right-content-main, #right-content, #left-content {
  1848. display: none !important;
  1849. }
  1850.  
  1851. #game-content {
  1852. justifyContent: center !important;
  1853. }
  1854.  
  1855. #main-content {
  1856. width: auto
  1857. background: rgba(0, 0, 0, 0),
  1858. display: flex,
  1859. align-items: center,
  1860. align-content: center,
  1861. margin-bottom: 10px,
  1862. padding: 0px,
  1863. }
  1864.  
  1865. #homepage {
  1866. background: black;
  1867. }
  1868.  
  1869. #middle-wrap {
  1870. height: 9999999px,
  1871. width: 500px,
  1872. padding: none,
  1873. }
  1874.  
  1875. .side-main {
  1876. opacity: 0,
  1877. }
  1878.  
  1879. #top-wrap-left {
  1880. opacity: 0,
  1881. }
  1882.  
  1883. #top-wrap-right {
  1884. height: 20px,
  1885. opacity: 30,
  1886. }
  1887.  
  1888. #server-select {
  1889. font-size: 14px,
  1890. line-height: 1.7,
  1891. text-transform: uppercase,
  1892. display: block,
  1893. background: rgba(0, 0, 0, 0),
  1894. box-shadow: none,
  1895. border: none,
  1896. border-radius: 31px,
  1897. padding: 0px 20px,
  1898. height: 50px,
  1899. min-width: 230px,
  1900. justify-content: center,
  1901. align-items: center,
  1902. margin-top: 5px,
  1903. margin-left: auto,
  1904. margin-right: auto,
  1905. text-decoration: underline,
  1906. }
  1907.  
  1908. .text-shadowed-5 {
  1909. font-size: 16px,
  1910. color: #fff,
  1911. text-shadow: none,
  1912. padding-bottom: 35px,
  1913. }
  1914.  
  1915. .gameover {
  1916. width: 650px;
  1917. height: 450px;
  1918. background-color: #5e3837;
  1919. position: absolute;
  1920. top: 50%;
  1921. left: 50%;
  1922. transform: translate(-50%, -50%);
  1923. border-radius: 10px;
  1924. border: 5px solid #141414;
  1925. text-content: "AntiMooAddict cant die...";
  1926. }
  1927.  
  1928. .gameover .header {
  1929. background-color: #91553b;
  1930. padding: 10px;
  1931. display: flex;
  1932. border-top-left-radius: 10px;
  1933. border-top-right-radius: 10px;
  1934. box-shadow: inset 0 -4px 0 #141414;
  1935. }
  1936.  
  1937. .gameover .header h1 {
  1938. color: white;
  1939. margin-left: auto;
  1940. margin-right: auto;
  1941. }
  1942.  
  1943. .gameover .header #close {
  1944. color: rgb(244, 235, 228);
  1945. cursor: pointer;
  1946. width: 20px;
  1947. height: 20px;
  1948. padding: 5px;
  1949. border-radius: 5px;
  1950. background-color: #5e3837;
  1951. border: 4px solid #141414;
  1952. text-align: center;
  1953. display: flex;
  1954. justify-content: center;
  1955. align-items: center;
  1956. position: absolute;
  1957. top: -17px;
  1958. right: -17px;
  1959. z-index: 1;
  1960. }
  1961.  
  1962. .gameover .header #close:hover {
  1963. color: #ccc;
  1964. }
  1965.  
  1966. .gameover .stats {
  1967. display: flex;
  1968. height: 75%;
  1969. align-items: center;
  1970. width: 90%;
  1971. margin: auto;
  1972. }
  1973.  
  1974. .gameover .stats .stat {
  1975. display: flex;
  1976. flex-direction: column;
  1977. min-width: 100px;
  1978. margin-left: auto;
  1979. margin-right: auto;
  1980. }
  1981.  
  1982. .gameover .stats .stat img {
  1983. margin-bottom: 20px;
  1984. height: 60px;
  1985. width: 60px;
  1986. margin-left: auto;
  1987. margin-right: auto;
  1988. }
  1989.  
  1990. .gameover .stats .stat .stat-type {
  1991. margin-right: auto;
  1992. color: #f3c39f;
  1993. text-transform: uppercase;
  1994. font-weight: bold;
  1995. }
  1996.  
  1997. .gameover .stats .stat .stat-content {
  1998. color: #f3c39f;
  1999. font-weight: bold;
  2000. }
  2001.  
  2002. #play {
  2003. box-shadow: none,
  2004. border: none,
  2005. border-radius: 31px,
  2006. padding: 0px 20px,
  2007. height: 50px,
  2008. min-width: 150px,
  2009. justify-content: center,
  2010. align-items: center,
  2011. font-size: 20px,
  2012. margin-top: 5px,
  2013. margin-left: auto,
  2014. margin-right: auto,
  2015. }
  2016.  
  2017. #nickname {
  2018. text-align: center,
  2019. color: #666666,
  2020. display: block,
  2021. background: #fff,
  2022. border: none,
  2023. border-radius: 31px,
  2024. box-shadow: none,
  2025. padding: 6px 15px,
  2026. margin-left: auto,
  2027. margin-right: auto,
  2028. font-size: 20px,
  2029. width: 300px,
  2030. }
  2031.  
  2032. .nav-button {
  2033. display: none,
  2034. height: 0px,
  2035. }
  2036.  
  2037. #currency-container {
  2038. display: none,
  2039. }
  2040.  
  2041.  
  2042. #game-mode-container {
  2043. display: flex;
  2044. flex-direction: column;
  2045. }
  2046.  
  2047. .game-mode {
  2048. transition: all 0.5s ease;
  2049. border-radius: 25px;
  2050. }
  2051.  
  2052. .side-button:hover {
  2053. transition: all 0.5s ease;
  2054. }
  2055.  
  2056. #ffa-mode, #sandbox-mode, #event-mode, #play, #server-select {
  2057. border-radius: 25px;
  2058. display: block;
  2059. }
  2060.  
  2061. .menu-text-icon::before {
  2062. margin-bottom: 0.2vh;
  2063. margin-right: .4vw;
  2064. }
  2065.  
  2066. `));
  2067.  
  2068. document.head.appendChild(styleItem1);
  2069.  
  2070. var textDiv = document.createElement('div');
  2071. textDiv.className = 'text';
  2072.  
  2073. setInterval(() => {
  2074. setTimeout(() => {
  2075. textDiv.textContent = 'A';
  2076. setTimeout(() => {
  2077. textDiv.textContent = 'An';
  2078. setTimeout(() => {
  2079. textDiv.textContent = 'Ant';
  2080. setTimeout(() => {
  2081. textDiv.textContent = 'Anti';
  2082. setTimeout(() => {
  2083. textDiv.textContent = 'AntiM';
  2084. setTimeout(() => {
  2085. textDiv.textContent = 'AntiMo';
  2086. setTimeout(() => {
  2087. textDiv.textContent = 'AntiMoo';
  2088. setTimeout(() => {
  2089. textDiv.textContent = 'AntiMooA';
  2090. setTimeout(() => {
  2091. textDiv.textContent = 'AntiMooAd';
  2092. setTimeout(() => {
  2093. textDiv.textContent = 'AntiMooAdd';
  2094. setTimeout(() => {
  2095. textDiv.textContent = 'AntiMooAddi';
  2096. setTimeout(() => {
  2097. textDiv.textContent = 'AntiMooAddic';
  2098. setTimeout(() => {
  2099. textDiv.textContent = 'AntiMooAddict';
  2100. }, 500);
  2101. }, 500);
  2102. }, 500);
  2103. }, 500);
  2104. }, 500);
  2105. }, 500);
  2106. }, 500);
  2107. }, 500);
  2108. }, 500);
  2109. }, 500);
  2110. }, 500);
  2111. }, 500);
  2112. }, 500);
  2113. }, 10000);
  2114.  
  2115.  
  2116. textDiv.style.color = 'yellow';
  2117. textDiv.style.fontSize = '30px';
  2118. var middleWrap = document.getElementById('middle-wrap');
  2119.  
  2120. if (middleWrap) {
  2121. if (middleWrap.children.length >= 1) {
  2122. middleWrap.insertBefore(textDiv, middleWrap.children[1]);
  2123. } else {
  2124. middleWrap.appendChild(textDiv);
  2125. }
  2126. }
  2127.  
  2128. setInterval(() => {
  2129. pps = 0;
  2130. }, 2000);
  2131.  
  2132. let Config = {
  2133. serverUpdate: 1000 / 9,
  2134. breaking: false,
  2135. pushing: false,
  2136. oldTrap: null,
  2137. trapBroken: null,
  2138. antiBull: false,
  2139. aimBot: true,
  2140. breakHitReload: true,
  2141. autoAttack: false,
  2142. weapon: 0,
  2143. enemiesNear: [],
  2144. angle: 0,
  2145. move: 0,
  2146. messages: new Array([], []),
  2147. counter: 0,
  2148. resolver: function () {},
  2149. last: Date.now(),
  2150. WS: null
  2151. };
  2152.  
  2153. Config.tick = () => {
  2154. return new Promise((e) => (Config.resolver = e))
  2155. };
  2156.  
  2157. function fixTo(n, v) {
  2158. return parseFloat(n.toFixed(v));
  2159. }
  2160.  
  2161. function getAttackDir() {
  2162. let lastDir = Config.angle;
  2163. return fixTo(lastDir || 0, 2);
  2164. }
  2165.  
  2166. function doubleHeal() {
  2167. setTimeout(() => {
  2168. Sploop.place(2, getAttackDir());
  2169. setTimeout(() => {
  2170. Sploop.place(2, getAttackDir());
  2171. }, window.pingTime > 100 ? 0 : 30);
  2172. }, 0)
  2173. }
  2174.  
  2175. function tripleHeal() {
  2176. setTimeout(() => {
  2177. doubleHeal();
  2178. setTimeout(() => {
  2179. Sploop.place(2, getAttackDir());
  2180. }, 1e3);
  2181. }, 0);
  2182. }
  2183.  
  2184. let Toggle = {
  2185. autoBreak: true,
  2186. autoPush: true,
  2187. autoPlace: true,
  2188. autoSync: true,
  2189. autoHeal: true,
  2190. Replacer: true,
  2191. antiTrap: true,
  2192. markers: true,
  2193. aimBot: true,
  2194. smoothBarHealth: true,
  2195. safeWalk: true,
  2196. aimLerpAngle: true,
  2197. spikeNearSync: false,
  2198. spikeSyncPerfect: false,
  2199. trapSync: false
  2200. }
  2201.  
  2202. const items = [
  2203. {
  2204. id: 0,
  2205. name: "Tool Hammer",
  2206. description: "Gather materials",
  2207. range: 80,
  2208. damage: 25,
  2209. reload: 300,
  2210. weapon: true,
  2211. },
  2212. {
  2213. id: 1,
  2214. name: "Stone Sword",
  2215. description: "Sharp and pointy",
  2216. range: 135,
  2217. damage: 35,
  2218. reload: 300,
  2219. weapon: true,
  2220. },
  2221. {
  2222. id: 2,
  2223. name: "Stone Spear",
  2224. description: "Long melee range",
  2225. range: 160,
  2226. damage: 49,
  2227. reload: 700,
  2228. weapon: true,
  2229. },
  2230. {
  2231. id: 3,
  2232. name: "Stone Axe",
  2233. description: "Gathers materials faster",
  2234. range: 90,
  2235. damage: 30,
  2236. reload: 400,
  2237. weapon: true,
  2238. },
  2239. {
  2240. id: 4,
  2241. name: "Stone Musket",
  2242. description: "Deal Long Range Damage",
  2243. range: 1000,
  2244. damage: 49,
  2245. reload: 1500,
  2246. weapon: true,
  2247. },
  2248. {
  2249. id: 5,
  2250. name: "Wood Wall",
  2251. description: "A sturdy wall",
  2252. },
  2253. {
  2254. id: 6,
  2255. name: "Boost",
  2256. description: "Provides a thrust",
  2257. },
  2258. {
  2259. id: 7,
  2260. name: "Spike",
  2261. description: "Sharp defence",
  2262. },
  2263. {
  2264. id: 8,
  2265. name: "Platform",
  2266. description: "Shoot over structures",
  2267. },
  2268. {
  2269. id: 9,
  2270. name: "Trap",
  2271. description: "Snared enemies are stuck",
  2272. },
  2273. {
  2274. id: 10,
  2275. name: "Apple",
  2276. description: "Heals you",
  2277. },
  2278. {
  2279. id: 11,
  2280. name: "Shield",
  2281. description: "Reduces damage",
  2282. range: 55,
  2283. damage: 15,
  2284. reload: 500,
  2285. },
  2286. {
  2287. id: 12,
  2288. name: "Cookie",
  2289. description: "Heals you",
  2290. },
  2291. {
  2292. id: 13,
  2293. name: "Stick",
  2294. description: "Gathers resources quickly",
  2295. range: 100,
  2296. damage: 1,
  2297. reload: 400,
  2298. weapon: true,
  2299. },
  2300. {
  2301. id: 14,
  2302. name: "Windmill",
  2303. description: "Generates score over time",
  2304. },
  2305. {
  2306. id: 15,
  2307. name: "Hammer",
  2308. description: "Breaks structures faster",
  2309. range: 80,
  2310. damage: 12,
  2311. reload: 400,
  2312. weapon: true,
  2313. },
  2314. {
  2315. id: 16,
  2316. name: "Cosy Bed",
  2317. description: "Respawn at the bed",
  2318. },
  2319. {
  2320. id: 17,
  2321. name: "Katana",
  2322. description: "Excellent melee weapon",
  2323. range: 140,
  2324. damage: 40,
  2325. reload: 300,
  2326. weapon: true,
  2327. },
  2328. {
  2329. id: 18,
  2330. name: "Castle Spike",
  2331. description: "Great for bases",
  2332. },
  2333. {
  2334. id: 19,
  2335. name: "Powermill",
  2336. description: "Generates more score over time",
  2337. },
  2338. {
  2339. id: 20,
  2340. name: "Hard Spike",
  2341. description: "Sharper defence",
  2342. },
  2343. {
  2344. id: 21,
  2345. name: "Turret",
  2346. description: "Defence for your base",
  2347. },
  2348. {
  2349. id: 22,
  2350. name: "Cherry wood farm",
  2351. description: "Used for decoration and wood",
  2352. },
  2353. {
  2354. id: 23,
  2355. name: "Wood farm",
  2356. description: "Used for decoration and wood",
  2357. },
  2358. {
  2359. id: 24,
  2360. name: "Berry farm",
  2361. description: "Used for decoration and berries",
  2362. },
  2363. {
  2364. id: 25,
  2365. name: "Stone farm",
  2366. description: "Used for decoration and stone",
  2367. },
  2368. {
  2369. id: 26,
  2370. name: "Bow",
  2371. description: "Deal Long Range Damage",
  2372. range: 800,
  2373. damage: 25,
  2374. reload: 600,
  2375. weapon: true,
  2376. },
  2377. {
  2378. id: 27,
  2379. name: "XBow",
  2380. description: "Rapid fire bow",
  2381. range: 800,
  2382. damage: 27,
  2383. reload: 235,
  2384. weapon: true,
  2385. },
  2386. {
  2387. id: 28,
  2388. name: "Naginata",
  2389. description: "Long melee range",
  2390. range: 165,
  2391. damage: 52,
  2392. reload: 700,
  2393. weapon: true,
  2394. },
  2395. {
  2396. id: 29,
  2397. name: "Castle Wall",
  2398. description: "A very sturdy wall",
  2399. },
  2400. {
  2401. id: 30,
  2402. name: "Great Axe",
  2403. description: "More powerful axe.",
  2404. range: 94,
  2405. damage: 37,
  2406. reload: 400,
  2407. weapon: true,
  2408. },
  2409. {
  2410. id: 31,
  2411. name: "Bat",
  2412. description: "Hit enemies for a home run",
  2413. range: 115,
  2414. damage: 28,
  2415. reload: 700,
  2416. weapon: true,
  2417. },
  2418. {
  2419. id: 32,
  2420. name: "Diamond Axe",
  2421. description: "Gathers materials faster",
  2422. range: 90,
  2423. damage: 35.5,
  2424. reload: 400,
  2425. weapon: true,
  2426. },
  2427. {
  2428. id: 33,
  2429. name: "Gold Axe",
  2430. description: "Gathers materials faster",
  2431. range: 90,
  2432. damage: 33,
  2433. reload: 400,
  2434. weapon: true,
  2435. },
  2436. {
  2437. id: 34,
  2438. name: "Diamond Great Axe",
  2439. description: "More powerful axe.",
  2440. range: 94,
  2441. damage: 47,
  2442. reload: 400,
  2443. weapon: true,
  2444. },
  2445. {
  2446. id: 35,
  2447. name: "Gold Great Axe",
  2448. description: "More powerful axe.",
  2449. range: 94,
  2450. damage: 40,
  2451. reload: 400,
  2452. zs: 2,
  2453. weapon: true,
  2454. },
  2455. {
  2456. id: 36,
  2457. image: 136,
  2458. name: "Diamond Katana",
  2459. description: "Excellent melee weapon",
  2460. range: 140,
  2461. damage: 46.5,
  2462. reload: 300,
  2463. weapon: true,
  2464. },
  2465. {
  2466. id: 37,
  2467. name: "Gold Katana",
  2468. description: "Excellent melee weapon",
  2469. range: 140,
  2470. damage: 43,
  2471. reload: 300,
  2472. weapon: true,
  2473. },
  2474. {
  2475. id: 38,
  2476. name: "Diamond Spear",
  2477. description: "Long melee range",
  2478. range: 160,
  2479. damage: 53,
  2480. reload: 700,
  2481. weapon: true,
  2482. },
  2483. {
  2484. id: 39,
  2485. name: "Gold Spear",
  2486. description: "Long melee range",
  2487. range: 160,
  2488. damage: 51,
  2489. reload: 700,
  2490. weapon: true,
  2491. },
  2492. {
  2493. id: 40,
  2494. name: "Chillrend",
  2495. description: "A powerful force flows through this blade.",
  2496. range: 140,
  2497. damage: 48.5,
  2498. reload: 300,
  2499. weapon: true,
  2500. },
  2501. {
  2502. id: 41,
  2503. name: "Gold Stick",
  2504. description: "Gathers resources quickly",
  2505. range: 100,
  2506. damage: 1,
  2507. reload: 400,
  2508. weapon: true,
  2509. },
  2510. {
  2511. id: 42,
  2512. name: "Diamond Stick",
  2513. description: "Gathers resources quickly",
  2514. range: 100,
  2515. damage: 1,
  2516. reload: 400,
  2517. weapon: true,
  2518. },
  2519. {
  2520. id: 43,
  2521. name: "Ruby Stick",
  2522. description: "Gathers resources quickly",
  2523. range: 100,
  2524. damage: 1,
  2525. reload: 400,
  2526. weapon: true,
  2527. },
  2528. {
  2529. id: 44,
  2530. name: "Diamond Naginata",
  2531. description: "Long melee range",
  2532. range: 165,
  2533. damage: 56,
  2534. reload: 700,
  2535. weapon: true,
  2536. },
  2537. {
  2538. id: 45,
  2539. name: "Gold Naginata",
  2540. description: "Long melee range",
  2541. range: 165,
  2542. damage: 54,
  2543. reload: 700,
  2544. weapon: true,
  2545. },
  2546. {
  2547. id: 46,
  2548. name: "Gold Tool Hammer",
  2549. description: "Gather materials",
  2550. range: 80,
  2551. damage: 32,
  2552. reload: 300,
  2553. weapon: true,
  2554. },
  2555. {
  2556. id: 47,
  2557. name: "Diamond Tool Hammer",
  2558. description: "Gather materials",
  2559. range: 80,
  2560. damage: 38,
  2561. reload: 300,
  2562. weapon: true,
  2563. },
  2564. {
  2565. id: 48,
  2566. name: "Ruby Tool Hammer",
  2567. description: "Gather materials",
  2568. range: 80,
  2569. damage: 41,
  2570. reload: 300,
  2571. weapon: true,
  2572. },
  2573. {
  2574. id: 49,
  2575. name: "Roof",
  2576. description: "Take cover from projectiles",
  2577. },
  2578. {
  2579. id: 50,
  2580. name: "Pearl",
  2581. description: "Teleport on impact",
  2582. range: 700,
  2583. damage: 10,
  2584. reload: 10000,
  2585. weapon: true,
  2586. },
  2587. {
  2588. id: 51,
  2589. name: "Teleporter",
  2590. description: "Teleports to location on map",
  2591. },
  2592. {
  2593. id: 52,
  2594. name: "Stone Dagger",
  2595. description: "A stubbier sword",
  2596. range: 80,
  2597. damage: 22,
  2598. reload: 150,
  2599. weapon: true,
  2600. },
  2601. {
  2602. id: 53,
  2603. name: "Gold Dagger",
  2604. description: "A stubbier sword",
  2605. range: 80,
  2606. damage: 24,
  2607. reload: 150,
  2608. weapon: true,
  2609. },
  2610. {
  2611. id: 54,
  2612. name: "Diamond Dagger",
  2613. description: "A stubbier sword",
  2614. range: 80,
  2615. damage: 26,
  2616. reload: 150,
  2617. weapon: true,
  2618. },
  2619. {
  2620. id: 55,
  2621. name: "Ruby Dagger",
  2622. description: "A stubbier sword",
  2623. range: 80,
  2624. damage: 29,
  2625. reload: 150,
  2626. weapon: true,
  2627. },
  2628. {
  2629. id: 56,
  2630. name: "Secret Item",
  2631. description: "Dont leak how to get it :)",
  2632. range: 115,
  2633. damage: 28,
  2634. reload: 2000,
  2635. weapon: true,
  2636. },
  2637. {
  2638. id: 57,
  2639. name: "Daedric Scythe",
  2640. description: "Whispers fill the air",
  2641. range: 160,
  2642. damage: 52,
  2643. reload: 450,
  2644. weapon: true,
  2645. },
  2646. ];
  2647.  
  2648. class technices {
  2649. calculateSpikeAndTrapHoles() {
  2650. let areaSize = 150;
  2651. for (let angle = 0; angle < Math.PI * 2; angle += Math.PI / 8) {
  2652. let distance = 100;
  2653. let spot = {
  2654. x: user.x + distance * Math.cos(angle),
  2655. y: user.y + distance * Math.sin(angle)
  2656. };
  2657. if (!this.isSpaceOccupied(spot)) {
  2658. let spikeNearby = Entity.find(e => e && [2, 7, 17].includes(e.type) && getDistance(e, spot) <= 50);
  2659. if (spikeNearby) {
  2660. Sploop.place(7, getAngle(spot, user));
  2661. } else {
  2662. Sploop.place(4, getAngle(spot, user));
  2663. }
  2664. }
  2665. }
  2666. }
  2667.  
  2668. placeTrapsAround() {
  2669. placeObjects++
  2670. for (let angle = 0; angle < Math.PI * 2; angle += Math.PI / 2) {
  2671. let distance = 80;
  2672. let spot = {
  2673. x: user.x + distance * Math.cos(angle),
  2674. y: user.y + distance * Math.sin(angle)
  2675. };
  2676. if (!this.isSpaceOccupied(spot) && placeObjects >= 4) {
  2677. Sploop.place(7, getAngle(spot, user));
  2678. placeObjects = 0;
  2679. }
  2680. }
  2681. }
  2682.  
  2683. analyzePotentialTrapSpots() {
  2684. let potentialSpots = [];
  2685. for (let i = -100; i <= 100; i += 50) {
  2686. for (let j = -100; j <= 100; j += 50) {
  2687. let spot = { x: user.x + i, y: user.y + j };
  2688. if (!this.isSpaceOccupied(spot)) {
  2689. potentialSpots.push(spot);
  2690. }
  2691. }
  2692. }
  2693. return potentialSpots;
  2694. }
  2695.  
  2696. analyzePotentialSpikeSpots() {
  2697. let potentialSpots = [];
  2698. if (enemy) {
  2699. potentialSpots.push({ x: enemy.x + 50, y: enemy.y })
  2700. potentialSpots.push({ x: enemy.x - 50, y: enemy.y })
  2701. potentialSpots.push({ x: enemy.x, y: enemy.y + 50 })
  2702. potentialSpots.push({ x: enemy.x, y: enemy.y - 50 })
  2703. }
  2704. return potentialSpots;
  2705. }
  2706.  
  2707. isSpaceOccupied(position) {
  2708. return Entity.some(e => getDistance(e, position) <= 50);
  2709. }
  2710.  
  2711. analyzeAndPlace() {
  2712. let areaSize = 200;
  2713. for (let i = -areaSize; i <= areaSize; i += 50) {
  2714. for (let j = -areaSize; j <= areaSize; j += 50) {
  2715. let spot = { x: user.x + i, y: user.y + j };
  2716. if (!this.isSpaceOccupied(spot)) {
  2717. if (Math.random() < 0.5) {
  2718. placeObjects++;
  2719.  
  2720. if (placeObjects >= 4) {
  2721. Sploop.place(7, getAngle(spot, user));
  2722. placeObjects = 0;
  2723. }
  2724. } else {
  2725. placeObjects++
  2726.  
  2727. if (placeObjects >= 4) {
  2728. Sploop.place(4, getAngle(spot, user));
  2729. placeObjects = 0;
  2730. }
  2731. }
  2732. }
  2733. }
  2734. }
  2735. }
  2736.  
  2737. calculateBestBreakAngle(spikes) {
  2738. let bestAngle = null;
  2739. let maxSpikesHit = 0;
  2740.  
  2741. for (let angle = 0; angle < Math.PI * 2; angle += Math.PI / 16) {
  2742. let hitSpikes = spikes.filter(spike => Math.abs(getAngle(spike, user) - angle) < Math.PI / 16);
  2743. if (hitSpikes.length > maxSpikesHit) {
  2744. maxSpikesHit = hitSpikes.length;
  2745. bestAngle = angle;
  2746. }
  2747. }
  2748. return bestAngle;
  2749. }
  2750.  
  2751.  
  2752.  
  2753. }
  2754.  
  2755. const Technices = new technices();
  2756.  
  2757. class Macro {
  2758. constructor(advanced, spike, trap, mill, food) {
  2759. this.advanced = advanced;
  2760. this.spike = spike;
  2761. this.trap = trap;
  2762. this.mill = mill;
  2763. this.food = food;
  2764. }
  2765.  
  2766. update() {
  2767. if (keyDown[this.spike]) Sploop.place(4);
  2768. if (keyDown[this.trap]) Sploop.place(7);
  2769. if (keyDown[this.mill]) Sploop.place(5);
  2770. if (keyDown[this.food]) Sploop.place(2);
  2771. }
  2772.  
  2773. };
  2774.  
  2775. let Placer = new Macro(true, 86, 70, 78, 81);
  2776.  
  2777. var negative = {
  2778. delayed: false,
  2779. found: false,
  2780. lastAngle: 0,
  2781. angle: 0,
  2782. };
  2783. var positive = {
  2784. found: false,
  2785. lastAngle: 0,
  2786. angle: 0,
  2787. };
  2788.  
  2789. var antiTrap = {
  2790. nDelayed: false,
  2791. pLastAngle: 0,
  2792. nLastAngle: 0,
  2793. pFound: false,
  2794. nFound: false,
  2795. pAngle: 0,
  2796. nAngle: 0,
  2797. };
  2798.  
  2799. if (user.skin !== user.previousSkin) {
  2800. skinLoaded = false;
  2801.  
  2802. setTimeout(() => {
  2803. skinLoaded = true;
  2804. }, 1500);
  2805. }
  2806.  
  2807.  
  2808. const toRad = (degrees) => {
  2809. degrees = degrees % 360;
  2810. if (degrees < 0) {
  2811. degrees += 360;
  2812. }
  2813. return (degrees * Math.PI) / 180;
  2814. };
  2815.  
  2816. const toDegree = (radians) => {
  2817. return (radians * 180) / Math.PI;
  2818. };
  2819.  
  2820. function getDistance(a, b) {
  2821. if (a && b) return Math.sqrt(Math.pow((b.x - a.x), 2) + Math.pow((b.y - a.y), 2));
  2822. }
  2823.  
  2824. function getAngle(a, b) {
  2825. if (a && b) return Math.atan2(a.y - b.y, a.x - b.x);
  2826. }
  2827.  
  2828. class Sploop {
  2829. static place(id, angle = Config.angle) {
  2830. angle = (65535 * (angle + Math.PI)) / (2 * Math.PI);
  2831. const back = Config.angle;
  2832.  
  2833. Game.send(0, id);
  2834. Game.send(19, 255 & angle, angle >> 8 & 255);
  2835. Sploop.watch(back, true);
  2836. Game.send(18);
  2837. Game.send(0, Config.weapon);
  2838. }
  2839.  
  2840. static equip(id) {
  2841. if (user.skin !== id && skinLoaded == true) {
  2842. Game.send(5, id);
  2843. }
  2844. }
  2845.  
  2846. static parseAngle(a) {
  2847. const b = (a + Math.PI) * 65535 / (Math.PI * 2);
  2848. return [b & 255, b >> 8 & 255];
  2849. }
  2850.  
  2851. static walk(angle = Config.move) {
  2852. if (typeof angle !== 'number') {
  2853. return Game.send(15);
  2854. } else {
  2855. angle = (65535 * (angle + Math.PI)) / (2 * Math.PI);
  2856. Game.send(1, 255 & angle, (angle >> 8) & 255);
  2857. }
  2858. }
  2859.  
  2860. static take(id) {
  2861. Game.send(0, id);
  2862. }
  2863.  
  2864. static chat(text) {
  2865. const msg = encoder.encode(text);
  2866. Game.send(7, ...msg);
  2867. }
  2868.  
  2869. static hit(angle) {
  2870. angle = (65535 * (angle + Math.PI)) / (2 * Math.PI);
  2871.  
  2872. Game.send(19, 255 & angle, (angle >> 8) & 255);
  2873. Game.send(18);
  2874. }
  2875.  
  2876. static watch(angle, isTransformed = false) {
  2877.  
  2878. if (isTransformed) {
  2879. Game.send(13, 255 & angle, angle >> 8 & 255);
  2880. return;
  2881. } else {
  2882. const angle2 = 65535 * (angle + Math.PI) / (2 * Math.PI);
  2883. Game.send(13, 255 & angle2, angle2 >> 8 & 255);
  2884. }
  2885. }
  2886.  
  2887. static offensive() {
  2888. let offensive = () => {
  2889. let distance = enemy ? getDistance(enemy, user) : 0;
  2890.  
  2891. if (user.x >= 160 && user.y >= 8000 && user.x <= 9840 && user.y <= 9000) return 9;
  2892. if (enemy && distance <= 300) return false && distance <= 150 ? 6 : 6;
  2893.  
  2894. return 6;
  2895. }
  2896.  
  2897. setTimeout(Sploop.equip(offensive()), 0);
  2898. }
  2899.  
  2900. static invisHit(hitWith, angle, switchBackTo, lookBackTo = Config.angle) {
  2901. if (!weaponReload) return;
  2902.  
  2903. Game.send(0, hitWith);
  2904. Sploop.hit(angle);
  2905. Game.send(0, switchBackTo);
  2906. Sploop.watch(lookBackTo);
  2907. }
  2908.  
  2909. static ally(build) {
  2910. let id = build.typeof === "number" ? build : build.id2;
  2911. if (user.team) {
  2912. let length = user.team.length;
  2913. for (let index = 0; index < length; index++) {
  2914. let teammate = user.team[index];
  2915. if (build.id2 == teammate.id2) {
  2916. return true;
  2917. }
  2918. }
  2919. }
  2920. return false;
  2921. }
  2922.  
  2923. static mine(build) {
  2924. if (this.ally(build) || user.id2 == build.id2) {
  2925. return !0;
  2926. }
  2927. return !1;
  2928. }
  2929.  
  2930. static healthChange(health, oldHealth) {
  2931. if (oldHealth > health) {
  2932. user.hitDate = Config.counter;
  2933. };
  2934.  
  2935. user.health = health;
  2936. }
  2937.  
  2938. static canPlace(where, checkIsPlayer) {
  2939.  
  2940. let placeCoord = {
  2941. y: user.y + 80 * Math.sin(where),
  2942. x: user.x + 80 * Math.cos(where),
  2943. };
  2944. return checkIsPlayer ? Entity.find(entity => entity && entity.type == 0 && getDistance(placeCoord, entity) < 90) : Entity.find(entity => entity && [3, 4, 1, 19, 20, 38, 25, 34, 33, 32, 21, 29, 1].includes(entity.type) ? getDistance(placeCoord, entity) < 135 : getDistance(placeCoord, entity) < 90);
  2945.  
  2946. console.log("check canPlace");
  2947. }
  2948.  
  2949. static instaToggled() {
  2950. Sploop.equip(2);
  2951. Sploop.place(4, Config.angle);
  2952. Sploop.invisHit(0, Config.angle, 1);
  2953. setTimeout(() => Sploop.offensive(), 1200);
  2954. }
  2955.  
  2956. static syncCool(angle) {
  2957. if (enemy.skin != 6 && enemy.skin != 4) Sploop.equip(2);
  2958. Sploop.invisHit(0, angle, 1);
  2959. setTimeout(() => Sploop.offensive(), 1200);
  2960. }
  2961.  
  2962. static antiTrap(id) {
  2963. const originalAngle = Config.angle;
  2964. const angleStep = 360 / 90;
  2965. for (let i = 0; i < 3; i++) {
  2966. const angle = i * angleStep;
  2967. setTimeout(() => {
  2968. Sploop.place(id, angle)
  2969. }, 0);
  2970. }
  2971. }
  2972.  
  2973. static rotateAroundObject(x, y) {
  2974. let currentRotationAngle = 0;
  2975. let lerpProgress = 0;
  2976. const lerpDuration = 1000;
  2977. if (!weaponReload) {
  2978. currentRotationAngle += 0.05;
  2979. if (currentRotationAngle > Math.PI * 2) {
  2980. currentRotationAngle -= Math.PI * 2;
  2981. }
  2982. const targetX = x + 100 * Math.cos(currentRotationAngle);
  2983. const targetY = y + 100 * Math.sin(currentRotationAngle);
  2984. const targetLookAngle = getAngle({ x: user.x, y: user.y }, { x: targetX, y: targetY });
  2985. if (Toggle.aimLerpAngle) {
  2986. lerpProgress += Date.now() / lerpDuration;
  2987. const lerpedAngle = Sploop.lerpAngle(user.angle, targetLookAngle, Math.min(1, lerpProgress));
  2988. const b = Sploop.parseAngle(lerpedAngle);
  2989. Game.send(13, b[0], b[1]);
  2990.  
  2991. if (lerpProgress >= 1) {
  2992. lerpProgress = 0;
  2993. }
  2994. } else {
  2995. const b = Sploop.parseAngle(targetLookAngle);
  2996. Game.send(13, b[0], b[1]);
  2997. }
  2998. }
  2999. }
  3000.  
  3001. static lerpAngle(a, b, t) {
  3002. const da = (b - a + Math.PI * 3) % (Math.PI * 2) - Math.PI;
  3003. return a + da * t;
  3004. }
  3005.  
  3006. static healingTick(speed) {
  3007. const spiker = Entity.find(a => a && [2, 7, 17].includes(a.type) && !Sploop.mine(a) && !teammates.includes(a.id2) && getDistance(a, user) < 60);
  3008.  
  3009. setTimeout(() => {
  3010. return Sploop.place(2);
  3011. }, (Config.serverUpdate - 20 - Config.ping) + parseInt(speed));
  3012.  
  3013. if (user.inTrap) {
  3014. if (spiker) {
  3015. setTimeout(() => {
  3016. return Sploop.extraHealSupport(3);
  3017. }, parseInt(speed));
  3018. }
  3019. }
  3020.  
  3021. let distance = enemy ? getDistance(enemy, user) : 0;
  3022. if (enemy) {
  3023. const currentTime = Date.now();
  3024. const timeSinceLastPlace = currentTime - lastPlaceTime;
  3025. if (user.health < healthThreshold && distance <= enemyThreshold) {
  3026. if (Toggle.autoHat) Sploop.equip(Toggle.onlyDefendCrystal ? 4 : 6);
  3027. if (timeSinceLastPlace >= spamCooldown && placeExecutions < maxPlaceExecutions) {
  3028. placeExecutions++;
  3029. lastPlaceTime = currentTime;
  3030. Sploop.place(2, getAttackDir());
  3031. const nextInterval = Math.max(300, spamCooldown - distance / 2);
  3032. setTimeout(() => {
  3033. if (placeExecutions < maxPlaceExecutions) {
  3034. tripleHeal();
  3035. lastPlaceTime = Date.now();
  3036. }
  3037. }, nextInterval);
  3038. }
  3039. } else {
  3040. placeExecutions = 0;
  3041. }
  3042.  
  3043. let spikeNearby = Entity.find(e => e && [2, 7, 17].includes(e.type) && getDistance(e, enemy) <= 55 && !Sploop.mine(e) && !teammates.includes(e.id2));
  3044. let enemyCanSync = Entity.find(e => e && [2, 28, 57].includes(e.weapon) && !Sploop.mine(e) && !teammates.includes(e.id2));
  3045.  
  3046. if (spikeNearby && distance <= 200 && enemyCanSync) {
  3047. return Sploop.extraHealSupport(4);
  3048. }
  3049. }
  3050.  
  3051. if (user.health < 20) {
  3052. setTimeout(() => {
  3053. return Sploop.extraHealSupport(4);
  3054. }, Config.serverUpdate - Config.ping);
  3055. }
  3056. }
  3057.  
  3058. static extraHealSupport(count) {
  3059. for (let i = 0; i <= count; i++) Sploop.place(2, getAttackDir())
  3060. }
  3061.  
  3062. static update() {
  3063. Config.counter += 1;
  3064. Config.resolver();
  3065. Config.last = Date.now();
  3066.  
  3067. if (user.alive) {
  3068. user.timeOfLastOmg = 0;
  3069. user.shameCounter = 0;
  3070.  
  3071. if (user.health > user.prevHealth) {
  3072. if (user.shameCounter < 8) {
  3073. if (Date.now() - user.timeOfLastDmg < 200) {
  3074. user.shameCounter += 1;
  3075. }
  3076. } else {
  3077. user.shameCounter = 0;
  3078. }
  3079. if (user.shameCounter > 1) {
  3080. if (Date.now() - user.timeOfLastDmg >= 200) {
  3081. user.shameCounter -= 1;
  3082. }
  3083. }
  3084. }
  3085.  
  3086. if (user.health < user.prevHealth) user.timeOfLastDmg = Date.now();
  3087. if (user.clowned) user.shameCounter = 0;
  3088.  
  3089. // Auto heal
  3090. const speed = 22.5;
  3091.  
  3092. if (Toggle.autoHeal && user.health < 100) {
  3093. Sploop.healingTick(speed);
  3094. }
  3095.  
  3096. if (Toggle.aimBot && !user.inTrap) {
  3097. if (getDistance(enemy, user) <= 200 && Config.aimbot) {
  3098. const b = Sploop.parseAngle(getAngle(enemy, user));
  3099. Game.send(13, b[0], b[1]);
  3100. if (getDistance(enemy, user) <= 120) {
  3101. placeObjects++
  3102.  
  3103. if (placeObjects >= 5) {
  3104. Sploop.place(7, getAngle(enemy, user));
  3105. placeObjects = 0;
  3106. }
  3107. }
  3108. }
  3109. }
  3110. let wasBreaking = Config.breaking;
  3111. Config.breaking = false;
  3112. let userInTrap = Entity.find(e => e && e.type == 6 && getDistance(e, user) <= 56 && !Sploop.mine(e) && !teammates.includes(e.id2));
  3113.  
  3114. if (userInTrap && Toggle.autoBreak) {
  3115. Sploop.rotateAroundObject(userInTrap.x, userInTrap.y);
  3116.  
  3117. Config.breaking = true;
  3118. Config.aimbot = false;
  3119. user.inTrap = true;
  3120. var distance = getDistance(enemy, user)
  3121. var breakingTrap = getAngle(userInTrap, user)
  3122. Sploop.equip(11);
  3123. Sploop.invisHit(1, breakingTrap, 1);
  3124.  
  3125. if (Toggle.antiTrap) {
  3126. placeObjects++;
  3127. if (placeObjects >= 6) {
  3128. Sploop.antiTrap(7);
  3129. placeObjects = 0;
  3130. }
  3131. }
  3132.  
  3133. Config.oldTrap = userInTrap;
  3134.  
  3135. } else if (wasBreaking) {
  3136.  
  3137. if (Config.oldTrap) {
  3138. let oldTrap = getAngle(Config.oldTrap, user);
  3139. Sploop.place(7, oldTrap);
  3140. setTimeout(() => Sploop.offensive(), 1300);
  3141. Sploop.equip(6);
  3142.  
  3143. }
  3144.  
  3145. user.inTrap = false;
  3146. Config.breaking = false;
  3147. Config.aimbot = true;
  3148. Config.oldTrap = null;
  3149. }
  3150.  
  3151. if (Toggle.safeWalk && !user.inTrap) {
  3152. const inSpike = Entity.find(a => a && [2, 7, 17].includes(a.type) && !Sploop.mine(a) && !teammates.includes(a.id2) && getDistance(a, user) <= 120);
  3153. const spikeAim = inSpike ? getAngle(inSpike, user) : null;
  3154. if (inSpike) {
  3155. placeObjects++;
  3156. if (getDistance(enemy, user) <= 250 && placeObjects >= 8) {
  3157. Sploop.place(4, getAngle(enemy, user));
  3158. Sploop.place(7, spikeAim * 1.2);
  3159. placeObjects = 0;
  3160. }
  3161.  
  3162. Sploop.take(1);
  3163.  
  3164. if (wsPushing) return Sploop.walk('stop');
  3165.  
  3166. if (inSpike.length > 2) {
  3167. const greatBreak = Technices.calculateBestBreakAngle(inSpike);
  3168. Sploop.hit(greatBreak);
  3169. } else {
  3170. Sploop.hit(spikeAim);
  3171. }
  3172. }
  3173. }
  3174.  
  3175. let wasPushing = Config.pushing;
  3176. Config.pushing = false;
  3177.  
  3178. if (enemy && !userInTrap && user.alive) {
  3179. let distance = getDistance(enemy, user);
  3180.  
  3181. if (Toggle.autoPush && distance <= 165) {
  3182. let trap = Entity.find(c => c && getDistance(c, enemy) <= 60 && c.type == 6 && Sploop.mine(c) && !teammates.includes(c.id2));
  3183.  
  3184. if (wsPushing && !trap) {
  3185. wsPushing = false;
  3186. Sploop.walk('stop');
  3187. }
  3188.  
  3189. if (trap) {
  3190. let spikes = Entity.filter(c => c && [2, 7, 17].includes(c.type) && Sploop.mine(c) && getDistance(c, trap) <= 95 && !teammates.includes(c.id2));
  3191. if (wsPushing && !spikes.length) {
  3192. wsPushing = false;
  3193. }
  3194. if (spikes.length) {
  3195. let spike = spikes.sort((a, b) => getDistance(a, enemy) - getDistance(b, enemy))[0];
  3196. let angle = getAngle(enemy, spike);
  3197. distance = getDistance(enemy, spike) + 70;
  3198. let position = {
  3199. x: spike.x + (distance * Math.cos(angle)),
  3200. y: spike.y + (distance * Math.sin(angle))
  3201. };
  3202.  
  3203. distance = getDistance(position, user);
  3204.  
  3205. if (distance > 15) {
  3206. wsPushing = true;
  3207. angle = getAngle(position, user)
  3208. } else {
  3209. wsPushing = true;
  3210. angle = getAngle(enemy, user)
  3211. }
  3212.  
  3213. Config.pushing = true;
  3214. Sploop.walk(angle)
  3215. }
  3216. }
  3217. }
  3218.  
  3219. distance = getDistance(enemy, user)
  3220. if (Toggle.autoPlace && distance <= 190) {
  3221. let trap = Entity.find(c => c && c.type == 6 && Sploop.mine(c) && getDistance(c, enemy) <= 60 && !teammates.includes(c.id2));
  3222. let enemyPos = { x: enemy.x + enemy.xVel, y: enemy.y + enemy.yVel }
  3223. let userPos = { x: user.x + user.xVel, y: user.y + user.yVel }
  3224. distance = getDistance(enemyPos, userPos);
  3225. let angle = getAngle(enemyPos, userPos)
  3226. const nEA = getAngle(enemy, user)
  3227. const trapAngle = getAngle(trap, user);
  3228.  
  3229. if (trap) {
  3230. Config.aimbot = false;
  3231. enemy.inTrap = true;
  3232. for (let angle = 0; angle < Math.PI * 2; angle += Math.PI / 20) {
  3233. Sploop.rotateAroundObject(angle.x, angle.y)
  3234.  
  3235. let a = Sploop.canPlace(nEA + angle, false).length > 1;
  3236. let b = Sploop.canPlace(nEA - angle, false).length > 1;
  3237. if (!a && positive.angle !== angle && !positive.found) {
  3238. positive.angle = angle;
  3239. positive.found = true;
  3240. }
  3241.  
  3242. if (!b && negative.angle !== angle && !negative.found) {
  3243. negative.angle = angle;
  3244. negative.found = true;
  3245. }
  3246. }
  3247.  
  3248. const cantPlace = Sploop.canPlace(nEA + positive.angle, false).length > 1;
  3249. const cantPlace2 = Sploop.canPlace(nEA - negative.angle, false).length > 1;
  3250. if (!cantPlace && cantPlace2) {
  3251. positive.lastAngle = positive.angle;
  3252. placeObjects++
  3253.  
  3254. if (placeObjects >= 15) {
  3255. Sploop.place(4, nEA + positive.angle);
  3256. placeObjects = 0;
  3257. }
  3258. positive.found = false;
  3259. }
  3260.  
  3261. if (!cantPlace2 && cantPlace) {
  3262. negative.lastAngle = negative.angle;
  3263. placeObjects++
  3264.  
  3265. if (placeObjects >= 15) {
  3266. Sploop.place(4, nEA - negative.angle);
  3267. placeObjects = 0;
  3268. }
  3269. negative.found = false;
  3270. }
  3271. } else {
  3272. enemy.inTrap = false;
  3273. Config.aimbot = true;
  3274. if (distance <= 210) {
  3275.  
  3276. let cantPlace = Sploop.canPlace(nEA, true).length > 1;
  3277. if (!cantPlace) {
  3278. placeObjects++
  3279. Sploop.place(7, nEA);
  3280.  
  3281. if (placeObjects >= 6) {
  3282. Sploop.place(7, nEA + 0.45);
  3283. Sploop.place(7, nEA - 0.45);
  3284. placeObjects = 0;
  3285. }
  3286.  
  3287. if (distance <= 165) {
  3288. Technices.placeTrapsAround();
  3289. }
  3290. }
  3291. }
  3292. }
  3293. }
  3294.  
  3295. if (Toggle.autoSync && distance <= 165) {
  3296. Config.aimbot = false;
  3297. let userPos = { x: user.x + user.xVel, y: user.y + user.yVel }
  3298. let enemyPos = { x: enemy.x + user.xVel, y: user.y + user.yVel };
  3299. let spike = Entity.find(c => c && c.type == 7 && Sploop.mine(c) && !teammates.includes(c.id2) && getDistance(c, enemy) <= 62);
  3300.  
  3301. const nEA = getAngle(enemyPos, userPos)
  3302.  
  3303. if (enemy.health < 65 && !user.inTrap) {
  3304. Sploop.syncCool(nEA);
  3305. }
  3306. }
  3307.  
  3308. if (!enemy.inTrap && !user.inTrap && Toggle.spikeSyncPerfect && distance <= 165) {
  3309. Config.aimbot = false;
  3310. let userPos = { x: user.x + user.xVel, y: user.y + user.yVel }
  3311. let enemyPos = { x: enemy.x + user.xVel, y: user.y + user.yVel };
  3312.  
  3313. let spike = Entity.find(a => a && [2, 7, 17].includes(a.type) && Sploop.mine(a) && !teammates.includes(a.id2) && getDistance(a, enemyPos) <= 55);
  3314. let touch = (spike.x - 45, spike.y - 45, spike.x + 45, spike.y + 45, enemyPos.x, enemyPos.y);
  3315.  
  3316. const nEA = getAngle(enemyPos, userPos)
  3317.  
  3318. if (touch) {
  3319. Sploop.syncCool(nEA);
  3320. }
  3321. }
  3322.  
  3323. if (!enemy.inTrap && Toggle.spikeNearSync && distance <= 165) {
  3324. const spikes = Entity.find(a => a && [2, 7, 17].includes(a.type) && Sploop.mine(a) && !teammates.includes(a.id2) && getDistance(a, enemyPos) <= 135);
  3325. Config.spikeSync = true;
  3326.  
  3327. const near = (spikes.x - 45, spikes.y - 45, spikes.x + 45, spikes.y + 45, enemyPos.x - 45, enemyPos.y - 45, enemyPos.x + 45, enemyPos.y + 45);
  3328. if (near && Config.spikeSync) {
  3329. let spikeangle = getAngle(spikes, user)
  3330. Sploop.place(4, spikeangle);
  3331. Sploop.syncCool(spikeangle);
  3332.  
  3333. Config.spikeSync = false;
  3334. setTimeout(() => {Config.spikeSync = true}, 2000);
  3335. }
  3336. }
  3337.  
  3338. if (wasPushing && !Config.pushing) Sploop.walk('stop');
  3339. }
  3340. }
  3341. }
  3342. }
  3343.  
  3344. const prevRect = CanvasRenderingContext2D.prototype.clearRect;
  3345. CanvasRenderingContext2D.prototype.clearRect = function (x, y, width, height) {
  3346. if (this.canvas.id === "game-canvas") {
  3347. ctxt = this.canvas.getContext("2d");
  3348. }
  3349. return prevRect.apply(this, arguments);
  3350. }
  3351. class Img extends Image {
  3352. constructor(src, width = Img.width, height = Img.height) {
  3353. super(width, height);
  3354.  
  3355. this.src = src;
  3356. }
  3357. }
  3358.  
  3359. function makeColumn(offsetX, sid, name, icon) {
  3360. const column = document.createElement("column");
  3361. column.style = `
  3362. width: 350px;
  3363. height: auto;
  3364. color: white;
  3365. z-index: 3;
  3366. top: ${100 * column.length}px;
  3367. left: ${offsetX}%;
  3368. background-color: #1e1e1e;
  3369. position: absolute;
  3370. pointer-events: all;
  3371. touch-events: all;
  3372. scrollbar-color: #1e1e1e transparent;
  3373. text-align: center;
  3374. transition: 0.5s;
  3375. `;
  3376.  
  3377. column.id = sid;
  3378. column.innerHTML = `<i class="menu-text-icon ${icon}"></i> - ${name} - <i class="menu-text-icon ${icon}"><br>`;
  3379. column.style.userSelect = "none";
  3380. column.draggable = true;
  3381.  
  3382. document.documentElement.appendChild(column);
  3383.  
  3384. let _offsetX = offsetX / window.innerWidth;
  3385. let offsetY = 5 / window.innerHeight;
  3386.  
  3387. column.addEventListener("dragstart", e => {
  3388. const elementX = parseInt(column.style.left);
  3389. const elementY = parseInt(column.style.top);
  3390. _offsetX = elementX - e.clientX;
  3391. offsetY = elementY - e.clientY;
  3392. });
  3393.  
  3394. column.addEventListener("dragend", e => {
  3395. column.style.top = e.clientY + offsetY + "px";
  3396. column.style.left = e.clientX + _offsetX + "px";
  3397. });
  3398. }
  3399. makeColumn(40, "column", "AntiMooAddict", "bi bi-display");
  3400.  
  3401. class Toggles {
  3402. constructor(column, name, option) {
  3403. this.toggleElement = document.createElement("input");
  3404. this.toggleText = document.createElement("label");
  3405. this.lineSeparator = document.createElement("br");
  3406. this.toggleText.style = "display: inline-block; width: 97.5%; height: 35px; background: #313131; font-size: 12px; margin-top: 2px; color: #fff; transition: 0.5s;";
  3407. this.toggleText.className = "sigittariusFeature";
  3408. this.toggleElement.type = "checkbox";
  3409. this.toggleElement.style.visibility = "hidden";
  3410. this.toggleElement.checked = Toggle[option];
  3411. this.toggleText.style.background = this.toggleElement.checked ? "#313131" : "#1e1e1e";
  3412. this.toggleElement.onchange = () => {
  3413. Toggle[option] = !Toggle[option];
  3414.  
  3415. this.toggleText.style.background = this.toggleElement.checked ? "#313131" : "#1e1e1e";
  3416. }
  3417.  
  3418. this.toggleText.innerHTML = name;
  3419. document.getElementById(column).appendChild(this.toggleText);
  3420. document.getElementById(column).appendChild(this.lineSeparator);
  3421. this.toggleText.appendChild(this.toggleElement);
  3422. }
  3423. }
  3424.  
  3425. new Toggles("column", "Markers", "markers");
  3426. new Toggles("column", "Smooth HP", "smoothBarHealth");
  3427. new Toggles("column", "Aim Force", "aimForce")
  3428. new Toggles("column", "Lerp Angle", "aimLerpAngle");
  3429. new Toggles("column", "Auto Smart Break", "autoBreak");
  3430. new Toggles("column", "Auto Heal", "autoHeal");
  3431. new Toggles("column", "Anti Trap", "antiTrap");
  3432. new Toggles("column", "Safe Walk", "safeWalk")
  3433. new Toggles("column", "Auto Placer", "autoPlace");
  3434. new Toggles("column", "Auto Replacer", "Replacer");
  3435. new Toggles("column", "Auto Sync", "autoSync");
  3436. new Toggles("column", "Spike Tick", "spikeSyncPerfect");
  3437. new Toggles("column", "NearSpike Sync", "spikeNearSync");
  3438. new Toggles("column", "Trap Sync", "trapSync");
  3439. new Toggles("column", "Aim Bot", "aimBot");
  3440. new Toggles("column", "Auto Push", "autoPush");
  3441.  
  3442. class Aim {
  3443. constructor() {
  3444. this._targetAim = 0;
  3445. this.safeAim = 0;
  3446. this.x = 0;
  3447. this.y = 0;
  3448. this.x2 = 0;
  3449. this.y2 = 0;
  3450. }
  3451.  
  3452. set targetAim(val) {
  3453. this._targetAim = val;
  3454.  
  3455. this.x2 = window.innerWidth / 2 + Math.cos(val) * 10;
  3456. this.y2 = window.innerHeight / 2 + Math.sin(val) * 10;
  3457. }
  3458.  
  3459. countAngle(x, y, x1, y1) {
  3460. const opposite = y1 - y;
  3461. const adjacent = x1 - x;
  3462.  
  3463. return 1 / Math.tan(opposite / adjacent);
  3464. }
  3465.  
  3466. safeAngle(baseAngle) {
  3467. const a = 0.95;
  3468.  
  3469. return baseAngle * a + this.safeAim * (1 - a);
  3470. }
  3471.  
  3472. executeModule() {
  3473. const velocity = 0.5 + Math.random() * 0.5;
  3474. const velocityX = velocity + Math.random() * 0.15 - 0.15 / 2;
  3475. const velocityY = velocity + Math.random() * 0.15 - 0.15 / 2;
  3476. const deviationX = Math.random() * 0.35 - 0.22 / 2;
  3477. const deviationY = Math.random() * 0.35 - 0.22 / 2;
  3478.  
  3479. this.x = deviationX + (this.x || 0) * velocityX + this.x2 * (1 - velocityX);
  3480. this.y = deviationY + (this.y || 0) * velocityY + this.x2 * (1 - velocityY);
  3481.  
  3482. const Aim = this.countAngle(window.innerWidth / 2, window.innerHeight / 2, this.x, this.y);
  3483.  
  3484. this.safeAim = Aim;
  3485.  
  3486. if (Toggle.aimForce) Sploop.watch(Aim);
  3487. }
  3488. }
  3489.  
  3490. const Images = {
  3491. gaugeBackground: new Img("https://i.imgur.com/xincrX4.png"),
  3492. gaugeFront: new Img("https://i.imgur.com/6AkHQM4.png"),
  3493. };
  3494.  
  3495. class drawingOptions {
  3496.  
  3497. static previousPositions = new Map();
  3498.  
  3499. static drawPossiblePlace(ctx, entity, fst) {
  3500. const animationDuration = 37;
  3501. const currentTime = Date.now();
  3502.  
  3503. if (!this.previousPositions.has(entity)) {
  3504. this.previousPositions.set(entity, { x: entity.x, y: entity.y, startTime: currentTime });
  3505. }
  3506.  
  3507. const previousPosition = this.previousPositions.get(entity);
  3508. const elapsedTime = currentTime - previousPosition.startTime;
  3509.  
  3510. if (elapsedTime < animationDuration) {
  3511. const progress = elapsedTime / animationDuration;
  3512. const interpolatedX = previousPosition.x + (entity.x - previousPosition.x) * progress;
  3513. const interpolatedY = previousPosition.y + (entity.y - previousPosition.y) * progress;
  3514.  
  3515. this.drawCircle(ctx, interpolatedX, interpolatedY, fst);
  3516. } else {
  3517. this.drawCircle(ctx, entity.x, entity.y, fst);
  3518.  
  3519. previousPosition.x = entity.x;
  3520. previousPosition.y = entity.y;
  3521. previousPosition.startTime = currentTime;
  3522. }
  3523. }
  3524.  
  3525. static drawCircle(ctx, x, y, fst) {
  3526. ctx.save();
  3527. ctx.globalAlpha = 1;
  3528. ctx.fillStyle = fst;
  3529. ctx.beginPath();
  3530. ctx.moveTo(x, y);
  3531. ctx.arc(x, y, 40, 0, 2 * Math.PI);
  3532. ctx.fill();
  3533. ctx.restore();
  3534. }
  3535.  
  3536. static lines(ctx, entity, entity2) {
  3537. ctx.save();
  3538. ctx.globalAlpha = 0.75;
  3539. ctx.strokeStyle = "#000000";
  3540. ctx.lineCap = "round";
  3541. ctx.lineWidth = 1;
  3542. ctx.beginPath();
  3543. ctx.moveTo(entity.x, entity.y);
  3544. ctx.lineTo(entity2.x, entity2.y);
  3545. ctx.stroke();
  3546. ctx.restore();
  3547. }
  3548.  
  3549. static marker(ctx, color) {
  3550. ctx.strokeStyle = "#303030";
  3551. ctx.lineWidth = 3;
  3552. ctx.fillStyle = color;
  3553. ctx.beginPath();
  3554. ctx.arc(0, 0, 9, 0, 2 * Math.PI);
  3555. ctx.fill();
  3556. ctx.stroke();
  3557. ctx.closePath();
  3558. }
  3559.  
  3560. static drawImage(ctx, image) {
  3561. if (!(image && image.naturalHeight !== 0)) return;
  3562. const w = image.width;
  3563. const h = image.height;
  3564. const s = .5;
  3565. ctx.drawImage(image, -s * w / 2, -s * h, w * s, h * s);
  3566. }
  3567.  
  3568. static renderBar(ctx, entity, value, maxValue) {
  3569. const {x, y, radius} = entity;
  3570. const background = Images.gaugeBackground;
  3571. const front = Images.gaugeFront;
  3572. const scale = .5;
  3573. const width = front.width * scale;
  3574. const fill = value / maxValue * (width - 10);
  3575. ctx.save();
  3576. ctx.translate(x, y + radius + front.height * scale);
  3577. this.drawImage(ctx, background);
  3578. ctx.fillStyle = "#AA0000";
  3579. ctx.fillRect(-width / 2 + 5, -scale * front.height + 5, fill, scale * front.height - 10);
  3580. this.drawImage(ctx, front);
  3581. ctx.restore();
  3582.  
  3583. return front.height * scale;
  3584. }
  3585.  
  3586. static reloadBar(ctx, entity, reload) {
  3587. const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
  3588. const fill = clamp(reload, 0, reload);
  3589. const value = fill;
  3590. return this.renderBar(ctx, entity, value, reload);
  3591. }
  3592. }
  3593.  
  3594. const drawCombatVisuals = (target, ctx, isTeam) => {
  3595. const colors = ["#FFC0CB", "#FFB6C1", "#FF69B4", "#FF1493", "#F9CCCA", "#E8CCD7", "#FFC0EB", "#FCD0B4", "#FF007F", "#F4B4C4", "#F6B8B8"];
  3596. const nEA = getAngle(enemy, user);
  3597.  
  3598. if (Toggle.autoInsta && getDistance(enemy, user) <= 90 && !enemy.inTrap && !user.inTrap) {
  3599. let cantPlace3 = Sploop.canPlace(nEA, true).length > 1;
  3600. let placeCoord = {
  3601. y: user.y + 80 * Math.sin(nEA),
  3602. x: user.x + 80 * Math.cos(nEA),
  3603. };
  3604. if (!cantPlace3) {
  3605. drawingOptions.drawPossiblePlace(ctx, placeCoord, colors[Math.floor(Math.random() * colors.length)]);
  3606. }
  3607. }
  3608.  
  3609. if (Toggle.autoPlace && getDistance(enemy, user) <= 230 && !enemy.inTrap && !user.inTrap) {
  3610. let cantPlace3 = Sploop.canPlace(nEA, true).length > 1;
  3611.  
  3612. let placeCoord = {
  3613. y: user.y + 80 * Math.sin(nEA),
  3614. x: user.x + 80 * Math.cos(nEA),
  3615. };
  3616.  
  3617. if (!cantPlace3) {
  3618. drawingOptions.drawPossiblePlace(ctx, placeCoord, "#91B2DB");
  3619. }
  3620.  
  3621. }
  3622.  
  3623. if (Toggle.autoPlace && getDistance(enemy, user) <= 190 && enemy.inTrap && !user.inTrap) {
  3624. let placeCoord = {
  3625. y: user.y + 80 * Math.sin(nEA + positive.angle),
  3626. x: user.x + 80 * Math.cos(nEA + positive.angle),
  3627. };
  3628. let placeCoord2 = {
  3629. y: user.y - 80 * Math.sin(nEA - negative.angle),
  3630. x: user.x - 80 * Math.cos(nEA - negative.angle),
  3631. };
  3632.  
  3633. let cantPlace = Sploop.canPlace(nEA + positive.angle, false).length > 1;
  3634. let cantPlace2 = Sploop.canPlace(nEA - negative.angle, false).length > 1;
  3635. if (!cantPlace) {
  3636. drawingOptions.drawPossiblePlace(ctx, placeCoord, "#91B2DB");
  3637. }
  3638. if (!cantPlace2) {
  3639. drawingOptions.drawPossiblePlace(ctx, placeCoord2, "#E8CCD7");
  3640. }
  3641. }
  3642. }
  3643.  
  3644. window.drawingBoard = (target, ctx, isTeam) => {
  3645. if (!user.alive) return;
  3646. drawCombatVisuals(target, ctx, isTeam);
  3647. };
  3648.  
  3649. class Hooks {
  3650. static renderItem(ctx, target) {}
  3651. }
  3652.  
  3653. class Script {
  3654. setup() {
  3655. this.run();
  3656. };
  3657.  
  3658. send() {
  3659. if (this.ws && this.ws.readyState === WebSocket.OPEN) {
  3660. if (pps >= 599) {
  3661. return;
  3662. } else {
  3663. return this.ws.send(new Uint8Array([...arguments]))
  3664. pps++
  3665. }
  3666. }
  3667. }
  3668.  
  3669. message(event) {
  3670. let data = event.data;
  3671. let decoded = typeof data === 'string' ? JSON.parse(data) : new Uint8Array(data);
  3672. let length = decoded.length;
  3673. switch (decoded[0]) {
  3674. case 20:
  3675. Config.enemiesNear = []
  3676. enemy = null;
  3677. user.previousSkin = user.skin;
  3678. user.prevHealth = user.health;
  3679.  
  3680. Config.tickSpeed = Date.now() - time;
  3681. time = Date.now();
  3682. for (let int = 1; int < length; int += 19) {
  3683. Sploop.canPlace(Config.angle);
  3684.  
  3685. let type = decoded[int],
  3686. owner = decoded[int + 1],
  3687. index = decoded[int + 2] | decoded[int + 3] << 8,
  3688. x = decoded[int + 4] | decoded[int + 5] << 8,
  3689. y = decoded[int + 6] | decoded[int + 7] << 8,
  3690. currentItem = decoded[int + 10],
  3691. broken = decoded[int + 8],
  3692. angle = decoded[int + 9] / 255 * 6.283185307179586 - Math.PI,
  3693. rawAngle = decoded[int + 9],
  3694. skin = decoded[int + 11],
  3695. team = decoded[int + 12],
  3696. projectileType = decoded[int + 14],
  3697. health = decoded[int+ 13] / 255 * 100,
  3698. clown = decoded[int + 8] === 128,
  3699. datas = data;
  3700.  
  3701. let temp = Entity[index] || {
  3702. fd: 2,
  3703. active: true,
  3704. health: 100,
  3705. x: 0,
  3706. y: 0
  3707. };
  3708.  
  3709. if (2 && broken) {
  3710. if (Toggle.trapSync && !user.inTrap) { // dont work, i fix it...
  3711. Config.trapSyncer = true;
  3712. const trapBroken = Entity[index]
  3713.  
  3714. if (trapBroken && trapBroken.type == 6) {
  3715. if (trapBroken.id2 !== enemy.id2) {
  3716. if (getDistance(trapBroken, user) <= 110 && getDistance(enemy, user) <= 100) {
  3717. const objectAngle = getAngle(trapBroken, user);
  3718. const enemyAngle = getAngle(enemy, user);
  3719. if (Config.trapSyncer) {
  3720. if (enemy.skin != 4 && enemy.skin != 6) if (Toggle.autoHat) Sploop.equip(2);
  3721. Sploop.place(4, objectAngle);
  3722. Sploop.invisHit(0, objectAngle, 1);
  3723. Config.trapSyncer = false;
  3724. setTimeout(() => { Config.trapSyncer = true }, 3500);
  3725. }
  3726. }
  3727. }
  3728. }
  3729. }
  3730.  
  3731. if (Toggle.Replacer) {
  3732. const nearestObjects = Entity[index];
  3733. if (nearestObjects) {
  3734. if ([2, 5, 7, 9, 17].includes(nearestObjects.type) && getDistance(nearestObjects, user) <= 145 && getDistance(enemy, user) <= 220) {
  3735. setTimeout(() => {
  3736. placeDelay -= 1e3 / 9;
  3737. if (nearestObjects.type == 6) {
  3738. if (user.inTrap) {
  3739. Sploop.place(7, getAngle(enemy, user));
  3740. Sploop.place(7, getAngle(nearestObjects, user));
  3741. Sploop.place(4, (getAngle(enemy, user) + Math.PI));
  3742. Sploop.place(4, (getAngle(enemy, user) + 0.9));
  3743. }
  3744. } else {
  3745. Sploop.place(4, getAngle(nearestObjects, user));
  3746. }
  3747. if (getDistance(enemy, user) < 100) {
  3748. if (nearestObjects.type == 6) {
  3749. if (enemy.inTrap) {
  3750. Sploop.place(7, getAngle(enemy, user));
  3751. Sploop.place(7, getAngle(nearestObjects, user));
  3752. } else {
  3753. Sploop.place(7, getAngle(enemy, user));
  3754. Sploop.place(4, (getAngle(enemy, user) + 1.2));
  3755. Sploop.place(4, (getAngle(enemy, user) - 1.2));
  3756. }
  3757. } else {
  3758. Sploop.place(4, getAngle(nearestObjects, user));
  3759. Sploop.place(4, getAngle(enemy, user));
  3760. }
  3761. }
  3762. }, placeDelay);
  3763.  
  3764. placeDelay += 1e3 / 9;
  3765. }
  3766. }
  3767. }
  3768.  
  3769. Entity[index] = null;
  3770. }
  3771.  
  3772. if (!type && broken == 2) {
  3773. temp = {};
  3774. } else {
  3775. temp.type = type;
  3776. temp.angle = angle;
  3777. temp.rawAngle = rawAngle;
  3778. temp.id = index;
  3779. temp.weapon = currentItem;
  3780. temp.health = health;
  3781. temp.health2 = Math.trunc(health);
  3782. temp.xVel = temp.x - x;
  3783. temp.yVel = temp.y - y;
  3784. temp.speed = Math.hypot(y - temp.y, x - temp.x);
  3785. temp.move = Math.atan2(y - temp.y, x - temp.x);
  3786. temp.x = x;
  3787. temp.y = y;
  3788. temp.id2 = owner;
  3789. temp.skin = skin;
  3790. temp.datas = datas;
  3791. temp.team = team;
  3792. temp.projectileType = projectileType;
  3793. temp.clown = clown;
  3794.  
  3795. Config.enemiesNear.push(temp)
  3796.  
  3797. Entity[index] = temp;
  3798. }
  3799.  
  3800. if (temp.id === user.id) {
  3801. Sploop.healthChange(temp.health, user.health);
  3802. Object.assign(user, temp)
  3803. } else if (!temp.type && (!user.team || temp.team != user.team)) {
  3804. let distance = Math.hypot(user.y - temp.y, user.x - temp.x);
  3805. let distance2 = enemy ? Math.hypot(user.y - enemy.y, user.x - enemy.x) : null;
  3806. if (enemy) {
  3807. if (distance < distance2) enemy = temp;
  3808. } else {
  3809. enemy = temp;
  3810. }
  3811. }
  3812.  
  3813. }
  3814. Sploop.update();
  3815. break;
  3816.  
  3817. case 35:
  3818. user.id = decoded[1];
  3819. user.alive = true;
  3820. user.spawnDate = Date.now();
  3821. user.health = 100;
  3822. Config.weapon = 0;
  3823.  
  3824. if (!user.hatsBought) {
  3825. for (let hats = 0; hats < 12; hats++) Sploop.equip(hats);
  3826. user.hatsBought = true;
  3827. }
  3828.  
  3829. Sploop.equip(7);
  3830. Sploop.place(5);
  3831. break;
  3832.  
  3833. case 15:
  3834. Config.ping = decoded[1];
  3835. break;
  3836. case 19:
  3837. user.health = 0;
  3838. user.speed = 0;
  3839. user.age = 0;
  3840. user.alive = false;
  3841. kills = 0;
  3842. break;
  3843. case 28:
  3844. kills++
  3845.  
  3846. if (wsPushing) {
  3847. wsPushing = false;
  3848. Sploop.walk('stop');
  3849. }
  3850.  
  3851. enemy.health = 0;
  3852. break;
  3853. case 24:
  3854. var array_with_ID = [...data.slice(3, data.length)];
  3855. array_with_ID.splice(array_with_ID.indexOf(user.id), 1);
  3856. teammates = array_with_ID;
  3857. break;
  3858.  
  3859. case 16:
  3860. var array_with_ID2 = [...data.slice(2, data.length)];
  3861. array_with_ID2.splice(array_with_ID2.indexOf(user.id), 1);
  3862. teammates = array_with_ID2;
  3863. break;
  3864.  
  3865. case 27:
  3866. teammates = [];
  3867. break;
  3868. case 8:
  3869. var a = Math.max(0, decoded[1] | decoded[2] << 8 | decoded[3] << 16 | decoded[4] << 24);
  3870. user.age = ~~(Math.log(1 + a) ** 2.4 / 13);
  3871. break;
  3872.  
  3873. case 2:
  3874. if (decoded.byteLength > 1) {
  3875. user.item = [];
  3876. for (let a = 1; a < decoded.byteLength; a++) {
  3877. user.item.push(decoded[a]);
  3878. }
  3879. }
  3880. break;
  3881. case 29:
  3882. for (let int = 1; int < data.length; int += 5) {
  3883. const id = data[int + 1] | (data[int + 2] << 8);
  3884. const weapon = data[int + 3];
  3885. const type = data[int];
  3886.  
  3887. if (type === 0) {
  3888. if (weaponReload == true) {
  3889. if (id === user.id2) {
  3890. let maxReload = items[weapon].reload;
  3891. weaponReload = false;
  3892. setTimeout(() => {
  3893. weaponReload = true;
  3894. }, maxReload);
  3895. }
  3896. }
  3897. }
  3898. }
  3899. break;
  3900. }
  3901.  
  3902. Placer.update();
  3903. }
  3904.  
  3905. log(group, symbol, result, color) {
  3906. return log(`%c[${group}] %c${symbol}`, `color:${color};font-weight:bold`, `color:${color}`, result);
  3907. }
  3908.  
  3909. run(ws) {
  3910. this.ws = ws;
  3911. window.addEventListener("mousemove", (a) => {
  3912. Config.angle = Math.atan2(a.pageY - window.innerHeight / 2, a.pageX - window.innerWidth / 2);
  3913. });
  3914.  
  3915.  
  3916. }
  3917.  
  3918. constructor() {
  3919. this.ws = null;
  3920. }
  3921. };
  3922.  
  3923. const Setup = () => {
  3924. Game = new Script();
  3925. Game.log(`Setup`, `⦿`, '', '#000000');
  3926. let data = Config.messages;
  3927.  
  3928. data[0][1] = { name: 'Player update', string: false };
  3929. data[0][2] = { name: 'Verify', string: false };
  3930. data[0][5] = { name: 'Choose', string: false };
  3931. data[0][7] = { name: 'Hit', string: false };
  3932. data[0][14] = { name: 'Resource update', string: false };
  3933. data[0][16] = { name: 'Projectile Hit', string: false };
  3934. data[0][18] = { name: 'Chat', string: false };
  3935. data[0][19] = { name: 'Choose x3', string: true };
  3936. data[0][20] = { name: 'Choose x2', string: false };
  3937. data[0][22] = { name: 'Ping update', string: false };
  3938. data[0][23] = { name: 'Ping update', string: false };
  3939. data[0][24] = { name: 'Create clan', string: false };
  3940. data[0][25] = { name: 'Leave clan', string: false };
  3941. data[0][26] = { name: 'Create clan', string: false };
  3942. data[0][27] = { name: 'Leave clan', string: false };
  3943. data[0][30] = { name: 'Place', string: false };
  3944.  
  3945. data[1][2] = { name: 'Spawn', string: true };
  3946. data[1][8] = { name: 'Player setup', string: true };
  3947. data[1][9] = { name: 'Leaderboard update', string: true };
  3948. data[1][11] = { name: 'Text', string: true };
  3949. data[1][13] = { name: 'Death', string: true };
  3950. data[1][19] = { name: 'Choose', string: true };
  3951. data[1][35] = { name: 'new Verify', string: true };
  3952.  
  3953. for (let index = 0; index <= 1; index++) {
  3954. let length = data[index].length;
  3955. for (let id = 0; id < length; id++) {
  3956. if (data[index][id]) data[index][id].id = id;
  3957. }
  3958. ;
  3959. }
  3960. ;
  3961. };
  3962.  
  3963. Setup();
  3964.  
  3965. WebSocket.prototype.unmodifiedSend = WebSocket.prototype.send;
  3966. WebSocket.prototype.send = function (arguments) {
  3967. this.unmodifiedSend(arguments);
  3968. if (ws !== this) {
  3969. this.addEventListener('message', event => Game.message(event));
  3970. ws = this;
  3971. Game.run(this);
  3972. Config.WS = this.url;
  3973. }
  3974. }
  3975.  
  3976. let blockReact = ['clan-menu-clan-name-input', 'nickname', 'chat'];
  3977.  
  3978. const keyChange = (event, down) => {
  3979. if (blockReact.includes(document.activeElement.id.toLowerCase())) return `Blocked key change.`
  3980. keyDown[event.keyCode] = down;
  3981. let distEnemy = getDistance(enemy, user);
  3982. let aimEnemy = getAngle(enemy, user);
  3983. let isPrimary = [49, 97].includes(event.keyCode);
  3984. let isSecondary = [50, 98].includes(event.keyCode);
  3985. console.debug(event.code)
  3986. if (event.code == 'KeyY') {
  3987. let katana = [2, 12, 9, 19, 20, 15, 8, 28, 16];
  3988. katana.forEach(e => Game.send(14, e));
  3989. }
  3990.  
  3991. if (down && (isPrimary || isSecondary)) Config.weapon = Number(isSecondary);
  3992. switch (event.code) {
  3993. case "KeyR":
  3994. Sploop.instaToggled();
  3995. break;
  3996. case "KeyG":
  3997. Sploop.equip(6);
  3998. break
  3999. case "ShiftRight":
  4000. Sploop.equip(7)
  4001. break;
  4002. case "KeyB":
  4003. Sploop.equip(2)
  4004. break
  4005. case "KeyZ":
  4006. Sploop.equip(11)
  4007. break;
  4008. }
  4009. Placer.update();
  4010. };
  4011.  
  4012. document.addEventListener("keydown", (event) => keyChange(event, true));
  4013. document.addEventListener("keyup", (event) => keyChange(event, false));
  4014.  
  4015. document.addEventListener("DOMContentLoaded", () => {
  4016. document.addEventListener('keydown', (e) => {
  4017. if (e.keyCode == 27) {
  4018. Array.from(document.querySelectorAll("column"), menu => {
  4019. menu.style.display = menu.style.display == "block" ? "none" : "block";
  4020. });
  4021. }
  4022. });
  4023.  
  4024. function enableSmoothZoom() {
  4025. let maxScreenHeight = 1026;
  4026. let maxScreenWidth = 1824;
  4027. const scaleFactor = 50;
  4028. Math.max = new Proxy(Math.max, {
  4029. apply(target, thisArg, args) {
  4030. const height = Math.ceil(args[0] * 1026);
  4031. const width = Math.ceil(args[1] * 1824);
  4032. const scaledHeight = height === window.innerHeight ? height / maxScreenHeight : height / 1026;
  4033. const scaledWidth = width === window.innerWidth ? width / maxScreenWidth : width / 1824;
  4034. return target.call(thisArg, scaledHeight, scaledWidth);
  4035. },
  4036. });
  4037.  
  4038. const observer = new MutationObserver((mutationsList) => {
  4039. for (const mutation of mutationsList) {
  4040. if (mutation.type === "attributes" && mutation.attributeName === "style") {
  4041. const style = mutation.target.getAttribute("style");
  4042. if (style && style.includes("display: none;")) {
  4043. return;
  4044. }
  4045. }
  4046. }
  4047. });
  4048.  
  4049. observer.observe(document.body, {
  4050. childList: true,
  4051. subtree: true,
  4052. attributes: true,
  4053. attributeFilter: ["style"],
  4054. });
  4055.  
  4056. window.addEventListener("wheel", function (event) {
  4057. if (event.target.id !== "game-canvas") return;
  4058.  
  4059. const zoomIncrement = event.deltaY > 0 ? scaleFactor : -scaleFactor;
  4060. let increment = 0;
  4061. const intervalId = setInterval(() => {
  4062. increment += zoomIncrement / 10;
  4063. maxScreenWidth += increment;
  4064. maxScreenHeight += increment;
  4065. maxScreenWidth = Math.max(maxScreenWidth, 100);
  4066. maxScreenHeight = Math.max(maxScreenHeight, 100);
  4067. window.dispatchEvent(new Event("resize"));
  4068. if (Math.abs(increment) >= Math.abs(zoomIncrement)) {
  4069. clearInterval(intervalId);
  4070. }
  4071. }, 16);
  4072. });
  4073. }
  4074.  
  4075. enableSmoothZoom();
  4076. })
  4077.  
  4078. function lerp(start, end, amt) {
  4079. return start + (end - start) * amt;
  4080. }
  4081.  
  4082. let health = false;
  4083.  
  4084. const enhanceFillRect = function (fill, cColor) {
  4085. return function (x, y, width, height) {
  4086. if (this.fillStyle === "#a4cc4f") {
  4087. this.fillStyle = cColor;
  4088.  
  4089. if (Toggle.smoothBarHealth) {
  4090. const old = health;
  4091. const smooth = lerp(old, width, .42)
  4092.  
  4093. width = smooth
  4094.  
  4095. health = smooth
  4096. }
  4097. }
  4098. fill.call(this, x, y, width, height);
  4099. };
  4100. };
  4101. const customColor = "#E8CCD7";
  4102. const FillRect = CanvasRenderingContext2D.prototype.fillRect;
  4103.  
  4104. CanvasRenderingContext2D.prototype.fillRect = enhanceFillRect(FillRect, customColor);
  4105.  
  4106. window.render = (ctx, shit) => {
  4107. };
  4108.  
  4109. let mySpikes = [];
  4110. let myTraps = [];
  4111. window.drawMarkers = (target, id, ctx, step) => {
  4112. const objectID = target[Variables.id]
  4113. const isSpike = [2, 7, 17].includes(target.type);
  4114.  
  4115. if (isSpike) {
  4116. let isMySpike = user.id == objectID;
  4117. if (isMySpike && !mySpikes.find(c => c[Variables.id2] == target[Variables.id2])) {
  4118. mySpikes.push(target);
  4119. }
  4120. }
  4121.  
  4122. if (myTraps && target.type == 6) {
  4123. let isMyTrap = user.id == objectID;
  4124. if (isMyTrap && !myTraps.find(c => c[Variables.id2] == target[Variables.id2])) {
  4125. myTraps.push(target);
  4126. }
  4127. };
  4128.  
  4129. let color;
  4130. if (Toggle.markers) {
  4131. if (teammates.includes(target[Variables.id])) {
  4132. color = "#A4CC4F";
  4133. } else if (objectID === user.id2) {
  4134. color = "#E8CCD7";
  4135. } else {
  4136. color = "#A53F3F";
  4137. }
  4138. } else {
  4139. color = "rgba(0, 0, 0, 0)";
  4140. }
  4141.  
  4142. if ([2, 6, 7, 17].includes(target.type)) {
  4143. ctx.fillStyle = color;
  4144. ctx.beginPath();
  4145. ctx.arc(0, 0, 9, 0, 2 * Math.PI);
  4146. ctx.fill();
  4147. ctx.stroke();
  4148. ctx.closePath();
  4149. }
  4150. };
  4151.  
  4152. let traps = [];
  4153. window.receiveMsg = async ({ data }) => {
  4154. const decoded = typeof data === "string" ? JSON.parse(data) : new Uint8Array(data);
  4155. switch (decoded[0]) {
  4156. case 35:
  4157. user.name = decoded[2];
  4158. break;
  4159. case 33:
  4160. user.id = decoded[1];
  4161. break;
  4162. case 16: {
  4163. const array_with_ID = [...decoded.slice(2, decoded.length)];
  4164. array_with_ID.splice(array_with_ID.indexOf(user.id), 1);
  4165. teammates = array_with_ID;
  4166. return;
  4167. }
  4168. case 24: {
  4169. const array_with_ID = [...decoded.slice(3, decoded.length)];
  4170. array_with_ID.splice(array_with_ID.indexOf(user.id), 1);
  4171. teammates = array_with_ID;
  4172. break;
  4173. }
  4174. case 27:
  4175. teammates = [];
  4176. break;
  4177. case 20: {
  4178. for (let i = 1; i < decoded.length; i += 19) {
  4179. const newEnemy = {
  4180. type: decoded[i],
  4181. id: decoded[i + 1],
  4182. hat: decoded[i + 11],
  4183. teamID: decoded[i + 12],
  4184. x: decoded[i + 4] | decoded[i + 5] << 8,
  4185. y: decoded[i + 6] | decoded[i + 7] << 8,
  4186. index: decoded[i + 2] | decoded[i + 3] << 8,
  4187. health: Math.ceil(decoded[i + 13] / 2.55),
  4188. angle: decoded[i + 9] * 0.02454369260617026 - 3.141592653589793,
  4189. broken: decoded[i + 8]
  4190. }
  4191. newEnemy.id === user.id && Object.assign(user, newEnemy);
  4192. traps = traps.filter(trap => trap.index !== newEnemy.index);
  4193. }
  4194. if (user.clown === 128 && !user.clowned) {
  4195. user.clowned = true;
  4196. setTimeout(() => {
  4197. user.clowned = false;
  4198. }, 3000)
  4199. };
  4200. }
  4201. }
  4202. }
  4203.  
  4204. const TYPEOF = value => Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
  4205. const NumberSystem = [{
  4206. radix: 2,
  4207. prefix: "0b0*"
  4208. }, {
  4209. radix: 8,
  4210. prefix: "0+"
  4211. }, {
  4212. radix: 10,
  4213. prefix: ""
  4214. }, {
  4215. radix: 16,
  4216. prefix: "0x0*"
  4217. }];
  4218.  
  4219. class Regex {
  4220. constructor(code, unicode) {
  4221. this.code = code;
  4222. this.COPY_CODE = code;
  4223. this.unicode = unicode || false;
  4224. this.hooks = {};
  4225. this.totalHooks = 0;
  4226. }
  4227. static parseValue(value) {
  4228. try {
  4229. return Function(`return (${value})`)();
  4230. } catch (err) {
  4231. return null;
  4232. }
  4233. }
  4234. isRegexp(value) {
  4235. return TYPEOF(value) === "regexp";
  4236. }
  4237. generateNumberSystem(int) {
  4238. const copy = [...NumberSystem];
  4239. const template = copy.map((({
  4240. prefix,
  4241. radix
  4242. }) => prefix + int.toString(radix)));
  4243. return `(?:${template.join("|")})`;
  4244. }
  4245. parseVariables(regex) {
  4246. regex = regex.replace(/\{VAR\}/g, "(?:let|var|const)");
  4247. regex = regex.replace(/\{QUOTE\}/g, "['\"`]");
  4248. regex = regex.replace(/ARGS\{(\d+)\}/g, ((...args) => {
  4249. let count = Number(args[1]),
  4250. arr = [];
  4251. while (count--) arr.push("\\w+");
  4252. return arr.join("\\s*,\\s*");
  4253. }));
  4254. regex = regex.replace(/NUMBER\{(\d+)\}/g, ((...args) => {
  4255. const int = Number(args[1]);
  4256. return this.generateNumberSystem(int);
  4257. }));
  4258. return regex;
  4259. }
  4260. format(name, inputRegex, flags) {
  4261. this.totalHooks += 1;
  4262. let regex = "";
  4263. if (Array.isArray(inputRegex)) {
  4264. regex = inputRegex.map((exp => this.isRegexp(exp) ? exp.source : exp)).join("\\s*");
  4265. } else if (this.isRegexp(inputRegex)) {
  4266. regex = inputRegex.source;
  4267. }
  4268. regex = this.parseVariables(regex);
  4269. if (this.unicode) {
  4270. regex = regex.replace(/\\w/g, "(?:[^\\x00-\\x7F-]|\\$|\\w)");
  4271. }
  4272. const expression = new RegExp(regex.replace(/\{INSERT\}/, ""), flags);
  4273. const match = this.code.match(expression);
  4274. if (match === null) console.debug("failed to find " + name)
  4275. return regex.includes("{INSERT}") ? new RegExp(regex, flags) : expression;
  4276. }
  4277. template(type, name, regex, substr) {
  4278. const expression = new RegExp(`(${this.format(name, regex).source})`);
  4279. const match = this.code.match(expression) || [];
  4280. this.code = this.code.replace(expression, type === 0 ? "$1" + substr : substr + "$1");
  4281. return match;
  4282. }
  4283. match(name, regex, flags, debug = false) {
  4284. const expression = this.format(name, regex, flags);
  4285. const match = this.code.match(expression) || [];
  4286. this.hooks[name] = {
  4287. expression,
  4288. match
  4289. };
  4290. return match;
  4291. }
  4292. matchAll(name, regex, debug = false) {
  4293. const expression = this.format(name, regex, "g");
  4294. const matches = [...this.code.matchAll(expression)];
  4295. this.hooks[name] = {
  4296. expression,
  4297. match: matches
  4298. };
  4299. return matches;
  4300. }
  4301. replace(name, regex, substr, flags) {
  4302. const expression = this.format(name, regex, flags);
  4303. this.code = this.code.replace(expression, substr);
  4304. return this.code.match(expression) || [];
  4305. }
  4306. append(name, regex, substr) {
  4307. return this.template(0, name, regex, substr);
  4308. }
  4309. prepend(name, regex, substr) {
  4310. return this.template(1, name, regex, substr);
  4311. }
  4312. insert(name, regex, substr) {
  4313. const {
  4314. source
  4315. } = this.format(name, regex);
  4316. if (!source.includes("{INSERT}")) throw new Error("Your regexp must contain {INSERT} keyword");
  4317. const findExpression = new RegExp(source.replace(/^(.*)\{INSERT\}(.*)$/, "($1)($2)"));
  4318. this.code = this.code.replace(findExpression, `$1${substr}$2`);
  4319. return this.code.match(findExpression);
  4320. }
  4321. }
  4322. window.currentAngle = 0;
  4323.  
  4324. const lerpAngle = (current, target, alpha) => {
  4325. let diff = (target - current + 30) % 360 - 30;
  4326. return current + diff * alpha;
  4327. }
  4328.  
  4329. window.lerpAngle = lerpAngle;
  4330.  
  4331. let smoothCamVal = 43;
  4332. let Variables;
  4333. const applyHooks = code => {
  4334. const Hook = new Regex(code, true);
  4335. window.COPY_CODE = (Hook.COPY_CODE.match(/^(\(function \w+\(\w+\)\{.+)\(.+?\);$/) || [])[1];
  4336. Hook.append("EXTERNAL fix", /\(function (\w+)\(\w+\)\{/, "let $2 = eval(`(() => ${COPY_CODE})()`);delete window.COPY_CODE;");
  4337. Hook.replace("fix", /\(function (\w+)\(\w+\)\{/, `(function snowvibe(){`);
  4338. Hook.replace("fix", /"function"==typeof \w+&&\(\w+=\w\(\w+,\w+\)\);/, ``);
  4339. const nick = Hook.match("nick", /\.(\w+):"XX"/)[1];
  4340. const myPlayer = Hook.match("myPlayer", /=(\w.get\(\w{2}\));\w&&\w\(\)/)[1];
  4341. const X = Hook.match("playerX", /\{this\.(\w{2})=\w\|\|0/)[1];
  4342. const Y = Hook.match("playerY", /,this\.(\w{2})=\w\|\|0\}/)[1];
  4343. const ID = Hook.match("ID", /&&\w{2}===\w\.(\w{2})\){/)[1];
  4344. const ID2 = Hook.match("ID2", /-1!==\w+\.(\w+)&&/)[1];
  4345. const currentWeapon = Hook.match("crntWeapon", /,\w.(\w{2})===/)[1];
  4346. const angle = Hook.match("angle", /;\w.(\w{2})=\w\(\)/)[1];
  4347. const weaponName = Hook.match("wpnName", /(\w{2}):"XX/)[1];
  4348. const health = Hook.match("health", /(\w{2})<<8;/)[1];
  4349. const weaponDamage = Hook.match("wpnDamage", /(\w{2}):32,reload:300/)[1];
  4350. const teamID = Hook.match("test", /,\w=\w.(\w{2})\|.+?\<\<8/)[1];
  4351. const radius = Hook.match("radius", /(\w{2}):220/)[1];
  4352. const [, currentItem, hat] = Hook.match("hat", /\(\w+\.(\w+)\|\w+\.(\w+)<<NUMBER{8}\)/);
  4353. const size = Hook.match("size", /\.(\w{2})\+50/)[1];
  4354. const inWhichObject = Hook.match("iwo", /110\).+?,1===\w.(\w{2})&&!\w{2}/)[1];
  4355. const weaponID = Hook.match("el", /(\w{2}):0,\w{2}:22,reload:150/)[1];
  4356. const itemType = Hook.matchAll("el", /,(\w+):9,\w+:2/)[1][1];
  4357. const itemsID = Hook.match("IDs", />1\){.{3}(\w{2})/)[1];
  4358. const itemBar = Hook.match("defaultData", /(\W\w+>NUMBER{1}\W.+?(\w+)\.(\w+).+?)function/)[3];
  4359. const objCount = Hook.match("Quantity", /\),this.(\w{2})=\w\):/)[1];
  4360. const weaponList = Hook.match("weaponList", /\?Math\.PI\/2.+?(\w\(\))/)[1];
  4361. const isTyping = Hook.match("is typing", /=\+new Date,(\w{2})=!1,/)[1];
  4362. const damageReduce = Hook.match("damage reduce value", /10,(\w{2}):\.75,/)[1];
  4363. const [, animations, hitAngle, weaponAnimation, animationTime, animationSpeed, playAnimation] = Hook.match("weapon animations", /0,\w\.(\w{2})\.(\w{2})=.{4}(\w{2})\.(\w{2}).{6}(\w{2}).+?(\w{2})\(\.01/);
  4364. const sortedEntities = Hook.match("entities", /,\w=0;\w=(\w)\[/)[1];
  4365. const speedBuff = Hook.match("speed", /(\w+):1\.23/)[1];
  4366. const weaponSpeedBuff = Hook.match("speed", /300,(\w+):\.85/)[1];
  4367. const cam = Hook.match("cam", /,\w\)}},(\w{2})=new function/)[1];
  4368. const ctx = Hook.match("ctx", /(\w{2})=\w{2}(\[\w\(\d{3}\)\]|\.getContext)\("2d"\),\w{2}/)[1];
  4369. const [, camX, camY] = Hook.match("data", /height:20,(\w+).+?.(\w+)/);
  4370. const [, biomeY, biomeHeight] = Hook.match("data", /\w{2}:160,(\w{2}):160,\w{2}.+?(\w{2}):/);
  4371.  
  4372. Variables = {
  4373. myPlayer: {
  4374. myPlayer,
  4375. nick: `${myPlayer}.${nick}`,
  4376. x: `${myPlayer}.${X}`,
  4377. y: `${myPlayer}.${Y}`,
  4378. id: `${myPlayer}.${ID}`,
  4379. teamID: `${myPlayer}.${teamID}`,
  4380. angle: `${myPlayer}.${angle}`
  4381. },
  4382. nick: nick,
  4383. x: X,
  4384. y: Y,
  4385. id: ID,
  4386. id2: ID2,
  4387. hat,
  4388. size,
  4389. camX,
  4390. camY,
  4391. type: "type",
  4392. angle,
  4393. biomeY,
  4394. health,
  4395. radius,
  4396. teamID,
  4397. itemsID,
  4398. isTyping,
  4399. weaponID,
  4400. objCount,
  4401. itemType,
  4402. hitAngle,
  4403. speedBuff,
  4404. weaponList,
  4405. weaponName,
  4406. animations,
  4407. biomeHeight,
  4408. weaponDamage,
  4409. damageReduce,
  4410. playAnimation,
  4411. inWhichObject,
  4412. currentWeapon,
  4413. animationTime,
  4414. animationSpeed,
  4415. weaponAnimation,
  4416. weaponSpeedBuff
  4417. };
  4418.  
  4419. const log = console.log;
  4420. log(Variables);
  4421. window.Variables = Variables;
  4422. Hook.append("getMsg", /0;fu.{10}(\w).{2}/, `window.receiveMsg($2);`);
  4423. Hook.replace("renderItems", /(\(\w+\.\w+\+\w+,\w+\.\w+\+\w+\).+?\w+\(\).+?\w+\.\w+\.\w+\)([,;]))/, `$1window.drawMarkers(...arguments)$2`);
  4424. Hook.append("showHoods", /\w+\.\w+!==\w+\)/, "|| true");
  4425. Hook.replace("animTextTime", /this.(\w{2})=400/, `this.$1=400`);
  4426. Hook.replace("BiggerSquaresOnRenderGrid", /(\w+)=\w\(\)\.\w{2};(\w+)=Math/, `$1=200;$2=Math`);
  4427. Hook.replace("LOCKROT ATIONISFUCKINGAY", /(return )(\w+\?)(\w+:)(\w+\(\)\.\w+\(window\[\w+\(570\)\]\/2,window\.innerHeight\/2,\w+,\w+\))/, "$1 $4");
  4428. Hook.replace("skull next to kills", /\w+\.drawImage\(\w+,\w+-\w+\.width-5,350\);/, "");
  4429. Hook.replace("smoothCam", /\w{4}.\w{3}\(.[0-9]{2}\*/, `Math.min(.00${smoothCamVal}*`);
  4430. Hook.replace("xp bar", /\w+\.drawImage\(\w+,\w+-\w+\.width-5,350\);/, "");
  4431. Hook.replace("skull next to kills", /\w+\.drawImage\(\w+,\w+-\w+\.width-5,350\);/, "");
  4432. Hook.replace("fill xp bar", /\w+\.\w+\(\w+\);const \w+=\.7\+\w+\[\w+\(\w+\)\]\(1,\w+\(\)\.\w+\.\w+\(\w+\.\w+\)\)\/2,\w+=\w+\.\w+,\w+=\w+\.width\*\w+\|\|1,\w+=\w+\.height\*\w+\|\|1;\w+\.save\(\),\w+\.globalAlpha=\w+\.\w+,\w+\.drawImage\(\w+\.\w+,\.5\*\w+-\w+\/2,50-\w+\/2,\w+,\w+\),\w+\.restore\(\)/, "");
  4433. Hook.replace("update resources", /function \w+\(\){const \w+=Math\.max\(\w+,\w+\[\w+\]\|\w+\[\w+\]<<\w+\|\w+\[\w+\]<<\w+\|\w+\[\w+\]<<\w+\),\w+=\w+\[\w+\]\|\w+\[\w+\]<<\w+\|\w+\[\w+\]<<\w+\|\w+\[\w+\]<<\w+,\w+=\w+\[\w+\]\|\w+\[\w+\]<<\w+\|\w+\[\w+\]<<\w+\|\w+\[\w+\]<<\w+,\w+=\w+\[\w+\]\|\w+\[\w+\]<<\w+\|\w+\[\w+\]<<\w+\|\w+\[\w+\]<<\w+,\w+=\w+\[\w+\]\|\w+\[\w+\]<<8\|\w+\[\w+\]<<\w+\|\w+\[\w+\]<<\w+;\w+\.\w+\(\w+\),\w+\.\w+\(\w+,\w+,\w+,\w+\)\}/, "");
  4434. Hook.replace("widtah", /(\w+\.lineWidth=)4,/, "$1 3,");
  4435. Hook.replace("widtah", /(\w+\.lineWidth=)7,/, "$1 4,");
  4436. Hook.replace('customBar', /F2C39F/, `FFF`)
  4437. Hook.replace("LBPos", /width:250/, `width: 260`);
  4438. Hook.replace("biggerLBoard", /250,330/, `260, 330`);
  4439. Hook.replace("scorePos", /\+145/, `\+145`);
  4440. Hook.replace("strokeForScrInLB", /(\),\w\(\)\.\w+,)\w\(\)\..{2}\)/, `$1"#ffffff", "#2D3030")`);
  4441. Hook.insert("test", /{INSERT}.{12}\w+\[2\]\<<8;\w+=/, `return;`);
  4442. Hook.replace("test", /this.Fl=this.Fl/, "this.Fl=0");
  4443. Hook.replace("test", /.ag=.02/, ".ag=.0");
  4444. Hook.replace("Map Color", /"#788F57"/, "\#64803d\"");
  4445. Hook.replace("ColorMats", /\)\,24,\"\#\w{6}\"\)|\)\,24,\w\(\d{3}\)\)/, `),24,"#AE4D57", "#303030")`)
  4446. Hook.replace("ColorMats", /\)\,24,\"\#\w{6}\"\)|\)\,24,\w\(\d{3}\)\)/, `),24,"#935F3B", "#303030")`)
  4447. Hook.replace("ColorMats", /\)\,24,\"\#\w{6}\"\)|\)\,24,\w\(\d{3}\)\)/, `),24,"#7B7A91", "#303030")`)
  4448. Hook.replace("ColorMats", /\"\",24\,\D{9}|\"\",24\,\w\(\d{3}\)/, `"",24,"#FFD700", "#303030"`)
  4449. Hook.replace("ColorBioms", /(\w{2}:16\*.+?20,\w{2}):"#ece5db"}|(:16\*.+?20,\w{2}):\w\(\d{3}\)}/, `$1:"#A9A9A9"}`)
  4450. Hook.replace('ItemChoose', /\w\(\d{3}\),40,\D{6}|"Choose item",40,\D{6}/, `"",40,"#fff","#303030"`);
  4451. Hook.replace('customItemObvodka', /23,"#fff"/, `23,"#fff","#303030"`)
  4452. Hook.replace('customItemObvodka', /eec39d"/, `eec39d", "#303030"`)
  4453. Hook.replace('customItemInfo', /4f403c/, '4f403c80')
  4454. Hook.replace('customBar', /F2C39F/, `FFF`)
  4455. Hook.replace('customBar', /10,"#5D3A37"|10,\w\(\d{3}\)/, `10,"#00000080"`)
  4456. Hook.replace('grid', /1,(\w{2})=!0/, `1, $1=false`)
  4457. Hook.replace('millMarker', /=false,(\w{2})=!0/, `=false,$1=false`)
  4458. Hook.replace('enablePing', /42.5\),(\w{2})=!1/, `42.5),$1=false`)
  4459. Hook.append("qwes", /t\(570\)\+o;/, `console.debug(r, bt);`);
  4460. Hook.append("wbty", /w-form-urlencoded"\),/, `console.debug(o);`)
  4461. Hook.append("awbr", /519\)\]\.visibility="visible"\);/, `console.debug(t);`)
  4462. Hook.append("drawstuff", /-NUMBER{50},.+?function \w+\((ARGS{3})\)\{/, `window.drawingBoard($2);`);
  4463. Hook.replace("showIDS", /===(\w+)(&&\w+\(\)&&\w+\(\).+?)return void\((\w+)=!0/, "===$1$2;if('/show'==$1)return void($3 = !$3");
  4464. Hook.replace("lerpAngle", /\w{4} 0:\w.\w{6}(\w),/, `case 0: currentAngle = window.lerpAngle(currentAngle, m, 0.4);n.rotate(currentAngle);`);
  4465. return Hook.code;
  4466. };
  4467.  
  4468. window.eval = new Proxy(window.eval, {
  4469. apply(target, _this, args) {
  4470. const code = args[0];
  4471. console.log("Eval Code Length:", code.length);
  4472. if (code.length > 1e5) {
  4473. args[0] = applyHooks(code);
  4474. console.log("Modified Code:", args[0].slice(0, 500));
  4475. target.apply(_this, args);
  4476. window.eval = target;
  4477.  
  4478. document.title = "AntiMooAddict";
  4479. return;
  4480. }
  4481. return target.apply(_this, args);
  4482. }
  4483. });