// ==UserScript==
// @name Shell Shockers Basic Aimbot + ESP: LibertyMutualV1
// @namespace
[Link]
// @license GPL-3.0
// @version 1.4.2
// @author onlypuppy7
// @description UPDATED FOR 0.50.0! Fed up of a popular script injecting
ads into your game? Need a simple script to modify or use? FOSS ESP,
Tracers and Aimbot. Hold right mouse button to aimlock.
// @match [Link]
// @grant unsafeWindows
// @run-at document-start
// @icon
[Link]
[Link]?raw=true
// @require [Link]
[Link]
// @require
[Link]
// @downloadURL [Link]
%20Shockers%20Basic%20Aimbot%20%2B%20ESP%3A
%[Link]
// @updateURL [Link]
%20Shockers%20Basic%20Aimbot%20%2B%20ESP%3A
%[Link]
// ==/UserScript==
//Usage: Hold right mouse button to aimlock
//This script is more of a template than a functioning tool. If you're
modifying this, you can add a GUI to start!
(function () {
//intercept log
const oldConsoleLog = [Link];
const log = function(...args) {
const argsNew = [
"%c%s",
`color: red; font-weight: bold; background:rgb(212, 212, 0);
padding: 2px 6px; border-radius: 5px; margin-right: 5px;`,
`LM`,
...args
];
[Link](console, argsNew);
};
//create random number betwee 1 and 999
const randomInt = (min, max) => [Link]([Link]() * (max -
min + 1)) + min;
let randomDebugKey = `debug${randomInt(9,999)}`;
log("LM started??", randomDebugKey);
// crackedshell is a script executor for chromebooks
let crackedShell = typeof $WEBSOCKET !== 'undefined';
let originalReplace = [Link];
[Link] = function() {
return [Link](this, arguments);
};
const enableESP=true; //turn to false for off
const enableTracers=true; //turn to false for off
//Credit for script injection code: AI. ChatGPT prompt: "tampermonkey
script. how can i make it grab a javascript file as it's loaded. if it detects
the javascript file, make it apply modifications to it via regex? using
XMLHttpRequest"
//Credit for idea to use XMLHttpRequest: A3+++
const useXHRMethod = false;
if (useXHRMethod) {
const originalXHROpen = [Link];
const originalXHRGetResponse =
[Link]([Link], 'response');
let shellshockjs
[Link] = function(...args) {
const url = args[1];
if (url && [Link]("js/[Link]")) {
shellshockjs = this;
};
[Link](this, args);
};
[Link]([Link], 'response', {
get: function() {
if (this===shellshockjs) {
return
applyLibertyMutual([Link](this));
};
return [Link](this);
});
};
let _apc = [Link];
let shellshock_og = null;
[Link] = function(node) {
if ([Link] === 'SCRIPT' && [Link] &&
[Link]('(()=>{')) {
shellshock_og = [Link];
log("shellshock_og set");
[Link] = applyLibertyMutual([Link]);
};
return _apc.call(this, node);
};
const proto = [Link];
const existing = [Link](proto,
"textContent");
const original = existing ||
[Link]([Link],
"textContent");
[Link](proto, "textContent", {
get: function () {
let textContent = [Link](this);
if (textContent && [Link]('(()=>{')) {
log("returning shellshock_og");
return shellshock_og;
} else {
return textContent;
};
},
set: [Link],
configurable: true,
enumerable: true
});
//Credit for event listener code: AI. ChatGPT prompt: "tampermonkey
script. how can i intercept the addEventListener function and log the type
of event, listener, and options?"
const originalAddEventListener =
[Link];
// const eventCache = [];
// unsafeWindow.__eventListenerCache = eventCache;
[Link] = function (type, listener,
options) {
try {
const target = this;
const tag = [Link] || [Link];
// [Link]({ target: tag, type, listener, options });
// log(`Listener added: [${tag}] type=${type}, listener=$
{[Link] || 'anonymous'}, options=${[Link](options)}`);
if (type == "pointermove" && [Link] == "real") {
[Link] = listener;
log("Gotcha. REAL pointermove listener detected.");
const originalListener = listener;
listener = function(event) {
[Link](event, originalListener);
};
};
} catch (e) {
[Link]('Event hook error:', e);
};
return [Link](this, type, listener, options);
};
const yawpitch = {
magicValue: 0.0025, // multiplier for mouse movement
listener: null,
movementsToApply: {
x: 0,
y: 0,
reset: () => {
[Link].x = 0;
[Link].y = 0;
},
},
listenerHook: (event, originalListener) => {
//this is a mess of many failed ideas and i could clean this, but i
feel it might be useful in the future
// const deltaX = [Link].x;
// const deltaY = [Link].y;
// const proxyEvent = new Proxy(event, {
// get(target, prop) {
// if (prop === 'movementX') return [Link] +
deltaX;
// if (prop === 'movementY') return [Link] +
deltaY;
// if (prop === 'isTrusted') return true;
// return [Link](target, prop);
// },
// });
// [Link]("YawPitch listener hook called with event:", event);
[Link](this, event);
//uncomment for thing
// const proxyEvent = {
// movementX: [Link] +
[Link].x,
// movementY: [Link] +
[Link].y,
// isTrusted: true,
// };
// // log("x:", [Link], "y:", [Link],
"mX:", [Link].x, "mY:",
[Link].y);
// [Link]();
// // [Link]("YawPitch listener hook called with event:", event);
// [Link](this, {
// movementX: [Link],
// movementY: [Link],
// isTrusted: true
// });
},
// fakeMovePointer: (force = false) => {
// if (!force && !([Link].x ||
[Link].y)) {
// return;
// };
// const event = new PointerEvent('pointermove');
// [Link](event, [Link]);
// },
movePointer: (movementX = 0, movementY = 0) => {
[Link]();
movementX = [Link](movementX);
movementY = [Link](movementY);
[Link]({ //direct call will bypass the hook
movementX,
movementY,
x: 1,
isTrusted: true,
});
[Link]();
},
getAndSetYawPitch: (viaWasm = true) => {
if (viaWasm) {
const result = unsafeWindow.get_yaw_pitch();
[Link][[Link]] = [Link];
[Link][[Link]] = [Link];
[Link][[Link]] = [Link];
return result;
} else {
return {
yaw: [Link][[Link]],
pitch: [Link][[Link]],
coords: [Link][[Link]]
};
};
},
setMouseParams: (mouseSpeed = 50, mouseInvert = 0, scopeFov =
0.9, scope = false, uniqueId = [Link][[Link]]) => {
unsafeWindow.set_mouse_params(
mouseSpeed,
mouseInvert,
scopeFov, //[Link][[Link]][[Link]].scopeFov
scope, //[Link]
uniqueId
);
},
changeByMovement: (x = 0, y = 0) => {
[Link]();
log("Changing yaw and pitch by movement:", x, y);
[Link](x, y);
// [Link].x = x;
// [Link].y = y;
// [Link]();
},
changeByYawPitchDiff: (yaw = 0, pitch = 0) => {
[Link](
yaw / [Link],
pitch / [Link]
);
},
radianAngleDiff: (angle1 = 0, angle2 = 0) => {
const fullCircle = 2 * [Link];
// Normalize angles to be within [0, 2π]
angle1 = (angle1 % fullCircle + fullCircle) % fullCircle;
angle2 = (angle2 % fullCircle + fullCircle) % fullCircle;
// Find the absolute angular difference
let diff = [Link](angle1 - angle2);
// Ensure the difference is within [0, π)
diff = [Link](diff, fullCircle - diff);
// Determine the sign of the difference correctly
if ((angle1 - angle2 + fullCircle) % fullCircle > [Link]) {
return -diff;
} else {
return diff;
};
},
setToYawPitch: (yaw = 0, pitch = 0) => {
const yawDiff = [Link]([Link][[Link]],
yaw);
const pitchDiff = [Link]([Link][[Link]],
pitch);
// log("Setting yaw and pitch:", yaw, pitch, "Diffs:", yawDiff,
pitchDiff);
[Link](yawDiff, pitchDiff);
},
getCoordsForYawPitch: (yaw = 0, pitch = 0) => { //useful for silent
const starting = [Link](false);
[Link](yaw, pitch);
const atDesired = [Link](false);
[Link]([Link], [Link]);
//for testing
// const ending = [Link](false);
// [Link]("Starting:", starting, "At desired:", atDesired,
"Ending:", ending);
return atDesired;
},
};
//VAR STUFF
let F=[];
let H={};
let functionNames=[];
let ESPArray=[];
let RMB=false;
//Credit: AI. ChatGPT prompt: "make javascript tampermonkey code
that sets a variable RMB to true while right mouse button is being held"
[Link]('mousedown', function(event) {
if ([Link] === 2) {
RMB = false;
};
}, true);
[Link]('mouseup', function(event) {
if ([Link] === 2) {
RMB = true;
};
}, true);
//scrambled... geddit????
const getScrambled=function(){return [Link]({length: 10}, () =>
[Link](97 + [Link]([Link]() * 26))).join('')}
const createAnonFunction=function(name,func){
const funcName=getScrambled();
unsafeWindow[funcName]=func;
F[name]=unsafeWindow[funcName];
functionNames[name]=funcName;
log(`Created function ${name} as ${funcName}`, func,
unsafeWindow[funcName], F[name], functionNames[name]);
};
const findKeyWithProperty = function(obj, propertyToFind) {
for (const key in obj) {
if ([Link](key)) {
if (key === propertyToFind) {
return [key];
} else if (
typeof obj[key] === 'object' &&
obj[key] !== null &&
obj[key].hasOwnProperty(propertyToFind)
){
return key;
};
};
};
// Property not found
return null;
};
const fetchTextContent = function(url) {
var xhr = new XMLHttpRequest();
[Link]('GET', url, false); // Make the request synchronous
[Link]();
if ([Link] === 200) {
return [Link];
} else {
[Link]("Error fetching text content. Status:", [Link]);
return null;
};
};
const applyLibertyMutual = function(js) {
// support crackedshell's harsh rewriting system
// more info @ [Link]
let clientKeyJS = js;
// if (crackedShell) clientKeyJS =
fetchTextContent('/js/[Link]');
// let hash =
CryptoJS.SHA256(clientKeyJS).toString([Link]);
let clientKeys;
onlineClientKeys =
fetchTextContent("[Link]
client-keys/main/libertymutual_latest.json"); //credit: me :D
// onlineClientKeys =
fetchTextContent("[Link]
client-keys/main/libertymutual_"+hash+".json"); //credit: me :D
if (onlineClientKeys == "value_undefined" || onlineClientKeys ==
null) {
let userInput = prompt('Valid keys could not be retrieved online.
Enter keys if you have them. Join the StateFarm Network Discord server to
generate keys! [Link] '');
if (userInput !== null && userInput !== '') {
alert('Aight, let\'s try this. If it is invalid, it will just crash.');
clientKeys = [Link](userInput);
} else {
alert('You did not enter anything, this is gonna crash lmao.');
};
} else {
clientKeys = [Link](onlineClientKeys);
};
H = [Link];
let injectionString="";
const modifyJS = function(find,replace) {
let oldJS = js;
js = [Link](find,replace);
if (oldJS !== js) {
log("%cReplacement successful! Injected code: "+replace,
'color: green; font-weight: bold; font-size: 0.6em; text-decoration: italic;');
} else {
log("%cReplacement failed! Attempted to replace "+find+" with:
"+replace, 'color: red; font-weight: bold; font-size: 0.6em; text-decoration:
italic;');
};
};
log('%cATTEMPTING TO START LIBERTYMUTUAL', 'color: magenta;
font-weight: bold; font-size: 1.5em; text-decoration: underline;');
const variableNameRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
for (let name in H) {
deobf = H[name];
if ([Link](deobf)) {
injectionString = `${injectionString}${name}: (() => { try
{ return ${deobf}; } catch (error) { return "value_undefined"; } })(),`;
} else {
alert("Message from the LibertyMutual Devs: WARNING! The
keys inputted contain non-variable characters! There is a possibility that
this could run code unintended by the LibertyMutual team, although
possibly there is also a mistake. Do NOT proceed with using this, and
report to the LibertyMutual developers what is printed in the console.");
log("REPORT THIS IN THE DISCORD SERVER:", clientKeys);
const crashplease = "balls";
crashplease = "balls2";
};
};
log(injectionString);
log('%cLIBERTYMUTUAL INJECTION: INJECT VAR RETRIEVAL FUNCTION
AND MAIN LOOP', 'color: yellow; font-weight: bold; font-size: 1.2em; text-
decoration: underline;');
modifyJS([Link]+'.render',`window["$
{[Link]}"]({${injectionString}},true)||$
{[Link]}.render`);
log('%cSuccess! Variable retrieval and main loop hooked.', 'color:
green; font-weight: bold;');
modifyJS(`{if(${[Link]})`,`{if(true)`);
log('%cSuccess! Cull inhibition hooked.', 'color: green; font-weight:
bold;');
modifyJS("Not playing in iframe", "LIBERTYMUTUAL ACTIVE!");
// log(js);
log(H);
return js;
};
let ss = {}; //skvll this wasnt here so it was global skvll
createAnonFunction("retrieveFunctions",function(vars) {
[Link](ss, vars);
[Link]();
});
const tracersKey = getScrambled();
const createOrUpdateTracer = (PLAYER, CROSSHAIRS) => {
const points = [
PLAYER[[Link]][[Link]].[Link](),
[Link]()
];
points[0].y += 0.4;
if (!PLAYER[tracersKey]) {
PLAYER[tracersKey] =
[Link](getScrambled(), { points, updatable:
true }, [Link]);
PLAYER[tracersKey].isPickable = false;
PLAYER[tracersKey].alwaysSelectAsActiveMesh = true;
PLAYER[tracersKey].doNotSyncBoundingInfo = true;
PLAYER[tracersKey][[Link]] = 1;
PLAYER[tracersKey].visibility = true;
} else {
[Link](undefined, {
points,
instance: PLAYER[tracersKey],
updatable: true
});
};
PLAYER[tracersKey].visibility = (PLAYER[[Link]] &&
enableTracers);
return PLAYER[tracersKey];
};
createAnonFunction("LIBERTYMUTUAL",function() {
// globalSS = ss;
[Link](PLAYER=>{
if ([Link]("ws")) {
[Link] = PLAYER
};
});
[Link] = findKeyWithProperty([Link],[Link]);
let TARGETED;
let CROSSHAIRS=new BABYLON.Vector3();
[Link]([Link][[Link]][[Link]].position);
// eye level
CROSSHAIRS.y += 0.4;
const forwardOffset = -5;
const yaw = [Link][[Link]];
const pitch = -[Link][[Link]];
const forwardX = [Link](yaw) * [Link](pitch);
const forwardY = [Link](pitch);
const forwardZ = [Link](yaw) * [Link](pitch);
CROSSHAIRS.x += forwardX * forwardOffset;
CROSSHAIRS.y += forwardY * forwardOffset;
CROSSHAIRS.z += forwardZ * forwardOffset;
const timecode=[Link]();
let minValue=99999;
[Link](PLAYER=>{
if (PLAYER) {
[Link]=timecode;
//Partial credit for enemy player filtering: PacyTense. Also just
common sense.
if ((PLAYER!==[Link]) && (([Link]==0)||
([Link]!==[Link]))) {
//ESP CODE
if ((![Link])) {
//Credit for box from lines code: AI. ChatGPT prompt: "how
can i create a box out of lines in [Link]?"
//ESP BOXES
const boxSize = {width: 0.4, height: 0.65, depth: 0.4};
const vertices = [
new BABYLON.Vector3(-[Link] / 2, 0, -
[Link] / 2),
new BABYLON.Vector3([Link] / 2, 0, -
[Link] / 2),
new BABYLON.Vector3([Link] / 2, 0 +
[Link], -[Link] / 2),
new BABYLON.Vector3(-[Link] / 2, 0 +
[Link], -[Link] / 2),
new BABYLON.Vector3(-[Link] / 2, 0,
[Link] / 2),
new BABYLON.Vector3([Link] / 2, 0,
[Link] / 2),
new BABYLON.Vector3([Link] / 2, 0 +
[Link], [Link] / 2),
new BABYLON.Vector3(-[Link] / 2, 0 +
[Link], [Link] / 2),
];
const lines = [];
for (let i = 0; i < 4; i++) {
[Link]([vertices[i], vertices[(i + 1) % 4]]);
[Link]([vertices[i + 4], vertices[(i + 1) % 4 + 4]]);
[Link]([vertices[i], vertices[i + 4]]);
};
const box =
[Link](getScrambled(), { lines },
[Link]);
//ChatGPT prompt: "how can i make an object anchored to
another object, change its color, and have it render on top of everything
else? [Link]"
[Link] = new BABYLON.Color3(1, 1, 1);
box[[Link]] = 1;
[Link]=PLAYER[[Link]][[Link]];
[Link]=box;
[Link]=true;
[Link]([box,createOrUpdateTracer(PLAYER,
CROSSHAIRS),PLAYER]);
};
createOrUpdateTracer(PLAYER, CROSSHAIRS);
[Link]=enableESP;
PLAYER[tracersKey].visibility=(PLAYER[[Link]]&&enableTracers);
//AIMBOT CODE
//Credit: This section is mostly common sense, and could be
made by most decent programmers. It is still worth mentioning PacyTense
used a functionally equivalent thing similar to this this before me 4 years
ago.
const distance=[Link](PLAYER[H.x]-[Link][H.x],
PLAYER[H.y]-[Link][H.y], PLAYER[H.z]-[Link][H.z]);
if (distance<minValue) {
TARGETED=PLAYER;
minValue=distance;
};
};
};
});
//im gonna kms why was this in the player loop
if (RMB && TARGETED && TARGETED[[Link]]) {
//3D maths
const directionVector={
[H.x]: -(TARGETED[H.x]-[Link][H.x]),
[H.y]: -(TARGETED[H.y]-[Link][H.y]-0.05),
[H.z]: -(TARGETED[H.z]-[Link][H.z]),
};
// [Link]("Direction vector:", directionVector, "Yaw:",
[Link](directionVector), "Pitch:", [Link](directionVector));
[Link](
[Link](directionVector),
[Link](directionVector)
);
// [Link][[Link]]=[Link](directionVector);
// [Link][[Link]]=[Link](directionVector);
};
for ( let i=0;i<[Link];i++) {
if (ESPArray[i][2] && ESPArray[i][2].timecode==timecode) { //still
exists
} else {
//Credit for info: AI. ChatGPT prompt: "how can i delete an object
in [Link]?"
ESPArray[i][0].dispose();
ESPArray[i][1].dispose();
[Link](i,1);
};
};
if (unsafeWindow[randomDebugKey]) {
[Link] = {
ss, F, H, functionNames, cross: {
CROSSHAIRS, yaw, pitch
}, BABYLON, TARGETED, ESPArray, RMB, timecode,
createOrUpdateTracer, tracersKey, yawpitch
};
};
// log("Main loop executed.");
});
createAnonFunction("setPrecision",function (value) { return
[Link](value * 8192) / 8192 }); //required precision
createAnonFunction("calculateYaw",function (pos) {
return [Link]([Link](Math.atan2(pos[H.x],pos[H.z]),
Math.PI2));
});
createAnonFunction("calculatePitch",function (pos) {
return [Link](-
Math.atan2(pos[H.y],[Link](pos[H.x],pos[H.z]))%1.5);
});
})();