0% found this document useful (0 votes)
6K views

Krunker - Io Hacks

This document contains code for a userscript called "Krunker SkidFest" that provides a mod menu for the game Krunker.io. The script contains code for rendering ESP, chams, auto-aim, auto-bhop, and other cheats/hacks. It also contains settings to hide advertisements and other elements of the Krunker website.

Uploaded by

mavishazad00
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6K views

Krunker - Io Hacks

This document contains code for a userscript called "Krunker SkidFest" that provides a mod menu for the game Krunker.io. The script contains code for rendering ESP, chams, auto-aim, auto-bhop, and other cheats/hacks. It also contains settings to hide advertisements and other elements of the Krunker website.

Uploaded by

mavishazad00
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 30

// ==UserScript==

// @name Krunker SkidFest


// @description A full featured Mod menu for game Krunker.io!
// @version 2.28
// @author SkidLamer - From The Gaming Gurus
// @supportURL https://discord.gg/AJFXXACdrF
// @homepage https://skidlamer.github.io/
// @match *://krunker.io/*
// @exclude *://krunker.io/editor*
// @exclude *://krunker.io/social*
// @reqire
https://raw.githubusercontent.com/FireMasterK/BypassAdditions/master/script.user.js
// @updateURL https://skidlamer.github.io/js/Skidfest.user.js
// @run-at document-start
// @grant none
// @noframes
// ==/UserScript==

/* eslint-env es6 */
/* eslint-disable no-caller, no-undef, no-loop-func */

