您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
like moomoo.i ?
// ==UserScript== // @name AntiMooAddict // @description like moomoo.i ? // @version Alpha // @author cah blX // @match *://sploop.io/* // @run-at document-start // @require http://code.jquery.com/jquery-3.3.1.min.js // @require https://code.jquery.com/ui/1.12.0/jquery-ui.min.js // @grant none // @namespace https://greasyfork.org/users/1456327 // ==/UserScript== /* Author: cah blX Discord: cahblx.rsc Description: my bundle.js Version: Alpha */ window.layerData = {}; window.hatsData = {}; window.itemData = {}; window.AntiMooAddict = {}; Function("(" + ((GM_info) => { "use strict"; var __webpack_modules__ = { 147: module => { module.exports = { i8: "1.0.21" }; } }; var __webpack_module_cache__ = {}; function __webpack_require__(moduleId) { var cachedModule = __webpack_module_cache__[moduleId]; if (cachedModule !== undefined) { return cachedModule.exports; } var module = __webpack_module_cache__[moduleId] = { exports: {} }; __webpack_modules__[moduleId](module, module.exports, __webpack_require__); return module.exports; } (() => { __webpack_require__.d = (exports, definition) => { for (var key in definition) { if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); } } }; })(); (() => { __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); })(); var __webpack_exports__ = {}; (() => { __webpack_require__.d(__webpack_exports__, { sv: () => AntiMooAddict, lZ: () => pingCount, }); var ELayer; (function(ELayer) { ELayer[ELayer.PLAYER = 0] = "PLAYER"; ELayer[ELayer.STONE = 1] = "STONE"; ELayer[ELayer.HARDSPIKE = 2] = "HARDSPIKE"; ELayer[ELayer.TREE = 3] = "TREE"; ELayer[ELayer.GOLD = 4] = "GOLD"; ELayer[ELayer.BUSH = 5] = "BUSH"; ELayer[ELayer.TRAP = 6] = "TRAP"; ELayer[ELayer.SPIKE = 7] = "SPIKE"; ELayer[ELayer.WOODWALL = 8] = "WOODWALL"; ELayer[ELayer.PLATFORM = 9] = "PLATFORM"; ELayer[ELayer.BOOST = 10] = "BOOST"; ELayer[ELayer.LOOTBOX = 11] = "LOOTBOX"; ELayer[ELayer.PROJECTILE = 12] = "PROJECTILE"; ELayer[ELayer.WINDMILL = 13] = "WINDMILL"; ELayer[ELayer.COW = 14] = "COW"; ELayer[ELayer.SPAWN = 15] = "SPAWN"; ELayer[ELayer.POWERMILL = 16] = "POWERMILL"; ELayer[ELayer.CASTLESPIKE = 17] = "CASTLESPIKE"; ELayer[ELayer.TURRET = 18] = "TURRET"; ELayer[ELayer.WOODFARM = 19] = "WOODFARM"; ELayer[ELayer.CHERRYWOODFARM = 20] = "CHERRYWOODFARM"; ELayer[ELayer.STONEWARM = 21] = "STONEWARM"; ELayer[ELayer.CASTLEWALL = 22] = "CASTLEWALL"; ELayer[ELayer.SHARK = 23] = "SHARK"; ELayer[ELayer.WOLF = 24] = "WOLF"; ELayer[ELayer.GOLDENCOW = 25] = "GOLDENCOW"; ELayer[ELayer.ROOF = 26] = "ROOF"; ELayer[ELayer.DRAGON = 27] = "DRAGON"; ELayer[ELayer.MAMMOTH = 28] = "MAMMOTH"; ELayer[ELayer.FIREBALL = 29] = "FIREBALL"; ELayer[ELayer.CHEST = 30] = "CHEST"; ELayer[ELayer.DRAGONWALLBIG = 31] = "DRAGONWALLBIG"; ELayer[ELayer.DRAGONWALLMEDIUM = 32] = "DRAGONWALLMEDIUM"; ELayer[ELayer.DRAGONWALLSMALL = 33] = "DRAGONWALLSMALL"; ELayer[ELayer.MAMMOTHWALL = 34] = "MAMMOTHWALL"; ELayer[ELayer.MAMMOTHWALLSMALL = 35] = "MAMMOTHWALLSMALL"; ELayer[ELayer.DUCK = 36] = "DUCK"; ELayer[ELayer.TELEPORT = 37] = "TELEPORT"; ELayer[ELayer.CACTUS = 38] = "CACTUS"; ELayer[ELayer.TORNADO = 39] = "TORNADO"; ELayer[ELayer.RUBY = 40] = "RUBY"; })(ELayer || (ELayer = {})); const LayerDataArray = [{ id: ELayer.PLAYER, radius: 35, maxHealth: 100, Qa: 1 }, { id: ELayer.STONE, shoot: true, radius: 75, Qa: 1, Pa: 1, pe: "rock" }, { id: ELayer.HARDSPIKE, shoot: true, qa: 35, radius: 45, maxHealth: 500, Qa: 1 }, { id: ELayer.TREE, shoot: true, cannotShoot: true, radius: 90, Qa: 1, Ka: 1, pe: "tree" }, { id: ELayer.GOLD, shoot: true, radius: 76, Qa: 1, Xa: 5, pe: "gold" }, { id: ELayer.BUSH, shoot: true, radius: 50, Qa: 1, Na: 1, pe: "bush" }, { id: ELayer.TRAP, radius: 40, maxHealth: 500, Qa: 1 }, { id: ELayer.SPIKE, shoot: true, qa: 20, radius: 45, maxHealth: 375, Ia: 20, Qa: 1 }, { id: ELayer.WOODWALL, shoot: true, radius: 45, maxHealth: 380, Qa: 1 }, { id: ELayer.PLATFORM, radius: 60, maxHealth: 300, Qa: 1 }, { id: ELayer.BOOST, radius: 40, maxHealth: 300, Qa: 1 }, { id: ELayer.LOOTBOX, radius: 40, maxHealth: 4, Qa: 1 }, { id: ELayer.PROJECTILE, radius: 0, maxHealth: 0 }, { id: ELayer.WINDMILL, shoot: true, radius: 45, maxHealth: 400, rotateSpeed: Math.PI / 4, Qa: 1 }, { id: ELayer.COW, radius: 90, maxHealth: 380, animal: true, Qa: 1, Ja: 1.6, $a: 9, ts: 0 }, { id: ELayer.SPAWN, shoot: true, radius: 50, maxHealth: 380, Qa: 1 }, { id: ELayer.POWERMILL, shoot: true, radius: 54, maxHealth: 400, rotateSpeed: Math.PI / 2, Qa: 1 }, { id: ELayer.CASTLESPIKE, shoot: true, qa: 5, radius: 42, maxHealth: 1200, Ia: 24, Qa: 1 }, { id: ELayer.TURRET, shoot: true, radius: 45, maxHealth: 800, Qa: 1 }, { id: ELayer.WOODFARM, shoot: true, cannotShoot: true, radius: 80, Qa: 1, Ka: 1, pe: "tree" }, { id: ELayer.CHERRYWOODFARM, shoot: true, cannotShoot: true, radius: 80, Qa: 1, Ka: 1, pe: "cherry_tree" }, { id: ELayer.STONEWARM, shoot: true, radius: 60, Qa: 1, Pa: 1, pe: "rock" }, { id: ELayer.CASTLEWALL, shoot: true, radius: 59, maxHealth: 1750, Qa: 1 }, { id: ELayer.SHARK, radius: 90, maxHealth: 380, animal: true, Qa: 1, Ja: 1.2, $a: 49, qa: 14, ts: 3 }, { id: ELayer.WOLF, radius: 50, maxHealth: 380, animal: true, Qa: 1, Ja: 1.6, $a: 17, qa: 14, ts: 0 }, { id: ELayer.GOLDENCOW, radius: 90, maxHealth: 1e3, animal: true, Qa: 1, Ja: 1.6, $a: 17, qa: 19 }, { id: ELayer.ROOF, radius: 50, maxHealth: 300, Qa: 1 }, { id: ELayer.DRAGON, radius: 100, maxHealth: 5e3, animal: true, Qa: 1, Ja: 1.15, $a: 17, qa: 30, ts: 0 }, { id: ELayer.MAMMOTH, radius: 90, maxHealth: 5e3, animal: true, Qa: 1, Ja: 1.6, $a: 17, qa: 30, ts: 1 }, { id: ELayer.FIREBALL, radius: 100, maxHealth: 380, Qa: 1, Ja: .4, $a: 1, qa: 15, ts: 0 }, { id: ELayer.CHEST, shoot: true, radius: 45, maxHealth: 380, Qa: 1, Xa: 50, Lr: 20 }, { id: ELayer.DRAGONWALLBIG, shoot: true, radius: 92, Qa: 1, Pa: 1 }, { id: ELayer.DRAGONWALLMEDIUM, shoot: true, radius: 92, Qa: 1, Pa: 1 }, { id: ELayer.DRAGONWALLSMALL, shoot: true, radius: 58, Qa: 1, Pa: 1 }, { id: ELayer.MAMMOTHWALL, shoot: true, radius: 92, Qa: 1, Pa: 0 }, { id: ELayer.MAMMOTHWALLSMALL, shoot: true, radius: 20, Qa: 1, Pa: 0 }, { id: ELayer.DUCK, radius: 20, maxHealth: 380, animal: true, Qa: 1, Ja: 1.6, $a: 9, ts: 0 }, { id: ELayer.TELEPORT, shoot: true, radius: 35, maxHealth: 150, Qa: 1 }, { id: ELayer.CACTUS, shoot: true, radius: 50, Qa: 1, Na: 5, qa: 20 }, { id: ELayer.TORNADO, radius: 220, rotateSpeed: Math.PI / 4, Qa: 0, Na: 5, qa: 1 }, { id: ELayer.RUBY, shoot: true, radius: 76, Qa: 1, Xa: 40, pe: "ruby" }]; var Hat; (function(Hat) { Hat[Hat.UNEQUIP = 0] = "UNEQUIP"; Hat[Hat.BUSH = 1] = "BUSH"; Hat[Hat.BERSERKER = 2] = "BERSERKER"; Hat[Hat.JUNGLE = 3] = "JUNGLE"; Hat[Hat.CRYSTAL = 4] = "CRYSTAL"; Hat[Hat.SPIKEGEAR = 5] = "SPIKEGEAR"; Hat[Hat.IMMUNITY = 6] = "IMMUNITY"; Hat[Hat.BOOST = 7] = "BOOST"; Hat[Hat.APPLEHAT = 8] = "APPLEHAT"; Hat[Hat.SCUBA = 9] = "SCUBA"; Hat[Hat.HOOD = 10] = "HOOD"; Hat[Hat.DEMOLIST = 11] = "DEMOLIST"; })(Hat || (Hat = {})); const Hats = [ { bought: true, equipped: true, default: true, price: 0 }, { image: 109, price: 250, axisY: 0, description: "Become a bush", name: "Bush Hat", bought: false, equipped: false, rs: true }, { image: 41, price: 5e3, description: "Increased melee damage", axisY: 10, cs: 1.25, speed: .85, name: "Berserker Gear", bought: false, equipped: false }, { image: 44, price: 3e3, description: "Regenerate health", axisY: 13, hs: 25, name: "Jungle Gear", bought: false, equipped: false }, { image: 45, price: 5e3, description: "Receive reduced damage", axisY: 10, reduceDmg: .75, speed: .95, name: "Crystal Gear", bought: false, equipped: false }, { image: 48, price: 1e3, description: "Attacker's receive damage", axisY: 10, reflect: .45, name: "Spike Gear", bought: false, equipped: false }, { image: 49, price: 4e3, description: "Gain more health", axisY: 15, ls: 150, reduceDmg: .75, name: "Immunity Gear", bought: false, equipped: false }, { image: 50, price: 1500, description: "Move quicker", axisY: 23, speed: 1.23, name: "Boost Hat", bought: false, equipped: false }, { image: 93, price: 150, description: "Apples become more succulent", axisY: 5, speed: 1.05, name: "Apple hat", bought: false, equipped: false }, { image: 121, price: 4e3, description: "Move fast in ocean", axisY: 5, speed: .75, river: 1.5, name: "Scuba Gear", bought: false, equipped: false }, { image: 126, price: 3500, description: "Become invisible when still", axisY: 5, name: "Hood", bought: false, equipped: false, rs: true }, { image: 197, price: 4e3, description: "Destroy buildings faster", axisY: 10, name: "Demolist", bought: false, equipped: false, speed: .3 } ]; var EWeapons; (function(EWeapons) { EWeapons[EWeapons.TOOL_HAMMER = 0] = "TOOL_HAMMER"; EWeapons[EWeapons.STONE_SWORD = 1] = "STONE_SWORD"; EWeapons[EWeapons.STONE_SPEAR = 2] = "STONE_SPEAR"; EWeapons[EWeapons.STONE_AXE = 3] = "STONE_AXE"; EWeapons[EWeapons.MUSKET = 4] = "MUSKET"; EWeapons[EWeapons.SHIELD = 11] = "SHIELD"; EWeapons[EWeapons.STICK = 13] = "STICK"; EWeapons[EWeapons.HAMMER = 15] = "HAMMER"; EWeapons[EWeapons.KATANA = 17] = "KATANA"; EWeapons[EWeapons.BOW = 26] = "BOW"; EWeapons[EWeapons.XBOW = 27] = "XBOW"; EWeapons[EWeapons.NAGINATA = 28] = "NAGINATA"; EWeapons[EWeapons.GREAT_AXE = 30] = "GREAT_AXE"; EWeapons[EWeapons.BAT = 31] = "BAT"; EWeapons[EWeapons.PEARL = 50] = "PEARL"; EWeapons[EWeapons.SCYTHE = 57] = "SCYTHE"; })(EWeapons || (EWeapons = {})); var ActionType; (function(ActionType) { ActionType[ActionType.MELEE = 0] = "MELEE"; ActionType[ActionType.RANGED = 1] = "RANGED"; ActionType[ActionType.PLACEABLE = 2] = "PLACEABLE"; ActionType[ActionType.EATABLE = 3] = "EATABLE"; })(ActionType || (ActionType = {})); var ItemType; (function(ItemType) { ItemType[ItemType.PRIMARY = 0] = "PRIMARY"; ItemType[ItemType.SECONDARY = 1] = "SECONDARY"; ItemType[ItemType.FOOD = 2] = "FOOD"; ItemType[ItemType.WALL = 3] = "WALL"; ItemType[ItemType.SPIKE = 4] = "SPIKE"; ItemType[ItemType.WINDMILL = 5] = "WINDMILL"; ItemType[ItemType.FARM = 6] = "FARM"; ItemType[ItemType.TRAP = 7] = "TRAP"; ItemType[ItemType.PLATFORM = 8] = "PLATFORM"; ItemType[ItemType.SPAWN = 9] = "SPAWN"; ItemType[ItemType.TURRET = 10] = "TURRET"; })(ItemType || (ItemType = {})); var upgradeType; (function(upgradeType) { upgradeType[upgradeType.STONE = 1] = "STONE"; upgradeType[upgradeType.GOLD = 2] = "GOLD"; upgradeType[upgradeType.DIAMOND = 3] = "DIAMOND"; upgradeType[upgradeType.RUBY = 4] = "RUBY"; })(upgradeType || (upgradeType = {})); const ItemData = [ { id: EWeapons.TOOL_HAMMER, gs: 46, upgradeType: upgradeType.STONE, imageinv: 29, image: 25, name: "Tool Hammer", description: "Gather materials", range: 80, itemType: ItemType.PRIMARY, damage: 25, reload: 300, _s: 30, Ms: 200, actionType: ActionType.MELEE, ps: 0, As: -3.5, os: 1 }, { id: EWeapons.STONE_SWORD, ks: 1, ys: 2, imageinv: 28, image: 24, name: "Stone Sword", description: "Sharp and pointy", range: 135, Ms: 250, itemType: ItemType.PRIMARY, damage: 35, reload: 300, Us: .85, actionType: ActionType.MELEE, ps: 0, As: -8, os: -4 }, { id: EWeapons.STONE_SPEAR, gs: 39, upgradeType: upgradeType.STONE, ks: 1, ys: 4, imageinv: 31, image: 26, name: "Stone Spear", description: "Long melee range", range: 160, itemType: ItemType.PRIMARY, damage: 49, Us: .81, Ms: 450, reload: 700, actionType: ActionType.MELEE, ps: 0, As: 0, os: 2 }, { id: EWeapons.STONE_AXE, gs: 33, upgradeType: upgradeType.STONE, ks: 1, ys: 128, imageinv: 32, image: 35, name: "Stone Axe", description: "Gathers materials faster", range: 90, itemType: ItemType.PRIMARY, damage: 30, Ms: 250, reload: 400, actionType: ActionType.MELEE, ps: 0, As: -2, os: 2, Es: 2, Cs: 2, Bs: 2, zs: 2 }, { id: EWeapons.MUSKET, cost: { food: 0, wood: 0, stone: 10, gold: 0 }, ks: 16, xs: 2, ys: 8, imageinv: 30, image: 27, name: "Stone Musket", description: "Deal Long Range Damage", range: 1e3, itemType: ItemType.SECONDARY, damage: 49, reload: 1500, projectile: 17, Ls: 1500, actionType: ActionType.RANGED, ps: 1, Us: .63, As: 0, os: 0 }, { id: 5, cost: { food: 0, wood: 10, stone: 0, gold: 0 }, imageinv: 33, image: 103, name: "Wood Wall", description: "A sturdy wall", itemType: ItemType.WALL, actionType: ActionType.PLACEABLE, Hs: 5, As: 0, os: 15, layer: ELayer.WOODWALL, ps: 2 }, { id: 6, cost: { food: 0, wood: 5, stone: 20, gold: 0 }, ks: 1, ys: 512, imageinv: 36, image: 106, name: "Boost", description: "Provides a thrust", itemType: ItemType.TRAP, actionType: ActionType.PLACEABLE, Hs: -5, As: 0, os: 3, layer: ELayer.BOOST, ps: 2 }, { id: 7, cost: { food: 0, wood: 20, stone: 5, gold: 0 }, imageinv: 37, image: 104, name: "Spike", description: "Sharp defence", itemType: ItemType.SPIKE, actionType: ActionType.PLACEABLE, Hs: 2, As: 0, os: 15, layer: ELayer.SPIKE, ps: 2 }, { id: 8, cost: { food: 0, wood: 20, stone: 0, gold: 0 }, ks: 1, imageinv: 38, image: 114, name: "Platform", description: "Shoot over structures", itemType: ItemType.PLATFORM, actionType: ActionType.PLACEABLE, Hs: -2, As: 0, os: 8, layer: ELayer.PLATFORM, ps: 2 }, { id: 9, cost: { food: 0, wood: 30, stone: 30, gold: 0 }, ks: 1, ys: 1024, imageinv: 39, image: 107, name: "Trap", description: "Snared enemies are stuck", itemType: ItemType.TRAP, actionType: ActionType.PLACEABLE, Hs: 2, As: 0, os: 26, layer: ELayer.TRAP, ps: 2 }, { id: 10, cost: { food: 10, wood: 0, stone: 0, gold: 0 }, imageinv: 43, image: 42, name: "Apple", description: "Heals you", itemType: ItemType.FOOD, actionType: ActionType.EATABLE, restore: 20, As: 0, os: 22, ps: 2 }, { id: EWeapons.SHIELD, ks: 1, ys: 256, imageinv: 47, image: 46, name: "Shield", description: "Reduces damage", itemType: ItemType.SECONDARY, actionType: ActionType.MELEE, Us: .7, shieldAngle: .75, range: 55, Ms: 350, damage: 15, _s: 40, reload: 500, As: -15, os: 10, ps: 3 }, { id: 12, cost: { food: 15, wood: 0, stone: 0, gold: 0 }, ks: 1, ys: 64, imageinv: 52, image: 51, name: "Cookie", description: "Heals you", itemType: ItemType.FOOD, actionType: ActionType.EATABLE, restore: 35, As: 0, os: 22, ps: 2 }, { id: EWeapons.STICK, gs: 41, upgradeType: upgradeType.STONE, ks: 1, ys: 32, imageinv: 55, image: 54, name: "Stick", description: "Gathers resources quickly", range: 100, itemType: ItemType.PRIMARY, damage: 1, reload: 400, actionType: ActionType.MELEE, Ms: 60, ps: 0, As: 4, os: 0, Es: 7, Cs: 7, Bs: 7, zs: 4 }, { id: 14, cost: { food: 0, wood: 50, stone: 10, gold: 0 }, imageinv: 57, image: 61, name: "Windmill", description: "Generates score over time", itemType: ItemType.WINDMILL, actionType: ActionType.PLACEABLE, rotateSpeed: Math.PI / 4, Hs: -5, As: 0, os: 38, layer: ELayer.WINDMILL, ps: 2 }, { id: EWeapons.HAMMER, ks: 1, ys: 1, imageinv: 63, image: 62, name: "Hammer", description: "Breaks structures faster", range: 80, itemType: ItemType.SECONDARY, damage: 12, _s: 76, Us: .89, Ms: 200, reload: 400, actionType: ActionType.MELEE, ps: 0, As: 5, os: 2 }, { id: 16, ks: 1, ys: 1, cost: { food: 0, wood: 200, stone: 200, gold: 200 }, imageinv: 65, image: 115, name: "Cosy Bed", description: "Respawn at the bed", itemType: ItemType.SPAWN, actionType: ActionType.PLACEABLE, Hs: 8, As: 0, os: 25, layer: ELayer.SPAWN, ps: 2 }, { id: EWeapons.KATANA, gs: 37, upgradeType: upgradeType.STONE, ks: 2, ys: 2, imageinv: 68, image: 67, name: "Katana", description: "Excellent melee weapon", range: 140, Ms: 150, itemType: ItemType.PRIMARY, damage: 40, reload: 300, Us: .85, actionType: ActionType.MELEE, ps: 0, As: 1, os: 3 }, { id: 18, cost: { food: 0, wood: 30, stone: 30, gold: 0 }, ks: 160, ys: 1, imageinv: 69, image: 113, name: "Castle Spike", description: "Great for bases", itemType: ItemType.SPIKE, actionType: ActionType.PLACEABLE, damage: { hit: 24, touch: 5 }, Hs: -8, As: 0, os: 14, layer: ELayer.CASTLESPIKE, ps: 2 }, { id: 19, cost: { food: 0, wood: 100, stone: 50, gold: 0 }, ks: 1, ys: 1, imageinv: 57, image: 61, name: "Powermill", description: "Generates more score over time", itemType: ItemType.WINDMILL, actionType: ActionType.PLACEABLE, rotateSpeed: Math.PI / 2, Hs: 5, As: 0, os: 38, layer: ELayer.POWERMILL, ps: 2 }, { id: 20, ks: 1, ys: 1, cost: { food: 0, wood: 30, stone: 10, gold: 0 }, imageinv: 73, image: 112, name: "Hard Spike", description: "Sharper defence", itemType: ItemType.SPIKE, actionType: ActionType.PLACEABLE, Hs: 2, As: 0, os: 15, layer: ELayer.HARDSPIKE, ps: 2 }, { id: 21, cost: { food: 0, wood: 200, stone: 150, gold: 10 }, ks: 1, ys: 1, imageinv: 77, image: 74, name: "Turret", description: "Defence for your base", itemType: ItemType.TURRET, actionType: ActionType.PLACEABLE, Hs: 6, As: 0, os: 25, layer: ELayer.TURRET, ps: 2 }, { id: 22, ks: 1, ys: 1, cost: { food: 0, wood: 200, stone: 0, gold: 0 }, imageinv: 78, image: 110, name: "Cherry wood farm", description: "Used for decoration and wood", itemType: ItemType.FARM, actionType: ActionType.PLACEABLE, Hs: 3, As: 0, os: 47, layer: ELayer.CHERRYWOODFARM, ps: 2 }, { id: 23, ks: 1, ys: 1, cost: { food: 0, wood: 200, stone: 0, gold: 0 }, imageinv: 80, image: 111, name: "Wood farm", description: "Used for decoration and wood", itemType: ItemType.FARM, actionType: ActionType.PLACEABLE, Hs: 3, As: 0, os: 47, layer: ELayer.WOODFARM, ps: 2 }, { id: 24, ks: 1, ys: 1, cost: { food: 200, wood: 0, stone: 0, gold: 0 }, imageinv: 85, image: 109, name: "Berry farm", description: "Used for decoration and berries", itemType: ItemType.FARM, actionType: ActionType.PLACEABLE, Hs: 3, As: 0, os: 17, layer: ELayer.BUSH, ps: 2 }, { id: 25, ks: 1, ys: 1, cost: { food: 0, wood: 0, stone: 200, gold: 0 }, imageinv: 83, image: 108, name: "Stone farm", description: "Used for decoration and stone", itemType: ItemType.FARM, actionType: ActionType.PLACEABLE, Hs: 3, As: 0, os: 20, layer: ELayer.STONEWARM, ps: 2 }, { id: EWeapons.BOW, cost: { food: 0, wood: 4, stone: 0, gold: 0 }, ks: 1, ys: 16, imageinv: 86, image: 87, name: "Bow", description: "Deal Long Range Damage", range: 800, itemType: ItemType.SECONDARY, damage: 25, reload: 600, projectile: 88, Ls: 1200, actionType: ActionType.RANGED, ps: 1, Us: .75, As: 0, os: 35 }, { id: EWeapons.XBOW, cost: { food: 0, wood: 10, stone: 0, gold: 0 }, ks: 16, ys: 176, imageinv: 90, image: 91, name: "XBow", description: "Rapid fire bow", range: 800, itemType: ItemType.SECONDARY, damage: 27, reload: 235, projectile: 88, Ls: 1200, actionType: ActionType.RANGED, ps: 1, Us: .35, As: 0, os: 30 }, { id: EWeapons.NAGINATA, gs: 45, upgradeType: upgradeType.STONE, ks: 4, ys: 4, imageinv: 100, image: 99, name: "Naginata", description: "Long melee range", range: 165, itemType: ItemType.PRIMARY, damage: 52, Us: .81, Ms: 470, reload: 700, actionType: ActionType.MELEE, ps: 0, As: 0, os: -4 }, { id: 29, cost: { food: 0, wood: 0, stone: 35, gold: 10 }, ks: 1, ys: 1, imageinv: 101, image: 105, name: "Castle Wall", description: "A very sturdy wall", itemType: ItemType.WALL, actionType: ActionType.PLACEABLE, Hs: 8, As: 0, os: 13, layer: ELayer.CASTLEWALL, ps: 2 }, { id: EWeapons.GREAT_AXE, gs: 35, upgradeType: upgradeType.STONE, ks: 128, ys: 128, imageinv: 117, image: 116, name: "Great Axe", description: "More powerful axe.", range: 94, itemType: ItemType.PRIMARY, damage: 37, Ms: 250, reload: 400, actionType: ActionType.MELEE, ps: 0, As: 4, os: 2, Es: 4, Cs: 4, Bs: 4, zs: 2 }, { id: EWeapons.BAT, ks: 1, ys: 2048, imageinv: 128, image: 127, name: "Bat", description: "Hit enemies for a home run", range: 115, itemType: ItemType.PRIMARY, damage: 28, Us: .92, Ms: 870, reload: 700, actionType: ActionType.MELEE, ps: 0, As: 10, os: 2 }, { id: 32, ks: 1, ys: 128, imageinv: 131, image: 130, name: "Diamond Axe", description: "Gathers materials faster", range: 90, itemType: ItemType.PRIMARY, damage: 35.5, Ms: 250, reload: 400, actionType: ActionType.MELEE, ps: 0, As: -2, os: 2, Es: 2, Cs: 2, Bs: 2, zs: 2 }, { id: 33, gs: 32, upgradeType: upgradeType.GOLD, ks: 1, ys: 128, imageinv: 133, image: 132, name: "Gold Axe", description: "Gathers materials faster", range: 90, itemType: ItemType.PRIMARY, damage: 33, Ms: 250, reload: 400, actionType: ActionType.MELEE, ps: 0, As: -2, os: 2, Es: 2, Cs: 2, Bs: 2, zs: 2 }, { id: 34, ks: 128, ys: 128, imageinv: 135, image: 134, name: "Diamond Great Axe", description: "More powerful axe.", range: 94, itemType: ItemType.PRIMARY, damage: 47, Ms: 250, reload: 400, actionType: ActionType.MELEE, ps: 0, As: 4, os: 2, Es: 4, Cs: 4, Bs: 4, zs: 2 }, { id: 35, gs: 34, upgradeType: upgradeType.GOLD, ks: 128, ys: 128, imageinv: 145, image: 144, name: "Gold Great Axe", description: "More powerful axe.", range: 94, itemType: ItemType.PRIMARY, damage: 40, Ms: 250, reload: 400, actionType: ActionType.MELEE, ps: 0, As: 4, os: 2, Es: 4, Cs: 4, Bs: 4, zs: 2 }, { id: 36, gs: 40, upgradeType: upgradeType.DIAMOND, ks: 2, ys: 2, imageinv: 137, image: 136, name: "Diamond Katana", description: "Excellent melee weapon", range: 140, Ms: 150, itemType: ItemType.PRIMARY, damage: 46.5, reload: 300, Us: .85, actionType: ActionType.MELEE, ps: 0, As: 1, os: 3 }, { id: 37, gs: 36, upgradeType: upgradeType.GOLD, ks: 2, ys: 2, imageinv: 139, image: 138, name: "Gold Katana", description: "Excellent melee weapon", range: 140, Ms: 150, itemType: ItemType.PRIMARY, damage: 43, reload: 300, Us: .85, actionType: ActionType.MELEE, ps: 0, As: 1, os: 3 }, { id: 38, ks: 1, ys: 4, imageinv: 141, image: 140, name: "Diamond Spear", description: "Long melee range", range: 160, itemType: ItemType.PRIMARY, damage: 53, Us: .81, Ms: 450, reload: 700, actionType: ActionType.MELEE, ps: 0, As: 0, os: 2 }, { id: 39, gs: 38, upgradeType: upgradeType.GOLD, ks: 1, ys: 4, imageinv: 143, image: 142, name: "Gold Spear", description: "Long melee range", range: 160, itemType: ItemType.PRIMARY, damage: 51, Us: .81, Ms: 450, reload: 700, actionType: ActionType.MELEE, ps: 0, As: 0, os: 2 }, { id: 40, ks: 2, ys: 2, imageinv: 147, image: 148, name: "Chillrend", description: "A powerful force flows through this blade.", range: 140, Ms: 150, itemType: ItemType.PRIMARY, damage: 48.5, reload: 300, Us: .9, actionType: ActionType.MELEE, ps: 0, As: 1, os: 3 }, { id: 41, gs: 42, upgradeType: upgradeType.GOLD, ks: 1, ys: 32, imageinv: 150, image: 149, name: "Gold Stick", description: "Gathers resources quickly", range: 100, itemType: ItemType.PRIMARY, damage: 1, reload: 400, actionType: ActionType.MELEE, Ms: 60, ps: 0, As: 4, os: 0, Es: 8, Cs: 8, Bs: 8, zs: 5 }, { id: 42, gs: 43, upgradeType: upgradeType.DIAMOND, ks: 1, ys: 32, imageinv: 167, image: 151, name: "Diamond Stick", description: "Gathers resources quickly", range: 100, itemType: ItemType.PRIMARY, damage: 1, reload: 400, actionType: ActionType.MELEE, Ms: 60, ps: 0, As: 4, os: 0, Es: 9, Cs: 9, Bs: 9, zs: 6 }, { upgradeType: upgradeType.RUBY, id: 43, ks: 1, ys: 32, imageinv: 168, image: 152, name: "Ruby Stick", description: "Gathers resources quickly", range: 100, itemType: ItemType.PRIMARY, damage: 1, reload: 400, actionType: ActionType.MELEE, Ms: 60, ps: 0, As: 4, os: 0, Es: 10, Cs: 10, Bs: 10, zs: 7 }, { id: 44, ks: 4, ys: 4, imageinv: 154, image: 153, name: "Diamond Naginata", description: "Long melee range", range: 165, itemType: ItemType.PRIMARY, damage: 56, Us: .81, Ms: 470, reload: 700, actionType: ActionType.MELEE, ps: 0, As: 0, os: -4 }, { id: 45, gs: 44, upgradeType: upgradeType.GOLD, ks: 4, ys: 4, imageinv: 156, image: 155, name: "Gold Naginata", description: "Long melee range", range: 165, itemType: ItemType.PRIMARY, damage: 54, Us: .81, Ms: 470, reload: 700, actionType: ActionType.MELEE, ps: 0, As: 0, os: -4 }, { id: 46, gs: 47, upgradeType: upgradeType.GOLD, imageinv: 158, image: 157, name: "Gold Tool Hammer", description: "Gather materials", range: 80, itemType: ItemType.PRIMARY, damage: 32, reload: 300, _s: 30, Ms: 200, actionType: ActionType.MELEE, ps: 0, As: -3.5, os: 1 }, { id: 47, gs: 48, upgradeType: upgradeType.DIAMOND, imageinv: 160, image: 159, name: "Diamond Tool Hammer", description: "Gather materials", range: 80, itemType: ItemType.PRIMARY, damage: 38, reload: 300, _s: 30, Ms: 200, actionType: ActionType.MELEE, ps: 0, As: -3.5, os: 1 }, { upgradeType: upgradeType.RUBY, id: 48, imageinv: 162, image: 161, name: "Ruby Tool Hammer", description: "Gather materials", range: 80, itemType: ItemType.PRIMARY, damage: 41, reload: 300, _s: 30, Ms: 200, actionType: ActionType.MELEE, ps: 0, As: -3.5, os: 1 }, { id: 49, cost: { food: 0, wood: 20, stone: 0, gold: 0 }, ks: 1, imageinv: 170, image: 169, name: "Roof", description: "Take cover from projectiles", itemType: ItemType.PLATFORM, actionType: ActionType.PLACEABLE, Hs: 0, As: 0, os: 15, layer: ELayer.ROOF, ps: 2 }, { id: 50, cost: { food: 80, wood: 80, stone: 80, gold: 80 }, ks: 1, ys: 256, imageinv: 182, image: 182, name: "Pearl", description: "Teleport on impact", range: 700, itemType: ItemType.SECONDARY, damage: 10, reload: 1e4, projectile: 182, Ls: 1e3, actionType: ActionType.RANGED, ps: 1, Us: .4, As: 0, os: 35 }, { id: 51, cost: { food: 0, wood: 50, stone: 50, gold: 0 }, ks: 2208, ys: 1, imageinv: 183, image: 183, name: "Teleporter", description: "Teleports to location on map", itemType: ItemType.SPAWN, actionType: ActionType.PLACEABLE, Hs: 5, As: 0, os: 15, layer: ELayer.TELEPORT, ps: 2 }, { gs: 53, upgradeType: upgradeType.STONE, id: 52, ks: 1, ys: 4096, imageinv: 189, image: 193, name: "Stone Dagger", description: "A stubbier sword", range: 80, Ms: 100, itemType: ItemType.PRIMARY, damage: 22, reload: 150, actionType: ActionType.MELEE, ps: 0, As: 10, os: 20 }, { gs: 54, upgradeType: upgradeType.GOLD, id: 53, ks: 1, ys: 4096, imageinv: 190, image: 194, name: "Gold Dagger", description: "A stubbier sword", range: 80, Ms: 100, itemType: ItemType.PRIMARY, damage: 24, reload: 150, actionType: ActionType.MELEE, ps: 0, As: 10, os: 20 }, { gs: 55, upgradeType: upgradeType.DIAMOND, id: 54, ks: 1, ys: 4096, imageinv: 191, image: 195, name: "Diamond Dagger", description: "A stubbier sword", range: 80, Ms: 100, itemType: ItemType.PRIMARY, damage: 26, reload: 150, actionType: ActionType.MELEE, ps: 0, As: 10, os: 20 }, { upgradeType: upgradeType.RUBY, id: 55, ks: 1, ys: 4096, imageinv: 192, image: 196, name: "Ruby Dagger", description: "A stubbier sword", range: 80, Ms: 100, itemType: ItemType.PRIMARY, damage: 29, reload: 150, actionType: ActionType.MELEE, ps: 0, As: 10, os: 20 }, { id: 56, gs: 57, upgradeType: upgradeType.GOLD, ks: 1, ys: 1, imageinv: 198, image: 198, name: "Secret Item", description: "Dont leak how to get it :)", range: 115, itemType: ItemType.PRIMARY, damage: 28, Us: .92, Ms: 1570, reload: 2e3, actionType: ActionType.MELEE, ps: 0, As: 40, os: 40 }, { id: 57, ks: 2, ys: 2, imageinv: 199, image: 199, name: "Daedric Scythe", description: "Whispers fill the air", range: 160, Ms: 150, itemType: ItemType.PRIMARY, damage: 52, reload: 450, Us: .85, actionType: ActionType.MELEE, ps: 0, As: -5, os: 20 } ]; const LayerData = LayerDataArray; const hatsData = Hats; const itemData = ItemData; const fromCharCode = codes => codes.map((code => String.fromCharCode(code))).join(""); window.layerData = LayerData; window.hatsData = hatsData; window.itemData = itemData; window.AntiMooAddict = window; const AntiMooAddict = window.AntiMooAddict; 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 ]); const log = console.log; log("InfoDataGlobal: " + window.layerData) log("HatsDataGlobal: " + window.hatsData) log("ItemDataGlobal: " + window.itemData) })(); }).toString() + `)(${JSON.stringify(GM_info)});`)(); Math.lerpAngle = function(value1, value2, amount) { let difference = Math.abs(value2 - value1); if (difference > Math.PI) { if (value1 > value2) { value2 += 360; } else { value1 += 360; } } let value = value2 + ((value1 - value2) * amount); if (value >= 0 && value <= 360) return value; return value % (180 / Math.PI * 2); }; const { log } = console; var autoChoose = true; var placeObjects = 0; var kills = 0; var placeDelay; var time; var ws; let pps = 0; let wsPushing = false let wasBreaking = false let Game; let Entity = []; let keyDown = []; let user = {}; let tribe = []; let enemy = []; let encoder = new TextEncoder(); let decoder = new TextDecoder(); let teammates = []; let userPos = { x: user.x + user.xVel, y: user.y + user.yVel } let enemyPos = { x: enemy.x + enemy.xVel, y: enemy.y + enemy.yVel } let skinLoaded = true; let weaponReload = true; let lastPlaceTime = 0; let placeExecutions = 0; let ctxt; let layerData = window.layerData; const maxPlaceExecutions = 2; const spamCooldown = 450; const healthThreshold = 40; const enemyThreshold = 210; var styleItem1 = document.createElement('style'); styleItem1.type = 'text/css'; styleItem1.appendChild(document.createTextNode(` @import url(\"https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css\"); #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 { display: none !important; } #game-content { justifyContent: center !important; } #main-content { width: auto background: rgba(0, 0, 0, 0), display: flex, align-items: center, align-content: center, margin-bottom: 10px, padding: 0px, } #homepage { background: black; } #middle-wrap { height: 9999999px, width: 500px, padding: none, } .side-main { opacity: 0, } #top-wrap-left { opacity: 0, } #top-wrap-right { height: 20px, opacity: 30, } #server-select { font-size: 14px, line-height: 1.7, text-transform: uppercase, display: block, background: rgba(0, 0, 0, 0), box-shadow: none, border: none, border-radius: 31px, padding: 0px 20px, height: 50px, min-width: 230px, justify-content: center, align-items: center, margin-top: 5px, margin-left: auto, margin-right: auto, text-decoration: underline, } .text-shadowed-5 { font-size: 16px, color: #fff, text-shadow: none, padding-bottom: 35px, } .gameover { width: 650px; height: 450px; background-color: #5e3837; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 10px; border: 5px solid #141414; text-content: "AntiMooAddict cant die..."; } .gameover .header { background-color: #91553b; padding: 10px; display: flex; border-top-left-radius: 10px; border-top-right-radius: 10px; box-shadow: inset 0 -4px 0 #141414; } .gameover .header h1 { color: white; margin-left: auto; margin-right: auto; } .gameover .header #close { color: rgb(244, 235, 228); cursor: pointer; width: 20px; height: 20px; padding: 5px; border-radius: 5px; background-color: #5e3837; border: 4px solid #141414; text-align: center; display: flex; justify-content: center; align-items: center; position: absolute; top: -17px; right: -17px; z-index: 1; } .gameover .header #close:hover { color: #ccc; } .gameover .stats { display: flex; height: 75%; align-items: center; width: 90%; margin: auto; } .gameover .stats .stat { display: flex; flex-direction: column; min-width: 100px; margin-left: auto; margin-right: auto; } .gameover .stats .stat img { margin-bottom: 20px; height: 60px; width: 60px; margin-left: auto; margin-right: auto; } .gameover .stats .stat .stat-type { margin-right: auto; color: #f3c39f; text-transform: uppercase; font-weight: bold; } .gameover .stats .stat .stat-content { color: #f3c39f; font-weight: bold; } #play { box-shadow: none, border: none, border-radius: 31px, padding: 0px 20px, height: 50px, min-width: 150px, justify-content: center, align-items: center, font-size: 20px, margin-top: 5px, margin-left: auto, margin-right: auto, } #nickname { text-align: center, color: #666666, display: block, background: #fff, border: none, border-radius: 31px, box-shadow: none, padding: 6px 15px, margin-left: auto, margin-right: auto, font-size: 20px, width: 300px, } .nav-button { display: none, height: 0px, } #currency-container { display: none, } #game-mode-container { display: flex; flex-direction: column; } .game-mode { transition: all 0.5s ease; border-radius: 25px; } .side-button:hover { transition: all 0.5s ease; } #ffa-mode, #sandbox-mode, #event-mode, #play, #server-select { border-radius: 25px; display: block; } .menu-text-icon::before { margin-bottom: 0.2vh; margin-right: .4vw; } `)); document.head.appendChild(styleItem1); var textDiv = document.createElement('div'); textDiv.className = 'text'; setInterval(() => { setTimeout(() => { textDiv.textContent = 'A'; setTimeout(() => { textDiv.textContent = 'An'; setTimeout(() => { textDiv.textContent = 'Ant'; setTimeout(() => { textDiv.textContent = 'Anti'; setTimeout(() => { textDiv.textContent = 'AntiM'; setTimeout(() => { textDiv.textContent = 'AntiMo'; setTimeout(() => { textDiv.textContent = 'AntiMoo'; setTimeout(() => { textDiv.textContent = 'AntiMooA'; setTimeout(() => { textDiv.textContent = 'AntiMooAd'; setTimeout(() => { textDiv.textContent = 'AntiMooAdd'; setTimeout(() => { textDiv.textContent = 'AntiMooAddi'; setTimeout(() => { textDiv.textContent = 'AntiMooAddic'; setTimeout(() => { textDiv.textContent = 'AntiMooAddict'; }, 500); }, 500); }, 500); }, 500); }, 500); }, 500); }, 500); }, 500); }, 500); }, 500); }, 500); }, 500); }, 500); }, 10000); textDiv.style.color = 'yellow'; textDiv.style.fontSize = '30px'; var middleWrap = document.getElementById('middle-wrap'); if (middleWrap) { if (middleWrap.children.length >= 1) { middleWrap.insertBefore(textDiv, middleWrap.children[1]); } else { middleWrap.appendChild(textDiv); } } setInterval(() => { pps = 0; }, 2000); let Config = { serverUpdate: 1000 / 9, breaking: false, pushing: false, oldTrap: null, trapBroken: null, antiBull: false, aimBot: true, breakHitReload: true, autoAttack: false, weapon: 0, enemiesNear: [], angle: 0, move: 0, messages: new Array([], []), counter: 0, resolver: function () {}, last: Date.now(), WS: null }; Config.tick = () => { return new Promise((e) => (Config.resolver = e)) }; function fixTo(n, v) { return parseFloat(n.toFixed(v)); } function getAttackDir() { let lastDir = Config.angle; return fixTo(lastDir || 0, 2); } function doubleHeal() { setTimeout(() => { Sploop.place(2, getAttackDir()); setTimeout(() => { Sploop.place(2, getAttackDir()); }, window.pingTime > 100 ? 0 : 30); }, 0) } function tripleHeal() { setTimeout(() => { doubleHeal(); setTimeout(() => { Sploop.place(2, getAttackDir()); }, 1e3); }, 0); } let Toggle = { autoBreak: true, autoPush: true, autoPlace: true, autoSync: true, autoHeal: true, Replacer: true, antiTrap: true, markers: true, aimBot: true, smoothBarHealth: true, safeWalk: true, aimLerpAngle: true, spikeNearSync: false, spikeSyncPerfect: false, trapSync: false } const items = [ { id: 0, name: "Tool Hammer", description: "Gather materials", range: 80, damage: 25, reload: 300, weapon: true, }, { id: 1, name: "Stone Sword", description: "Sharp and pointy", range: 135, damage: 35, reload: 300, weapon: true, }, { id: 2, name: "Stone Spear", description: "Long melee range", range: 160, damage: 49, reload: 700, weapon: true, }, { id: 3, name: "Stone Axe", description: "Gathers materials faster", range: 90, damage: 30, reload: 400, weapon: true, }, { id: 4, name: "Stone Musket", description: "Deal Long Range Damage", range: 1000, damage: 49, reload: 1500, weapon: true, }, { id: 5, name: "Wood Wall", description: "A sturdy wall", }, { id: 6, name: "Boost", description: "Provides a thrust", }, { id: 7, name: "Spike", description: "Sharp defence", }, { id: 8, name: "Platform", description: "Shoot over structures", }, { id: 9, name: "Trap", description: "Snared enemies are stuck", }, { id: 10, name: "Apple", description: "Heals you", }, { id: 11, name: "Shield", description: "Reduces damage", range: 55, damage: 15, reload: 500, }, { id: 12, name: "Cookie", description: "Heals you", }, { id: 13, name: "Stick", description: "Gathers resources quickly", range: 100, damage: 1, reload: 400, weapon: true, }, { id: 14, name: "Windmill", description: "Generates score over time", }, { id: 15, name: "Hammer", description: "Breaks structures faster", range: 80, damage: 12, reload: 400, weapon: true, }, { id: 16, name: "Cosy Bed", description: "Respawn at the bed", }, { id: 17, name: "Katana", description: "Excellent melee weapon", range: 140, damage: 40, reload: 300, weapon: true, }, { id: 18, name: "Castle Spike", description: "Great for bases", }, { id: 19, name: "Powermill", description: "Generates more score over time", }, { id: 20, name: "Hard Spike", description: "Sharper defence", }, { id: 21, name: "Turret", description: "Defence for your base", }, { id: 22, name: "Cherry wood farm", description: "Used for decoration and wood", }, { id: 23, name: "Wood farm", description: "Used for decoration and wood", }, { id: 24, name: "Berry farm", description: "Used for decoration and berries", }, { id: 25, name: "Stone farm", description: "Used for decoration and stone", }, { id: 26, name: "Bow", description: "Deal Long Range Damage", range: 800, damage: 25, reload: 600, weapon: true, }, { id: 27, name: "XBow", description: "Rapid fire bow", range: 800, damage: 27, reload: 235, weapon: true, }, { id: 28, name: "Naginata", description: "Long melee range", range: 165, damage: 52, reload: 700, weapon: true, }, { id: 29, name: "Castle Wall", description: "A very sturdy wall", }, { id: 30, name: "Great Axe", description: "More powerful axe.", range: 94, damage: 37, reload: 400, weapon: true, }, { id: 31, name: "Bat", description: "Hit enemies for a home run", range: 115, damage: 28, reload: 700, weapon: true, }, { id: 32, name: "Diamond Axe", description: "Gathers materials faster", range: 90, damage: 35.5, reload: 400, weapon: true, }, { id: 33, name: "Gold Axe", description: "Gathers materials faster", range: 90, damage: 33, reload: 400, weapon: true, }, { id: 34, name: "Diamond Great Axe", description: "More powerful axe.", range: 94, damage: 47, reload: 400, weapon: true, }, { id: 35, name: "Gold Great Axe", description: "More powerful axe.", range: 94, damage: 40, reload: 400, zs: 2, weapon: true, }, { id: 36, image: 136, name: "Diamond Katana", description: "Excellent melee weapon", range: 140, damage: 46.5, reload: 300, weapon: true, }, { id: 37, name: "Gold Katana", description: "Excellent melee weapon", range: 140, damage: 43, reload: 300, weapon: true, }, { id: 38, name: "Diamond Spear", description: "Long melee range", range: 160, damage: 53, reload: 700, weapon: true, }, { id: 39, name: "Gold Spear", description: "Long melee range", range: 160, damage: 51, reload: 700, weapon: true, }, { id: 40, name: "Chillrend", description: "A powerful force flows through this blade.", range: 140, damage: 48.5, reload: 300, weapon: true, }, { id: 41, name: "Gold Stick", description: "Gathers resources quickly", range: 100, damage: 1, reload: 400, weapon: true, }, { id: 42, name: "Diamond Stick", description: "Gathers resources quickly", range: 100, damage: 1, reload: 400, weapon: true, }, { id: 43, name: "Ruby Stick", description: "Gathers resources quickly", range: 100, damage: 1, reload: 400, weapon: true, }, { id: 44, name: "Diamond Naginata", description: "Long melee range", range: 165, damage: 56, reload: 700, weapon: true, }, { id: 45, name: "Gold Naginata", description: "Long melee range", range: 165, damage: 54, reload: 700, weapon: true, }, { id: 46, name: "Gold Tool Hammer", description: "Gather materials", range: 80, damage: 32, reload: 300, weapon: true, }, { id: 47, name: "Diamond Tool Hammer", description: "Gather materials", range: 80, damage: 38, reload: 300, weapon: true, }, { id: 48, name: "Ruby Tool Hammer", description: "Gather materials", range: 80, damage: 41, reload: 300, weapon: true, }, { id: 49, name: "Roof", description: "Take cover from projectiles", }, { id: 50, name: "Pearl", description: "Teleport on impact", range: 700, damage: 10, reload: 10000, weapon: true, }, { id: 51, name: "Teleporter", description: "Teleports to location on map", }, { id: 52, name: "Stone Dagger", description: "A stubbier sword", range: 80, damage: 22, reload: 150, weapon: true, }, { id: 53, name: "Gold Dagger", description: "A stubbier sword", range: 80, damage: 24, reload: 150, weapon: true, }, { id: 54, name: "Diamond Dagger", description: "A stubbier sword", range: 80, damage: 26, reload: 150, weapon: true, }, { id: 55, name: "Ruby Dagger", description: "A stubbier sword", range: 80, damage: 29, reload: 150, weapon: true, }, { id: 56, name: "Secret Item", description: "Dont leak how to get it :)", range: 115, damage: 28, reload: 2000, weapon: true, }, { id: 57, name: "Daedric Scythe", description: "Whispers fill the air", range: 160, damage: 52, reload: 450, weapon: true, }, ]; class technices { calculateSpikeAndTrapHoles() { let areaSize = 150; for (let angle = 0; angle < Math.PI * 2; angle += Math.PI / 8) { let distance = 100; let spot = { x: user.x + distance * Math.cos(angle), y: user.y + distance * Math.sin(angle) }; if (!this.isSpaceOccupied(spot)) { let spikeNearby = Entity.find(e => e && [2, 7, 17].includes(e.type) && getDistance(e, spot) <= 50); if (spikeNearby) { Sploop.place(7, getAngle(spot, user)); } else { Sploop.place(4, getAngle(spot, user)); } } } } placeTrapsAround() { placeObjects++ for (let angle = 0; angle < Math.PI * 2; angle += Math.PI / 2) { let distance = 80; let spot = { x: user.x + distance * Math.cos(angle), y: user.y + distance * Math.sin(angle) }; if (!this.isSpaceOccupied(spot) && placeObjects >= 4) { Sploop.place(7, getAngle(spot, user)); placeObjects = 0; } } } analyzePotentialTrapSpots() { let potentialSpots = []; for (let i = -100; i <= 100; i += 50) { for (let j = -100; j <= 100; j += 50) { let spot = { x: user.x + i, y: user.y + j }; if (!this.isSpaceOccupied(spot)) { potentialSpots.push(spot); } } } return potentialSpots; } analyzePotentialSpikeSpots() { let potentialSpots = []; if (enemy) { potentialSpots.push({ x: enemy.x + 50, y: enemy.y }) potentialSpots.push({ x: enemy.x - 50, y: enemy.y }) potentialSpots.push({ x: enemy.x, y: enemy.y + 50 }) potentialSpots.push({ x: enemy.x, y: enemy.y - 50 }) } return potentialSpots; } isSpaceOccupied(position) { return Entity.some(e => getDistance(e, position) <= 50); } analyzeAndPlace() { let areaSize = 200; for (let i = -areaSize; i <= areaSize; i += 50) { for (let j = -areaSize; j <= areaSize; j += 50) { let spot = { x: user.x + i, y: user.y + j }; if (!this.isSpaceOccupied(spot)) { if (Math.random() < 0.5) { placeObjects++; if (placeObjects >= 4) { Sploop.place(7, getAngle(spot, user)); placeObjects = 0; } } else { placeObjects++ if (placeObjects >= 4) { Sploop.place(4, getAngle(spot, user)); placeObjects = 0; } } } } } } calculateBestBreakAngle(spikes) { let bestAngle = null; let maxSpikesHit = 0; for (let angle = 0; angle < Math.PI * 2; angle += Math.PI / 16) { let hitSpikes = spikes.filter(spike => Math.abs(getAngle(spike, user) - angle) < Math.PI / 16); if (hitSpikes.length > maxSpikesHit) { maxSpikesHit = hitSpikes.length; bestAngle = angle; } } return bestAngle; } } const Technices = new technices(); class Macro { constructor(advanced, spike, trap, mill, food) { this.advanced = advanced; this.spike = spike; this.trap = trap; this.mill = mill; this.food = food; } update() { if (keyDown[this.spike]) Sploop.place(4); if (keyDown[this.trap]) Sploop.place(7); if (keyDown[this.mill]) Sploop.place(5); if (keyDown[this.food]) Sploop.place(2); } }; let Placer = new Macro(true, 86, 70, 78, 81); var negative = { delayed: false, found: false, lastAngle: 0, angle: 0, }; var positive = { found: false, lastAngle: 0, angle: 0, }; var antiTrap = { nDelayed: false, pLastAngle: 0, nLastAngle: 0, pFound: false, nFound: false, pAngle: 0, nAngle: 0, }; if (user.skin !== user.previousSkin) { skinLoaded = false; setTimeout(() => { skinLoaded = true; }, 1500); } const toRad = (degrees) => { degrees = degrees % 360; if (degrees < 0) { degrees += 360; } return (degrees * Math.PI) / 180; }; const toDegree = (radians) => { return (radians * 180) / Math.PI; }; function getDistance(a, b) { if (a && b) return Math.sqrt(Math.pow((b.x - a.x), 2) + Math.pow((b.y - a.y), 2)); } function getAngle(a, b) { if (a && b) return Math.atan2(a.y - b.y, a.x - b.x); } class Sploop { static place(id, angle = Config.angle) { angle = (65535 * (angle + Math.PI)) / (2 * Math.PI); const back = Config.angle; Game.send(0, id); Game.send(19, 255 & angle, angle >> 8 & 255); Sploop.watch(back, true); Game.send(18); Game.send(0, Config.weapon); } static equip(id) { if (user.skin !== id && skinLoaded == true) { Game.send(5, id); } } static parseAngle(a) { const b = (a + Math.PI) * 65535 / (Math.PI * 2); return [b & 255, b >> 8 & 255]; } static walk(angle = Config.move) { if (typeof angle !== 'number') { return Game.send(15); } else { angle = (65535 * (angle + Math.PI)) / (2 * Math.PI); Game.send(1, 255 & angle, (angle >> 8) & 255); } } static take(id) { Game.send(0, id); } static chat(text) { const msg = encoder.encode(text); Game.send(7, ...msg); } static hit(angle) { angle = (65535 * (angle + Math.PI)) / (2 * Math.PI); Game.send(19, 255 & angle, (angle >> 8) & 255); Game.send(18); } static watch(angle, isTransformed = false) { if (isTransformed) { Game.send(13, 255 & angle, angle >> 8 & 255); return; } else { const angle2 = 65535 * (angle + Math.PI) / (2 * Math.PI); Game.send(13, 255 & angle2, angle2 >> 8 & 255); } } static offensive() { let offensive = () => { let distance = enemy ? getDistance(enemy, user) : 0; if (user.x >= 160 && user.y >= 8000 && user.x <= 9840 && user.y <= 9000) return 9; if (enemy && distance <= 300) return false && distance <= 150 ? 6 : 6; return 6; } setTimeout(Sploop.equip(offensive()), 0); } static invisHit(hitWith, angle, switchBackTo, lookBackTo = Config.angle) { if (!weaponReload) return; Game.send(0, hitWith); Sploop.hit(angle); Game.send(0, switchBackTo); Sploop.watch(lookBackTo); } static ally(build) { let id = build.typeof === "number" ? build : build.id2; if (user.team) { let length = user.team.length; for (let index = 0; index < length; index++) { let teammate = user.team[index]; if (build.id2 == teammate.id2) { return true; } } } return false; } static mine(build) { if (this.ally(build) || user.id2 == build.id2) { return !0; } return !1; } static healthChange(health, oldHealth) { if (oldHealth > health) { user.hitDate = Config.counter; }; user.health = health; } static canPlace(where, checkIsPlayer) { let placeCoord = { y: user.y + 80 * Math.sin(where), x: user.x + 80 * Math.cos(where), }; 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); console.log("check canPlace"); } static instaToggled() { Sploop.equip(2); Sploop.place(4, Config.angle); Sploop.invisHit(0, Config.angle, 1); setTimeout(() => Sploop.offensive(), 1200); } static syncCool(angle) { if (enemy.skin != 6 && enemy.skin != 4) Sploop.equip(2); Sploop.invisHit(0, angle, 1); setTimeout(() => Sploop.offensive(), 1200); } static antiTrap(id) { const originalAngle = Config.angle; const angleStep = 360 / 90; for (let i = 0; i < 3; i++) { const angle = i * angleStep; setTimeout(() => { Sploop.place(id, angle) }, 0); } } static rotateAroundObject(x, y) { let currentRotationAngle = 0; let lerpProgress = 0; const lerpDuration = 1000; if (!weaponReload) { currentRotationAngle += 0.05; if (currentRotationAngle > Math.PI * 2) { currentRotationAngle -= Math.PI * 2; } const targetX = x + 100 * Math.cos(currentRotationAngle); const targetY = y + 100 * Math.sin(currentRotationAngle); const targetLookAngle = getAngle({ x: user.x, y: user.y }, { x: targetX, y: targetY }); if (Toggle.aimLerpAngle) { lerpProgress += Date.now() / lerpDuration; const lerpedAngle = Sploop.lerpAngle(user.angle, targetLookAngle, Math.min(1, lerpProgress)); const b = Sploop.parseAngle(lerpedAngle); Game.send(13, b[0], b[1]); if (lerpProgress >= 1) { lerpProgress = 0; } } else { const b = Sploop.parseAngle(targetLookAngle); Game.send(13, b[0], b[1]); } } } static lerpAngle(a, b, t) { const da = (b - a + Math.PI * 3) % (Math.PI * 2) - Math.PI; return a + da * t; } static healingTick(speed) { const spiker = Entity.find(a => a && [2, 7, 17].includes(a.type) && !Sploop.mine(a) && !teammates.includes(a.id2) && getDistance(a, user) < 60); setTimeout(() => { return Sploop.place(2); }, (Config.serverUpdate - 20 - Config.ping) + parseInt(speed)); if (user.inTrap) { if (spiker) { setTimeout(() => { return Sploop.extraHealSupport(3); }, parseInt(speed)); } } let distance = enemy ? getDistance(enemy, user) : 0; if (enemy) { const currentTime = Date.now(); const timeSinceLastPlace = currentTime - lastPlaceTime; if (user.health < healthThreshold && distance <= enemyThreshold) { if (Toggle.autoHat) Sploop.equip(Toggle.onlyDefendCrystal ? 4 : 6); if (timeSinceLastPlace >= spamCooldown && placeExecutions < maxPlaceExecutions) { placeExecutions++; lastPlaceTime = currentTime; Sploop.place(2, getAttackDir()); const nextInterval = Math.max(300, spamCooldown - distance / 2); setTimeout(() => { if (placeExecutions < maxPlaceExecutions) { tripleHeal(); lastPlaceTime = Date.now(); } }, nextInterval); } } else { placeExecutions = 0; } let spikeNearby = Entity.find(e => e && [2, 7, 17].includes(e.type) && getDistance(e, enemy) <= 55 && !Sploop.mine(e) && !teammates.includes(e.id2)); let enemyCanSync = Entity.find(e => e && [2, 28, 57].includes(e.weapon) && !Sploop.mine(e) && !teammates.includes(e.id2)); if (spikeNearby && distance <= 200 && enemyCanSync) { return Sploop.extraHealSupport(4); } } if (user.health < 20) { setTimeout(() => { return Sploop.extraHealSupport(4); }, Config.serverUpdate - Config.ping); } } static extraHealSupport(count) { for (let i = 0; i <= count; i++) Sploop.place(2, getAttackDir()) } static update() { Config.counter += 1; Config.resolver(); Config.last = Date.now(); if (user.alive) { user.timeOfLastOmg = 0; user.shameCounter = 0; if (user.health > user.prevHealth) { if (user.shameCounter < 8) { if (Date.now() - user.timeOfLastDmg < 200) { user.shameCounter += 1; } } else { user.shameCounter = 0; } if (user.shameCounter > 1) { if (Date.now() - user.timeOfLastDmg >= 200) { user.shameCounter -= 1; } } } if (user.health < user.prevHealth) user.timeOfLastDmg = Date.now(); if (user.clowned) user.shameCounter = 0; // Auto heal const speed = 22.5; if (Toggle.autoHeal && user.health < 100) { Sploop.healingTick(speed); } if (Toggle.aimBot && !user.inTrap) { if (getDistance(enemy, user) <= 200 && Config.aimbot) { const b = Sploop.parseAngle(getAngle(enemy, user)); Game.send(13, b[0], b[1]); if (getDistance(enemy, user) <= 120) { placeObjects++ if (placeObjects >= 5) { Sploop.place(7, getAngle(enemy, user)); placeObjects = 0; } } } } let wasBreaking = Config.breaking; Config.breaking = false; let userInTrap = Entity.find(e => e && e.type == 6 && getDistance(e, user) <= 56 && !Sploop.mine(e) && !teammates.includes(e.id2)); if (userInTrap && Toggle.autoBreak) { Sploop.rotateAroundObject(userInTrap.x, userInTrap.y); Config.breaking = true; Config.aimbot = false; user.inTrap = true; var distance = getDistance(enemy, user) var breakingTrap = getAngle(userInTrap, user) Sploop.equip(11); Sploop.invisHit(1, breakingTrap, 1); if (Toggle.antiTrap) { placeObjects++; if (placeObjects >= 6) { Sploop.antiTrap(7); placeObjects = 0; } } Config.oldTrap = userInTrap; } else if (wasBreaking) { if (Config.oldTrap) { let oldTrap = getAngle(Config.oldTrap, user); Sploop.place(7, oldTrap); setTimeout(() => Sploop.offensive(), 1300); Sploop.equip(6); } user.inTrap = false; Config.breaking = false; Config.aimbot = true; Config.oldTrap = null; } if (Toggle.safeWalk && !user.inTrap) { const inSpike = Entity.find(a => a && [2, 7, 17].includes(a.type) && !Sploop.mine(a) && !teammates.includes(a.id2) && getDistance(a, user) <= 120); const spikeAim = inSpike ? getAngle(inSpike, user) : null; if (inSpike) { placeObjects++; if (getDistance(enemy, user) <= 250 && placeObjects >= 8) { Sploop.place(4, getAngle(enemy, user)); Sploop.place(7, spikeAim * 1.2); placeObjects = 0; } Sploop.take(1); if (wsPushing) return Sploop.walk('stop'); if (inSpike.length > 2) { const greatBreak = Technices.calculateBestBreakAngle(inSpike); Sploop.hit(greatBreak); } else { Sploop.hit(spikeAim); } } } let wasPushing = Config.pushing; Config.pushing = false; if (enemy && !userInTrap && user.alive) { let distance = getDistance(enemy, user); if (Toggle.autoPush && distance <= 165) { let trap = Entity.find(c => c && getDistance(c, enemy) <= 60 && c.type == 6 && Sploop.mine(c) && !teammates.includes(c.id2)); if (wsPushing && !trap) { wsPushing = false; Sploop.walk('stop'); } if (trap) { let spikes = Entity.filter(c => c && [2, 7, 17].includes(c.type) && Sploop.mine(c) && getDistance(c, trap) <= 95 && !teammates.includes(c.id2)); if (wsPushing && !spikes.length) { wsPushing = false; } if (spikes.length) { let spike = spikes.sort((a, b) => getDistance(a, enemy) - getDistance(b, enemy))[0]; let angle = getAngle(enemy, spike); distance = getDistance(enemy, spike) + 70; let position = { x: spike.x + (distance * Math.cos(angle)), y: spike.y + (distance * Math.sin(angle)) }; distance = getDistance(position, user); if (distance > 15) { wsPushing = true; angle = getAngle(position, user) } else { wsPushing = true; angle = getAngle(enemy, user) } Config.pushing = true; Sploop.walk(angle) } } } distance = getDistance(enemy, user) if (Toggle.autoPlace && distance <= 190) { let trap = Entity.find(c => c && c.type == 6 && Sploop.mine(c) && getDistance(c, enemy) <= 60 && !teammates.includes(c.id2)); let enemyPos = { x: enemy.x + enemy.xVel, y: enemy.y + enemy.yVel } let userPos = { x: user.x + user.xVel, y: user.y + user.yVel } distance = getDistance(enemyPos, userPos); let angle = getAngle(enemyPos, userPos) const nEA = getAngle(enemy, user) const trapAngle = getAngle(trap, user); if (trap) { Config.aimbot = false; enemy.inTrap = true; for (let angle = 0; angle < Math.PI * 2; angle += Math.PI / 20) { Sploop.rotateAroundObject(angle.x, angle.y) let a = Sploop.canPlace(nEA + angle, false).length > 1; let b = Sploop.canPlace(nEA - angle, false).length > 1; if (!a && positive.angle !== angle && !positive.found) { positive.angle = angle; positive.found = true; } if (!b && negative.angle !== angle && !negative.found) { negative.angle = angle; negative.found = true; } } const cantPlace = Sploop.canPlace(nEA + positive.angle, false).length > 1; const cantPlace2 = Sploop.canPlace(nEA - negative.angle, false).length > 1; if (!cantPlace && cantPlace2) { positive.lastAngle = positive.angle; placeObjects++ if (placeObjects >= 15) { Sploop.place(4, nEA + positive.angle); placeObjects = 0; } positive.found = false; } if (!cantPlace2 && cantPlace) { negative.lastAngle = negative.angle; placeObjects++ if (placeObjects >= 15) { Sploop.place(4, nEA - negative.angle); placeObjects = 0; } negative.found = false; } } else { enemy.inTrap = false; Config.aimbot = true; if (distance <= 210) { let cantPlace = Sploop.canPlace(nEA, true).length > 1; if (!cantPlace) { placeObjects++ Sploop.place(7, nEA); if (placeObjects >= 6) { Sploop.place(7, nEA + 0.45); Sploop.place(7, nEA - 0.45); placeObjects = 0; } if (distance <= 165) { Technices.placeTrapsAround(); } } } } } if (Toggle.autoSync && distance <= 165) { Config.aimbot = false; let userPos = { x: user.x + user.xVel, y: user.y + user.yVel } let enemyPos = { x: enemy.x + user.xVel, y: user.y + user.yVel }; let spike = Entity.find(c => c && c.type == 7 && Sploop.mine(c) && !teammates.includes(c.id2) && getDistance(c, enemy) <= 62); const nEA = getAngle(enemyPos, userPos) if (enemy.health < 65 && !user.inTrap) { Sploop.syncCool(nEA); } } if (!enemy.inTrap && !user.inTrap && Toggle.spikeSyncPerfect && distance <= 165) { Config.aimbot = false; let userPos = { x: user.x + user.xVel, y: user.y + user.yVel } let enemyPos = { x: enemy.x + user.xVel, y: user.y + user.yVel }; let spike = Entity.find(a => a && [2, 7, 17].includes(a.type) && Sploop.mine(a) && !teammates.includes(a.id2) && getDistance(a, enemyPos) <= 55); let touch = (spike.x - 45, spike.y - 45, spike.x + 45, spike.y + 45, enemyPos.x, enemyPos.y); const nEA = getAngle(enemyPos, userPos) if (touch) { Sploop.syncCool(nEA); } } if (!enemy.inTrap && Toggle.spikeNearSync && distance <= 165) { const spikes = Entity.find(a => a && [2, 7, 17].includes(a.type) && Sploop.mine(a) && !teammates.includes(a.id2) && getDistance(a, enemyPos) <= 135); Config.spikeSync = true; 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); if (near && Config.spikeSync) { let spikeangle = getAngle(spikes, user) Sploop.place(4, spikeangle); Sploop.syncCool(spikeangle); Config.spikeSync = false; setTimeout(() => {Config.spikeSync = true}, 2000); } } if (wasPushing && !Config.pushing) Sploop.walk('stop'); } } } } const prevRect = CanvasRenderingContext2D.prototype.clearRect; CanvasRenderingContext2D.prototype.clearRect = function (x, y, width, height) { if (this.canvas.id === "game-canvas") { ctxt = this.canvas.getContext("2d"); } return prevRect.apply(this, arguments); } class Img extends Image { constructor(src, width = Img.width, height = Img.height) { super(width, height); this.src = src; } } function makeColumn(offsetX, sid, name, icon) { const column = document.createElement("column"); column.style = ` width: 350px; height: auto; color: white; z-index: 3; top: ${100 * column.length}px; left: ${offsetX}%; background-color: #1e1e1e; position: absolute; pointer-events: all; touch-events: all; scrollbar-color: #1e1e1e transparent; text-align: center; transition: 0.5s; `; column.id = sid; column.innerHTML = `<i class="menu-text-icon ${icon}"></i> - ${name} - <i class="menu-text-icon ${icon}"><br>`; column.style.userSelect = "none"; column.draggable = true; document.documentElement.appendChild(column); let _offsetX = offsetX / window.innerWidth; let offsetY = 5 / window.innerHeight; column.addEventListener("dragstart", e => { const elementX = parseInt(column.style.left); const elementY = parseInt(column.style.top); _offsetX = elementX - e.clientX; offsetY = elementY - e.clientY; }); column.addEventListener("dragend", e => { column.style.top = e.clientY + offsetY + "px"; column.style.left = e.clientX + _offsetX + "px"; }); } makeColumn(40, "column", "AntiMooAddict", "bi bi-display"); class Toggles { constructor(column, name, option) { this.toggleElement = document.createElement("input"); this.toggleText = document.createElement("label"); this.lineSeparator = document.createElement("br"); this.toggleText.style = "display: inline-block; width: 97.5%; height: 35px; background: #313131; font-size: 12px; margin-top: 2px; color: #fff; transition: 0.5s;"; this.toggleText.className = "sigittariusFeature"; this.toggleElement.type = "checkbox"; this.toggleElement.style.visibility = "hidden"; this.toggleElement.checked = Toggle[option]; this.toggleText.style.background = this.toggleElement.checked ? "#313131" : "#1e1e1e"; this.toggleElement.onchange = () => { Toggle[option] = !Toggle[option]; this.toggleText.style.background = this.toggleElement.checked ? "#313131" : "#1e1e1e"; } this.toggleText.innerHTML = name; document.getElementById(column).appendChild(this.toggleText); document.getElementById(column).appendChild(this.lineSeparator); this.toggleText.appendChild(this.toggleElement); } } new Toggles("column", "Markers", "markers"); new Toggles("column", "Smooth HP", "smoothBarHealth"); new Toggles("column", "Aim Force", "aimForce") new Toggles("column", "Lerp Angle", "aimLerpAngle"); new Toggles("column", "Auto Smart Break", "autoBreak"); new Toggles("column", "Auto Heal", "autoHeal"); new Toggles("column", "Anti Trap", "antiTrap"); new Toggles("column", "Safe Walk", "safeWalk") new Toggles("column", "Auto Placer", "autoPlace"); new Toggles("column", "Auto Replacer", "Replacer"); new Toggles("column", "Auto Sync", "autoSync"); new Toggles("column", "Spike Tick", "spikeSyncPerfect"); new Toggles("column", "NearSpike Sync", "spikeNearSync"); new Toggles("column", "Trap Sync", "trapSync"); new Toggles("column", "Aim Bot", "aimBot"); new Toggles("column", "Auto Push", "autoPush"); class Aim { constructor() { this._targetAim = 0; this.safeAim = 0; this.x = 0; this.y = 0; this.x2 = 0; this.y2 = 0; } set targetAim(val) { this._targetAim = val; this.x2 = window.innerWidth / 2 + Math.cos(val) * 10; this.y2 = window.innerHeight / 2 + Math.sin(val) * 10; } countAngle(x, y, x1, y1) { const opposite = y1 - y; const adjacent = x1 - x; return 1 / Math.tan(opposite / adjacent); } safeAngle(baseAngle) { const a = 0.95; return baseAngle * a + this.safeAim * (1 - a); } executeModule() { const velocity = 0.5 + Math.random() * 0.5; const velocityX = velocity + Math.random() * 0.15 - 0.15 / 2; const velocityY = velocity + Math.random() * 0.15 - 0.15 / 2; const deviationX = Math.random() * 0.35 - 0.22 / 2; const deviationY = Math.random() * 0.35 - 0.22 / 2; this.x = deviationX + (this.x || 0) * velocityX + this.x2 * (1 - velocityX); this.y = deviationY + (this.y || 0) * velocityY + this.x2 * (1 - velocityY); const Aim = this.countAngle(window.innerWidth / 2, window.innerHeight / 2, this.x, this.y); this.safeAim = Aim; if (Toggle.aimForce) Sploop.watch(Aim); } } const Images = { gaugeBackground: new Img("https://i.imgur.com/xincrX4.png"), gaugeFront: new Img("https://i.imgur.com/6AkHQM4.png"), }; class drawingOptions { static previousPositions = new Map(); static drawPossiblePlace(ctx, entity, fst) { const animationDuration = 37; const currentTime = Date.now(); if (!this.previousPositions.has(entity)) { this.previousPositions.set(entity, { x: entity.x, y: entity.y, startTime: currentTime }); } const previousPosition = this.previousPositions.get(entity); const elapsedTime = currentTime - previousPosition.startTime; if (elapsedTime < animationDuration) { const progress = elapsedTime / animationDuration; const interpolatedX = previousPosition.x + (entity.x - previousPosition.x) * progress; const interpolatedY = previousPosition.y + (entity.y - previousPosition.y) * progress; this.drawCircle(ctx, interpolatedX, interpolatedY, fst); } else { this.drawCircle(ctx, entity.x, entity.y, fst); previousPosition.x = entity.x; previousPosition.y = entity.y; previousPosition.startTime = currentTime; } } static drawCircle(ctx, x, y, fst) { ctx.save(); ctx.globalAlpha = 1; ctx.fillStyle = fst; ctx.beginPath(); ctx.moveTo(x, y); ctx.arc(x, y, 40, 0, 2 * Math.PI); ctx.fill(); ctx.restore(); } static lines(ctx, entity, entity2) { ctx.save(); ctx.globalAlpha = 0.75; ctx.strokeStyle = "#000000"; ctx.lineCap = "round"; ctx.lineWidth = 1; ctx.beginPath(); ctx.moveTo(entity.x, entity.y); ctx.lineTo(entity2.x, entity2.y); ctx.stroke(); ctx.restore(); } static marker(ctx, color) { ctx.strokeStyle = "#303030"; ctx.lineWidth = 3; ctx.fillStyle = color; ctx.beginPath(); ctx.arc(0, 0, 9, 0, 2 * Math.PI); ctx.fill(); ctx.stroke(); ctx.closePath(); } static drawImage(ctx, image) { if (!(image && image.naturalHeight !== 0)) return; const w = image.width; const h = image.height; const s = .5; ctx.drawImage(image, -s * w / 2, -s * h, w * s, h * s); } static renderBar(ctx, entity, value, maxValue) { const {x, y, radius} = entity; const background = Images.gaugeBackground; const front = Images.gaugeFront; const scale = .5; const width = front.width * scale; const fill = value / maxValue * (width - 10); ctx.save(); ctx.translate(x, y + radius + front.height * scale); this.drawImage(ctx, background); ctx.fillStyle = "#AA0000"; ctx.fillRect(-width / 2 + 5, -scale * front.height + 5, fill, scale * front.height - 10); this.drawImage(ctx, front); ctx.restore(); return front.height * scale; } static reloadBar(ctx, entity, reload) { const clamp = (value, min, max) => Math.min(Math.max(value, min), max); const fill = clamp(reload, 0, reload); const value = fill; return this.renderBar(ctx, entity, value, reload); } } const drawCombatVisuals = (target, ctx, isTeam) => { const colors = ["#FFC0CB", "#FFB6C1", "#FF69B4", "#FF1493", "#F9CCCA", "#E8CCD7", "#FFC0EB", "#FCD0B4", "#FF007F", "#F4B4C4", "#F6B8B8"]; const nEA = getAngle(enemy, user); if (Toggle.autoInsta && getDistance(enemy, user) <= 90 && !enemy.inTrap && !user.inTrap) { let cantPlace3 = Sploop.canPlace(nEA, true).length > 1; let placeCoord = { y: user.y + 80 * Math.sin(nEA), x: user.x + 80 * Math.cos(nEA), }; if (!cantPlace3) { drawingOptions.drawPossiblePlace(ctx, placeCoord, colors[Math.floor(Math.random() * colors.length)]); } } if (Toggle.autoPlace && getDistance(enemy, user) <= 230 && !enemy.inTrap && !user.inTrap) { let cantPlace3 = Sploop.canPlace(nEA, true).length > 1; let placeCoord = { y: user.y + 80 * Math.sin(nEA), x: user.x + 80 * Math.cos(nEA), }; if (!cantPlace3) { drawingOptions.drawPossiblePlace(ctx, placeCoord, "#91B2DB"); } } if (Toggle.autoPlace && getDistance(enemy, user) <= 190 && enemy.inTrap && !user.inTrap) { let placeCoord = { y: user.y + 80 * Math.sin(nEA + positive.angle), x: user.x + 80 * Math.cos(nEA + positive.angle), }; let placeCoord2 = { y: user.y - 80 * Math.sin(nEA - negative.angle), x: user.x - 80 * Math.cos(nEA - negative.angle), }; let cantPlace = Sploop.canPlace(nEA + positive.angle, false).length > 1; let cantPlace2 = Sploop.canPlace(nEA - negative.angle, false).length > 1; if (!cantPlace) { drawingOptions.drawPossiblePlace(ctx, placeCoord, "#91B2DB"); } if (!cantPlace2) { drawingOptions.drawPossiblePlace(ctx, placeCoord2, "#E8CCD7"); } } } window.drawingBoard = (target, ctx, isTeam) => { if (!user.alive) return; drawCombatVisuals(target, ctx, isTeam); }; class Hooks { static renderItem(ctx, target) {} } class Script { setup() { this.run(); }; send() { if (this.ws && this.ws.readyState === WebSocket.OPEN) { if (pps >= 599) { return; } else { return this.ws.send(new Uint8Array([...arguments])) pps++ } } } message(event) { let data = event.data; let decoded = typeof data === 'string' ? JSON.parse(data) : new Uint8Array(data); let length = decoded.length; switch (decoded[0]) { case 20: Config.enemiesNear = [] enemy = null; user.previousSkin = user.skin; user.prevHealth = user.health; Config.tickSpeed = Date.now() - time; time = Date.now(); for (let int = 1; int < length; int += 19) { Sploop.canPlace(Config.angle); let type = decoded[int], owner = decoded[int + 1], index = decoded[int + 2] | decoded[int + 3] << 8, x = decoded[int + 4] | decoded[int + 5] << 8, y = decoded[int + 6] | decoded[int + 7] << 8, currentItem = decoded[int + 10], broken = decoded[int + 8], angle = decoded[int + 9] / 255 * 6.283185307179586 - Math.PI, rawAngle = decoded[int + 9], skin = decoded[int + 11], team = decoded[int + 12], projectileType = decoded[int + 14], health = decoded[int+ 13] / 255 * 100, clown = decoded[int + 8] === 128, datas = data; let temp = Entity[index] || { fd: 2, active: true, health: 100, x: 0, y: 0 }; if (2 && broken) { if (Toggle.trapSync && !user.inTrap) { // dont work, i fix it... Config.trapSyncer = true; const trapBroken = Entity[index] if (trapBroken && trapBroken.type == 6) { if (trapBroken.id2 !== enemy.id2) { if (getDistance(trapBroken, user) <= 110 && getDistance(enemy, user) <= 100) { const objectAngle = getAngle(trapBroken, user); const enemyAngle = getAngle(enemy, user); if (Config.trapSyncer) { if (enemy.skin != 4 && enemy.skin != 6) if (Toggle.autoHat) Sploop.equip(2); Sploop.place(4, objectAngle); Sploop.invisHit(0, objectAngle, 1); Config.trapSyncer = false; setTimeout(() => { Config.trapSyncer = true }, 3500); } } } } } if (Toggle.Replacer) { const nearestObjects = Entity[index]; if (nearestObjects) { if ([2, 5, 7, 9, 17].includes(nearestObjects.type) && getDistance(nearestObjects, user) <= 145 && getDistance(enemy, user) <= 220) { setTimeout(() => { placeDelay -= 1e3 / 9; if (nearestObjects.type == 6) { if (user.inTrap) { Sploop.place(7, getAngle(enemy, user)); Sploop.place(7, getAngle(nearestObjects, user)); Sploop.place(4, (getAngle(enemy, user) + Math.PI)); Sploop.place(4, (getAngle(enemy, user) + 0.9)); } } else { Sploop.place(4, getAngle(nearestObjects, user)); } if (getDistance(enemy, user) < 100) { if (nearestObjects.type == 6) { if (enemy.inTrap) { Sploop.place(7, getAngle(enemy, user)); Sploop.place(7, getAngle(nearestObjects, user)); } else { Sploop.place(7, getAngle(enemy, user)); Sploop.place(4, (getAngle(enemy, user) + 1.2)); Sploop.place(4, (getAngle(enemy, user) - 1.2)); } } else { Sploop.place(4, getAngle(nearestObjects, user)); Sploop.place(4, getAngle(enemy, user)); } } }, placeDelay); placeDelay += 1e3 / 9; } } } Entity[index] = null; } if (!type && broken == 2) { temp = {}; } else { temp.type = type; temp.angle = angle; temp.rawAngle = rawAngle; temp.id = index; temp.weapon = currentItem; temp.health = health; temp.health2 = Math.trunc(health); temp.xVel = temp.x - x; temp.yVel = temp.y - y; temp.speed = Math.hypot(y - temp.y, x - temp.x); temp.move = Math.atan2(y - temp.y, x - temp.x); temp.x = x; temp.y = y; temp.id2 = owner; temp.skin = skin; temp.datas = datas; temp.team = team; temp.projectileType = projectileType; temp.clown = clown; Config.enemiesNear.push(temp) Entity[index] = temp; } if (temp.id === user.id) { Sploop.healthChange(temp.health, user.health); Object.assign(user, temp) } else if (!temp.type && (!user.team || temp.team != user.team)) { let distance = Math.hypot(user.y - temp.y, user.x - temp.x); let distance2 = enemy ? Math.hypot(user.y - enemy.y, user.x - enemy.x) : null; if (enemy) { if (distance < distance2) enemy = temp; } else { enemy = temp; } } } Sploop.update(); break; case 35: user.id = decoded[1]; user.alive = true; user.spawnDate = Date.now(); user.health = 100; Config.weapon = 0; if (!user.hatsBought) { for (let hats = 0; hats < 12; hats++) Sploop.equip(hats); user.hatsBought = true; } Sploop.equip(7); Sploop.place(5); break; case 15: Config.ping = decoded[1]; break; case 19: user.health = 0; user.speed = 0; user.age = 0; user.alive = false; kills = 0; break; case 28: kills++ if (wsPushing) { wsPushing = false; Sploop.walk('stop'); } enemy.health = 0; break; case 24: var array_with_ID = [...data.slice(3, data.length)]; array_with_ID.splice(array_with_ID.indexOf(user.id), 1); teammates = array_with_ID; break; case 16: var array_with_ID2 = [...data.slice(2, data.length)]; array_with_ID2.splice(array_with_ID2.indexOf(user.id), 1); teammates = array_with_ID2; break; case 27: teammates = []; break; case 8: var a = Math.max(0, decoded[1] | decoded[2] << 8 | decoded[3] << 16 | decoded[4] << 24); user.age = ~~(Math.log(1 + a) ** 2.4 / 13); break; case 2: if (decoded.byteLength > 1) { user.item = []; for (let a = 1; a < decoded.byteLength; a++) { user.item.push(decoded[a]); } } break; case 29: for (let int = 1; int < data.length; int += 5) { const id = data[int + 1] | (data[int + 2] << 8); const weapon = data[int + 3]; const type = data[int]; if (type === 0) { if (weaponReload == true) { if (id === user.id2) { let maxReload = items[weapon].reload; weaponReload = false; setTimeout(() => { weaponReload = true; }, maxReload); } } } } break; } Placer.update(); } log(group, symbol, result, color) { return log(`%c[${group}] %c${symbol}`, `color:${color};font-weight:bold`, `color:${color}`, result); } run(ws) { this.ws = ws; window.addEventListener("mousemove", (a) => { Config.angle = Math.atan2(a.pageY - window.innerHeight / 2, a.pageX - window.innerWidth / 2); }); } constructor() { this.ws = null; } }; const Setup = () => { Game = new Script(); Game.log(`Setup`, `⦿`, '', '#000000'); let data = Config.messages; data[0][1] = { name: 'Player update', string: false }; data[0][2] = { name: 'Verify', string: false }; data[0][5] = { name: 'Choose', string: false }; data[0][7] = { name: 'Hit', string: false }; data[0][14] = { name: 'Resource update', string: false }; data[0][16] = { name: 'Projectile Hit', string: false }; data[0][18] = { name: 'Chat', string: false }; data[0][19] = { name: 'Choose x3', string: true }; data[0][20] = { name: 'Choose x2', string: false }; data[0][22] = { name: 'Ping update', string: false }; data[0][23] = { name: 'Ping update', string: false }; data[0][24] = { name: 'Create clan', string: false }; data[0][25] = { name: 'Leave clan', string: false }; data[0][26] = { name: 'Create clan', string: false }; data[0][27] = { name: 'Leave clan', string: false }; data[0][30] = { name: 'Place', string: false }; data[1][2] = { name: 'Spawn', string: true }; data[1][8] = { name: 'Player setup', string: true }; data[1][9] = { name: 'Leaderboard update', string: true }; data[1][11] = { name: 'Text', string: true }; data[1][13] = { name: 'Death', string: true }; data[1][19] = { name: 'Choose', string: true }; data[1][35] = { name: 'new Verify', string: true }; for (let index = 0; index <= 1; index++) { let length = data[index].length; for (let id = 0; id < length; id++) { if (data[index][id]) data[index][id].id = id; } ; } ; }; Setup(); WebSocket.prototype.unmodifiedSend = WebSocket.prototype.send; WebSocket.prototype.send = function (arguments) { this.unmodifiedSend(arguments); if (ws !== this) { this.addEventListener('message', event => Game.message(event)); ws = this; Game.run(this); Config.WS = this.url; } } let blockReact = ['clan-menu-clan-name-input', 'nickname', 'chat']; const keyChange = (event, down) => { if (blockReact.includes(document.activeElement.id.toLowerCase())) return `Blocked key change.` keyDown[event.keyCode] = down; let distEnemy = getDistance(enemy, user); let aimEnemy = getAngle(enemy, user); let isPrimary = [49, 97].includes(event.keyCode); let isSecondary = [50, 98].includes(event.keyCode); console.debug(event.code) if (event.code == 'KeyY') { let katana = [2, 12, 9, 19, 20, 15, 8, 28, 16]; katana.forEach(e => Game.send(14, e)); } if (down && (isPrimary || isSecondary)) Config.weapon = Number(isSecondary); switch (event.code) { case "KeyR": Sploop.instaToggled(); break; case "KeyG": Sploop.equip(6); break case "ShiftRight": Sploop.equip(7) break; case "KeyB": Sploop.equip(2) break case "KeyZ": Sploop.equip(11) break; } Placer.update(); }; document.addEventListener("keydown", (event) => keyChange(event, true)); document.addEventListener("keyup", (event) => keyChange(event, false)); document.addEventListener("DOMContentLoaded", () => { document.addEventListener('keydown', (e) => { if (e.keyCode == 27) { Array.from(document.querySelectorAll("column"), menu => { menu.style.display = menu.style.display == "block" ? "none" : "block"; }); } }); function enableSmoothZoom() { let maxScreenHeight = 1026; let maxScreenWidth = 1824; const scaleFactor = 50; Math.max = new Proxy(Math.max, { apply(target, thisArg, args) { const height = Math.ceil(args[0] * 1026); const width = Math.ceil(args[1] * 1824); const scaledHeight = height === window.innerHeight ? height / maxScreenHeight : height / 1026; const scaledWidth = width === window.innerWidth ? width / maxScreenWidth : width / 1824; return target.call(thisArg, scaledHeight, scaledWidth); }, }); const observer = new MutationObserver((mutationsList) => { for (const mutation of mutationsList) { if (mutation.type === "attributes" && mutation.attributeName === "style") { const style = mutation.target.getAttribute("style"); if (style && style.includes("display: none;")) { return; } } } }); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ["style"], }); window.addEventListener("wheel", function (event) { if (event.target.id !== "game-canvas") return; const zoomIncrement = event.deltaY > 0 ? scaleFactor : -scaleFactor; let increment = 0; const intervalId = setInterval(() => { increment += zoomIncrement / 10; maxScreenWidth += increment; maxScreenHeight += increment; maxScreenWidth = Math.max(maxScreenWidth, 100); maxScreenHeight = Math.max(maxScreenHeight, 100); window.dispatchEvent(new Event("resize")); if (Math.abs(increment) >= Math.abs(zoomIncrement)) { clearInterval(intervalId); } }, 16); }); } enableSmoothZoom(); }) function lerp(start, end, amt) { return start + (end - start) * amt; } let health = false; const enhanceFillRect = function (fill, cColor) { return function (x, y, width, height) { if (this.fillStyle === "#a4cc4f") { this.fillStyle = cColor; if (Toggle.smoothBarHealth) { const old = health; const smooth = lerp(old, width, .42) width = smooth health = smooth } } fill.call(this, x, y, width, height); }; }; const customColor = "#E8CCD7"; const FillRect = CanvasRenderingContext2D.prototype.fillRect; CanvasRenderingContext2D.prototype.fillRect = enhanceFillRect(FillRect, customColor); window.render = (ctx, shit) => { }; let mySpikes = []; let myTraps = []; window.drawMarkers = (target, id, ctx, step) => { const objectID = target[Variables.id] const isSpike = [2, 7, 17].includes(target.type); if (isSpike) { let isMySpike = user.id == objectID; if (isMySpike && !mySpikes.find(c => c[Variables.id2] == target[Variables.id2])) { mySpikes.push(target); } } if (myTraps && target.type == 6) { let isMyTrap = user.id == objectID; if (isMyTrap && !myTraps.find(c => c[Variables.id2] == target[Variables.id2])) { myTraps.push(target); } }; let color; if (Toggle.markers) { if (teammates.includes(target[Variables.id])) { color = "#A4CC4F"; } else if (objectID === user.id2) { color = "#E8CCD7"; } else { color = "#A53F3F"; } } else { color = "rgba(0, 0, 0, 0)"; } if ([2, 6, 7, 17].includes(target.type)) { ctx.fillStyle = color; ctx.beginPath(); ctx.arc(0, 0, 9, 0, 2 * Math.PI); ctx.fill(); ctx.stroke(); ctx.closePath(); } }; let traps = []; window.receiveMsg = async ({ data }) => { const decoded = typeof data === "string" ? JSON.parse(data) : new Uint8Array(data); switch (decoded[0]) { case 35: user.name = decoded[2]; break; case 33: user.id = decoded[1]; break; case 16: { const array_with_ID = [...decoded.slice(2, decoded.length)]; array_with_ID.splice(array_with_ID.indexOf(user.id), 1); teammates = array_with_ID; return; } case 24: { const array_with_ID = [...decoded.slice(3, decoded.length)]; array_with_ID.splice(array_with_ID.indexOf(user.id), 1); teammates = array_with_ID; break; } case 27: teammates = []; break; case 20: { for (let i = 1; i < decoded.length; i += 19) { const newEnemy = { type: decoded[i], id: decoded[i + 1], hat: decoded[i + 11], teamID: decoded[i + 12], x: decoded[i + 4] | decoded[i + 5] << 8, y: decoded[i + 6] | decoded[i + 7] << 8, index: decoded[i + 2] | decoded[i + 3] << 8, health: Math.ceil(decoded[i + 13] / 2.55), angle: decoded[i + 9] * 0.02454369260617026 - 3.141592653589793, broken: decoded[i + 8] } newEnemy.id === user.id && Object.assign(user, newEnemy); traps = traps.filter(trap => trap.index !== newEnemy.index); } if (user.clown === 128 && !user.clowned) { user.clowned = true; setTimeout(() => { user.clowned = false; }, 3000) }; } } } const TYPEOF = value => Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); const NumberSystem = [{ radix: 2, prefix: "0b0*" }, { radix: 8, prefix: "0+" }, { radix: 10, prefix: "" }, { radix: 16, prefix: "0x0*" }]; class Regex { constructor(code, unicode) { this.code = code; this.COPY_CODE = code; this.unicode = unicode || false; this.hooks = {}; this.totalHooks = 0; } static parseValue(value) { try { return Function(`return (${value})`)(); } catch (err) { return null; } } isRegexp(value) { return TYPEOF(value) === "regexp"; } generateNumberSystem(int) { const copy = [...NumberSystem]; const template = copy.map((({ prefix, radix }) => prefix + int.toString(radix))); return `(?:${template.join("|")})`; } parseVariables(regex) { regex = regex.replace(/\{VAR\}/g, "(?:let|var|const)"); regex = regex.replace(/\{QUOTE\}/g, "['\"`]"); regex = regex.replace(/ARGS\{(\d+)\}/g, ((...args) => { let count = Number(args[1]), arr = []; while (count--) arr.push("\\w+"); return arr.join("\\s*,\\s*"); })); regex = regex.replace(/NUMBER\{(\d+)\}/g, ((...args) => { const int = Number(args[1]); return this.generateNumberSystem(int); })); return regex; } format(name, inputRegex, flags) { this.totalHooks += 1; let regex = ""; if (Array.isArray(inputRegex)) { regex = inputRegex.map((exp => this.isRegexp(exp) ? exp.source : exp)).join("\\s*"); } else if (this.isRegexp(inputRegex)) { regex = inputRegex.source; } regex = this.parseVariables(regex); if (this.unicode) { regex = regex.replace(/\\w/g, "(?:[^\\x00-\\x7F-]|\\$|\\w)"); } const expression = new RegExp(regex.replace(/\{INSERT\}/, ""), flags); const match = this.code.match(expression); if (match === null) console.debug("failed to find " + name) return regex.includes("{INSERT}") ? new RegExp(regex, flags) : expression; } template(type, name, regex, substr) { const expression = new RegExp(`(${this.format(name, regex).source})`); const match = this.code.match(expression) || []; this.code = this.code.replace(expression, type === 0 ? "$1" + substr : substr + "$1"); return match; } match(name, regex, flags, debug = false) { const expression = this.format(name, regex, flags); const match = this.code.match(expression) || []; this.hooks[name] = { expression, match }; return match; } matchAll(name, regex, debug = false) { const expression = this.format(name, regex, "g"); const matches = [...this.code.matchAll(expression)]; this.hooks[name] = { expression, match: matches }; return matches; } replace(name, regex, substr, flags) { const expression = this.format(name, regex, flags); this.code = this.code.replace(expression, substr); return this.code.match(expression) || []; } append(name, regex, substr) { return this.template(0, name, regex, substr); } prepend(name, regex, substr) { return this.template(1, name, regex, substr); } insert(name, regex, substr) { const { source } = this.format(name, regex); if (!source.includes("{INSERT}")) throw new Error("Your regexp must contain {INSERT} keyword"); const findExpression = new RegExp(source.replace(/^(.*)\{INSERT\}(.*)$/, "($1)($2)")); this.code = this.code.replace(findExpression, `$1${substr}$2`); return this.code.match(findExpression); } } window.currentAngle = 0; const lerpAngle = (current, target, alpha) => { let diff = (target - current + 30) % 360 - 30; return current + diff * alpha; } window.lerpAngle = lerpAngle; let smoothCamVal = 43; let Variables; const applyHooks = code => { const Hook = new Regex(code, true); window.COPY_CODE = (Hook.COPY_CODE.match(/^(\(function \w+\(\w+\)\{.+)\(.+?\);$/) || [])[1]; Hook.append("EXTERNAL fix", /\(function (\w+)\(\w+\)\{/, "let $2 = eval(`(() => ${COPY_CODE})()`);delete window.COPY_CODE;"); Hook.replace("fix", /\(function (\w+)\(\w+\)\{/, `(function snowvibe(){`); Hook.replace("fix", /"function"==typeof \w+&&\(\w+=\w\(\w+,\w+\)\);/, ``); const nick = Hook.match("nick", /\.(\w+):"XX"/)[1]; const myPlayer = Hook.match("myPlayer", /=(\w.get\(\w{2}\));\w&&\w\(\)/)[1]; const X = Hook.match("playerX", /\{this\.(\w{2})=\w\|\|0/)[1]; const Y = Hook.match("playerY", /,this\.(\w{2})=\w\|\|0\}/)[1]; const ID = Hook.match("ID", /&&\w{2}===\w\.(\w{2})\){/)[1]; const ID2 = Hook.match("ID2", /-1!==\w+\.(\w+)&&/)[1]; const currentWeapon = Hook.match("crntWeapon", /,\w.(\w{2})===/)[1]; const angle = Hook.match("angle", /;\w.(\w{2})=\w\(\)/)[1]; const weaponName = Hook.match("wpnName", /(\w{2}):"XX/)[1]; const health = Hook.match("health", /(\w{2})<<8;/)[1]; const weaponDamage = Hook.match("wpnDamage", /(\w{2}):32,reload:300/)[1]; const teamID = Hook.match("test", /,\w=\w.(\w{2})\|.+?\<\<8/)[1]; const radius = Hook.match("radius", /(\w{2}):220/)[1]; const [, currentItem, hat] = Hook.match("hat", /\(\w+\.(\w+)\|\w+\.(\w+)<<NUMBER{8}\)/); const size = Hook.match("size", /\.(\w{2})\+50/)[1]; const inWhichObject = Hook.match("iwo", /110\).+?,1===\w.(\w{2})&&!\w{2}/)[1]; const weaponID = Hook.match("el", /(\w{2}):0,\w{2}:22,reload:150/)[1]; const itemType = Hook.matchAll("el", /,(\w+):9,\w+:2/)[1][1]; const itemsID = Hook.match("IDs", />1\){.{3}(\w{2})/)[1]; const itemBar = Hook.match("defaultData", /(\W\w+>NUMBER{1}\W.+?(\w+)\.(\w+).+?)function/)[3]; const objCount = Hook.match("Quantity", /\),this.(\w{2})=\w\):/)[1]; const weaponList = Hook.match("weaponList", /\?Math\.PI\/2.+?(\w\(\))/)[1]; const isTyping = Hook.match("is typing", /=\+new Date,(\w{2})=!1,/)[1]; const damageReduce = Hook.match("damage reduce value", /10,(\w{2}):\.75,/)[1]; 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/); const sortedEntities = Hook.match("entities", /,\w=0;\w=(\w)\[/)[1]; const speedBuff = Hook.match("speed", /(\w+):1\.23/)[1]; const weaponSpeedBuff = Hook.match("speed", /300,(\w+):\.85/)[1]; const cam = Hook.match("cam", /,\w\)}},(\w{2})=new function/)[1]; const ctx = Hook.match("ctx", /(\w{2})=\w{2}(\[\w\(\d{3}\)\]|\.getContext)\("2d"\),\w{2}/)[1]; const [, camX, camY] = Hook.match("data", /height:20,(\w+).+?.(\w+)/); const [, biomeY, biomeHeight] = Hook.match("data", /\w{2}:160,(\w{2}):160,\w{2}.+?(\w{2}):/); Variables = { myPlayer: { myPlayer, nick: `${myPlayer}.${nick}`, x: `${myPlayer}.${X}`, y: `${myPlayer}.${Y}`, id: `${myPlayer}.${ID}`, teamID: `${myPlayer}.${teamID}`, angle: `${myPlayer}.${angle}` }, nick: nick, x: X, y: Y, id: ID, id2: ID2, hat, size, camX, camY, type: "type", angle, biomeY, health, radius, teamID, itemsID, isTyping, weaponID, objCount, itemType, hitAngle, speedBuff, weaponList, weaponName, animations, biomeHeight, weaponDamage, damageReduce, playAnimation, inWhichObject, currentWeapon, animationTime, animationSpeed, weaponAnimation, weaponSpeedBuff }; const log = console.log; log(Variables); window.Variables = Variables; Hook.append("getMsg", /0;fu.{10}(\w).{2}/, `window.receiveMsg($2);`); Hook.replace("renderItems", /(\(\w+\.\w+\+\w+,\w+\.\w+\+\w+\).+?\w+\(\).+?\w+\.\w+\.\w+\)([,;]))/, `$1window.drawMarkers(...arguments)$2`); Hook.append("showHoods", /\w+\.\w+!==\w+\)/, "|| true"); Hook.replace("animTextTime", /this.(\w{2})=400/, `this.$1=400`); Hook.replace("BiggerSquaresOnRenderGrid", /(\w+)=\w\(\)\.\w{2};(\w+)=Math/, `$1=200;$2=Math`); Hook.replace("LOCKROT ATIONISFUCKINGAY", /(return )(\w+\?)(\w+:)(\w+\(\)\.\w+\(window\[\w+\(570\)\]\/2,window\.innerHeight\/2,\w+,\w+\))/, "$1 $4"); Hook.replace("skull next to kills", /\w+\.drawImage\(\w+,\w+-\w+\.width-5,350\);/, ""); Hook.replace("smoothCam", /\w{4}.\w{3}\(.[0-9]{2}\*/, `Math.min(.00${smoothCamVal}*`); Hook.replace("xp bar", /\w+\.drawImage\(\w+,\w+-\w+\.width-5,350\);/, ""); Hook.replace("skull next to kills", /\w+\.drawImage\(\w+,\w+-\w+\.width-5,350\);/, ""); 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\(\)/, ""); 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+\)\}/, ""); Hook.replace("widtah", /(\w+\.lineWidth=)4,/, "$1 3,"); Hook.replace("widtah", /(\w+\.lineWidth=)7,/, "$1 4,"); Hook.replace('customBar', /F2C39F/, `FFF`) Hook.replace("LBPos", /width:250/, `width: 260`); Hook.replace("biggerLBoard", /250,330/, `260, 330`); Hook.replace("scorePos", /\+145/, `\+145`); Hook.replace("strokeForScrInLB", /(\),\w\(\)\.\w+,)\w\(\)\..{2}\)/, `$1"#ffffff", "#2D3030")`); Hook.insert("test", /{INSERT}.{12}\w+\[2\]\<<8;\w+=/, `return;`); Hook.replace("test", /this.Fl=this.Fl/, "this.Fl=0"); Hook.replace("test", /.ag=.02/, ".ag=.0"); Hook.replace("Map Color", /"#788F57"/, "\#64803d\""); Hook.replace("ColorMats", /\)\,24,\"\#\w{6}\"\)|\)\,24,\w\(\d{3}\)\)/, `),24,"#AE4D57", "#303030")`) Hook.replace("ColorMats", /\)\,24,\"\#\w{6}\"\)|\)\,24,\w\(\d{3}\)\)/, `),24,"#935F3B", "#303030")`) Hook.replace("ColorMats", /\)\,24,\"\#\w{6}\"\)|\)\,24,\w\(\d{3}\)\)/, `),24,"#7B7A91", "#303030")`) Hook.replace("ColorMats", /\"\",24\,\D{9}|\"\",24\,\w\(\d{3}\)/, `"",24,"#FFD700", "#303030"`) Hook.replace("ColorBioms", /(\w{2}:16\*.+?20,\w{2}):"#ece5db"}|(:16\*.+?20,\w{2}):\w\(\d{3}\)}/, `$1:"#A9A9A9"}`) Hook.replace('ItemChoose', /\w\(\d{3}\),40,\D{6}|"Choose item",40,\D{6}/, `"",40,"#fff","#303030"`); Hook.replace('customItemObvodka', /23,"#fff"/, `23,"#fff","#303030"`) Hook.replace('customItemObvodka', /eec39d"/, `eec39d", "#303030"`) Hook.replace('customItemInfo', /4f403c/, '4f403c80') Hook.replace('customBar', /F2C39F/, `FFF`) Hook.replace('customBar', /10,"#5D3A37"|10,\w\(\d{3}\)/, `10,"#00000080"`) Hook.replace('grid', /1,(\w{2})=!0/, `1, $1=false`) Hook.replace('millMarker', /=false,(\w{2})=!0/, `=false,$1=false`) Hook.replace('enablePing', /42.5\),(\w{2})=!1/, `42.5),$1=false`) Hook.append("qwes", /t\(570\)\+o;/, `console.debug(r, bt);`); Hook.append("wbty", /w-form-urlencoded"\),/, `console.debug(o);`) Hook.append("awbr", /519\)\]\.visibility="visible"\);/, `console.debug(t);`) Hook.append("drawstuff", /-NUMBER{50},.+?function \w+\((ARGS{3})\)\{/, `window.drawingBoard($2);`); Hook.replace("showIDS", /===(\w+)(&&\w+\(\)&&\w+\(\).+?)return void\((\w+)=!0/, "===$1$2;if('/show'==$1)return void($3 = !$3"); Hook.replace("lerpAngle", /\w{4} 0:\w.\w{6}(\w),/, `case 0: currentAngle = window.lerpAngle(currentAngle, m, 0.4);n.rotate(currentAngle);`); return Hook.code; }; window.eval = new Proxy(window.eval, { apply(target, _this, args) { const code = args[0]; console.log("Eval Code Length:", code.length); if (code.length > 1e5) { args[0] = applyHooks(code); console.log("Modified Code:", args[0].slice(0, 500)); target.apply(_this, args); window.eval = target; document.title = "AntiMooAddict"; return; } return target.apply(_this, args); } });