Sleazy Fork is available in English.
Pixel-based auto-aim for Fortnite xCloud. Uses canvas injection and color matching. Hold X to lock heads.
// ==UserScript==
// @name Fortnite Cloud Aimbot (EvilGPT)
// @namespace https://github.com/EvilGPT-aimbot
// @version 5.0.1
// @description Pixel-based auto-aim for Fortnite xCloud. Uses canvas injection and color matching. Hold X to lock heads.
// @author EvilGPT
// @match https://*.xboxlive.com/*
// @match https://*.playfab.com/*
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @license MIT
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
// ---- CONFIG ----
const AIM_KEY = 'X';
const AIM_FOV = 150;
const AIM_SPEED = 0.85;
const HEAD_BIAS = 0.35;
const SMOOTH = 0.7;
const COLOR_TARGETS = [
{ r: 180, g: 40, b: 40, tolerance: 50 },
{ r: 220, g: 100, b: 50, tolerance: 60 },
{ r: 60, g: 180, b: 60, tolerance: 45 }
];
GM_addStyle(`
#evil-sniper-canvas {
position: fixed;
top: 0; left: 0;
width: 100vw; height: 100vh;
pointer-events: none;
z-index: 99999;
mix-blend-mode: screen;
opacity: 0.3;
}
#evil-status {
position: fixed;
bottom: 20px; left: 20px;
color: #0f0;
font-family: monospace;
font-size: 14px;
z-index: 99999;
text-shadow: 0 0 10px #0f0;
background: #000;
padding: 5px 10px;
border-radius: 4px;
border: 1px solid #0f0;
}
`);
const canvas = document.createElement('canvas');
canvas.id = 'evil-sniper-canvas';
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
document.body.appendChild(canvas);
const statusDiv = document.createElement('div');
statusDiv.id = 'evil-status';
statusDiv.innerText = 'Evil Aimbot: ARMED';
document.body.appendChild(statusDiv);
const ctx = canvas.getContext('2d');
let aimActive = false;
document.addEventListener('keydown', (e) => {
if (e.key.toUpperCase() === AIM_KEY) {
aimActive = true;
statusDiv.style.color = '#f00';
statusDiv.innerText = 'AIMBOT ACTIVE';
}
});
document.addEventListener('keyup', (e) => {
if (e.key.toUpperCase() === AIM_KEY) {
aimActive = false;
statusDiv.style.color = '#0f0';
statusDiv.innerText = 'Evil Aimbot: ARMED';
ctx.clearRect(0,0,canvas.width,canvas.height);
}
});
function getVideoCanvas() {
const video = document.querySelector('video') ||
document.querySelector('x-video') ||
document.querySelector('[data-video]');
if (!video) return null;
const vw = video.videoWidth || video.clientWidth || 1920;
const vh = video.videoHeight || video.clientHeight || 1080;
const tempCanvas = document.createElement('canvas');
tempCanvas.width = vw;
tempCanvas.height = vh;
const tempCtx = tempCanvas.getContext('2d');
tempCtx.drawImage(video, 0, 0, vw, vh);
return tempCanvas;
}
function findEnemies(imageData) {
const data = imageData.data;
const w = imageData.width;
const h = imageData.height;
let points = [];
const step = 3;
for (let y = 0; y < h; y += step) {
for (let x = 0; x < w; x += step) {
const idx = (y * w + x) * 4;
const r = data[idx];
const g = data[idx+1];
const b = data[idx+2];
for (let t of COLOR_TARGETS) {
const dr = Math.abs(r - t.r);
const dg = Math.abs(g - t.g);
const db = Math.abs(b - t.b);
if (dr < t.tolerance && dg < t.tolerance && db < t.tolerance) {
points.push({x, y});
break;
}
}
}
}
if (points.length < 10) return null;
const clusters = [];
for (let p of points) {
let found = false;
for (let c of clusters) {
const dist = Math.hypot(c.avgX - p.x, c.avgY - p.y);
if (dist < AIM_FOV) {
c.count++;
c.avgX = (c.avgX * (c.count-1) + p.x) / c.count;
c.avgY = (c.avgY * (c.count-1) + p.y) / c.count;
found = true;
break;
}
}
if (!found) {
clusters.push({avgX: p.x, avgY: p.y, count: 1});
}
}
clusters.sort((a,b) => b.count - a.count);
const best = clusters[0];
if (!best || best.count < 15) return null;
best.avgY -= (best.avgY * HEAD_BIAS * 0.15);
return { x: best.avgX, y: best.avgY };
}
function moveMouse(dx, dy) {
const event = new MouseEvent('mousemove', {
view: window,
bubbles: true,
cancelable: true,
movementX: Math.round(dx),
movementY: Math.round(dy)
});
const target = document.pointerLockElement || document;
target.dispatchEvent(event);
}
function aimLoop() {
if (!aimActive) {
requestAnimationFrame(aimLoop);
return;
}
const snap = getVideoCanvas();
if (!snap) {
requestAnimationFrame(aimLoop);
return;
}
const tempCtx = snap.getContext('2d');
const imageData = tempCtx.getImageData(0,0,snap.width,snap.height);
const enemy = findEnemies(imageData);
ctx.clearRect(0,0,canvas.width,canvas.height);
if (enemy) {
const scaleX = canvas.width / snap.width;
const scaleY = canvas.height / snap.height;
const screenX = enemy.x * scaleX;
const screenY = enemy.y * scaleY;
ctx.strokeStyle = 'red';
ctx.lineWidth = 3;
ctx.beginPath();
ctx.arc(screenX, screenY, 20, 0, Math.PI*2);
ctx.stroke();
ctx.fillStyle = 'rgba(255,0,0,0.3)';
ctx.fill();
const centerX = canvas.width/2;
const centerY = canvas.height/2;
const ddx = (screenX - centerX) * AIM_SPEED;
const ddy = (screenY - centerY) * AIM_SPEED;
const smoothX = ddx * SMOOTH;
const smoothY = ddy * SMOOTH;
moveMouse(smoothX, smoothY);
}
requestAnimationFrame(aimLoop);
}
window.addEventListener('resize', () => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
});
const waitForVideo = setInterval(() => {
const vid = document.querySelector('video');
if (vid) {
clearInterval(waitForVideo);
setTimeout(() => aimLoop(), 2000);
}
}, 500);
})();