Sorry for the bad controls. W - down, A - right, S- up, D - left. It just happened that way, but at least the script works:)
// ==UserScript==
// @name Jagar FreeCam
// @namespace Violentmonkey Scripts
// @version 0.1
// @description Sorry for the bad controls. W - down, A - right, S- up, D - left. It just happened that way, but at least the script works:)
// @author Drik
// @match https://jagar.io/*
// @grant none
// @license MIT
// ==/UserScript==
(function () {
'use strict';
let freeCamEnabled = false;
let cameraTarget = null;
let originalPosition = { x: 0, y: 0 };
let keysPressed = {};
const speed = 10;
const statusIndicator = document.createElement('div');
statusIndicator.style.position = 'absolute';
statusIndicator.style.bottom = '10px';
statusIndicator.style.left = '10px';
statusIndicator.style.background = 'rgba(0,0,0,0.7)';
statusIndicator.style.color = '#fff';
statusIndicator.style.padding = '6px 10px';
statusIndicator.style.fontFamily = 'monospace';
statusIndicator.style.fontSize = '14px';
statusIndicator.style.zIndex = '9999';
statusIndicator.style.borderRadius = '8px';
statusIndicator.textContent = 'FreeCam: OFF';
document.body.appendChild(statusIndicator);
function updateStatus() {
statusIndicator.textContent = `FreeCam: ${freeCamEnabled ? 'ON' : 'OFF'}`;
}
function toggleFreeCam() {
freeCamEnabled = !freeCamEnabled;
updateStatus();
if (cameraTarget?.position) {
if (freeCamEnabled) {
originalPosition.x = cameraTarget.position.x;
originalPosition.y = cameraTarget.position.y;
} else {
cameraTarget.position.x = originalPosition.x;
cameraTarget.position.y = originalPosition.y;
}
}
}
window.addEventListener('keydown', (e) => {
if (e.code === 'F4') {
e.preventDefault();
toggleFreeCam();
} else {
const key = e.key.toLowerCase();
if (freeCamEnabled) {
if (['w', 'ц'].includes(key)) keysPressed['up'] = true;
if (['a', 'ф'].includes(key)) keysPressed['left'] = true;
if (['s', 'ы'].includes(key)) keysPressed['down'] = true;
if (['d', 'в'].includes(key)) keysPressed['right'] = true;
}
}
});
window.addEventListener('keyup', (e) => {
const key = e.key.toLowerCase();
if (['w', 'ц'].includes(key)) keysPressed['up'] = false;
if (['a', 'ф'].includes(key)) keysPressed['left'] = false;
if (['s', 'ы'].includes(key)) keysPressed['down'] = false;
if (['d', 'в'].includes(key)) keysPressed['right'] = false;
});
function moveCamera() {
if (freeCamEnabled && cameraTarget?.position) {
if (keysPressed['up']) cameraTarget.position.y -= speed;
if (keysPressed['down']) cameraTarget.position.y += speed;
if (keysPressed['left']) cameraTarget.position.x -= speed;
if (keysPressed['right']) cameraTarget.position.x += speed;
}
requestAnimationFrame(moveCamera);
}
const initInterval = setInterval(() => {
if (window.mouseObject?.parent?.position) {
cameraTarget = window.mouseObject.parent;
clearInterval(initInterval);
moveCamera();
}
}, 500);
})();