blackhack

Cheat for brofist.io

ของเมื่อวันที่ 05-12-2024 ดู เวอร์ชันล่าสุด

คุณจะต้องติดตั้งส่วนขยาย เช่น Tampermonkey, Greasemonkey หรือ Violentmonkey เพื่อติดตั้งสคริปต์นี้

คุณจะต้องติดตั้งส่วนขยาย เช่น Tampermonkey หรือ Violentmonkey เพื่อติดตั้งสคริปต์นี้

คุณจะต้องติดตั้งส่วนขยาย เช่น Tampermonkey หรือ Violentmonkey เพื่อติดตั้งสคริปต์นี้

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name           blackhack
// @version        1.13.16
// @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          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
// @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 */

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 (window.location.href === 'https://brofist.io/') {
    return "Зайдите в любой режим";
  } else if (window.location.href === 'https://brofist.io/modes/twoPlayer/c/index.html') {
    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>
Информация об игроке, скриптовых переменных и т.п. в левой верхней панели<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: 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[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) {
      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 })
  }

  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 keyCode = event.keyCode
    switch (keyCode) {
      case 17:
        hack.getters.mode.makeMeGhost()
        break
      case 113:
        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 192:
      case 190:
        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) {
  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', 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[52].exports },
      get rGho() { return temp1[63].exports },
      get modules_resultScreen() { return temp1[72].exports },
      get network() { return temp1[73].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: {
      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},
      pX: 0,
      pY: 0,
	  '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,
      immIsOn: false,
      MMGIsOn: false,
      interTpToOtherIsOn: false,
      ghost1: false,
      ghost2: false,
      isPlayerDead: false,
      tpSpawnCounter: 0,
      '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: {
      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)
      }
    }
  }

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>')
}

setInterval(updateData, 100 / 6)

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>
      <span>poison immunity: </span>
      <button id="immBtn" style="background: rgba(255, 255, 255, 0.7); color: black;">${hack.vars.immIsOn}</button>
    </div>
    <div>
      <span>death immunity: </span>
      <button id="MMGBtn" style="background: rgba(255, 255, 255, 0.7); color: black;">${!hack.vars.MMGIsOn}</button>
    </div>
  </div>