(function(skidStr, CRC2d, skid) {

class Skid {
constructor() {
skid = this;
this.generated = false;
this.gameJS = null;
this.token = null;
this.downKeys = new Set();
this.settings = null;
this.vars = {};
this.playerMaps = [];
this.skinCache = {};
this.inputFrame = 0;
this.renderFrame = 0;
this.fps = 0;
this.lists = {
renderESP: {
off: "Off",
walls: "Walls",
twoD: "2d",
full: "Full"
},
renderChams: {
off: "Off",
"#FFFFFF": "White",
"#000000": "Black",
"#9400D3": "Purple",
"#FF1493": "Pink",
"#1E90FF": "Blue",
"#0000FF": "DarkBlue",
"#00FFFF": "Aqua",
"#008000": "Green",
"#7FFF00": "Lime",
"#FF8C00": "Orange",
"#FFFF00": "Yellow",
"#FF0000": "Red",
Rainbow: "Rainbow",
},
autoBhop: {
off: "Off",
autoJump: "Auto Jump",
keyJump: "Key Jump",
autoSlide: "Auto Slide",
keySlide: "Key Slide"
},
autoAim: {
off: "Off",
correction: "Aim Correction",
assist: "Legit Aim Assist",
easyassist: "Easy Aim Assist",
silent: "Silent Aim",
trigger: "Trigger Bot",
quickScope: "Quick Scope"
},
audioStreams: {
off: 'Off',
_2000s: 'General German/English',
_HipHopRNB: 'Hip Hop / RNB',
_Oldskool: 'Hip Hop Oldskool',
_Country: 'Country',
_Pop: 'Pop',
_Dance: 'Dance',
_Dubstep: 'DubStep',
_Lowfi: 'LoFi HipHop',
_Jazz: 'Jazz',
_Oldies: 'Golden Oldies',
_Club: 'Club',
_Folk: 'Folk',
_ClassicRock: 'Classic Rock',
_Metal: 'Heavy Metal',
_DeathMetal: 'Death Metal',
_Classical: 'Classical',
_Alternative: 'Alternative',
},
}
this.consts = {
twoPI: Math.PI * 2,
halfPI: Math.PI / 2,
playerHeight: 11,
cameraHeight: 1.5,
headScale: 2,
armScale: 1.3,
armInset: 0.1,
chestWidth: 2.6,
hitBoxPad: 1,
crouchDst: 3,
recoilMlt: 0.3,
nameOffset: 0.6,
nameOffsetHat: 0.8,
};
this.key = {
frame: 0,
delta: 1,
xdir: 2,
ydir: 3,
moveDir: 4,
shoot: 5,
scope: 6,
jump: 7,
reload: 8,
crouch: 9,
weaponScroll: 10,
weaponSwap: 11,
moveLock: 12
};
this.css = {
noTextShadows: `*, .button.small, .bigShadowT { text-shadow: none !
important; }`,
hideAdverts: `#aMerger, #endAMerger { display: none !important }`,
hideSocials: `.headerBarRight > .verticalSeparator, .imageButton
{ display: none }`,
cookieButton: `#onetrust-consent-sdk { display: none !important }`,
newsHolder: `#newsHolder { display: none !important }`,
};
this.isProxy = Symbol("isProxy");
this.spinTimer = 1800;
try {
this.onLoad();
}
catch(e) {
console.error(e);
console.trace(e.stack);
}
}
canStore() {
return this.isDefined(Storage);
}

saveVal(name, val) {
if (this.canStore()) localStorage.setItem("kro_utilities_"+name, val);
}

deleteVal(name) {
if (this.canStore()) localStorage.removeItem("kro_utilities_"+name);
}

getSavedVal(name) {
if (this.canStore()) return
localStorage.getItem("kro_utilities_"+name);
return null;
}

isType(item, type) {
return typeof item === type;
}

isDefined(object) {
return !this.isType(object, "undefined") && object !== null;
}

isNative(fn) {
return (/^function\s*[a-z0-9_\$]*\s*\([^)]*\)\s*\{\s*\[native code\]\
s*\}/i).test('' + fn)
}
getStatic(s, d) {
return this.isDefined(s) ? s : d
}

crossDomain(url) {
return "https://crossorigin.me/" + url;
}

async waitFor(test, timeout_ms = 2e4, doWhile = null) {


let sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
return new Promise(async (resolve, reject) => {
if (typeof timeout_ms != "number") reject("Timeout argument not a
number in waitFor(selector, timeout_ms)");
let result, freq = 100;
while (result === undefined || result === false || result === null
|| result.length === 0) {
if (doWhile && doWhile instanceof Function) doWhile();
if (timeout_ms % 1e4 < freq) console.log("waiting for: ",
test);
if ((timeout_ms -= freq) < 0) {
console.log( "Timeout : ", test );
resolve(false);
return;
}
await sleep(freq);
result = typeof test === "string" ? Function(test)() : test();
}
console.log("Passed : ", test);
resolve(result);
});
};

async request(url, type, opt = {}) {


return fetch(url, opt).then(response => {
if (!response.ok) {
throw new Error("Network response from " + url + " was not ok")
}
return response[type]()
})
}

async fetchScript() {
const data = await this.request("https://krunker.io/social.html",
"text");
const buffer = await this.request("https://krunker.io/pkg/krunker."
+ /\w.exports="(\w+)"/.exec(data)[1] + ".vries", "arrayBuffer");
const array = Array.from(new Uint8Array(buffer));
const xor = array[0] ^ '!'.charCodeAt(0);
return array.map((code) => String.fromCharCode(code ^ xor)).join('');
}

createSettings() {
this.displayStyle = (el, val) => {
this.waitFor(_=>window[el], 5e3).then(node => {
if (node) node.style.display = val ? "none" : "inherit";
else console.error(el, " was not found in the window object");
})
}
this.settings = {
//Rendering
showSkidBtn: {
pre: "<div class='setHed'>Rendering</div>",
name: "Show Skid Button",
val: true,
html: () => this.generateSetting("checkbox", "showSkidBtn",
this),
set: (value, init) => {
let button = document.getElementById("mainButton");
if (!this.isDefined(button)) this.createButton("5k1D",
"https://i.imgur.com/1tWAEJx.gif", this.toggleMenu, value)
else button.style.display = value ? "inherit" : "none";
}
},
hideAdverts: {
name: "Hide Advertisments",
val: true,
html: () => this.generateSetting("checkbox", "hideAdverts",
this),
set: (value, init) => {
if (value) this.head.appendChild(this.css.hideAdverts)
else if (!init) this.css.hideAdverts.remove()
}
},
hideStreams: {
name: "Hide Streams",
val: false,
html: () => this.generateSetting("checkbox", "hideStreams",
this),
set: (value) => { this.displayStyle("streamContainer", value) }
},
hideMerch: {
name: "Hide Merch",
val: false,
html: () => this.generateSetting("checkbox", "hideMerch",
this),
set: (value) => { this.displayStyle("merchHolder", value) }
},
hideNewsConsole: {
name: "Hide News Console",
val: false,
html: () => this.generateSetting("checkbox", "hideNewsConsole",
this),
set: (value) => { this.displayStyle("newsHolder", value) }
},
hideCookieButton: {
name: "Hide Security Manage Button",
val: false,
html: () => this.generateSetting("checkbox",
"hideCookieButton", this),
set: (value) => { this.displayStyle("onetrust-consent-sdk",
value) }
},
noTextShadows: {
name: "Remove Text Shadows",
val: false,
html: () => this.generateSetting("checkbox", "noTextShadows",
this),
set: (value, init) => {
if (value) this.head.appendChild(this.css.noTextShadows)
else if (!init) this.css.noTextShadows.remove()
}
},
customCSS: {
name: "Custom CSS",
val: "",
html: () => this.generateSetting("url", "customCSS", "URL to
CSS file"),
resources: { css: document.createElement("link") },
set: (value, init) => {
if (value.startsWith("http")&&value.endsWith(".css")) {
//let proxy = 'https://cors-anywhere.herokuapp.com/';
this.settings.customCSS.resources.css.href = value
}
if (init) {
this.settings.customCSS.resources.css.rel =
"stylesheet"
try {

this.head.appendChild(this.settings.customCSS.resources.css)
} catch(e) {
alert(e)
this.settings.customCSS.resources.css = null
}
}
}
},
renderESP: {
name: "Player ESP Type",
val: "off",
html: () =>
this.generateSetting("select", "renderESP",
this.lists.renderESP),
},
renderTracers: {
name: "Player Tracers",
val: false,
html: () => this.generateSetting("checkbox", "renderTracers"),
},
rainbowColor: {
name: "Rainbow ESP",
val: false,
html: () => this.generateSetting("checkbox", "rainbowColor"),
},
renderChams: {
name: "Player Chams",
val: "off",
html: () =>
this.generateSetting(
"select",
"renderChams",
this.lists.renderChams
),
},
renderWireFrame: {
name: "Player Wireframe",
val: false,
html: () => this.generateSetting("checkbox",
"renderWireFrame"),
},
customBillboard: {
name: "Custom Billboard Text",
val: "",
html: () =>
this.generateSetting(
"text",
"customBillboard",
"Custom Billboard Text"
),
},
//Weapon
autoReload: {
pre: "<br><div class='setHed'>Weapon</div>",
name: "Auto Reload",
val: false,
html: () => this.generateSetting("checkbox", "autoReload"),
},
autoAim: {
name: "Auto Aim Type",
val: "off",
html: () =>
this.generateSetting("select", "autoAim", this.lists.autoAim),
},
frustrumCheck: {
name: "Line of Sight Check",
val: false,
html: () => this.generateSetting("checkbox", "frustrumCheck"),
},
wallPenetrate: {
name: "Aim through Penetratables",
val: false,
html: () => this.generateSetting("checkbox", "wallPenetrate"),
},
weaponZoom: {
name: "Weapon Zoom",
val: 1.0,
min: 0,
max: 50.0,
step: 0.01,
html: () => this.generateSetting("slider", "weaponZoom"),
set: (value) => { if (this.renderer) this.renderer.adsFovMlt =
value;}
},
weaponTrails: {
name: "Weapon Trails",
val: false,
html: () => this.generateSetting("checkbox", "weaponTrails"),
set: (value) => { if (this.me) this.me.weapon.trail = value;}
},
//Player
autoBhop: {
pre: "<br><div class='setHed'>Player</div>",
name: "Auto Bhop Type",
val: "off",
html: () => this.generateSetting("select", "autoBhop",
this.lists.autoBhop),
},
thirdPerson: {
name: "Third Person",
val: false,
html: () => this.generateSetting("checkbox", "thirdPerson"),
set: (value, init) => {
if (value) this.thirdPerson = 1;
else if (!init) this.thirdPerson = undefined;
}
},
skinUnlock: {
name: "Unlock Skins",
val: false,
html: () => this.generateSetting("checkbox", "skinUnlock",
this),
},
//GamePlay
disableWpnSnd: {
pre: "<br><div class='setHed'>GamePlay</div>",
name: "Disable Players Weapon Sounds",
val: false,
html: () => this.generateSetting("checkbox", "disableWpnSnd",
this),
},
disableHckSnd: {
name: "Disable Hacker Fart Sounds",
val: false,
html: () => this.generateSetting("checkbox", "disableHckSnd",
this),
},
autoActivateNuke: {
name: "Auto Activate Nuke",
val: false,
html: () => this.generateSetting("checkbox",
"autoActivateNuke", this),
},
autoFindNew: {
name: "New Lobby Finder",
val: false,
html: () => this.generateSetting("checkbox", "autoFindNew",
this),
},
autoClick: {
name: "Auto Start Game",
val: false,
html: () => this.generateSetting("checkbox", "autoClick",
this),
},
inActivity: {
name: "No InActivity Kick",
val: true,
html: () => this.generateSetting("checkbox", "autoClick",
this),
},
//Radio Stream Player
playStream: {
pre: "<br><div class='setHed'>Radio Stream Player</div>",
name: "Stream Select",
val: "off",
html: () => this.generateSetting("select", "playStream",
this.lists.audioStreams),
set: (value) => {
if (value == "off") {
if ( this.settings.playStream.audio ) {
this.settings.playStream.audio.pause();
this.settings.playStream.audio.currentTime = 0;
this.settings.playStream.audio = null;
}
return;
}
let url = this.settings.playStream.urls[value];
if (!this.settings.playStream.audio) {
this.settings.playStream.audio = new Audio(url);
this.settings.playStream.audio.volume =
this.settings.audioVolume.val||0.5
} else {
this.settings.playStream.audio.src = url;
}
this.settings.playStream.audio.load();
this.settings.playStream.audio.play();
},
urls: {
_2000s: 'http://0n-2000s.radionetz.de/0n-2000s.aac',
_HipHopRNB:
'https://stream-mixtape-geo.ntslive.net/mixtape2',
_Country: 'https://live.wostreaming.net/direct/wboc-
waaifmmp3-ibc2',
_Dance: 'http://streaming.radionomy.com/A-RADIO-TOP-40',
_Pop: 'http://bigrradio.cdnstream1.com/5106_128',
_Jazz: 'http://strm112.1.fm/ajazz_mobile_mp3',
_Oldies: 'http://strm112.1.fm/60s_70s_mobile_mp3',
_Club: 'http://strm112.1.fm/club_mobile_mp3',
_Folk: 'https://freshgrass.streamguys1.com/irish-128mp3',
_ClassicRock: 'http://1a-classicrock.radionetz.de/1a-
classicrock.mp3',
_Metal: 'http://streams.radiobob.de/metalcore/mp3-192',
_DeathMetal: 'http://stream.laut.fm/beatdownx',
_Classical:
'http://live-radio01.mediahubaustralia.com/FM2W/aac/',
_Alternative: 'http://bigrradio.cdnstream1.com/5187_128',
_Dubstep: 'http://streaming.radionomy.com/R1Dubstep?
lang=en',
_Lowfi: 'http://streams.fluxfm.de/Chillhop/mp3-256',
_Oldskool: 'http://streams.90s90s.de/hiphop/mp3-128/',
},
audio: null,
},
audioVolume: {
name: "Radio Volume",
val: 0.5,
min: 0,
max: 1,
step: 0.01,
html: () => this.generateSetting("slider", "audioVolume"),
set: (value) => { if (this.settings.playStream.audio)
this.settings.playStream.audio.volume = value;}
},
};
const menu = window.windows[11];
menu.header = "Settings";
menu.gen = _ => {
var tmpHTML = `<div style='text-align:center'> <a
onclick='window.open("https://skidlamer.github.io/")' class='menuLink'>SkidFest
Settings</center></a> <hr> </div>`;
for (const key in this.settings) {
if (this.settings[key].pre) tmpHTML += this.settings[key].pre;
tmpHTML += "<div class='settName' id='" + key + "_div'
style='display:" + (this.settings[key].hide ? 'none' : 'block') + "'>" +
this.settings[key].name +
" " + this.settings[key].html() + "</div>";
}
tmpHTML += `<br><hr><a onclick='${skidStr}.resetSettings()'
class='menuLink'>Reset Settings</a> | <a onclick='${skidStr}.saveScript()'
class='menuLink'>Save GameScript</a>`
return tmpHTML;
};

// setupSettings
for (const key in this.settings) {
this.settings[key].def = this.settings[key].val;
if (!this.settings[key].disabled) {
let tmpVal = this.getSavedVal(key);
this.settings[key].val = tmpVal !== null ? tmpVal :
this.settings[key].val;
if (this.settings[key].val == "false") this.settings[key].val =
false;
if (this.settings[key].val == "true") this.settings[key].val =
true;
if (this.settings[key].val == "undefined")
this.settings[key].val = this.settings[key].def;
if (this.settings[key].set)
this.settings[key].set(this.settings[key].val, true);
}
}
}

generateSetting(type, name, extra) {


switch (type) {
case 'checkbox':
return `<label class="switch"><input type="checkbox" onclick="$
{skidStr}.setSetting('${name}', this.checked)" ${this.settings[name].val ?
'checked' : ''}><span class="slider"></span></label>`;
case 'slider':
return `<span class='sliderVal' id='slid_utilities_${name}'>$
{this.settings[name].val}</span><div class='slidecontainer'><input type='range'
min='${this.settings[name].min}' max='${this.settings[name].max}' step='$
{this.settings[name].step}' value='${this.settings[name].val}' class='sliderM'
oninput="${skidStr}.setSetting('${name}', this.value)"></div>`
case 'select': {
let temp = `<select onchange="${skidStr}.setSetting(\x27$
{name}\x27, this.value)" class="inputGrey2">`;
for (let option in extra) {
temp += '<option value="' + option + '" ' + (option ==
this.settings[name].val ? 'selected' : '') + '>' + extra[option] + '</option>';
}
temp += '</select>';
return temp;
}
default:
return `<input type="${type}" name="${type}"
id="slid_utilities_${name}"\n${'color' == type ? 'style="float:right;margin-
top:5px"' : `class="inputGrey2" placeholder="${extra}"`}\nvalue="$
{this.settings[name].val}" oninput="${skidStr}.setSetting(\x27${name}\x27,
this.value)"/>`;
}
}

resetSettings() {
if (confirm("Are you sure you want to reset all your settings? This
will also refresh the page")) {
Object.keys(localStorage).filter(x =>
x.includes("kro_utilities_")).forEach(x => localStorage.removeItem(x));
location.reload();
}
}

setSetting(t, e) {
this.settings[t].val = e;
this.saveVal(t, e);
if (document.getElementById(`slid_utilities_${t}`))
document.getElementById(`slid_utilities_${t}`).innerHTML = e;
if (this.settings[t].set) this.settings[t].set(e);
}

createObserver(elm, check, callback, onshow = true) {


return new MutationObserver((mutationsList, observer) => {
if (check == 'src' || onshow &&
mutationsList[0].target.style.display == 'block' || !onshow) {
callback(mutationsList[0].target);
}
}).observe(elm, check == 'childList' ? {childList: true} : {attributes:
true, attributeFilter: [check]});
}

createListener(elm, type, callback = null) {


if (!this.isDefined(elm)) {
alert("Failed creating " + type + "listener");
return
}
elm.addEventListener(type, event => callback(event));
}

createElement(element, attribute, inner) {


if (!this.isDefined(element)) {
return null;
}
if (!this.isDefined(inner)) {
inner = "";
}
let el = document.createElement(element);
if (this.isType(attribute, 'object')) {
for (let key in attribute) {
el.setAttribute(key, attribute[key]);
}
}
if (!Array.isArray(inner)) {
inner = [inner];
}
for (let i = 0; i < inner.length; i++) {
if (inner[i].tagName) {
el.appendChild(inner[i]);
} else {
el.appendChild(document.createTextNode(inner[i]));
}
}
return el;
}

createButton(name, iconURL, fn, visible) {


visible = visible ? "inherit":"none";
this.waitFor(_=>document.querySelector("#menuItemContainer")).then(menu
=> {
let icon = this.createElement("div",{"class":"menuItemIcon",
"style":`background-image:url("${iconURL}");display:inherit;`});
let title= this.createElement("div",{"class":"menuItemTitle",
"style":`display:inherit;`}, name);
let host = this.createElement("div",{"id":"mainButton",
"class":"menuItem", "onmouseenter":"playTick()", "onclick":"showWindow(12)",
"style":`display:${visible};`},[icon, title]);
if (menu) menu.append(host)
})
}

objectHas(obj, arr) {
return arr.some(prop => obj.hasOwnProperty(prop));
}

getVersion() {
const elems = document.getElementsByClassName('terms');
const version = elems[elems.length - 1].innerText;
return version;
}

saveAs(name, data) {
let blob = new Blob([data], {type: 'text/plain'});
let el = window.document.createElement("a");
el.href = window.URL.createObjectURL(blob);
el.download = name;
window.document.body.appendChild(el);
el.click();
window.document.body.removeChild(el);
}

saveScript() {
this.fetchScript().then(script => {
this.saveAs("game_" + this.getVersion() + ".js", script)
})
}

isKeyDown(key) {
return this.downKeys.has(key);
}

simulateKey(keyCode) {
var oEvent = document.createEvent('KeyboardEvent');
// Chromium Hack
Object.defineProperty(oEvent, 'keyCode', {
get : function() {
return this.keyCodeVal;
}
});
Object.defineProperty(oEvent, 'which', {
get : function() {
return this.keyCodeVal;
}
});

if (oEvent.initKeyboardEvent) {
oEvent.initKeyboardEvent("keypress", true, true,
document.defaultView, keyCode, keyCode, "", "", false, "");
} else {
oEvent.initKeyEvent("keypress", true, true, document.defaultView,
false, false, false, false, keyCode, 0);
}

oEvent.keyCodeVal = keyCode;

if (oEvent.keyCode !== keyCode) {


alert("keyCode mismatch " + oEvent.keyCode + "(" + oEvent.which +
")");
}

document.body.dispatchEvent(oEvent);
}

toggleMenu() {
let lock = document.pointerLockElement ||
document.mozPointerLockElement;
if (lock) document.exitPointerLock();
window.showWindow(12);
if (this.isDefined(window.SOUND)) window.SOUND.play(`tick_0`,0.1)
}

onLoad() {
this.waitFor(_=>document.documentElement instanceof
window.HTMLElement).then(_=>{
this.iframe();
})
this.createObservers();
this.waitFor(_=>this.head, 1e4, _=> { this.head = document.head||
document.getElementsByTagName('head')[0] }).then(head => {
if (!head) location.reload();
Object.entries(this.css).forEach(entry => {
this.css[entry[0]] = this.createElement("style", entry[1]);
})
this.waitFor(_=>window.windows, 3e5).then(_ => {
this.createSettings();
})
})

this.waitFor(_=>this.token).then(_ => {
if (!this.token) location.reload();
const loader = new Function("WP_fetchMMToken", "Module",
this.gamePatch());
loader(new Promise(res=>res(this.token)), { csv: async () => 0 });
})
this.waitFor(_=>this.exports, 1e4).then(exports => {
if (!exports) return alert("This Script needs updating");
else {
//console.dir(exports)
let toFind = {
overlay: ["render", "canvas"],
config: ["accAnnounce", "availableRegions", "assetCat"],
three: ["ACESFilmicToneMapping", "TextureLoader",
"ObjectLoader"],
ws: ["socketReady", "ingressPacketCount",
"ingressPacketCount", "egressDataSize"],
//utility: ["VectorAdd", "VectorAngleSign"],
//colors: ["challLvl", "getChallCol"],
//ui: ["showEndScreen", "toggleControlUI",
"toggleEndScreen", "updatePlayInstructions"],
//events: ["actions", "events"],
}
for (let rootKey in this.exports) {
let exp = this.exports[rootKey].exports;
for (let name in toFind) {
if (this.objectHas(exp, toFind[name])) {
console.log("Found Export ", name);
delete toFind[name];
this[name] = exp;
}
}
}
if (!(Object.keys(toFind).length === 0 && toFind.constructor
=== Object)) {
for (let name in toFind) {
alert("Failed To Find Export " + name);
}
} else {
Object.defineProperty(this.config, "nameVisRate", {
value: 0,
writable: false,
configurable: true,
})
this.ctx = this.overlay.canvas.getContext('2d');
this.overlay.render = new Proxy(this.overlay.render, {
apply: function(target, that, args) {
return [target.apply(that, args),
render.apply(that, args)]
}
})
function render(scale, game, controls, renderer, me) {
let width = skid.overlay.canvas.width / scale;
let height = skid.overlay.canvas.height / scale;
const renderArgs = [scale, game, controls, renderer,
me];
if (renderArgs && void 0 !== skid) {
["scale", "game", "controls", "renderer",
"me"].forEach((item, index)=>{
skid[item] = renderArgs[index];
});
if (me) {
skid.ctx.save();
skid.ctx.scale(scale, scale);
//this.ctx.clearRect(0, 0, width, height);
skid.onRender();
//window.requestAnimationFrame.call(window,
renderArgs.callee.caller.bind(this));
skid.ctx.restore();
}
if(skid.settings && skid.settings.autoClick.val &&
window.endUI.style.display == "none" && window.windowHolder.style.display ==
"none") {
controls.toggle(true);
}
}
}

// Skins
const $skins = Symbol("skins");
Object.defineProperty(Object.prototype, "skins", {
set: function(fn) {
this[$skins] = fn;
if (void 0 == this.localSkins || !
this.localSkins.length) {
this.localSkins = Array.apply(null,
Array(5e3)).map((x, i) => {
return {
ind: i,
cnt: 0x1,
}
})
}
return fn;
},
get: function() {
return skid.settings.skinUnlock.val && this.stats ?
this.localSkins : this[$skins];
}
})

this.waitFor(_=>this.ws.connected === true, 4e4).then(_=> {


this.wsEvent = this.ws._dispatchEvent.bind(this.ws);
this.wsSend = this.ws.send.bind(this.ws);
this.ws.send = new Proxy(this.ws.send, {
apply: function(target, that, args) {
if (args[0] == "ah2") return;
try {
var original_fn =
Function.prototype.apply.apply(target, [that, args]);
} catch (e) {
e.stack = e.stack = e.stack.replace(/\
n.*Object\.apply.*/, '');
throw e;
}

if (args[0] === "en") {


skid.skinCache = {
main: args[1][2][0],
secondary: args[1][2][1],
hat: args[1][3],
body: args[1][4],
knife: args[1][9],
dye: args[1][14],
waist: args[1][17],
}
}

return original_fn;
}
})

this.ws._dispatchEvent = new
Proxy(this.ws._dispatchEvent, {
apply: function(target, that, [type, event]) {
if (type =="init") {
if(event[10] && event[10].length &&
event[10].bill && skid.settings.customBillboard.val.length > 1) {
event[10].bill.txt =
skid.settings.customBillboard.val;
}
}

if (skid.settings.skinUnlock.val &&
skid.skinCache && type === "0") {
let skins = skid.skinCache;
let pInfo = event[0];
let pSize = 38;
while (pInfo.length % pSize !== 0) pSize++;
for(let i = 0; i < pInfo.length; i +=
pSize) {
if (pInfo[i] === skid.ws.socketId||0) {
pInfo[i + 12] = [skins.main,
skins.secondary];
pInfo[i + 13] = skins.hat;
pInfo[i + 14] = skins.body;
pInfo[i + 19] = skins.knife;
pInfo[i + 24] = skins.dye;
pInfo[i + 33] = skins.waist;
}
}
}

return target.apply(that, arguments[2]);


}
})
})

if (this.isDefined(window.SOUND)) {
window.SOUND.play = new Proxy(window.SOUND.play, {
apply: function(target, that, [src, vol, loop,
rate]) {
if ( src.startsWith("fart_") &&
skid.settings.disableHckSnd.val ) return;
return target.apply(that, [src, vol, loop,
rate]);
}
})
}

AudioParam.prototype.setValueAtTime = new
Proxy(AudioParam.prototype.setValueAtTime, {
apply: function(target, that, [value, startTime]) {
return target.apply(that, [value, 0]);
}
})

this.rayC = new this.three.Raycaster();


this.vec2 = new this.three.Vector2(0, 0);
}
}
})
}

gamePatch() {
let entries = {
// Deobfu
inView: { regex: /(\w+\['(\w+)']\){if\(\(\w+=\w+\['\w+']\
['position']\['clone']\(\))/, index: 2 },
spectating: { regex: /\['team']:window\['(\w+)']/, index: 1 },
//inView: { regex: /\]\)continue;if\(!\w+\['(.+?)\']\)continue;/,
index: 1 },
//canSee: { regex: /\w+\['(\w+)']\(\w+,\w+\['x'],\w+\['y'],\w+\
['z']\)\)&&/, index: 1 },
//procInputs: { regex: /this\['(\w+)']=function\((\w+),(\w+),\w+,\
w+\){(this)\['recon']/, index: 1 },
aimVal: { regex: /this\['(\w+)']-=0x1\/\(this\['weapon']\['\w+']\/\
w+\)/, index: 1 },
pchObjc: { regex: /0x0,this\['(\w+)']=new \w+\['Object3D']\
(\),this/, index: 1 },
didShoot: { regex: /--,\w+\['(\w+)']=!0x0/, index: 1 },
nAuto: { regex: /'Single\\x20Fire','varN':'(\w+)'/, index: 1 },
crouchVal: { regex: /this\['(\w+)']\+=\w\['\w+']\*\w+,0x1<=this\['\
w+']/, index: 1 },
recoilAnimY: { regex: /\+\(-Math\['PI']\/0x4\*\w+\+\w+\['(\w+)']\*\
w+\['\w+']\)\+/, index: 1 },
//recoilAnimY: { regex: /this\['recoilAnim']=0x0,this\[(.*?\
(''\))]/, index: 1 },
ammos: { regex: /\['length'];for\(\w+=0x0;\w+<\w+\['(\w+)']\
['length']/, index: 1 },
weaponIndex: { regex: /\['weaponConfig']\[\w+]\['secondary']&&\(\
w+\['(\w+)']==\w+/, index: 1 },
isYou: { regex: /0x0,this\['(\w+)']=\w+,this\['\w+']=!0x0,this\
['inputs']/, index: 1 },
objInstances: { regex: /\w+\['\w+']\(0x0,0x0,0x0\);if\(\w+\['(\
w+)']=\w+\['\w+']/, index: 1 },
getWorldPosition: { regex: /{\w+=\w+\['camera']\['(\w+)']\(\);/,
index: 1 },
//mouseDownL: { regex: /this\['\w+'\]=function\(\){this\['(\
w+)'\]=\w*0,this\['(\w+)'\]=\w*0,this\['\w+'\]={}/, index: 1 },
mouseDownR: { regex: /this\['(\w+)']=0x0,this\['keys']=/, index:
1 },
//reloadTimer: { regex: /this\['(\w+)']&&\(\w+\['\w+']\(this\),\
w+\['\w+']\(this\)/, index: 1 },
maxHealth: { regex: /this\['health']\/this\['(\w+)']\?/, index:
1 },
xDire: { regex: /this\['(\w+)']=Math\['lerpAngle']\(this\
['xDir2']/, index: 1 },
yDire: { regex: /this\['(\w+)']=Math\['lerpAngle']\(this\
['yDir2']/, index: 1 },
//xVel: { regex: /this\['x']\+=this\['(\w+)']\*\w+\['map']\
['config']\['speedX']/, index: 1 },
yVel: { regex: /this\['y']\+=this\['(\w+)']\*\w+\['map']\
['config']\['speedY']/, index: 1 },
//zVel: { regex: /this\['z']\+=this\['(\w+)']\*\w+\['map']\
['config']\['speedZ']/, index: 1 },

// Patches
exports: {regex: /(this\['\w+']\['\w+']\(this\);};},function\(\w+,\
w+,(\w+)\){)/, patch: `$1 ${skidStr}.exports=$2.c; ${skidStr}.modules=$2.m;`},
inputs: {regex: /(\w+\['\w+']\[\w+\['\w+']\['\w+']\?'\w+':'push']\
()(\w+)\),/, patch: `$1${skidStr}.onInput($2)),`},
inView: {regex: /&&(\w+\['\w+'])\){(if\(\(\w+=\w+\['\w+']\['\w+']\
['\w+'])/, patch: `){if(!$1&&void 0 !== ${skidStr}.nameTags)continue;$2`},
thirdPerson:{regex: /(\w+)\[\'config\'\]\[\'thirdPerson\'\]/g,
patch: `void 0 !== ${skidStr}.thirdPerson`},
isHacker:{regex: /(window\['\w+']=)!0x0\)/, patch: `$1!0x1)`},
fixHowler:{regex: /(Howler\['orientation'](.+?)\)\),)/, patch: ``},
respawnT:{regex: /'\w+':0x3e8\*/g, patch: `'respawnT':0x0*`},
anticheat1:{regex: /&&\w+\(\),window\['utilities']&&\(\w+\
(null,null,null,!0x0\),\w+\(\)\)/, patch: ""},
anticheat2:{regex: /(\[]instanceof Array;).*?(var)/, patch: "$1
$2"},
anticheat3:{regex: /windows\['length'\]>\d+.*?0x25/, patch:
`0x25`},
commandline:{regex: /Object\['defineProperty']\(console.*?\),/,
patch: ""},
writeable:{regex: /'writeable':!0x1/g, patch: "writeable:true"},
configurable:{regex: /'configurable':!0x1/g, patch:
"configurable:true"},
typeError:{regex: /throw new TypeError/g, patch: "console.error"},
error:{regex: /throw new Error/g, patch: "console.error"},
};
let script = this.gameJS;
for(let name in entries) {
let object = entries[name];
let found = object.regex.exec(script);
if (object.hasOwnProperty('index')) {
if (!found) {
object.val = null;
alert("Failed to Find " + name);
} else {
object.val = found[object.index];
console.log ("Found ", name, ":", object.val);
}
Object.defineProperty(skid.vars, name, {
configurable: false,
value: object.val
});
} else if (found) {
script = script.replace(object.regex, object.patch);
console.log ("Patched ", name);
} else alert("Failed to Patch " + name);
}
return script;
}

