您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Cheat for brofist.io
// ==UserScript== // @name blackhack // @version 1.14-beta4 // @description Cheat for brofist.io // @author CiNoP // @match https://brofist.io/ // @match https://brofist.io/modes/twoPlayer/c/index.html // @match https://brofist.io/modes/hideAndSeek/c/index.html // @match https://brofist.io/modes/sandbox/c/index.html // @match http://brofist.io/ // @match http://brofist.io/modes/twoPlayer/c/index.html // @match http://brofist.io/modes/hideAndSeek/c/index.html // @match http://brofist.io/modes/sandbox/c/index.html // @match http://www.brofist.io/ // @match http://www.brofist.io/modes/twoPlayer/c/index.html // @match http://www.brofist.io/modes/hideAndSeek/c/index.html // @match http://www.brofist.io/modes/sandbox/c/index.html // @icon https://www.google.com/s2/favicons?sz=64&domain=brofist.io // @grant none // @license GPL-3.0-only // @namespace brofist.io 1st-cheat (FOR ALL MODES) // ==/UserScript== /* jshint esversion: 11 */ /* jshint asi: true */ // Функция для переключения вкладок (пример реализации) window.openTab = function(tabName, event) { const tabContents = document.querySelectorAll(".tab-content"); tabContents.forEach(tab => tab.style.display = "none"); const buttons = document.querySelectorAll(".tab-button"); buttons.forEach(btn => btn.classList.remove("active")); document.getElementById(tabName + "Tab").style.display = "block"; event.currentTarget.classList.add("active"); } // Функция для обновления списка в контейнере window.updateBlacklistList = function() { const container = document.getElementById("blacklistContainer"); container.innerHTML = ""; hack.vars.blacklisted.names.forEach(name => { const row = document.createElement("div"); row.className = "form-row"; row.style.justifyContent = "flex-start"; row.style.alignItems = "center"; row.style.gap = "8px"; // Увеличиваем зазор между элементами // Кнопка для удаления (эмодзи ❌) - сделана квадратной const delBtn = document.createElement("button"); delBtn.className = "btn"; delBtn.style.padding = "0"; delBtn.style.width = "24px"; delBtn.style.height = "24px"; delBtn.style.lineHeight = "24px"; delBtn.style.display = "flex"; delBtn.style.alignItems = "center"; delBtn.style.justifyContent = "center"; delBtn.style.boxSizing = "border-box"; delBtn.innerText = "❌"; delBtn.onclick = function() { window.removeBlacklistName(name); }; // Эмодзи белой точки const whiteDot = document.createElement("span"); whiteDot.innerText = "⚪"; whiteDot.style.marginRight = "4px"; // расстояние между белой точкой и никнеймом const nameSpan = document.createElement("span"); nameSpan.innerText = name; row.appendChild(delBtn); row.appendChild(whiteDot); row.appendChild(nameSpan); container.appendChild(row); }); } // Функция добавления никнейма window.addBlacklistName = function() { const input = document.getElementById("blacklistInput"); const name = input.value.trim(); if (name !== "" && !hack.vars.blacklisted.names.includes(name)) { hack.vars.blacklisted.names.push(name); input.value = ""; window.updateBlacklistList(); } } // Функция удаления никнейма по клику на ❌ window.removeBlacklistName = function(name) { hack.vars.blacklisted.names = hack.vars.blacklisted.names.filter(e => e !== name); window.updateBlacklistList(); } // Функция, возвращающая противоположный (инвертированный) цвет в формате HEX window.getComplementaryColor = function(hex) { hex = hex.replace("#", ""); if (hex.length === 3) { hex = hex.split("").map(ch => ch + ch).join(""); } const r = parseInt(hex.substring(0, 2), 16); const g = parseInt(hex.substring(2, 4), 16); const b = parseInt(hex.substring(4, 6), 16); const compR = (255 - r).toString(16).padStart(2, '0'); const compG = (255 - g).toString(16).padStart(2, '0'); const compB = (255 - b).toString(16).padStart(2, '0'); return `#${compR}${compG}${compB}`; } // Преобразование HEX в RGBA с учетом прозрачности window.hexToRGBA = function(hex, opacity) { hex = hex.replace("#", ""); if (hex.length === 3) { hex = hex.split("").map(ch => ch + ch).join(""); } const r = parseInt(hex.substring(0, 2), 16); const g = parseInt(hex.substring(2, 4), 16); const b = parseInt(hex.substring(4, 6), 16); return `rgba(${r}, ${g}, ${b}, ${opacity})`; }; // Функция для применения выбранных настроек косметики window.applyCosmetics = function() { const bgColor = document.getElementById("bgColorInput").value; const textColor = document.getElementById("textColorInput").value; const bgOpacity = parseFloat(document.getElementById("bgOpacityInput").value); const outlineEnabled = document.getElementById("textOutlineCheckbox").checked; const background = window.hexToRGBA(bgColor, bgOpacity); const elementIds = ["someData", "controlPanel", "mapCredits", "leaderboard", "timer"]; elementIds.forEach(id => { const el = document.getElementById(id); if (el) { el.style.setProperty("background-color", background, "important"); el.style.setProperty("opacity", "1", "important"); // Меняем цвет текста и добавляем обводку, если это не leaderboard if (id !== "leaderboard") { el.style.setProperty("color", textColor, "important"); if (outlineEnabled) { const outlineColor = getComplementaryColor(textColor); el.style.setProperty("text-shadow", ` 0.75px 0.75px 0 ${outlineColor}, -0.75px -0.75px 0 ${outlineColor}, 0.75px -0.75px 0 ${outlineColor}, -0.75px 0.75px 0 ${outlineColor}, 0.75px 0 0 ${outlineColor}, 0 0.75px 0 ${outlineColor}, -0.75px 0 0 ${outlineColor}, 0 -0.75px 0 ${outlineColor} `, "important"); } else { el.style.setProperty("text-shadow", "none", "important"); } } } }); localStorage.setItem("cosmeticsSettings", JSON.stringify({ bgColor, textColor, bgOpacity, outlineEnabled })); }; // Функция для загрузки сохраненных настроек window.loadCosmetics = function() { const savedSettings = localStorage.getItem("cosmeticsSettings"); if (savedSettings) { const { bgColor, textColor, bgOpacity, outlineEnabled } = JSON.parse(savedSettings); document.getElementById("bgColorInput").value = bgColor; document.getElementById("textColorInput").value = textColor; document.getElementById("bgOpacityInput").value = bgOpacity; if (typeof outlineEnabled !== "undefined") { document.getElementById("textOutlineCheckbox").checked = outlineEnabled; } window.applyCosmetics(); } }; const roomButtons = document.querySelectorAll('.button.rooms'); roomButtons.forEach(button => { button.addEventListener('click', function() { setTimeout(function() { window.loadCosmetics(); }, 30); }); }); let sandboxURL = ['https://brofist.io/modes/sandbox/c/index.html', 'http://brofist.io/modes/sandbox/c/index.html', 'http://www.brofist.io/modes/sandbox/c/index.html'] let twoPlayerURL = ['https://brofist.io/modes/twoPlayer/c/index.html', 'http://brofist.io/modes/twoPlayer/c/index.html','http://www.brofist.io/modes/twoPlayer/c/index.html'] let hideAndSeekURL = ['https://brofist.io/modes/hideAndSeek/c/index.html', 'http://brofist.io/modes/hideAndSeek/c/index.html', 'http://www.brofist.io/modes/hideAndSeek/c/index.html'] let brofioURL = ['https://brofist.io', 'http://brofist.io/'] document.body.insertAdjacentHTML("beforebegin", `<button id="infoPanelBtn" style="display: inherit; width: 30px; height: 30px; position: fixed; top: 50%; left: 0px; background: rgba(0, 0, 0, 0.3); color: rgb(255, 255, 255); border: none; cursor: pointer;">ⓘ</button>` ); document.body.insertAdjacentHTML("beforebegin", `<div id="infoPanelArrow" style="position: fixed; left: 35px; top: 50%; font-size: 30px; color: #FF4136; opacity: 0; transform: translateY(-50%);">➤</div>` ); document.getElementById('infoPanelBtn').addEventListener('click', () => { const panel = document.getElementById('cheatInfoPanel'); panel.style.display = (panel.style.display === 'none') ? 'block' : 'none'; }); document.body.insertAdjacentHTML("beforebegin", `<div id="cheatInfoPanel" style="display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0, 0, 0, 0.8); color: rgb(255, 255, 255); padding: 15px; border-radius: 5px; font-size: 20px; text-align: center; z-index: 1000; font-family: Arial, sans-serif; cursor: move; max-width: 90%; max-height: 90%; overflow: auto; user-select: none;"> <div style="margin-bottom: 10px;"> <button id="decreaseFont" style="margin-right: 5px;">-</button> <button id="increaseFont">+</button> </div> <div id="cheatInfoText"> ${getCheatInfoText()} </div> </div>` ); makePanelDraggable(document.getElementById('cheatInfoPanel')); function getCheatInfoText() { if (brofioURL.includes(window.location.href)) { return "Зайдите в любой режим"; } else if (twoPlayerURL.includes(window.location.href)) { return ` <b>Функционал чита:</b><br> английская <b>C</b> - Рывок (во все стороны)<br> англ. <b>Z</b> - Прыжок с возможностью второго прыжка<br> <b>F2</b> - Режим бога<br> <b>ё</b> или <b>\`</b> - Изменение скорости в режиме бога<br> <b>F4</b> - Невосприимчивость к яду<br> <b>F9</b> - Невосприимчивость к смерти (по умолчанию вкл.)<br> <b>Home</b>/<b>End</b> - тп к спавну/двери<br> Зажатие англ. <b>S</b> - Увеличение массы в 3 раза<br> <b>Insert</b> - Тп к игроку<br> <b>Колесо мыши</b> - Выдача вертикальной скорости<br> <b>Правый клик</b> - Телепорт к месту на котором ваш курсор<br><br> <b>А так же:</b><br> Информация об игроке, скриптовых переменных и т.п. во вкладке Info<br> Изменение стиля интерфейса во вкладке Cosmetics<br> Переключение между новым и старым передвижением в левой нижней панели<br> Нажмите <b>Esc</b> чтобы скрыть новые панели<br> `; } else { return ` <b>Функционал чита:</b><br> английская <b>C</b> - Рывок (во все стороны)<br> англ. <b>Z</b> - Прыжок с возможностью второго прыжка<br> <b>F2</b> - Режим бога<br> <b>ё</b> или <b>\`</b> - Изменение скорости в режиме бога<br> Зажатие англ. <b>S</b> - Увеличение массы в 3 раза<br> <b>Колесо мыши</b> - Выдача вертикальной скорости<br><br> <b>А так же:</b><br> Информация об игроке, скриптовых переменных и т.п. в левой верхней панели<br> Переключение между новым и старым передвижением в левой нижней панели<br> Нажмите <b>Esc</b> чтобы скрыть новые панели<br> `; } } function makePanelDraggable(panel) { let isDragging = false; let startX, startY, initialX, initialY; panel.addEventListener('mousedown', dragStart); document.addEventListener('mouseup', dragEnd); document.addEventListener('mousemove', drag); function dragStart(e) { isDragging = true; startX = e.clientX; startY = e.clientY; const rect = panel.getBoundingClientRect(); initialX = rect.left; initialY = rect.top; panel.style.transform = 'none'; } function drag(e) { if (!isDragging) return; const offsetX = e.clientX - startX; const offsetY = e.clientY - startY; let newX = initialX + offsetX; let newY = initialY + offsetY; const windowWidth = window.innerWidth; const windowHeight = window.innerHeight; const panelRect = panel.getBoundingClientRect(); const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth; const scrollbarHeight = window.innerHeight - document.documentElement.clientHeight; newX = Math.max(0, Math.min(windowWidth - panelRect.width - scrollbarWidth, newX)); newY = Math.max(0, Math.min(windowHeight - panelRect.height - scrollbarHeight, newY)); panel.style.left = `${newX}px`; panel.style.top = `${newY}px`; } function dragEnd() { isDragging = false; } } const cheatInfoPanel = document.getElementById('cheatInfoPanel'); const cheatInfoText = document.getElementById('cheatInfoText'); const decreaseFontBtn = document.getElementById('decreaseFont'); const increaseFontBtn = document.getElementById('increaseFont'); let fontSize = 20; decreaseFontBtn.addEventListener('click', () => { fontSize = Math.max(10, fontSize - 2); cheatInfoText.style.fontSize = fontSize + 'px'; }); increaseFontBtn.addEventListener('click', () => { fontSize = Math.min(40, fontSize + 2); cheatInfoText.style.fontSize = fontSize + 'px'; }); const infoPanelArrow = document.getElementById('infoPanelArrow'); let animationCount = 0; let animationRunning = false; function initializeArrow() { infoPanelArrow.style.position = 'fixed'; infoPanelArrow.style.top = '50%'; infoPanelArrow.style.left = '35px'; infoPanelArrow.style.transform = 'translateY(-50%) rotate(180deg)'; infoPanelArrow.style.opacity = 0; infoPanelArrow.style.top = 'calc(50% + 15px)' } function animateArrow() { if (animationRunning) return; animationRunning = true; let opacity = 0; let fadeIn = true; const animationSpeed = 25; const animation = setInterval(() => { if (fadeIn) { opacity += 0.1; if (opacity >= 1) { fadeIn = false; } } else { opacity -= 0.1; if (opacity <= 0) { fadeIn = true; animationCount++; if (animationCount >= 10) { clearInterval(animation); animationRunning = false; infoPanelArrow.style.opacity = 0; } } } infoPanelArrow.style.opacity = opacity; }, animationSpeed); } initializeArrow(); animateArrow(); function sandboxHack() { function activateMain(temp1) { const hack = { keyBindings: { isCPressed: false, cTimer: null, isZPressed: false }, playerMoveData: { lastHorizontalDirection: 1, isDashingDown: false, isDashingUp: false, lastDashTime: 0, dashDuration: 100, dashEndTime: 0, isDoubleJumpAllowed: false, airDashAvailable: true, newMovementIsOn: false, }, bindKeys: function() { document.addEventListener('keydown', function(event) { if (event.key === 'Escape') { const panel = document.getElementById('someData') const panel1 = document.getElementById('controlPanel') if (panel.style.display === 'none') { panel.style.display = 'inherit' } else { panel.style.display = 'none' } if (panel1.style.display === 'none') { panel1.style.display = 'inherit' } else { panel1.style.display = 'none' } } if (event.key.toLowerCase() === 's' && event.repeat) { if (!hack.vars.modeIsOn) { hack.getters.me.p.mass = 3 } } if (event.key.toLowerCase() === 'z' && !event.repeat) { hack.keyBindings.isZPressed = true } else if (event.repeat) { hack.keyBindings.isZPressed = false } if (event.key.toLowerCase() === 'c') { hack.keyBindings.isCPressed = true if (!hack.keyBindings.cTimer) { hack.keyBindings.cTimer = setTimeout(() => { hack.keyBindings.isCPressed = false hack.keyBindings.cTimer = null }, 250) } } }) document.addEventListener('keyup', function(event) { if (event.key.toLowerCase() === 's') { if (!hack.vars.modeIsOn) { hack.getters.me.p.mass = 1 } } if (event.key.toLowerCase() === 'z') { hack.keyBindings.isZPressed = false } if (event.key.toLowerCase() === 'c') { hack.keyBindings.isCPressed = false if (hack.keyBindings.cTimer) { clearTimeout(hack.keyBindings.cTimer) hack.keyBindings.cTimer = null } } }) }, getters: { get client() { return temp1[38].exports }, get gf() { return temp1[42].exports }, get gp() { return temp1[43].exports }, get graphics() { return temp1[44].exports }, get mode() { return temp1[48].exports }, get envirData() { return temp1[53].exports }, get network() { return temp1[66].exports }, get physics() { return temp1[362].exports }, get me() { return hack.getters.mode.player.gpData }, get ray() { return hack.getters.me.ray }, get velocity() { return hack.getters.me.p.velocity }, get otherPlayers() { return hack.getters.mode.otherPlayers }, get velocity() { return this.mode.player.gpData.p.velocity }, get otherPlayers() { return this.mode.otherPlayers }, ghost: false, get me() { return hack.getters.mode.player.gpData }, get ray() { return hack.getters.me.ray }, get velocity() { return hack.getters.me.p.velocity }, get otherPlayers() { return hack.getters.mode.otherPlayers } }, vars: { get isGround() { return isGrounded() }, mult: 1, lrSpd: 3, udSpd: 3, 'POSITION INFO ': '-----------------------', get currentPosX() { return Math.round(hack.getters.me.getX() * 100) / 100 }, get currentPosY() { return Math.round(hack.getters.me.getY() * 100) / 100 }, 'SPEED INFO ': '----------------------------', get totalSpd() { return (((this.lrSpd + this.udSpd) / 2) * this.mult) }, get currentSpdX() { return Math.round(hack.getters.me.p.velocity[0] * 100) / 100 }, get currentSpdY() { return Math.round(hack.getters.me.p.velocity[1] * 100) / 100 }, 'SCRIPT VALUES ': '----------------------', multSpdIsOn: false, modeIsOn: false, ghost1: false, 'MOVEMENT VALUES ': '---------------' }, suppFuncs: { getMult: () => { if (hack.vars.mult < 3) { return 1 } else if (hack.vars.mult < 4) { return 2 } }, setMult: function(e) { if (e != undefined) { hack.vars.lrSpd = hack.vars.udSpd = e return } if (hack.suppFuncs.getMult() === 1) { hack.vars.mult++ } else if (hack.suppFuncs.getMult() === 2) { hack.vars.mult += 2 } else { hack.vars.mult = 1 } }, getIndexByName: function(playerName) { const index = hack.getters.otherPlayers.findIndex(player => player?.myName === playerName) return index === -1 ? false : index } }, functions: { godModeEnable: () => { hack.vars.ghost1 = true hack.getters.me.p.collisionResponse = false hack.getters.me.p.mass = 0 hack.vars.modeIsOn = true hack.getters.velocity[0] = 0 hack.getters.velocity[1] = 0 }, godModeDisable: () => { hack.vars.ghost1 = false hack.getters.me.p.collisionResponse = true hack.getters.me.p.mass = 1 hack.vars.modeIsOn = false hack.getters.velocity[0] = 0 hack.getters.velocity[1] = 0 }, multSpdEnable: () => { hack.vars.lrSpd *= hack.vars.mult hack.vars.udSpd *= hack.vars.mult hack.vars.multSpdIsOn = true }, multSpdDisable: () => { hack.vars.lrSpd /= hack.vars.mult hack.vars.udSpd /= hack.vars.mult hack.vars.multSpdIsOn = false } }, logFuncs: { logModeIsOn: () => { console.log('modeIsOn:', hack.vars.modeIsOn) }, logSpd: () => { console.log('speed:', ((hack.vars.lrSpd + hack.vars.udSpd) / 2) * hack.vars.mult) } } } document.body.insertAdjacentHTML("beforebegin", ` <div id="someData" style="display: inherit; width: auto; position: fixed; top: 0px; left: 0px; height: auto; text-align: left; font-size: 14px; background: rgb(0, 0, 0); color: rgb(255, 255, 255); opacity: 0.7; padding: 2px 2px;"></div> `) const updateData = () => { const o = [] for (let i in hack.vars) { const res = '' for (let char of i) { res += char if (char === char.toUpperCase()) { res += '' } } o.push(`${res}: ${hack.vars[i]}`) } for (let i in hack.playerMoveData) { o.push(`${i}: ${hack.playerMoveData[i]}`) } document.getElementById("someData").innerHTML = o.join('<br>') } document.body.insertAdjacentHTML("beforebegin", ` <div id="controlPanel" style="display: inherit; width: auto; position: fixed; bottom: 0px; left: 0px; height: auto; text-align: left; font-size: 14px; background: rgb(0, 0, 0); color: rgb(255, 255, 255); opacity: 0.7; padding: 2px 2px;"> <div> <span>new movement: </span> <button id="newMoveBtn" style="background: rgba(255, 255, 255, 0.7); color: black;">${hack.playerMoveData.newMovementIsOn}</button> </div> </div> `) const updateButtonStates = () => { document.getElementById("newMoveBtn").innerText = hack.playerMoveData.newMovementIsOn } document.getElementById("newMoveBtn").addEventListener("click", () => { if (!hack.playerMoveData.newMovementIsOn) { newMovement() } else { oldMovement() } updateButtonStates() }) setInterval(updateData, 100 / 6) updateButtonStates() setInterval(updateButtonStates, 100 / 6) hack.bindKeys() let scrActivate = function() { hack.getters.client.loopFunctions[2].timeOut = 100 / 6 hack.getters.client.loopFunctions[3].timeOut = 0 oldMovement() Object.defineProperty(hack.vars, 'mult', { enumerable: false }) Object.defineProperty(hack.vars, 'lrSpd', { enumerable: false }) Object.defineProperty(hack.vars, 'udSpd', { enumerable: false }) Object.defineProperty(hack.vars, 'multSpdIsOn', { enumerable: false }) Object.defineProperty(hack.vars, 'ghost1', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'lastDashTime', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'lastHorizontalDirection', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'lastDashTime', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'dashDuration', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'dashEndTime', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'newMovementIsOn', { enumerable: false }) } hack.getters.client.findUntilFound = function(e, t, n) { hack.getters.network.gsip = e; hack.getters.network.gsrn = t; hack.getters.network.getSID?.((sid) => { hack.getters.network.sid = sid; hack.getters.network.connectToGs?.(hack.getters.network.gsip, () => { console.log("connected to gs"); hack.getters.client.verifyIsHuman?.(() => { hack.getters.network.registerSidOnGs?.((verifyStatus) => { console.log("verified on gs server", verifyStatus); if (verifyStatus === "") { alert("You are already playing the game in another browser tab."); location.reload(); n(2); } else { hack.getters.network.joinRoom?.(hack.getters.network.gsrn, (joinStatus) => { if (joinStatus === 1) { hack.getters.client.sendPlayingInfo?.(hack.getters.client.roomId, () => { hack.getters.client.onReady?.(); n(1); scrActivate() }); } else { console.log("else"); hack.getters.network.gsSockehack?.getters.client.disconnect?.(); do { hack.getters.client.rIndex++; const currentDataCenter = hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]; if (!currentDataCenter?.[hack.getters.client.rIndex]) { hack.getters.client.dcIndex++; hack.getters.client.rIndex = 0; if (!hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]) { alert("It seems all servers are full. Please refresh your page and try again."); location.reload(); return; } } } while (hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]?.[hack.getters.client.rIndex]?.[2] !== hack.getters.client.modeInfo.mp); const newGsip = hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]?.[hack.getters.client.rIndex]?.[1]; const newGsrn = hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]?.[hack.getters.client.rIndex]?.[3]; hack.getters.client.roomId = hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]?.[hack.getters.client.rIndex]?.[4]; hack.getters.client.findUntilFound(newGsip, newGsrn, n); } }); } }); }); }); }); }; document.body.onkeyup = (event) => { const key = event.key switch (key) { case 'PageUp': if (!hack.vars.modeIsOn) { hack.getters.me.p.gravityScale = 1 hack.getters.me.p.collisionResponse = 1 } break; case 'PageDown': if (!hack.vars.modeIsOn) { hack.getters.me.p.collisionResponse = 1 } break; } } document.body.onkeydown = (event) => { const key = event.key; switch (key) { case 'PageUp': if (!hack.vars.modeIsOn) { hack.getters.me.p.gravityScale = -1 hack.getters.me.p.collisionResponse = 0 } break; case 'PageDown': if (!hack.vars.modeIsOn) { hack.getters.me.p.gravityScale = 1 hack.getters.me.p.collisionResponse = 0 } break; case 'F2': if (!hack.vars.modeIsOn) { hack.functions.godModeEnable(); hack.logFuncs.logModeIsOn(); hack.functions.multSpdEnable(); } else { hack.functions.godModeDisable(); hack.logFuncs.logModeIsOn(); hack.functions.multSpdDisable(); } break; case '`': // Backtick (`) case 'ё'.toLowerCase(): // Cyrillic Yo (часто на той же клавише, что и Backtick) if (hack.vars.modeIsOn) { hack.suppFuncs.setMult(); hack.logFuncs.logSpd(); } break; } }; function isGrounded() { const meX = hack.getters.me.getX() const meY = hack.getters.me.getY() const ray = hack.getters.ray const physics = hack.getters.physics const gpPWorld = hack.getters.gp.pWorld const rayResult = hack.getters.me.ray.result const rayHitPoint = (hack.getters.ray.hitPoint = [Infinity, Infinity]) const verticalOffset = 50 const checkYPosition = meY + 45 for (let i = 0; i < 121; i++) { const o = meX - 15 + i * (30 / 120) const s = checkYPosition const u = s + verticalOffset ray.from = [physics.xAxis(o, 0), physics.yAxis(s, 0)] ray.to = [physics.xAxis(o, 0), physics.yAxis(u, 0)] ray.update() rayResult.reset() if (gpPWorld.raycast(rayResult, ray)) { rayResult.getHitPoint(rayHitPoint, ray) const hitDistance = rayResult.getHitDistance(ray) if (rayResult.shape.ref.getCollision() && hitDistance < 0.1) { return true } } } return false } function newMovement() { hack.getters.client.loopFunctions[2].fun = function() { const currentTime = Date.now() const dashCooldown = 250 const dashDistance = 2.5 const dashSpeed = 25 const grounded = isGrounded() if (grounded) { hack.playerMoveData.airDashAvailable = true } if (hack.getters.mode.moveLeft) { hack.playerMoveData.lastHorizontalDirection = -1 } else if (hack.getters.mode.moveRight) { hack.playerMoveData.lastHorizontalDirection = 1 } if ( hack.keyBindings.isCPressed && hack.getters.mode.moveDown && currentTime - hack.playerMoveData.lastDashTime >= dashCooldown && !hack.playerMoveData.isDashingDown && (grounded || (!grounded && hack.playerMoveData.airDashAvailable)) ) { hack.playerMoveData.lastDashTime = currentTime hack.playerMoveData.isDashingDown = true hack.playerMoveData.dashDuration = (dashDistance / dashSpeed) * 1000 hack.playerMoveData.dashEndTime = currentTime + hack.playerMoveData.dashDuration if (!grounded) { hack.playerMoveData.airDashAvailable = false } } if ( hack.keyBindings.isCPressed && hack.getters.mode.moveUp && currentTime - hack.playerMoveData.lastDashTime >= dashCooldown && !hack.playerMoveData.isDashingUp && (grounded || (!grounded && hack.playerMoveData.airDashAvailable)) ) { hack.playerMoveData.lastDashTime = currentTime hack.playerMoveData.isDashingUp = true hack.playerMoveData.dashDuration = (dashDistance / dashSpeed) * 1000 hack.playerMoveData.dashEndTime = currentTime + hack.playerMoveData.dashDuration if (!grounded) { hack.playerMoveData.airDashAvailable = false } } if ( hack.keyBindings.isCPressed && currentTime - hack.playerMoveData.lastDashTime >= dashCooldown && !hack.playerMoveData.isDashing && (grounded || (!grounded && hack.playerMoveData.airDashAvailable)) ) { hack.playerMoveData.lastDashTime = currentTime hack.playerMoveData.isDashing = true hack.playerMoveData.dashVelocity = dashSpeed * hack.playerMoveData.lastHorizontalDirection hack.playerMoveData.dashDuration = (dashDistance / dashSpeed) * 1000 hack.playerMoveData.dashEndTime = currentTime + hack.playerMoveData.dashDuration if (!grounded) { hack.playerMoveData.airDashAvailable = false } } if (hack.playerMoveData.isDashingDown) { hack.getters.mode.player.gpData.p.velocity[1] = -dashSpeed hack.getters.mode.player.gpData.p.velocity[0] = 0 hack.getters.me.p.collisionResponse = false if (currentTime >= hack.playerMoveData.dashEndTime) { hack.playerMoveData.isDashingDown = false hack.getters.mode.player.gpData.p.velocity[1] = 0 if (!hack.vars.modeIsOn) { hack.getters.me.p.collisionResponse = true } } return } if (hack.playerMoveData.isDashingUp) { hack.getters.mode.player.gpData.p.velocity[1] = dashSpeed hack.getters.mode.player.gpData.p.velocity[0] = 0 hack.getters.me.p.collisionResponse = false if (currentTime >= hack.playerMoveData.dashEndTime) { hack.playerMoveData.isDashingUp = false hack.getters.mode.player.gpData.p.velocity[1] = 0 if (!hack.vars.modeIsOn) { hack.getters.me.p.collisionResponse = true } } return } if (hack.playerMoveData.isDashing) { hack.getters.mode.player.gpData.p.velocity[0] = hack.playerMoveData.dashVelocity hack.getters.mode.player.gpData.p.velocity[1] = 0 hack.getters.me.p.collisionResponse = false if (currentTime >= hack.playerMoveData.dashEndTime) { hack.playerMoveData.isDashing = false hack.getters.mode.player.gpData.p.velocity[0] = 0 if (!hack.vars.modeIsOn) { hack.getters.me.p.collisionResponse = true } } return } else { if (hack.getters.mode.moveRight) { hack.getters.mode.player.gpData.p.velocity[0] = hack.vars.lrSpd * hack.vars.mult } else if (hack.getters.mode.moveLeft) { hack.getters.mode.player.gpData.p.velocity[0] = -hack.vars.lrSpd * hack.vars.mult } } if (grounded) { hack.playerMoveData.isDoubleJumpAllowed = true if (hack.keyBindings.isZPressed) { hack.keyBindings.isZPressed = false hack.getters.velocity[1] = 8 * (hack.getters.me.p.gravityScale) } } else if (hack.playerMoveData.isDoubleJumpAllowed && hack.keyBindings.isZPressed) { hack.keyBindings.isZPressed = false hack.getters.velocity[1] = 8 * (hack.getters.me.p.gravityScale) hack.playerMoveData.isDoubleJumpAllowed = false } if (hack.vars.ghost1) { if (hack.getters.mode.moveUp) { hack.getters.velocity[1] = hack.vars.udSpd * hack.vars.mult } if (hack.getters.mode.moveDown) { hack.getters.velocity[1] = -hack.vars.udSpd * hack.vars.mult } if (!hack.getters.mode.moveUp && !hack.getters.mode.moveDown) { hack.getters.velocity[1] = 0 } } } hack.playerMoveData.newMovementIsOn = true } function oldMovement() { hack.getters.client.loopFunctions[2].fun = function() { const grounded = isGrounded() if (hack.getters.mode.moveRight) { hack.getters.mode.player.gpData.p.velocity[0] = hack.vars.lrSpd * hack.vars.mult } else if (hack.getters.mode.moveLeft) { hack.getters.mode.player.gpData.p.velocity[0] = -hack.vars.lrSpd * hack.vars.mult } if (grounded) { if (hack.getters.mode.moveUp) { hack.getters.velocity[1] = 8 } } if (hack.vars.ghost1) { if (hack.getters.mode.moveUp) { hack.getters.velocity[1] = hack.vars.udSpd * hack.vars.mult } if (hack.getters.mode.moveDown) { hack.getters.velocity[1] = -hack.vars.udSpd * hack.vars.mult } if (!hack.getters.mode.moveUp && !hack.getters.mode.moveDown) { hack.getters.velocity[1] = 0 } } } hack.playerMoveData.newMovementIsOn = false } addEventListener("mousewheel", e => { window.tweenObjects.map(x => { try { if (e.shiftKey) { hack.getters.mode.player.gpData.p.velocity[0] = -Math.sign(e.deltaY) * 15; } else { hack.getters.mode.player.gpData.p.velocity[1] = -Math.sign(e.deltaY) * 15; } } catch (err) { console.error(err); } }); }); } let temp1 = {}; const _call = Function.prototype.call; new Promise((resolve, reject) => { Function.prototype.call = function(...args) { if (args[2]?.exports) { temp1 = args[6] Function.prototype.call = _call console.log(temp1) resolve(temp1) } return _call.apply(this, args) }; }).then((result) => { if (Object.keys(result).length > 0) { activateMain(result) } else { console.log("temp1 is empty") } }).catch((error) => { console.error("An error occurred:", error) }) } function twoPlayerHack() { function activateMain(temp1) { function handleKeyDown(event) { if (event.repeat) return; const mode = hack.getters.mode; const velocity = mode.player.gpData.p.velocity switch (event.key) { case "ArrowLeft": mode.moveLeft = true; mode.moveRight = false; break; case "ArrowRight": mode.moveRight = true; mode.moveLeft = false; break; case "ArrowUp": mode.moveUp = true; mode.moveDown = false; break; case "ArrowDown": mode.moveDown = true; mode.moveUp = false; break; } } function handleKeyUp(event) { const mode = hack.getters.mode; const velocity = mode.player.gpData.p.velocity switch (event.key) { case "ArrowLeft": mode.moveLeft = false; velocity[0] = 0; break; case "ArrowRight": mode.moveRight = false; velocity[0] = 0 break; case "ArrowUp": mode.moveUp = false; break; case "ArrowDown": mode.moveDown = false; break; } } const hack = { keyBindings: { isCPressed: false, cTimer: null, isZPressed: false }, playerMoveData: { lastHorizontalDirection: 1, isDashingDown: false, isDashingUp: false, lastDashTime: 0, dashDuration: 100, dashEndTime: 0, isDoubleJumpAllowed: false, airDashAvailable: true, newMovementIsOn: true, division: 120, meYplus: 45, }, bindKeys: function() { document.addEventListener("keydown", (event) => { if (event.key === "Shift") { hack.vars.shiftPressed = true; } }); document.addEventListener("keyup", (event) => { if (event.key === "Shift") { hack.vars.shiftPressed = false; } }); document.addEventListener('keydown', function(event) { if (event.key === 'Escape') { const panel = document.getElementById('someData') const panel1 = document.getElementById('controlPanel') if (panel.style.display === 'none') { panel.style.display = 'inherit' } else { panel.style.display = 'none' } if (panel1.style.display === 'none') { panel1.style.display = 'inherit' } else { panel1.style.display = 'none' } } if (event.key.toLowerCase() === 's' && event.repeat) { if (!hack.vars.modeIsOn) { hack.getters.me.p.mass = 3 } } if (event.key.toLowerCase() === 'z' && !hack.keyBindings.isZPressed) { hack.keyBindings.isZPressed = true; } if (event.key.toLowerCase() === 'c') { hack.keyBindings.isCPressed = true if (!hack.keyBindings.cTimer) { hack.keyBindings.cTimer = setTimeout(() => { hack.keyBindings.isCPressed = false hack.keyBindings.cTimer = null }, 250) } } }) document.addEventListener('keyup', function(event) { if (event.key.toLowerCase() === 's') { if (!hack.vars.modeIsOn) { hack.getters.me.p.mass = 1 } } if (event.key.toLowerCase() === 'z') { hack.keyBindings.isZPressed = false; } if (event.key.toLowerCase() === 'c') { hack.keyBindings.isCPressed = false if (hack.keyBindings.cTimer) { clearTimeout(hack.keyBindings.cTimer) hack.keyBindings.cTimer = null } } }) }, getters: { get client() { return temp1[38].exports }, get gf() { return temp1[42].exports }, get gp() { return temp1[43].exports }, get graphics() { return temp1[44].exports }, get guiComponentsKick() { return temp1[46].exports }, get mode() { return temp1[48].exports }, get envirData() { return temp1[52].exports }, get remote_kickPlayer() { return temp1[54].exports }, get myStatus() { return temp1[57].exports }, get rBio() { return temp1[62].exports }, get rGho() { return temp1[63].exports }, get modules_resultScreen() { return temp1[72].exports }, get network() { return temp1[73].exports }, get keyboardjs() { return temp1[107].exports }, get physics() { return temp1[369].exports }, get me() { return hack.getters.mode.player.gpData }, get ray() { return hack.getters.me.ray }, get velocity() { return hack.getters.me.p.velocity }, get otherPlayers() { return hack.getters.mode.otherPlayers }, }, vars: { shiftPressed: false, blacklisted: { data: [], names: [] }, get isGround() { return isGrounded() }, tpToOtherByClickIsOn: false, indexByClick: 0, mult: 1, lrSpd: 3, udSpd: 3, get currentPosX() { return Math.round(hack.getters.me.getX() * 100) / 100 }, get currentPosY() { return Math.round(hack.getters.me.getY() * 100) / 100 }, pX: 0, pY: 0, get totalSpd() { return (((this.lrSpd + this.udSpd) / 2) * this.mult) }, get currentSpdX() { return Math.round(hack.getters.me.p.velocity[0] * 100) / 100 }, get currentSpdY() { return Math.round(hack.getters.me.p.velocity[1] * 100) / 100 }, multSpdIsOn: false, modeIsOn: false, immIsOn: false, MMGIsOn: false, interTpToOtherIsOn: false, ghost1: false, ghost2: false, isPlayerDead: false, tpSpawnCounter: 0, }, suppFuncs: { getMult: () => { if (hack.vars.mult < 3) { return 1 } else if (hack.vars.mult < 4) { return 2 } }, setMult: function(e) { if (e != undefined) { hack.vars.lrSpd = hack.vars.udSpd = e return } if (hack.suppFuncs.getMult() === 1) { hack.vars.mult++ } else if (hack.suppFuncs.getMult() === 2) { hack.vars.mult += 2 } else { hack.vars.mult = 1 } }, getIndexByName: function(playerName) { const index = hack.getters.otherPlayers.findIndex(player => player?.myName === playerName) return index === -1 ? false : index }, processBlacklistData: function() { // 1. Добавляем новых игроков for (let name of hack.vars.blacklisted.names) { const index = hack.suppFuncs.getIndexByName(name); if (index) { const alreadyExists = hack.vars.blacklisted.data.some(entry => { return entry && entry[1] === name; }); if (!alreadyExists) { hack.vars.blacklisted.data.push([index, name]); } } } // 2. Удаляем устаревшие записи if (hack.vars.blacklisted.data.length) { hack.vars.blacklisted.data = hack.vars.blacklisted.data.filter(entry => { return entry && entry[1] && hack.vars.blacklisted.names.includes(entry[1]); }); } } }, functions: { getBio: function(index) { let i = hack.getters.mode.otherPlayers[index] return { get gpData() { return hack.getters.me }, get myName() { return i.myName }, get mySkin() { return i.mySkin }, get whatBro() { return i.whatBro }, get chatColor() { return i.chatColor }, get teamColor() { return i.teamColor }, } }, setBio: function(bio) { let mode = hack.getters.mode mode.setBio( bio.gpData, bio.myName, bio.mySkin, bio.whatBro, bio.chatColor, bio.teamColor ) }, prevPos: function() { hack.vars.pX = hack.getters.mode.player.gpData.getX() hack.vars.pY = hack.getters.mode.player.gpData.getY() }, tpSpawn: function() { if (hack.vars.tpSpawnCounter == 0) { this.tp(hack.vars.pX, hack.vars.pY); hack.vars.tpSpawnCounter++ return } else if (hack.vars.tpSpawnCounter == 1) { this.tp( hack.getters.mode.spawn.refP.getX(), hack.getters.mode.spawn.refP.getY() ) } hack.vars.tpSpawnCounter = 0 }, tpDoor: function() { this.prevPos() hack.vars.tpSpawnCounter = 0 this.tp( hack.getters.mode.exitGate.exitGateCounter.refP.getX(), hack.getters.mode.exitGate.exitGateCounter.refP.getY() ) }, tp: function(x, y) { hack.getters.mode.player.gpData.setX(x) hack.getters.mode.player.gpData.setY(y) }, setTpToOther: function(playerIndex) { if (!hack.vars.interTpToOtherIsOn && playerIndex !== false) { this.interTpToOther = setInterval(() => { hack.getters.me.p.position[0] = hack.getters.otherPlayers[playerIndex].gpData.p.position[0] hack.getters.me.p.position[1] = hack.getters.otherPlayers[playerIndex].gpData.p.position[1] }, 100 / 14.4) hack.vars.interTpToOtherIsOn = true } else if (playerIndex === false) { try { clearInterval(this.interTpToOther) hack.vars.interTpToOtherIsOn = false } catch { console.log('не существующий интервал') } } }, MMGEnable: function() { hack.getters.mode.makeMeGhost = function() { hack.getters.me.setAlpha(0.3) hack.getters.me.p.shapes[0].sensor = true hack.getters.me.p.gravityScale = 0 hack.getters.velocity[0] = 0 hack.getters.velocity[1] = 0 hack.getters.me.me = void 0 hack.vars.ghost2 = true hack.vars.isPlayerDead = true hack.getters.rGho.fire(hack.getters.network.gsSocket) if (hack.getters.mode.md.mobile()) { hack.getters.mode.setupTouchButtons(true) } } hack.vars.MMGIsOn = true }, MMGDisable: function() { hack.getters.mode.makeMeGhost = () => {} hack.vars.MMGIsOn = false }, immEnable: () => { hack.getters.me.me = void 0 hack.vars.immIsOn = true }, immDisable: () => { hack.getters.me.me = true hack.vars.immIsOn = false }, godModeEnable: () => { hack.vars.ghost1 = true hack.getters.me.p.collisionResponse = false hack.getters.me.p.mass = 0 hack.vars.modeIsOn = true hack.getters.velocity[0] = 0 hack.getters.velocity[1] = 0 }, godModeDisable: () => { hack.vars.ghost1 = false hack.getters.me.p.collisionResponse = true hack.getters.me.p.mass = 1 hack.vars.modeIsOn = false hack.getters.velocity[0] = 0 hack.getters.velocity[1] = 0 }, multSpdEnable: () => { hack.vars.lrSpd *= hack.vars.mult hack.vars.udSpd *= hack.vars.mult hack.vars.multSpdIsOn = true }, multSpdDisable: () => { hack.vars.lrSpd /= hack.vars.mult hack.vars.udSpd /= hack.vars.mult hack.vars.multSpdIsOn = false } }, logFuncs: { logModeIsOn: () => { console.log('modeIsOn:', hack.vars.modeIsOn) }, logImmIsOn: () => { console.log('immIsOn:', hack.vars.immIsOn) }, logSpd: () => { console.log('speed:', ((hack.vars.lrSpd + hack.vars.udSpd) / 2) * hack.vars.mult) }, logMMGIsOn: () => { console.log('MMGIsOn:', hack.vars.MMGIsOn) } } } window.hack = hack /* *********************** * * * infoPanel * * * *********************** */ /* Добавляем общий стиль для всех элементов */ const style = document.createElement('style'); style.innerHTML = ` /* Глобальные стили для фиксированных контейнеров */ .fixed-container { position: fixed; z-index: 1000; font-family: Arial, sans-serif; color: #fff; } /* Фон с альфа-прозрачностью */ .transparent-bg { background-color: rgba(0, 0, 0, 0.7); } /* Контейнер без фона */ .no-bg { background-color: transparent; } /* Стили для контейнера кнопок */ .button-container { display: flex; justify-content: flex-start; gap: 10px; top: 0; left: 0; padding: 4px; } .tab-button { font-size: 0.6em; cursor: pointer; } /* Стили для блока данных */ .data-container { top: 25px; left: -12px; padding: 5px; margin-left: 10px; text-align: left; font-size: 14px; } .tab-content { display: none; } .tab-content.active { display: block; } /* Общие стили для форм */ .identity-container, .cosmetics-container { display: flex; flex-direction: column; gap: 10px; margin-left: 1px; } .form-row { display: flex; align-items: center; } .form-row label { width: 100px; text-align: left; margin: 0; } .form-row input { width: 142px; } /* Стиль для кнопок */ .btn { padding: 5px 10px; cursor: pointer; } /* Панель управления */ .control-panel { display: flex; flex-direction: column; gap: 10px; margin-left: 1px; bottom: 0; left: 0; font-size: 14px; background-color: transparent; color: rgba(255, 255, 255, 1); } .control-panel button { padding: 2px 10px; cursor: pointer; } `; document.head.appendChild(style); /* Вставляем HTML вкладок */ document.body.insertAdjacentHTML("beforeend", ` <div id="buttonContainer" class="fixed-container button-container no-bg"> <button class="tab-button active" onclick="openTab('info', event)">Info</button> <button class="tab-button" onclick="openTab('cosmetics', event)">Cosmetics</button> <button class="tab-button" onclick="openTab('blacklist', event)">Blacklist</button> <button class="tab-button" onclick="openTab('identity', event)">Identity</button> </div> <div id="someData" class="fixed-container data-container transparent-bg"> <div id="infoTab" class="tab-content active"></div> <div id="cosmeticsTab" class="tab-content"></div> <div id="blacklistTab" class="tab-content">45345</div> <div id="identityTab" class="tab-content"></div> </div> `); // Обновляем содержимое вкладки blacklistTab const blacklistTab = document.getElementById("blacklistTab"); blacklistTab.innerHTML = ` <div class="cosmetics-container no-bg" style="padding: 5px;"> <div class="form-row" style="display: flex; align-items: center; gap: 10px; width: max-content;"> <label for="blacklistInput" style="min-width: 70px; text-align: left;">Никнейм</label> <input type="text" id="blacklistInput" style="width: 150px;"> <button class="btn">Добавить</button> </div> <div id="blacklistContainer" style="margin-top: 10px; max-height: 175px; overflow-y: auto; font-size: 12px;"> <!-- Здесь будут отображаться добавленные ники --> </div> </div> `; /* Обработка вкладки Identity */ const identityTab = document.getElementById("identityTab"); identityTab.innerHTML = ` <div class="identity-container no-bg" style="position: relative;"> <div class="form-row"> <label for="nicknameInput">Никнейм</label> <input type="text" id="nicknameInput" value=""> </div> <div class="form-row"> <label for="skinInput">Скин</label> <input type="text" id="skinInput" value=""> </div> <div class="form-row"> <label for="vipInput">Вип статус</label> <input type="text" id="vipInput" value=""> </div> <div class="form-row"> <label for="chatColorInput">Цв. чата</label> <input type="text" id="chatColorInput" value=""> </div> <div class="form-row"> <label for="teamColorInput">Цв. команды</label> <input type="text" id="teamColorInput" value=""> </div> <div style="text-align: center; margin-top: 10px;"> <button class="btn" onclick=" hack.getters.mode.setMyBio(); let skinValue = document.getElementById('skinInput').value; if (!skinValue) { skinValue = hack.getters.mode.mySkin; } let chatColorValue = document.getElementById('chatColorInput').value; if (!chatColorValue) { chatColorValue = hack.getters.mode.chatColor; } let vipValue = document.getElementById('vipInput').value; if (!vipValue) { vipValue = undefined; } hack.getters.mode.setBio( hack.getters.mode.player.gpData, document.getElementById('nicknameInput').value, skinValue, vipValue, chatColorValue, document.getElementById('teamColorInput').value )">Применить</button> </div> <div style="position: absolute; bottom: 0; left: 0;"> <button class="btn" onclick=" hack.getters.mode.setMyBio(); const bio = hack.functions.getBio(hack.vars.indexByClick); if (bio) { document.getElementById('nicknameInput').value = bio.myName || ''; document.getElementById('skinInput').value = bio.mySkin || ''; document.getElementById('vipInput').value = bio.whatBro || ''; document.getElementById('chatColorInput').value = bio.chatColor || ''; document.getElementById('teamColorInput').value = bio.teamColor || ''; } ">©</button> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { document.getElementById('nicknameInput').value = hack.getters.mode.myName || ""; document.getElementById('skinInput').value = hack.getters.mode.mySkin || ""; document.getElementById('vipInput').value = hack.getters.mode.whatBro || ""; document.getElementById('chatColorInput').value = hack.getters.mode.chatColor || ""; document.getElementById('teamColorInput').value = hack.getters.mode.teamColor || ""; }); </script> `; /* Обработка вкладки Cosmetics */ const cosmeticsTab = document.getElementById("cosmeticsTab"); cosmeticsTab.innerHTML = ` <div class="cosmetics-container no-bg"> <div class="form-row" style="justify-content: flex-end;"> <label for="bgColorInput" style="width: 70px; text-align: left; margin-right: 10px;">Фон:</label> <input type="color" id="bgColorInput" style="width: 150px;" value="#000000"> </div> <div class="form-row" style="justify-content: flex-end;"> <label for="textColorInput" style="width: 70px; text-align: left; margin-right: 10px;">Текст:</label> <input type="color" id="textColorInput" style="width: 150px;" value="#ffffff"> </div> <div class="form-row" style="justify-content: flex-end;"> <label for="bgOpacityInput" style="width: 70px; text-align: left; margin-right: 10px;">Прозрачн. фона:</label> <input type="number" id="bgOpacityInput" min="0" max="1" step="0.1" value="0.7" style="width: 142px;"> </div> <div class="form-row" style="justify-content: flex-end;"> <label for="textOutlineCheckbox" style="width: 70px; text-align: left; margin-right: 10px;">Обводка:</label> <input type="checkbox" id="textOutlineCheckbox"> </div> <div style="text-align: center; margin-top: 10px;"> <button class="btn" onclick="applyCosmetics()">Применить</button> </div> </div> `; /* Обновление данных в вкладке Info */ const infoTab = document.getElementById("infoTab"); const updateData = () => { const o = []; // POSITION INFO o.push("<b>POSITION INFO</b>"); o.push(` current Pos X: ${hack.vars.currentPosX}`); o.push(` current Pos Y: ${hack.vars.currentPosY}`); // SPEED INFO o.push("<br><b>SPEED INFO</b>"); o.push(` total Spd: ${hack.vars.totalSpd}`); o.push(` current Spd X: ${hack.vars.currentSpdX}`); o.push(` current Spd Y: ${hack.vars.currentSpdY}`); // SCRIPT VALUES o.push("<br><b>SCRIPT VALUES</b>"); o.push(` mult Spd Is On: ${hack.vars.multSpdIsOn}`); o.push(` mode Is On: ${hack.vars.modeIsOn}`); o.push(` imm Is On: ${hack.vars.immIsOn}`); o.push(` MMG Is On: ${hack.vars.MMGIsOn}`); o.push(` inter Tp To Other Is On: ${hack.vars.interTpToOtherIsOn}`); o.push(` is Player Dead: ${hack.vars.isPlayerDead}`); // MOVEMENT VALUES o.push("<br><b>MOVEMENT VALUES</b>"); o.push(` new Movement Is On: ${hack.playerMoveData.newMovementIsOn}`); infoTab.innerHTML = o.join('<br>'); }; setInterval(updateData, 100 / 6); /* Вставляем панель управления */ document.body.insertAdjacentHTML("beforebegin", ` <div id="controlPanel" style="display: flex; flex-direction: column; gap: 5px; position: fixed; bottom: 0px; left: 0px; height: auto; text-align: left; font-size: 14px; background-color: rgba(0, 0, 0, 0.7); color: rgba(255, 255, 255, 1); font-family: Arial, sans-serif; padding: 5px;"> <div style="display: flex; align-items: center; gap: 5px;"> <span>new movement:</span> <button id="newMoveBtn" style="padding: 0 6px; height: 18px; line-height: 18px; display: flex; align-items: center; justify-content: center; box-sizing: border-box;">${hack.playerMoveData.newMovementIsOn}</button> </div> <div style="display: flex; align-items: center; gap: 5px;"> <span>poison immunity:</span> <button id="immBtn" style="padding: 0 6px; height: 18px; line-height: 18px; display: flex; align-items: center; justify-content: center; box-sizing: border-box;">${hack.vars.immIsOn}</button> </div> <div style="display: flex; align-items: center; gap: 5px;"> <span>death immunity:</span> <button id="MMGBtn" style="padding: 0 6px; height: 18px; line-height: 18px; display: flex; align-items: center; justify-content: center; box-sizing: border-box;">${!hack.vars.MMGIsOn}</button> </div> </div> `); const updateButtonStates = () => { const newMoveBtn = document.getElementById("newMoveBtn"); const immBtn = document.getElementById("immBtn"); const MMGBtn = document.getElementById("MMGBtn"); if (newMoveBtn) newMoveBtn.innerText = hack.playerMoveData.newMovementIsOn; if (immBtn) immBtn.innerText = hack.vars.immIsOn; if (MMGBtn) MMGBtn.innerText = !hack.vars.MMGIsOn; } document.getElementById("newMoveBtn").addEventListener("click", () => { if (!hack.playerMoveData.newMovementIsOn) { newMovement(); } else { oldMovement(); } updateButtonStates(); }); document.getElementById("immBtn").addEventListener("click", () => { if (hack.vars.immIsOn) { hack.functions.immDisable(); } else { hack.functions.immEnable(); } updateButtonStates(); }); document.getElementById("MMGBtn").addEventListener("click", () => { if (hack.vars.MMGIsOn) { hack.functions.MMGDisable(); } else { hack.functions.MMGEnable(); } updateButtonStates(); }); updateButtonStates(); setInterval(updateButtonStates, 100 / 6); hack.functions.MMGDisable() function scrActivate() { hack.getters.mode.createKickGui = function(e) { e.myIndex = e.myIndex; e.interactive = true; e.buttonMode = true; let flag = false; function t() { if (hack.vars.shiftPressed) { let name = this.ref.refP.name.getText(); if (!hack.vars.blacklisted.names.includes(name)) { hack.vars.blacklisted.names.push(name); } window.updateBlacklistList(); flag = true; } if (flag) { flag = false; return; } let kickIndex = hack.getters.mode.kickIndex = this.ref.refP.g.myIndex; hack.getters.guiComponentsKick.showLoading(this.ref.refP.name.getText(), this.ref.refP.g.myIndex); hack.vars.indexByClick = kickIndex; } e.on("click", t).on("touchstart", t); } setTimeout(function() { window.loadCosmetics(); }, 0); hack.getters.client.loopFunctions[3].timeOut = 0 hack.getters.client.loopFunctions[2].timeOut = 100 / 6 oldMovement() Object.defineProperty(hack.vars, 'mult', { enumerable: false }) Object.defineProperty(hack.vars, 'lrSpd', { enumerable: false }) Object.defineProperty(hack.vars, 'udSpd', { enumerable: false }) Object.defineProperty(hack.vars, 'ghost2', { enumerable: false }) Object.defineProperty(hack.vars, 'pX', { enumerable: false }) Object.defineProperty(hack.vars, 'pY', { enumerable: false }) Object.defineProperty(hack.vars, 'tpSpawnCounter', { enumerable: false }) Object.defineProperty(hack.vars, 'multSpdIsOn', { enumerable: false }) Object.defineProperty(hack.vars, 'ghost1', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'lastDashTime', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'lastHorizontalDirection', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'lastDashTime', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'dashDuration', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'dashEndTime', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'newMovementIsOn', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'division', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'meYplus', { enumerable: false }) document.getElementById('timer').style.background = 'rgb(0, 0, 0)' document.getElementById('timer').style.color = 'rgb(255, 255, 255)' document.getElementById('mapCredits').style.background = 'rgb(0, 0, 0)' document.getElementById('mapCredits').style.color = 'rgb(255, 255, 255)' document.getElementById('leaderboard').style.background = 'rgb(0, 0, 0)' document.getElementById('timer').style.opacity = 0.7 document.getElementById('leaderboard').style.opacity = 0.7 document.getElementById('mapCredits').style.opacity = 0.7 } hack.bindKeys() hack.getters.mode.processOthersPlayerData = function() { hack.suppFuncs.processBlacklistData() let flag = false if (0 != hack.getters.mode.othersPlayerNetworkData.length) { var currentPlayersIndex = []; for (var x = 0; x < hack.getters.mode.othersPlayerNetworkData.length; x++) { for (var y = 0; y < hack.getters.mode.othersPlayerNetworkData[x].length; y++) { var data = hack.getters.mode.othersPlayerNetworkData[x][y]; var index = data[0]; var xVelo = data[1]; var yVelo = data[2]; var xAxis = data[3]; var yAxis = data[4]; for (let iterator = 0; iterator < hack.vars.blacklisted.data.length; iterator++) { if (hack.vars.blacklisted.data[iterator].includes(index)) { flag = true; } } if (flag) { flag = false; continue } if (typeof hack.getters.mode.otherPlayers[index] == "undefined" || hack.getters.mode.otherPlayers[index] == null) { // ИСПРАВЛЕННОЕ УСЛОВИЕ hack.getters.mode.oldPlayersIndex[hack.getters.mode.oldPlayersIndex.length] = index; var person = new Object(); person.myName = ""; person.mySkin = 0, person.reset = Infinity; // changed from 1 / 0 to Infinity for readability, same value person.gpData = hack.getters.mode.createPlayer(); person.gpData.g.myIndex = index; hack.getters.mode.otherPlayers[index] = person; hack.getters.mode.enableEmit && hack.getters.rBio.fire(hack.getters.network.gsSocket, index); hack.getters.gp.gWorld.removeChild(person.gpData.g); hack.getters.gp.gWorld.mid.addChild(person.gpData.g) } if (10 < hack.getters.mode.otherPlayers[index].reset) { hack.getters.mode.otherPlayers[index].gpData.setX(xAxis); hack.getters.mode.otherPlayers[index].gpData.setY(yAxis); hack.getters.mode.otherPlayers[index].reset = 0 } hack.getters.mode.otherPlayers[index].reset++; hack.getters.mode.otherPlayers[index].gpData.p.velocity[0] = xVelo; hack.getters.mode.otherPlayers[index].gpData.p.velocity[1] = yVelo; currentPlayersIndex[currentPlayersIndex.length] = index; } } var result = hack.getters.gf.difference(hack.getters.mode.oldPlayersIndex, currentPlayersIndex); for (var i = 0; i < result.length; i++) { var person = hack.getters.mode.otherPlayers[result[i]]; if (null != person) { hack.getters.gp.gWorld.children[1].removeChild(person.gpData.g); hack.getters.gp.pWorld.removeBody(person.gpData.p); hack.getters.gp.list[hack.getters.gp.list.indexOf(person.gpData)] = null; hack.getters.gp.deleteCounter++; hack.getters.mode.otherPlayers[result[i]] = null; } } hack.getters.mode.oldPlayersIndex = currentPlayersIndex; hack.getters.mode.othersPlayerNetworkData = []; } } hack.getters.mode.onChangeMap = function(e) { try { scrActivate() scrActivate = null } catch {} let mode = hack.getters.mode; let gp = hack.getters.gp; let resultScreen = hack.getters.modules_resultScreen; let client = hack.getters.client clearInterval(mode.startTimeId); clearTimeout(mode.smallStepTimeId); resultScreen.hideResultScreen(); e = e; gp.unload(gp); gp.list = gp.load(e, gp); mode.syncArr = []; mode.ghost = !1; mode.tweenObjects = []; mode.defineBehaviours(gp.list, mode.syncArr, gp); mode.md.mobile() && mode.setupTouchButtons(!1); mode.setMyBio(); mode.setBio(mode.player.gpData, mode.myName, mode.mySkin, mode.whatBro, mode.chatColor, mode.teamColor); for (var t, n = 0; n < mode.otherPlayers.length; n++) void 0 !== mode.otherPlayers[n] && null != mode.otherPlayers[n] && (t = mode.otherPlayers[n].gpData.g.myIndex, mode.otherPlayers[n].gpData = mode.createPlayer(), mode.otherPlayers[n].gpData.g.myIndex = t, mode.otherPlayers[n].gpData.p.gravityScale = 0, gp.gWorld.removeChild(mode.otherPlayers[n].gpData.g), gp.gWorld.mid.addChild(mode.otherPlayers[n].gpData.g), mode.setBio(mode.otherPlayers[n].gpData, mode.otherPlayers[n].myName, mode.otherPlayers[n].mySkin, mode.otherPlayers[n].whatBro, mode.otherPlayers[n].chatColor, mode.otherPlayers[n].teamColor)); void 0 === mode.firstTimeMapChange && (mode.firstTimeMapChange = !0); mode.smallStepTimeId = setTimeout(function() { document.getElementById("startTime").style.display = "inherit"; document.getElementById("startTime").innerHTML = mode.startTime; client.runPhysics = !1; mode.startTimeId = setInterval(function() { mode.startTime++; document.getElementById("startTime").innerHTML = mode.startTime; 3 == mode.startTime && (mode.startTime = 0, client.runPhysics = !0, clearInterval(mode.startTimeId), document.getElementById("startTime").style.display = "none"); }, 1e3); }, 0); hack.getters.me.me = true if (hack.vars.modeIsOn) { hack.functions.godModeEnable() } else { hack.functions.godModeDisable() } if (hack.vars.immIsOn) { hack.functions.immEnable() } else { hack.functions.immDisable() } hack.vars.ghost2 = false hack.vars.isPlayerDead = false const keyboardjs = hack.getters.keyboardjs for (let i in keyboardjs._listeners) { if (i != 0) { delete keyboardjs._listeners[i] } } document.addEventListener("keyup", handleKeyUp) document.addEventListener("keydown", handleKeyDown) } document.body.onkeyup = (event) => { const key = event.key switch (key) { case 'PageUp': if (!hack.vars.modeIsOn) { hack.getters.me.p.gravityScale = 1 hack.getters.me.p.collisionResponse = 1 } break; case 'PageDown': if (!hack.vars.modeIsOn) { hack.getters.me.p.collisionResponse = 1 } break; } } document.body.onkeydown = (event) => { const key = event.key; switch (key) { case 'Delete': if (!hack.vars.tpToOtherByClickIsOn) { hack.vars.tpToOtherByClickIsOn = true hack.functions.setTpToOther(hack.vars.indexByClick) } else { hack.vars.tpToOtherByClickIsOn = false hack.functions.setTpToOther(false) } break case 'PageUp': if (!hack.vars.modeIsOn) { hack.getters.me.p.gravityScale = -1 hack.getters.me.p.collisionResponse = 0 } break; case 'PageDown': if (!hack.vars.modeIsOn) { hack.getters.me.p.gravityScale = 1 hack.getters.me.p.collisionResponse = 0 } break; case 'Control': hack.getters.mode.makeMeGhost(); break; case 'F2': if (!hack.vars.modeIsOn) { hack.functions.godModeEnable(); hack.logFuncs.logModeIsOn(); hack.functions.multSpdEnable(); } else { hack.functions.godModeDisable(); hack.logFuncs.logModeIsOn(); hack.functions.multSpdDisable(); } break; case 'Home': hack.functions.tpSpawn(); break; case 'End': hack.functions.tpDoor(); break; case 'F9': if (!hack.vars.MMGIsOn) { hack.functions.MMGEnable(); hack.logFuncs.logMMGIsOn(); } else { hack.functions.MMGDisable(); hack.logFuncs.logMMGIsOn(); } break; case '`': // Backtick (`) case 'ё'.toLowerCase(): // Cyrillic Yo (часто на той же клавише, что и Backtick) if (hack.vars.modeIsOn) { hack.suppFuncs.setMult(); hack.logFuncs.logSpd(); } break; case 'Insert': case 'NumPad0': // Клавиша 0 на цифровой клавиатуре hack.functions.setTpToOther(hack.suppFuncs.getIndexByName(prompt('Введите корректный никнейм. Чтобы выйти из интервала нажмите Esc.'))); break; case 'F4': if (!hack.vars.immIsOn) { hack.functions.immEnable(); hack.logFuncs.logImmIsOn(); } else { hack.functions.immDisable(); hack.logFuncs.logImmIsOn(); } break; } }; function isGrounded() { // Кэшируем необходимые геттеры и данные const { me, ray, physics, gp } = hack.getters; const { division, meYplus } = hack.playerMoveData; const meX = me.getX(); const meY = me.getY(); const gpPWorld = gp.pWorld; const rayResult = me.ray.result; // Сброс точки попадания const rayHitPoint = ray.hitPoint = [Infinity, Infinity]; // Предварительные вычисления const verticalOffset = 50; const checkYPosition = meY + meYplus; const startYPosition = physics.yAxis(checkYPosition, 0); const endYPosition = physics.yAxis(checkYPosition + verticalOffset, 0); const leftX = meX - 15; const step = 30 / division; // Пробегаем по ряду лучей от левого до правого края игрока for (let i = 0; i <= division; i++) { const currentX = leftX + i * step; const xPos = physics.xAxis(currentX, 0); // Задаём начальную и конечную точки луча ray.from = [xPos, startYPosition]; ray.to = [xPos, endYPosition]; ray.update(); rayResult.reset(); if (gpPWorld.raycast(rayResult, ray)) { rayResult.getHitPoint(rayHitPoint, ray); const hitDistance = rayResult.getHitDistance(ray); if (rayResult.shape.ref.getCollision() && hitDistance < 0.1) { return true; } } } return false; } // Основная функция движения с улучшенной логикой дэшинга и обработкой ввода function newMovement() { // Настройки для проверки земли hack.playerMoveData.division = 120; hack.playerMoveData.meYplus = 45; // Константы для дэшинга const dashCooldown = 250; const dashDistance = 2.5; const dashSpeed = 25; const dashDuration = (dashDistance / dashSpeed) * 1000; // в мс // Вспомогательная функция для старта дэша function startDash(type, currentTime, grounded) { hack.playerMoveData.lastDashTime = currentTime; if (type === 'Down') { hack.playerMoveData.isDashingDown = true; } else if (type === 'Up') { hack.playerMoveData.isDashingUp = true; } else if (type === 'Horizontal') { hack.playerMoveData.isDashing = true; hack.playerMoveData.dashVelocity = dashSpeed * hack.playerMoveData.lastHorizontalDirection; } hack.playerMoveData.dashDuration = dashDuration; hack.playerMoveData.dashEndTime = currentTime + dashDuration; if (!grounded) { hack.playerMoveData.airDashAvailable = false; } } // Вспомогательная функция для обновления движения во время дэша function updateDash(type, currentTime) { const player = hack.getters.mode.player.gpData.p; const me = hack.getters.me.p; if (type === 'Down') { player.velocity[1] = -dashSpeed; player.velocity[0] = 0; } else if (type === 'Up') { player.velocity[1] = dashSpeed; player.velocity[0] = 0; } else if (type === 'Horizontal') { player.velocity[0] = hack.playerMoveData.dashVelocity; player.velocity[1] = 0; } // Отключаем стандартную реакцию столкновений во время дэша me.collisionResponse = false; if (currentTime >= hack.playerMoveData.dashEndTime) { if (type === 'Down') { hack.playerMoveData.isDashingDown = false; player.velocity[1] = 0; } else if (type === 'Up') { hack.playerMoveData.isDashingUp = false; player.velocity[1] = 0; } else if (type === 'Horizontal') { hack.playerMoveData.isDashing = false; player.velocity[0] = 0; } if (!hack.vars.modeIsOn) { me.collisionResponse = true; } } } // Основной цикл обновления движения hack.getters.client.loopFunctions[2].fun = function() { const currentTime = Date.now(); const grounded = isGrounded(); // Если игрок на земле – сбрасываем возможность воздушного дэша if (grounded) { hack.playerMoveData.airDashAvailable = true; } // Обновляем последнее горизонтальное направление движения if (hack.getters.mode.moveLeft) { hack.playerMoveData.lastHorizontalDirection = -1; } else if (hack.getters.mode.moveRight) { hack.playerMoveData.lastHorizontalDirection = 1; } // Если кнопка дэша нажата и прошло достаточно времени, пытаемся запустить дэш if (hack.keyBindings.isCPressed && currentTime - hack.playerMoveData.lastDashTime >= dashCooldown && (grounded || hack.playerMoveData.airDashAvailable) ) { if (hack.getters.mode.moveDown && !hack.playerMoveData.isDashingDown) { startDash('Down', currentTime, grounded); } else if (hack.getters.mode.moveUp && !hack.playerMoveData.isDashingUp) { startDash('Up', currentTime, grounded); } else if (!hack.playerMoveData.isDashing) { startDash('Horizontal', currentTime, grounded); } } // Обновление дэш-движения if (hack.playerMoveData.isDashingDown) { updateDash('Down', currentTime); return; } else if (hack.playerMoveData.isDashingUp) { updateDash('Up', currentTime); return; } else if (hack.playerMoveData.isDashing) { updateDash('Horizontal', currentTime); return; } else { // Обычное горизонтальное движение const player = hack.getters.mode.player.gpData.p; if (hack.getters.mode.moveRight) { hack.getters.mode.moveLeft = false player.velocity[0] = hack.vars.lrSpd * hack.vars.mult; } else if (hack.getters.mode.moveLeft) { hack.getters.mode.moveRight player.velocity[0] = -hack.vars.lrSpd * hack.vars.mult; } } /* // Обработка прыжка и двойного прыжка if (grounded) { hack.playerMoveData.isDoubleJumpAllowed = true; if (hack.keyBindings.isZPressed) { hack.keyBindings.isZPressed = false; hack.getters.velocity[1] = 8 * hack.getters.me.p.gravityScale; } } else if (hack.playerMoveData.isDoubleJumpAllowed && hack.keyBindings.isZPressed) { hack.keyBindings.isZPressed = false; hack.getters.velocity[1] = 8 * hack.getters.me.p.gravityScale; hack.playerMoveData.isDoubleJumpAllowed = false; } */ // Если клавиша прыжка нажата, обрабатываем её if (hack.keyBindings.isZPressed) { hack.keyBindings.isZPressed = false; if (grounded) { // Прыжок с земли: прыгаем и разрешаем двойной прыжок hack.getters.velocity[1] = 8 * hack.getters.me.p.gravityScale; hack.playerMoveData.isDoubleJumpAllowed = true; } else if (hack.playerMoveData.isDoubleJumpAllowed) { // Двойной прыжок в воздухе: прыгаем и запрещаем дальнейшие прыжки в воздухе hack.getters.velocity[1] = 8 * hack.getters.me.p.gravityScale; hack.playerMoveData.isDoubleJumpAllowed = false; } } // Если игрок на земле, всегда разрешаем двойной прыжок if (grounded) { hack.playerMoveData.isDoubleJumpAllowed = true; } // Обработка движения в режиме "призрака" if (hack.vars.ghost1 || hack.vars.ghost2) { if (hack.getters.mode.moveUp) { hack.getters.velocity[1] = hack.vars.udSpd * hack.vars.mult; } if (hack.getters.mode.moveDown) { hack.getters.velocity[1] = -hack.vars.udSpd * hack.vars.mult; } if (!hack.getters.mode.moveUp && !hack.getters.mode.moveDown) { hack.getters.velocity[1] = 0; } } }; hack.playerMoveData.newMovementIsOn = true; } function oldMovement() { hack.playerMoveData.division = 12 hack.playerMoveData.meYplus = 49 hack.getters.client.loopFunctions[2].fun = function() { const grounded = isGrounded() if (hack.getters.mode.moveRight) { hack.getters.mode.player.gpData.p.velocity[0] = hack.vars.lrSpd * hack.vars.mult } else if (hack.getters.mode.moveLeft) { hack.getters.mode.player.gpData.p.velocity[0] = -hack.vars.lrSpd * hack.vars.mult } if (grounded) { if (hack.getters.mode.moveUp) { hack.getters.velocity[1] = 8 } } if (hack.vars.ghost1 || hack.vars.ghost2) { if (hack.getters.mode.moveUp) { hack.getters.velocity[1] = hack.vars.udSpd * hack.vars.mult } if (hack.getters.mode.moveDown) { hack.getters.velocity[1] = -hack.vars.udSpd * hack.vars.mult } if (!hack.getters.mode.moveUp && !hack.getters.mode.moveDown) { hack.getters.velocity[1] = 0 } } } hack.playerMoveData.newMovementIsOn = false } addEventListener("mousewheel", e => { window.tweenObjects.map(x => { try { if (e.shiftKey) { hack.getters.mode.player.gpData.p.velocity[0] = -Math.sign(e.deltaY) * 15; } else { hack.getters.mode.player.gpData.p.velocity[1] = -Math.sign(e.deltaY) * 15; } } catch (err) { console.error(err); } }); }); window.window = this function teleportToClick(event) { event.preventDefault() const gameWidthFactor = window.innerWidth / hack.getters.mode.horizontalFOV const gameHeightFactor = window.innerHeight / (hack.getters.mode.horizontalFOV * (window.innerHeight / window.innerWidth)) const targetX = (hack.getters.me.g.x + (event.clientX - window.innerWidth / 2) / gameWidthFactor) / 100; const targetY = -(hack.getters.me.g.y - hack.getters.me.shapes[1].getHeight() / 2 + (event.clientY - window.innerHeight / 2) / gameHeightFactor) / 100 hack.getters.me.p.position[0] = targetX hack.getters.me.p.position[1] = targetY } document.addEventListener("contextmenu", teleportToClick) } let temp1 = {}; const _call = Function.prototype.call; new Promise((resolve, reject) => { Function.prototype.call = function(...args) { if (args[2]?.exports) { temp1 = args[6] Function.prototype.call = _call console.log(temp1) resolve(temp1) } return _call.apply(this, args) }; }).then((result) => { if (Object.keys(result).length > 0) { activateMain(result) } else { console.log("temp1 is empty") } }).catch((error) => { console.error("An error occurred:", error) }) } function hideAndSeekHack() { function activateMain(temp1) { const hack = { keyBindings: { isCPressed: false, cTimer: null, isZPressed: false }, playerMoveData: { lastHorizontalDirection: 1, isDashingDown: false, isDashingUp: false, lastDashTime: 0, dashDuration: 100, dashEndTime: 0, isDoubleJumpAllowed: false, airDashAvailable: true, newMovementIsOn: true }, bindKeys: function() { document.addEventListener('keydown', function(event) { if (event.key === 'Escape') { const panel = document.getElementById('someData') const panel1 = document.getElementById('controlPanel') if (panel.style.display === 'none') { panel.style.display = 'inherit' } else { panel.style.display = 'none' } if (panel1.style.display === 'none') { panel1.style.display = 'inherit' } else { panel1.style.display = 'none' } } if (event.key.toLowerCase() === 's' && event.repeat) { if (!hack.vars.modeIsOn) { hack.getters.me.p.mass = 3 } } if (event.key.toLowerCase() === 'z' && !event.repeat) { hack.keyBindings.isZPressed = true } else if (event.repeat) { hack.keyBindings.isZPressed = false } if (event.key.toLowerCase() === 'c') { hack.keyBindings.isCPressed = true if (!hack.keyBindings.cTimer) { hack.keyBindings.cTimer = setTimeout(() => { hack.keyBindings.isCPressed = false hack.keyBindings.cTimer = null }, 250) } } }) document.addEventListener('keyup', function(event) { if (event.key.toLowerCase() === 's') { if (!hack.vars.modeIsOn) { hack.getters.me.p.mass = 1 } } if (event.key.toLowerCase() === 'z') { hack.keyBindings.isZPressed = false } if (event.key.toLowerCase() === 'c') { hack.keyBindings.isCPressed = false if (hack.keyBindings.cTimer) { clearTimeout(hack.keyBindings.cTimer) hack.keyBindings.cTimer = null } } }) }, getters: { get client() { return temp1[38].exports }, get gf() { return temp1[42].exports }, get gp() { return temp1[43].exports }, get graphics() { return temp1[44].exports }, get mode() { return temp1[48].exports }, get envirData() { return temp1[53].exports }, get network() { return temp1[74].exports }, get physics() { return temp1[370].exports }, get me() { return hack.getters.mode.player.gpData }, get ray() { return hack.getters.me.ray }, get velocity() { return hack.getters.me.p.velocity }, get otherPlayers() { return hack.getters.mode.otherPlayers }, get ray() { return this.mode.player.gpData.ray }, get velocity() { return this.mode.player.gpData.p.velocity }, get otherPlayers() { return this.mode.otherPlayers }, ghost: false, get me() { return hack.getters.mode.player.gpData }, get ray() { return hack.getters.me.ray }, get velocity() { return hack.getters.me.p.velocity }, get otherPlayers() { return hack.getters.mode.otherPlayers } }, vars: { get isGround() { return isGrounded() }, mult: 1, lrSpd: 3, udSpd: 3, 'POSITION INFO ': '-----------------------', get currentPosX() { return Math.round(hack.getters.me.getX() * 100) / 100 }, get currentPosY() { return Math.round(hack.getters.me.getY() * 100) / 100 }, 'SPEED INFO ': '----------------------------', get totalSpd() { return (((this.lrSpd + this.udSpd) / 2) * this.mult) }, get currentSpdX() { return Math.round(hack.getters.me.p.velocity[0] * 100) / 100 }, get currentSpdY() { return Math.round(hack.getters.me.p.velocity[1] * 100) / 100 }, 'SCRIPT VALUES ': '----------------------', multSpdIsOn: false, modeIsOn: false, ghost1: false, isPlayerDead: false, 'MOVEMENT VALUES ': '---------------' }, suppFuncs: { getMult: () => { if (hack.vars.mult < 3) { return 1 } else if (hack.vars.mult < 4) { return 2 } }, setMult: function(e) { if (e != undefined) { hack.vars.lrSpd = hack.vars.udSpd = e return } if (hack.suppFuncs.getMult() === 1) { hack.vars.mult++ } else if (hack.suppFuncs.getMult() === 2) { hack.vars.mult += 2 } else { hack.vars.mult = 1 } }, getIndexByName: function(playerName) { const index = hack.getters.otherPlayers.findIndex(player => player?.myName === playerName) return index === -1 ? false : index } }, functions: { godModeEnable: () => { hack.vars.ghost1 = true hack.getters.me.p.collisionResponse = false hack.getters.me.p.mass = 0 hack.vars.modeIsOn = true hack.getters.velocity[0] = 0 hack.getters.velocity[1] = 0 }, godModeDisable: () => { hack.vars.ghost1 = false hack.getters.me.p.collisionResponse = true hack.getters.me.p.mass = 1 hack.vars.modeIsOn = false hack.getters.velocity[0] = 0 hack.getters.velocity[1] = 0 }, multSpdEnable: () => { hack.vars.lrSpd *= hack.vars.mult hack.vars.udSpd *= hack.vars.mult hack.vars.multSpdIsOn = true }, multSpdDisable: () => { hack.vars.lrSpd /= hack.vars.mult hack.vars.udSpd /= hack.vars.mult hack.vars.multSpdIsOn = false } }, logFuncs: { logModeIsOn: () => { console.log('modeIsOn:', hack.vars.modeIsOn) }, logSpd: () => { console.log('speed:', ((hack.vars.lrSpd + hack.vars.udSpd) / 2) * hack.vars.mult) } } } document.body.insertAdjacentHTML("beforebegin", ` <div id="someData" style="display: inherit; width: auto; position: fixed; top: 25px; left: 0px; height: auto; text-align: left; font-size: 14px; background: rgb(0, 0, 0); color: rgb(255, 255, 255); opacity: 0.7; padding: 2px 2px;"></div> `) const updateData = () => { const o = [] for (let i in hack.vars) { o.push(`${i}: ${hack.vars[i]}`) } for (let i in hack.playerMoveData) { o.push(`${i}: ${hack.playerMoveData[i]}`) } document.getElementById("someData").innerHTML = o.join('<br>') } document.body.insertAdjacentHTML("beforebegin", ` <div id="controlPanel" style="display: inherit; width: auto; position: fixed; bottom: 0px; left: 0px; height: auto; text-align: left; font-size: 14px; background: rgb(0, 0, 0); color: rgb(255, 255, 255); opacity: 0.7; padding: 2px 2px;"> <div> <span>new movement: </span> <button id="newMoveBtn" style="background: rgba(255, 255, 255, 0.7); color: black;">${hack.playerMoveData.newMovementIsOn}</button> </div> </div> `) const updateButtonStates = () => { document.getElementById("newMoveBtn").innerText = hack.playerMoveData.newMovementIsOn } document.getElementById("newMoveBtn").addEventListener("click", () => { if (!hack.playerMoveData.newMovementIsOn) { newMovement() } else { oldMovement() } updateButtonStates() }) setInterval(updateData, 100 / 6) updateButtonStates() setInterval(updateButtonStates, 100 / 6) hack.bindKeys() let scrActivate = function() { hack.getters.client.loopFunctions[2].timeOut = 100 / 6 hack.getters.client.loopFunctions[3].timeOut = 0 oldMovement() Object.defineProperty(hack.vars, 'mult', { enumerable: false }) Object.defineProperty(hack.vars, 'lrSpd', { enumerable: false }) Object.defineProperty(hack.vars, 'udSpd', { enumerable: false }) Object.defineProperty(hack.vars, 'multSpdIsOn', { enumerable: false }) Object.defineProperty(hack.vars, 'ghost1', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'lastDashTime', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'lastHorizontalDirection', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'lastDashTime', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'dashDuration', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'dashEndTime', { enumerable: false }) Object.defineProperty(hack.playerMoveData, 'newMovementIsOn', { enumerable: false }) document.getElementById('timer').style.opacity = 0.7 document.getElementById('timer').style.background = 'rgb(0, 0, 0)' document.getElementById('timer').style.color = 'rgb(255, 255, 255)' document.getElementById('seekerDistance').style.opacity = 0.7 document.getElementById('seekerDistance').style.background = 'rgb(0, 0, 0)' document.getElementById('seekerDistance').style.color = 'rgb(255, 255, 255)' document.getElementById('hidersCount').style.color = 'rgb(255, 255, 255)' document.getElementById('hidersCount').style.opacity = 0.7 } setTimeout(() => { if (hack.vars.modeIsOn) { hack.functions.godModeEnable() } }, 300) hack.getters.client.findUntilFound = function(e, t, n) { hack.getters.network.gsip = e; hack.getters.network.gsrn = t; hack.getters.network.getSID?.((sid) => { hack.getters.network.sid = sid; hack.getters.network.connectToGs?.(hack.getters.network.gsip, () => { console.log("connected to gs"); hack.getters.client.verifyIsHuman?.(() => { hack.getters.network.registerSidOnGs?.((verifyStatus) => { console.log("verified on gs server", verifyStatus); if (verifyStatus === "") { alert("You are already playing the game in another browser tab."); location.reload(); n(2); } else { hack.getters.network.joinRoom?.(hack.getters.network.gsrn, (joinStatus) => { if (joinStatus === 1) { hack.getters.client.sendPlayingInfo?.(hack.getters.client.roomId, () => { hack.getters.client.onReady?.(); n(1); scrActivate() }); } else { console.log("else"); hack.getters.network.gsSockehack?.getters.client.disconnect?.(); do { hack.getters.client.rIndex++; const currentDataCenter = hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]; if (!currentDataCenter?.[hack.getters.client.rIndex]) { hack.getters.client.dcIndex++; hack.getters.client.rIndex = 0; if (!hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]) { alert("It seems all servers are full. Please refresh your page and try again."); location.reload(); return; } } } while (hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]?.[hack.getters.client.rIndex]?.[2] !== hack.getters.client.modeInfo.mp); const newGsip = hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]?.[hack.getters.client.rIndex]?.[1]; const newGsrn = hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]?.[hack.getters.client.rIndex]?.[3]; hack.getters.client.roomId = hack.getters.network.dataCenters?.[hack.getters.client.dcIndex]?.[hack.getters.client.rIndex]?.[4]; hack.getters.client.findUntilFound(newGsip, newGsrn, n); } }); } }); }); }); }); }; document.body.onkeydown = (event) => { const key = event.key; switch (key) { case 'PageUp': if (!hack.vars.modeIsOn) { hack.getters.me.p.gravityScale = -1 hack.getters.me.p.collisionResponse = 0 } break; case 'PageDown': if (!hack.vars.modeIsOn) { hack.getters.me.p.gravityScale = 1 hack.getters.me.p.collisionResponse = 0 } break; case 'F2': if (!hack.vars.modeIsOn) { hack.functions.godModeEnable(); hack.logFuncs.logModeIsOn(); hack.functions.multSpdEnable(); } else { hack.functions.godModeDisable(); hack.logFuncs.logModeIsOn(); hack.functions.multSpdDisable(); } break; case '`': // Backtick (`) case 'ё'.toLowerCase(): // Cyrillic Yo (часто на той же клавише, что и Backtick) if (hack.vars.modeIsOn) { hack.suppFuncs.setMult(); hack.logFuncs.logSpd(); } break; } }; function isGrounded() { const meX = hack.getters.me.getX() const meY = hack.getters.me.getY() const ray = hack.getters.ray const physics = hack.getters.physics const gpPWorld = hack.getters.gp.pWorld const rayResult = hack.getters.me.ray.result const rayHitPoint = (hack.getters.ray.hitPoint = [Infinity, Infinity]) const verticalOffset = 50 const checkYPosition = meY + 45 for (let i = 0; i < 121; i++) { const o = meX - 15 + i * (30 / 120) const s = checkYPosition const u = s + verticalOffset ray.from = [physics.xAxis(o, 0), physics.yAxis(s, 0)] ray.to = [physics.xAxis(o, 0), physics.yAxis(u, 0)] ray.update() rayResult.reset() if (gpPWorld.raycast(rayResult, ray)) { rayResult.getHitPoint(rayHitPoint, ray) const hitDistance = rayResult.getHitDistance(ray) if (rayResult.shape.ref.getCollision() && hitDistance < 0.1) { return true } } } return false } function newMovement() { hack.getters.client.loopFunctions[2].fun = function() { const currentTime = Date.now() const dashCooldown = 250 const dashDistance = 2.5 const dashSpeed = 25 const grounded = isGrounded() if (grounded) { hack.playerMoveData.airDashAvailable = true } if (hack.getters.mode.moveLeft) { hack.playerMoveData.lastHorizontalDirection = -1 } else if (hack.getters.mode.moveRight) { hack.playerMoveData.lastHorizontalDirection = 1 } if ( hack.keyBindings.isCPressed && hack.getters.mode.moveDown && currentTime - hack.playerMoveData.lastDashTime >= dashCooldown && !hack.playerMoveData.isDashingDown && (grounded || (!grounded && hack.playerMoveData.airDashAvailable)) ) { hack.playerMoveData.lastDashTime = currentTime hack.playerMoveData.isDashingDown = true hack.playerMoveData.dashDuration = (dashDistance / dashSpeed) * 1000 hack.playerMoveData.dashEndTime = currentTime + hack.playerMoveData.dashDuration if (!grounded) { hack.playerMoveData.airDashAvailable = false } } if ( hack.keyBindings.isCPressed && hack.getters.mode.moveUp && currentTime - hack.playerMoveData.lastDashTime >= dashCooldown && !hack.playerMoveData.isDashingUp && (grounded || (!grounded && hack.playerMoveData.airDashAvailable)) ) { hack.playerMoveData.lastDashTime = currentTime hack.playerMoveData.isDashingUp = true hack.playerMoveData.dashDuration = (dashDistance / dashSpeed) * 1000 hack.playerMoveData.dashEndTime = currentTime + hack.playerMoveData.dashDuration if (!grounded) { hack.playerMoveData.airDashAvailable = false } } if ( hack.keyBindings.isCPressed && currentTime - hack.playerMoveData.lastDashTime >= dashCooldown && !hack.playerMoveData.isDashing && (grounded || (!grounded && hack.playerMoveData.airDashAvailable)) ) { hack.playerMoveData.lastDashTime = currentTime hack.playerMoveData.isDashing = true hack.playerMoveData.dashVelocity = dashSpeed * hack.playerMoveData.lastHorizontalDirection hack.playerMoveData.dashDuration = (dashDistance / dashSpeed) * 1000 hack.playerMoveData.dashEndTime = currentTime + hack.playerMoveData.dashDuration if (!grounded) { hack.playerMoveData.airDashAvailable = false } } if (hack.playerMoveData.isDashingDown) { hack.getters.mode.player.gpData.p.velocity[1] = -dashSpeed hack.getters.mode.player.gpData.p.velocity[0] = 0 hack.getters.me.p.collisionResponse = false if (currentTime >= hack.playerMoveData.dashEndTime) { hack.playerMoveData.isDashingDown = false hack.getters.mode.player.gpData.p.velocity[1] = 0 if (!hack.vars.modeIsOn) { hack.getters.me.p.collisionResponse = true } } return } if (hack.playerMoveData.isDashingUp) { hack.getters.mode.player.gpData.p.velocity[1] = dashSpeed hack.getters.mode.player.gpData.p.velocity[0] = 0 hack.getters.me.p.collisionResponse = false if (currentTime >= hack.playerMoveData.dashEndTime) { hack.playerMoveData.isDashingUp = false hack.getters.mode.player.gpData.p.velocity[1] = 0 if (!hack.vars.modeIsOn) { hack.getters.me.p.collisionResponse = true } } return } if (hack.playerMoveData.isDashing) { hack.getters.mode.player.gpData.p.velocity[0] = hack.playerMoveData.dashVelocity hack.getters.mode.player.gpData.p.velocity[1] = 0 hack.getters.me.p.collisionResponse = false if (currentTime >= hack.playerMoveData.dashEndTime) { hack.playerMoveData.isDashing = false hack.getters.mode.player.gpData.p.velocity[0] = 0 if (!hack.vars.modeIsOn) { hack.getters.me.p.collisionResponse = true } } return } else { if (hack.getters.mode.moveRight) { hack.getters.mode.player.gpData.p.velocity[0] = hack.vars.lrSpd * hack.vars.mult } else if (hack.getters.mode.moveLeft) { hack.getters.mode.player.gpData.p.velocity[0] = -hack.vars.lrSpd * hack.vars.mult } } if (grounded) { hack.playerMoveData.isDoubleJumpAllowed = true if (hack.keyBindings.isZPressed) { hack.keyBindings.isZPressed = false hack.getters.velocity[1] = 8 * (hack.getters.me.p.gravityScale) } } else if (hack.playerMoveData.isDoubleJumpAllowed && hack.keyBindings.isZPressed) { hack.keyBindings.isZPressed = false hack.getters.velocity[1] = 8 * (hack.getters.me.p.gravityScale) hack.playerMoveData.isDoubleJumpAllowed = false } if (hack.vars.ghost1) { if (hack.getters.mode.moveUp) { hack.getters.velocity[1] = hack.vars.udSpd * hack.vars.mult } if (hack.getters.mode.moveDown) { hack.getters.velocity[1] = -hack.vars.udSpd * hack.vars.mult } if (!hack.getters.mode.moveUp && !hack.getters.mode.moveDown) { hack.getters.velocity[1] = 0 } } } hack.playerMoveData.newMovementIsOn = true } function oldMovement() { hack.getters.client.loopFunctions[2].fun = function() { const grounded = isGrounded() if (hack.getters.mode.moveRight) { hack.getters.mode.player.gpData.p.velocity[0] = hack.vars.lrSpd * hack.vars.mult } else if (hack.getters.mode.moveLeft) { hack.getters.mode.player.gpData.p.velocity[0] = -hack.vars.lrSpd * hack.vars.mult } if (grounded) { if (hack.getters.mode.moveUp) { hack.getters.velocity[1] = 8 } } if (hack.vars.ghost1) { if (hack.getters.mode.moveUp) { hack.getters.velocity[1] = hack.vars.udSpd * hack.vars.mult } if (hack.getters.mode.moveDown) { hack.getters.velocity[1] = -hack.vars.udSpd * hack.vars.mult } if (!hack.getters.mode.moveUp && !hack.getters.mode.moveDown) { hack.getters.velocity[1] = 0 } } } hack.playerMoveData.newMovementIsOn = false } addEventListener("mousewheel", e => { window.tweenObjects.map(x => { try { if (e.shiftKey) { hack.getters.mode.player.gpData.p.velocity[0] = -Math.sign(e.deltaY) * 15; } else { hack.getters.mode.player.gpData.p.velocity[1] = -Math.sign(e.deltaY) * 15; } } catch (err) { console.error(err); } }); }) } let temp1 = {}; const _call = Function.prototype.call; new Promise((resolve, reject) => { Function.prototype.call = function(...args) { if (args[2]?.exports) { temp1 = args[6] Function.prototype.call = _call console.log(temp1) resolve(temp1) } return _call.apply(this, args) }; }).then((result) => { if (Object.keys(result).length > 0) { activateMain(result) } else { console.log("temp1 is empty") } }).catch((error) => { console.error("An error occurred:", error) }) } if (sandboxURL.includes(window.location.href)) { sandboxHack(); } else if (twoPlayerURL.includes(window.location.href)) { twoPlayerHack(); } else if (hideAndSeekURL.includes(window.location.href)) { hideAndSeekHack(); }