`)

const updateButtonStates = () => {
  document.getElementById("newMoveBtn").innerText = hack.playerMoveData.newMovementIsOn
  document.getElementById("immBtn").innerText = hack.vars.immIsOn
  document.getElementById("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()

  let scrActivate = function() {
    hack.getters.client.loopFunctions[2].timeOut = 100 / 6
    newMovement()
    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.onChangeMap = function (e) {
    try {
      scrActivate()
      scrActivate = null
    } catch {}
    clearInterval(hack.getters.mode.startTimeId)
    clearTimeout(hack.getters.mode.smallStepTimeId)
    hack.getters.modules_resultScreen.hideResultScreen()
    hack.getters.gp.unload(hack.getters.gp)
    hack.getters.gp.list = hack.getters.gp.load(e, hack.getters.gp)
    hack.getters.mode.syncArr = []
    hack.getters.mode.ghost = false
    hack.getters.mode.tweenObjects = []
    hack.getters.mode.defineBehaviours(hack.getters.gp.list, hack.getters.mode.syncArr, hack.getters.gp)
    if (hack.getters.mode.md.mobile()) {
      hack.getters.mode.setupTouchButtons(false)
    }
    hack.getters.mode.setMyBio()
    hack.getters.mode.setBio(hack.getters.me, hack.getters.mode.myName, hack.getters.mode.mySkin, hack.getters.mode.whatBro, hack.getters.mode.chatColor, hack.getters.mode.teamColor)
    for (let n = 0; n < hack.getters.otherPlayers.length; n++) {
      if (hack.getters.otherPlayers[n]) {
        let t = hack.getters.otherPlayers[n].gpData.g.myIndex
        hack.getters.otherPlayers[n].gpData = hack.getters.mode.createPlayer()
        hack.getters.otherPlayers[n].gpData.g.myIndex = t
        hack.getters.gp.gWorld.removeChild(hack.getters.otherPlayers[n].gpData.g)
        hack.getters.gp.gWorld.mid.addChild(hack.getters.otherPlayers[n].gpData.g)
        hack.getters.mode.setBio(
          hack.getters.otherPlayers[n].gpData,
          hack.getters.otherPlayers[n].myName,
          hack.getters.otherPlayers[n].mySkin,
          hack.getters.otherPlayers[n].whatBro,
          hack.getters.otherPlayers[n].chatColor,
          hack.getters.otherPlayers[n].teamColor
        )
      }
    }
    hack.getters.mode.firstTimeMapChange = hack.getters.mode.firstTimeMapChange || true
    hack.getters.mode.smallStepTimeId = setTimeout(function () {
      document.getElementById("startTime").style.display = "inherit"
      document.getElementById("startTime").innerHTML = hack.getters.mode.startTime
      hack.getters.client.runPhysics = false
      hack.getters.mode.startTimeId = setInterval(function () {
        hack.getters.mode.startTime++
        document.getElementById("startTime").innerHTML = hack.getters.mode.startTime
        if (hack.getters.mode.startTime == 3) {
          hack.getters.mode.startTime = 0
          hack.getters.client.runPhysics = true
          clearInterval(hack.getters.mode.startTimeId)
          document.getElementById("startTime").style.display = "none"
        }
      }, 1000)
    }, 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
  }

  document.body.onkeydown = (event) => {
    const keyCode = event.keyCode
    switch (keyCode) {
      case 17:
        hack.getters.mode.makeMeGhost()
        break
      case 113:
        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 36:
        hack.functions.tpSpawn()
        break
      case 35:
        hack.functions.tpDoor()
        break
      case 120:
        if (!hack.vars.MMGIsOn) {
          hack.functions.MMGEnable()
          hack.logFuncs.logMMGIsOn()
        } else {
          hack.functions.MMGDisable()
          hack.logFuncs.logMMGIsOn()
        }
        break
      case 192:
      case 190:
        if (hack.vars.modeIsOn) {
          hack.suppFuncs.setMult()
          hack.logFuncs.logSpd()
        }
        break
      case 45:
      case 96:
        hack.functions.setTpToOther(hack.suppFuncs.getIndexByName(prompt('Введите корректный никнейм. Чтобы выйти из интервала нажмите Esc.')))
        break
      case 115:
        if (!hack.vars.immIsOn) {
          hack.functions.immEnable()
          hack.logFuncs.logImmIsOn()
        } else {
          hack.functions.immDisable()
          hack.logFuncs.logImmIsOn()
        }
        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 division = hack.playerMoveData.division
    const meYplus = hack.playerMoveData.meYplus

    const verticalOffset = 50
    const checkYPosition = meY + meYplus

    for (let i = 0; i < division+1; i++) {
        const o = meX - 15 + i * (30 / division)
        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.playerMoveData.division = 120
    hack.playerMoveData.meYplus = 45
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 || 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);
        }
    });
});
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 keyCode = event.keyCode
    switch (keyCode) {
      case 17:
        hack.getters.mode.makeMeGhost()
        break
      case 113:
        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 192:
      case 190:
        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 (window.location.href == 'https://brofist.io/modes/sandbox/c/index.html' || window.location.href == 'http://brofist.io/modes/sandbox/c/index.html') {
  sandboxHack();
} else if (window.location.href == 'https://brofist.io/modes/twoPlayer/c/index.html' || window.location.href == 'http://brofist.io/modes/twoPlayer/c/index.html') {
  twoPlayerHack();
} else if (window.location.href == 'https://brofist.io/modes/hideAndSeek/c/index.html' || window.location.href == 'http://brofist.io/modes/hideAndSeek/c/index.html') {
  hideAndSeekHack();
}