iframe() {
const iframe = document.createElement('iframe');
iframe.setAttribute('style', 'display:none');
iframe.setAttribute("id", skidStr);
iframe.src = location.origin;
document.documentElement.appendChild(iframe);

const ifrWin = iframe.contentWindow;


const ifrDoc = iframe.contentDocument?
iframe.contentDocument:iframe.contentWindow.document;

ifrWin.TextDecoder.prototype.decode = new
Proxy(window.TextDecoder.prototype.decode, {
apply: function(target, that, args) {
let string = Reflect.apply(...arguments);
if (string.length > 1e6) {
if (!skid.gameJS) {
skid.gameJS = string;
console.log("1stSTR");
} else {
skid.gameJS += string;
console.log("2ndSTR");
}
}
if (string.includes("generate-token")) skid.generated = true;
else if (string.length == 40||skid.generated) {
skid.token = string;
console.log("Token ", string);
document.documentElement.removeChild(iframe);
}
return string;
},
});
}

createObservers() {

let observer = new MutationObserver(mutations => {


for (let mutation of mutations) {
for (let node of mutation.addedNodes) {
if (node.tagName === 'SCRIPT' && node.type ===
"text/javascript" && node.innerHTML.startsWith("*!", 1)) {
node.innerHTML = "";
observer.disconnect();
}
}
}
});
observer.observe(document, {
childList: true,
subtree: true
});

this.waitFor(_=>window.instructionsUpdate, 2e3).then(_ => {


this.createObserver(window.instructionsUpdate, 'style', (target) =>
{
if (this.settings.autoFindNew.val) {
console.log(target)
if (['Kicked', 'Banned', 'Disconnected', 'Error', 'Game is
full'].some(text => target && target.innerHTML.includes(text))) {
location = document.location.origin;
}
}
});
})

this.createListener(document, "keyup", event => {


if (this.downKeys.has(event.code)) this.downKeys.delete(event.code)
})

this.createListener(document, "keydown", event => {


if (event.code == "F1") {
event.preventDefault();
this.toggleMenu();
}
if ('INPUT' == document.activeElement.tagName || !window.endUI &&
window.endUI.style.display) return;
switch (event.code) {
case 'NumpadSubtract':
document.exitPointerLock();
//console.log(document.exitPointerLock)
console.dirxml(this)
break;
default:
if (!this.downKeys.has(event.code))
this.downKeys.add(event.code);
break;
}
})

this.createListener(document, "mouseup", event => {


switch (event.button) {
case 1:
event.preventDefault();
this.toggleMenu();
break;
default:
break;
}
})
}

onRender() { /* hrt / ttap - https://github.com/hrt */


this.renderFrame ++;
if (this.renderFrame >= 100000) this.renderFrame = 0;
let scaledWidth = this.ctx.canvas.width / this.scale;
let scaledHeight = this.ctx.canvas.height / this.scale;
let playerScale = (2 * this.consts.armScale + this.consts.chestWidth +
this.consts.armInset) / 2
let worldPosition = this.renderer.camera[this.vars.getWorldPosition]();
let espVal = this.settings.renderESP.val;
if (espVal ==="walls"||espVal ==="twoD") this.nameTags = undefined;
else this.nameTags = true;

if (this.settings.autoActivateNuke.val && this.me &&


Object.keys(this.me.streaks).length) { /*chonker*/
this.wsSend("k", 0);
}

if (espVal !== "off") {


this.overlay.healthColE = this.settings.rainbowColor.val ?
this.overlay.rainbow.col : "#eb5656";
}

for (let iter = 0, length = this.game.players.list.length; iter <


length; iter++) {
let player = this.game.players.list[iter];
if (player[this.vars.isYou] || !player.active || !
this.isDefined(player[this.vars.objInstances]) || this.getIsFriendly(player)) {
continue;
}

// the below variables correspond to the 2d box esps corners


let xmin = Infinity;
let xmax = -Infinity;
let ymin = Infinity;
let ymax = -Infinity;
let position = null;
let br = false;
for (let j = -1; !br && j < 2; j+=2) {
for (let k = -1; !br && k < 2; k+=2) {
for (let l = 0; !br && l < 2; l++) {
if (position =
player[this.vars.objInstances].position.clone()) {
position.x += j * playerScale;
position.z += k * playerScale;
position.y += l * (player.height -
player[this.vars.crouchVal] * this.consts.crouchDst);
if (!this.containsPoint(position)) {
br = true;
break;
}
position.project(this.renderer.camera);
xmin = Math.min(xmin, position.x);
xmax = Math.max(xmax, position.x);
ymin = Math.min(ymin, position.y);
ymax = Math.max(ymax, position.y);
}
}
}
}

if (br) {
continue;
}

xmin = (xmin + 1) / 2;
ymin = (ymin + 1) / 2;
xmax = (xmax + 1) / 2;
ymax = (ymax + 1) / 2;

// save and restore these variables later so they got nothing on us


const original_strokeStyle = this.ctx.strokeStyle;
const original_lineWidth = this.ctx.lineWidth;
const original_font = this.ctx.font;
const original_fillStyle = this.ctx.fillStyle;

//Tracers
if (this.settings.renderTracers.val) {
CRC2d.save.apply(this.ctx, []);
let screenPos =
this.world2Screen(player[this.vars.objInstances].position);
this.ctx.lineWidth = 4.5;
this.ctx.beginPath();
this.ctx.moveTo(this.ctx.canvas.width/2, this.ctx.canvas.height
- (this.ctx.canvas.height - scaledHeight));
this.ctx.lineTo(screenPos.x, screenPos.y);
this.ctx.strokeStyle = "rgba(0, 0, 0, 0.25)";
this.ctx.stroke();
this.ctx.lineWidth = 2.5;
this.ctx.strokeStyle = this.settings.rainbowColor.val ?
this.overlay.rainbow.col : "#eb5656"
this.ctx.stroke();
CRC2d.restore.apply(this.ctx, []);
}

CRC2d.save.apply(this.ctx, []);
if (espVal == "twoD" || espVal == "full") {
// perfect box esp
this.ctx.lineWidth = 5;
this.ctx.strokeStyle = this.settings.rainbowColor.val ?
this.overlay.rainbow.col : "#eb5656"
let distanceScale = Math.max(.3, 1 -
this.getD3D(worldPosition.x, worldPosition.y, worldPosition.z, player.x, player.y,
player.z) / 600);
CRC2d.scale.apply(this.ctx, [distanceScale, distanceScale]);
let xScale = scaledWidth / distanceScale;
let yScale = scaledHeight / distanceScale;
CRC2d.beginPath.apply(this.ctx, []);
ymin = yScale * (1 - ymin);
ymax = yScale * (1 - ymax);
xmin = xScale * xmin;
xmax = xScale * xmax;
CRC2d.moveTo.apply(this.ctx, [xmin, ymin]);
CRC2d.lineTo.apply(this.ctx, [xmin, ymax]);
CRC2d.lineTo.apply(this.ctx, [xmax, ymax]);
CRC2d.lineTo.apply(this.ctx, [xmax, ymin]);
CRC2d.lineTo.apply(this.ctx, [xmin, ymin]);
CRC2d.stroke.apply(this.ctx, []);

if (espVal == "full") {
// health bar
this.ctx.fillStyle = "#000000";
let barMaxHeight = ymax - ymin;
CRC2d.fillRect.apply(this.ctx, [xmin - 7, ymin, -10,
barMaxHeight]);
this.ctx.fillStyle = player.health > 75 ? "green" :
player.health > 40 ? "orange" : "red";
CRC2d.fillRect.apply(this.ctx, [xmin - 7, ymin, -10,
barMaxHeight * (player.health / player[this.vars.maxHealth])]);
// info
this.ctx.font = "Bold 48px Tahoma";
this.ctx.fillStyle = "white";
this.ctx.strokeStyle='black';
this.ctx.lineWidth = 1;
let x = xmax + 7;
let y = ymax;
CRC2d.fillText.apply(this.ctx, [player.name||player.alias,
x, y]);
CRC2d.strokeText.apply(this.ctx, [player.name||
player.alias, x, y]);
this.ctx.font = "Bold 30px Tahoma";
this.ctx.fillStyle = "#cccccc";
y += 35;
CRC2d.fillText.apply(this.ctx, [player.weapon.name, x, y]);
CRC2d.strokeText.apply(this.ctx, [player.weapon.name, x,
y]);
y += 35;
this.ctx.fillStyle = player.health > 75 ? "green" :
player.health > 40 ? "orange" : "red";
CRC2d.fillText.apply(this.ctx, [player.health + ' HP', x,
y]);
CRC2d.strokeText.apply(this.ctx, [player.health + ' HP', x,
y]);
}
}

CRC2d.restore.apply(this.ctx, []);
this.ctx.strokeStyle = original_strokeStyle;
this.ctx.lineWidth = original_lineWidth;
this.ctx.font = original_font;
this.ctx.fillStyle = original_fillStyle;

// Chams
const obj = player[this.vars.objInstances];
if (this.isDefined(obj)) {
if (!obj.visible) {
Object.defineProperty(player[this.vars.objInstances],
'visible', {
value: true,
writable: false
});
} else {
let chamColor = this.settings.renderChams.val;
let chamsEnabled = chamColor !== "off";
//if (dog.gaybow >= 360) dog.gaybow = 0; else dog.gaybow++;
obj.traverse(child => {
if (child && child.type == "Mesh" &&
this.isDefined(child.material)) {
if (!child.hasOwnProperty(skidStr)) {
child[skidStr] = child.material;
} else if (child.hasOwnProperty(skidStr)) {
Object.defineProperty(child, 'material', {
get(){
return !chamsEnabled ? this[skidStr] :
new skid.three.MeshBasicMaterial({
color: new
skid.three.Color(chamColor == "Rainbow" ? skid.overlay.rainbow.col : chamColor),
depthTest: false,
transparent: true,
fog: false,
wireframe:
skid.settings.renderWireFrame.val
})
}
});
}
}
})
}
}
}
}

spinTick(input) {
//this.game.players.getSpin(this.self);
//this.game.players.saveSpin(this.self, angle);
const angle = this.getAngleDst(input[2], this.me[this.vars.xDire]);
this.spins = this.getStatic(this.spins, new Array());
this.spinTimer = this.getStatic(this.spinTimer, this.config.spinTimer);
this.serverTickRate = this.getStatic(this.serverTickRate,
this.config.serverTickRate);
(this.spins.unshift(angle), this.spins.length > this.spinTimer /
this.serverTickRate && (this.spins.length = Math.round(this.spinTimer /
this.serverTickRate)))
for (var e = 0, i = 0; i < this.spins.length; ++i) e += this.spins[i];
return Math.abs(e * (180 / Math.PI));
}

raidBot(input) {
let target = this.game.AI.ais.filter(enemy => {
return undefined !== enemy.mesh && enemy.mesh &&
enemy.mesh.children[0] && enemy.canBSeen && enemy.health > 0
}).sort((p1, p2) => this.getD3D(this.me.x, this.me.z, p1.x, p1.z) -
this.getD3D(this.me.x, this.me.z, p2.x, p2.z)).shift();
if (target) {
let canSee = this.containsPoint(target.mesh.position)
let yDire = (this.getDir(this.me.z, this.me.x, target.z, target.x)
|| 0)
let xDire = ((this.getXDire(this.me.x, this.me.y, this.me.z,
target.x, target.y + target.mesh.children[0].scale.y * 0.85, target.z) || 0) -
this.consts.recoilMlt * this.me[this.vars.recoilAnimY])
if (this.me.weapon[this.vars.nAuto] && this.me[this.vars.didShoot])
{ input[this.key.shoot] = 0; input[this.key.scope] = 0; this.me.inspecting = false;
this.me.inspectX = 0; }
else {
if (!this.me.aimDir && canSee) {
input[this.key.scope] = 1;
if (!this.me[this.vars.aimVal]||this.me.weapon.noAim) {
input[this.key.shoot] = 1;
input[this.key.ydir] = yDire * 1e3
input[this.key.xdir] = xDire * 1e3
this.lookDir(xDire, yDire);
}
}
}
} else {
this.resetLookAt();
}
return input;
}

onInput(input) {
if (this.isDefined(this.config) && this.config.aimAnimMlt)
this.config.aimAnimMlt = 1;
if (this.isDefined(this.controls) && this.isDefined(this.config) &&
this.settings.inActivity.val) {
this.controls.idleTimer = 0;
this.config.kickTimer = Infinity
}
if (this.me) {
this.inputFrame ++;
if (this.inputFrame >= 100000) this.inputFrame = 0;
if (!this.game.playerSound[this.isProxy]) {
this.game.playerSound = new Proxy(this.game.playerSound, {
apply: function(target, that, args) {
if (skid.settings.disableWpnSnd.val && args[0] &&
typeof args[0] == "string" && args[0].startsWith("weapon_")) return;
return target.apply(that, args);
},
get: function(target, key) {
return key === skid.isProxy ? true :
Reflect.get(target, key);
},
})
}

let isMelee =
this.isDefined(this.me.weapon.melee)&&this.me.weapon.melee||
this.isDefined(this.me.weapon.canThrow)&&this.me.weapon.canThrow;
let ammoLeft = this.me[this.vars.ammos]
[this.me[this.vars.weaponIndex]];

// autoReload
if (this.settings.autoReload.val) {
//let capacity = this.me.weapon.ammo;
//if (ammoLeft < capacity)
if (isMelee) {
if (!this.me.canThrow) {
//this.me.refillKnife();
}
} else if (!ammoLeft) {
this.game.players.reload(this.me);
input[this.key.reload] = 1;
// this.me[this.vars.reloadTimer] = 1;
//this.me.resetAmmo();
}
}

//Auto Bhop
let autoBhop = this.settings.autoBhop.val;
if (autoBhop !== "off") {
if (this.isKeyDown("Space") || autoBhop == "autoJump" ||
autoBhop == "autoSlide") {
this.controls.keys[this.controls.binds.jumpKey.val] ^= 1;
if (this.controls.keys[this.controls.binds.jumpKey.val]) {

this.controls.didPressed[this.controls.binds.jumpKey.val] = 1;
}
if (this.isKeyDown("Space") || autoBhop == "autoSlide") {
if (this.me[this.vars.yVel] < -0.03 &&
this.me.canSlide) {
setTimeout(() => {

this.controls.keys[this.controls.binds.crouchKey.val] = 0;
}, this.me.slideTimer||325);

this.controls.keys[this.controls.binds.crouchKey.val] = 1;

this.controls.didPressed[this.controls.binds.crouchKey.val] = 1;
}
}
}
}

//Autoaim
if (this.settings.autoAim.val !== "off") {
this.playerMaps.length = 0;
this.rayC.setFromCamera(this.vec2, this.renderer.fpsCamera);
let target = this.game.players.list.filter(enemy => {
let hostile = undefined !== enemy[this.vars.objInstances]
&& enemy[this.vars.objInstances] && !enemy[this.vars.isYou] && !
this.getIsFriendly(enemy) && enemy.health > 0 && this.getInView(enemy);
if (hostile)
this.playerMaps.push( enemy[this.vars.objInstances] );
return hostile
}).sort((p1, p2) => this.getD3D(this.me.x, this.me.z, p1.x,
p1.z) - this.getD3D(this.me.x, this.me.z, p2.x, p2.z)).shift();
if (target) {
//let count = this.spinTick(input);
//if (count < 360) {
// input[2] = this.me[this.vars.xDire] + Math.PI;
//} else console.log("spins ", count);
//target.jumpBobY * this.config.jumpVel
let canSee =
this.containsPoint(target[this.vars.objInstances].position);
let inCast = this.rayC.intersectObjects(this.playerMaps,
true).length;
let yDire = (this.getDir(this.me.z, this.me.x, target.z,
target.x) || 0);
let xDire = ((this.getXDire(this.me.x, this.me.y,
this.me.z, target.x, target.y - target[this.vars.crouchVal] * this.consts.crouchDst
+ this.me[this.vars.crouchVal] * this.consts.crouchDst, target.z) || 0) -
this.consts.recoilMlt * this.me[this.vars.recoilAnimY])
if (this.me.weapon[this.vars.nAuto] &&
this.me[this.vars.didShoot]) {
input[this.key.shoot] = 0;
input[this.key.scope] = 0;
this.me.inspecting = false;
this.me.inspectX = 0;
}
else if (!canSee && this.settings.frustrumCheck.val)
this.resetLookAt();
else if (ammoLeft||isMelee) {
input[this.key.scope] = this.settings.autoAim.val ===
"assist"||this.settings.autoAim.val === "correction"||this.settings.autoAim.val ===
"trigger" ? this.controls[this.vars.mouseDownR] : 0;
switch (this.settings.autoAim.val) {
case "quickScope":
input[this.key.scope] = 1;
if (!this.me[this.vars.aimVal]||
this.me.weapon.noAim) {
if (!this.me.canThrow||!isMelee)
input[this.key.shoot] = 1;
input[this.key.ydir] = yDire * 1e3
input[this.key.xdir] = xDire * 1e3
this.lookDir(xDire, yDire);
}
break;
case "assist": case "easyassist":
if (input[this.key.scope] ||
this.settings.autoAim.val === "easyassist") {
if (!this.me.aimDir && canSee ||
this.settings.autoAim.val === "easyassist") {
input[this.key.ydir] = yDire * 1e3
input[this.key.xdir] = xDire * 1e3
this.lookDir(xDire, yDire);
}
}
break;
case "silent":
if (!this.me[this.vars.aimVal]||
this.me.weapon.noAim) {
if (!this.me.canThrow||!isMelee)
input[this.key.shoot] = 1;
} else input[this.key.scope] = 1;
input[this.key.ydir] = yDire * 1e3
input[this.key.xdir] = xDire * 1e3
break;
case "trigger":
if (input[this.key.scope] && canSee && inCast)
{
input[this.key.shoot] = 1;
input[this.key.ydir] = yDire * 1e3
input[this.key.xdir] = xDire * 1e3
}
break;
case "correction":
if (input[this.key.shoot] == 1) {
input[this.key.ydir] = yDire * 1e3
input[this.key.xdir] = xDire * 1e3
}
break;
default:
this.resetLookAt();
break;
}
}
} else {
this.resetLookAt();
//input = this.raidBot(input);
}
}
}

//else if (this.settings.autoClick.val && !this.ui.hasEndScreen) {


//this.config.deathDelay = 0;
//this.controls.toggle(true);
//}

//this.game.config.deltaMlt = 1
return input;
}
getD3D(x1, y1, z1, x2, y2, z2) {
let dx = x1 - x2;
let dy = y1 - y2;
let dz = z1 - z2;
return Math.sqrt(dx * dx + dy * dy + dz * dz);
}

getAngleDst(a, b) {
return Math.atan2(Math.sin(b - a), Math.cos(a - b));
}

getXDire(x1, y1, z1, x2, y2, z2) {


let h = Math.abs(y1 - y2);
let dst = this.getD3D(x1, y1, z1, x2, y2, z2);
return (Math.asin(h / dst) * ((y1 > y2)?-1:1));
}

getDir(x1, y1, x2, y2) {


return Math.atan2(y1 - y2, x1 - x2);
}

getDistance(x1, y1, x2, y2) {


return Math.sqrt((x2 -= x1) * x2 + (y2 -= y1) * y2);
}

containsPoint(point) {
let planes = this.renderer.frustum.planes;
for (let i = 0; i < 6; i ++) {
if (planes[i].distanceToPoint(point) < 0) {
return false;
}
}
return true;
}

getCanSee(from, toX, toY, toZ, boxSize) {


if (!from) return 0;
boxSize = boxSize||0;
for (let obj, dist = this.getD3D(from.x, from.y, from.z, toX, toY,
toZ), xDr = this.getDir(from.z, from.x, toZ, toX), yDr =
this.getDir(this.getDistance(from.x, from.z, toX, toZ), toY, 0, from.y), dx = 1 /
(dist * Math.sin(xDr - Math.PI) * Math.cos(yDr)), dz = 1 / (dist * Math.cos(xDr -
Math.PI) * Math.cos(yDr)), dy = 1 / (dist * Math.sin(yDr)), yOffset = from.y +
(from.height || 0) - this.consts.cameraHeight, aa = 0; aa <
this.game.map.manager.objects.length; ++aa) {
if (!(obj = this.game.map.manager.objects[aa]).noShoot &&
obj.active && !obj.transparent && (!this.settings.wallPenetrate.val || (!
obj.penetrable || !this.me.weapon.pierce))) {
let tmpDst = this.lineInRect(from.x, from.z, yOffset, dx, dz,
dy, obj.x - Math.max(0, obj.width - boxSize), obj.z - Math.max(0, obj.length -
boxSize), obj.y - Math.max(0, obj.height - boxSize), obj.x + Math.max(0, obj.width
- boxSize), obj.z + Math.max(0, obj.length - boxSize), obj.y + Math.max(0,
obj.height - boxSize));
if (tmpDst && 1 > tmpDst) return tmpDst;
}
}
/*
let terrain = this.game.map.terrain;
if (terrain) {
let terrainRaycast = terrain.raycast(from.x, -from.z, yOffset, 1 / dx,
-1 / dz, 1 / dy);
if (terrainRaycast) return utl.getD3D(from.x, from.y, from.z,
terrainRaycast.x, terrainRaycast.z, -terrainRaycast.y);
}
*/
return null;
}

lineInRect(lx1, lz1, ly1, dx, dz, dy, x1, z1, y1, x2, z2, y2) {
let t1 = (x1 - lx1) * dx;
let t2 = (x2 - lx1) * dx;
let t3 = (y1 - ly1) * dy;
let t4 = (y2 - ly1) * dy;
let t5 = (z1 - lz1) * dz;
let t6 = (z2 - lz1) * dz;
let tmin = Math.max(Math.max(Math.min(t1, t2), Math.min(t3, t4)),
Math.min(t5, t6));
let tmax = Math.min(Math.min(Math.max(t1, t2), Math.max(t3, t4)),
Math.max(t5, t6));
if (tmax < 0) return false;
if (tmin > tmax) return false;
return tmin;
}

lookDir(xDire, yDire) {
this.controls.object.rotation.y = yDire
this.controls[this.vars.pchObjc].rotation.x = xDire;
this.controls[this.vars.pchObjc].rotation.x = Math.max(-
this.consts.halfPI, Math.min(this.consts.halfPI,
this.controls[this.vars.pchObjc].rotation.x));
this.controls.yDr = (this.controls[this.vars.pchObjc].rotation.x %
Math.PI).round(3);
this.controls.xDr = (this.controls.object.rotation.y %
Math.PI).round(3);
this.renderer.camera.updateProjectionMatrix();
this.renderer.updateFrustum();
}

resetLookAt() {
this.controls.yDr = this.controls[this.vars.pchObjc].rotation.x;
this.controls.xDr = this.controls.object.rotation.y;
this.renderer.camera.updateProjectionMatrix();
this.renderer.updateFrustum();
}

world2Screen (position) {
let pos = position.clone();
let scaledWidth = this.ctx.canvas.width / this.scale;
let scaledHeight = this.ctx.canvas.height / this.scale;
pos.project(this.renderer.camera);
pos.x = (pos.x + 1) / 2;
pos.y = (-pos.y + 1) / 2;
pos.x *= scaledWidth;
pos.y *= scaledHeight;
return pos;
}
getInView(entity) {
return null == this.getCanSee(this.me, entity.x, entity.y, entity.z);
}

getIsFriendly(entity) {
return (this.me && this.me.team ? this.me.team : this.me.spectating ?
0x1 : 0x0) == entity.team
}
}

window[skidStr] = new Skid();

})([...Array(8)].map(_ =>
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'[~~(Math.random()*52)]).join(
''), CanvasRenderingContext2D.prototype);

//window.instructionHolder.style.display = "block";
// window.instructions.innerHTML = `<div id="settHolder"><img
src="https://i.imgur.com/yzb2ZmS.gif" width="25%"></div><a
href='https://skidlamer.github.io/wp/' target='_blank.'><div class="imageButton
discordSocial"></div></a>`

You might also like