// ==UserScript==
// @name MultiHack KillSwitch [WORKING 2023]
// @namespace Take Over MooMoo
// @version 0.3
// @description Take Over MooMoo.io
// @match *://moomoo.io/*
// @match *://*.moomoo.io/*
// @author Logixx
// @require https://gf.qytechs.cn/scripts/423602-msgpack/code/msgpack.js
// @require https://unpkg.com/[email protected]/lib/guify.min.js
// @require https://update.gf.qytechs.cn/scripts/480301/1283571/CowJS.js
// @grant none
// @license https://gf.qytechs.cn/en/users/1222651-logixx
// @icon https://moomoo.io/img/favicon.png?v=1
// @run-at document-start
// ==/UserScript==
(function () {
'use strict'
// Variables
var gearcounter = 1;
var gear = false;
var Allplayers = [];
var players = [];
var items = [];
var weapons = [];
var inGame = false;
var tmpHealth = 100;
var sTime = 0;
var sCount = 0;
var msgpack = window.msgpack;
var scale = 45;
var placeOffset = 5;
var ws;
var EnemyAngle1 = 0;
var lastWeaponRangeMultChange = null
var Boughtscuba = false;
var BoughtscubaEle;
var prevHatID = 0;
var prevTailID = 0;
var boughtItems = false;
var boughtItems2 = false;
var monkeyTail = false;
var boostHat = false;
var snowGear = false;
var PLAYER_SPEED = .0016;
var i = 0;
const { Cow, CowUtils } = window
var x1 = 0;
var y1 = 0;
function saveSettings(HACK, data) {
console.log(
'save: ' + HACK.toLowerCase().toString() + ' ' + data.toString()
)
localStorage.setItem(
HACK.toLowerCase().toString(),
data.toString()
)
}
var settings = {
ping: { e: localStorage.getItem('ping') || false },
showsid: {e: localStorage.getItem('showsid') || false },
percents: { e: localStorage.getItem('percents') || false },
tracers: { e: localStorage.getItem('tracers') || false },
hp: { e: localStorage.getItem('hp') || false },
circles_hp: { e: localStorage.getItem('circles_hp') || false },
inweaponrange: { e: Number(localStorage.getItem('inwprange')) || false },
whereurlooking: { e: Number(localStorage.getItem('whereurlooking')) || false },
healthbars: {e: Number(localStorage.getItem('healthbars')) || false },
hitcounter: { e: Number(localStorage.getItem('hitcounter')) || false },
hpcolor: 'red',
weaponrange: { e: Number(localStorage.getItem('weaponrange')) || 1 },
enabledhacks: { e: localStorage.getItem('enabledhacks') || false },
coloredstructures: { e: localStorage.getItem('coloredstructures') || false },
tripleautomill: { e: localStorage.getItem('tripleautomill') || false, k: localStorage.getItem('tripleautomillk') || 'KeyM', d: true, n: 'Triple AutoMill' },
autoboost: { e: localStorage.getItem('autoboost') || false, k: localStorage.getItem('autoboostk') || 'KeyB', d: true, n: 'AutoBoost' },
autoboostspikes: { e: localStorage.getItem('autoboostspikes') || false, k: localStorage.getItem('autoboostspikesk') ||'KeyS', d: true, n: 'AutoBoost + Spikes' },
autotrap: { e: localStorage.getItem('autotrap') || false, k: localStorage.getItem('autotrapk') || 'KeyT', d: true, n: 'AutoTrap' },
autoheal: { e: localStorage.getItem('autoheal') || false, k: localStorage.getItem('autohealk') || 'KeyH', s: Number(localStorage.getItem('autoheals')) || 10, d: true, n: 'AutoHeal'},
autoscuba: { e: localStorage.getItem('autoscuba') || false, k: localStorage.getItem('autoscubak') || 'KeyS', d: false },
autobreak: { e: localStorage.getItem('autobreak') || false, k: localStorage.getItem('autobreakk') || 'KeyD', d: true, n: 'AutoBreak' },
autospeed_hat_acc: { e: localStorage.getItem('autospeed_hat_acc') || false, k: localStorage.getItem('autospeed_hat_acck') || 'KeyA', d: true, n: 'AutoSpeed + Hat + Acc' },
toggleoffspeed_hit_and_on: { e: localStorage.getItem('toggleoffspeed_hit_and_on') || false, k: localStorage.getItem('toggleoffspeed_hit_and_onk') || 'KeyL', d: false },
antibow: { e: localStorage.getItem('antibow') || false, k: localStorage.getItem('antibowk') || 'KeyQ', d: true, n: 'AntiBow' },
insta_kill: { e: localStorage.getItem('insta_kill') || false, k: localStorage.getItem('insta_killk') || 'KeyE', d: true, n: 'Insta Kill' },
biomegear: { e: localStorage.getItem('biomegear') || true },
autojoin: { e: localStorage.getItem('autojoin') || false, n: Number(localStorage.getItem('autojoinn')) || 0 },
autocreate: { e: localStorage.getItem('autocreate') || false, n: localStorage.getItem('autocreaten') || 'Killers' },
autoleave: {e: localStorage.getItem('autoleave') || false },
autokick: {e: localStorage.getItem('autokick') || false, n: localStorage.getItem('autokickn') || '' },
};
const inventory = {
primary: null,
secondary: null,
food: null,
wall: null,
spike: null,
mill: null,
mine: null,
boostPad: null,
trap: null,
turret: null,
spawnpad: null
};
const myPlayer = {
food: null,
wood: null,
stone: null,
points: null,
kills: null,
sid: null,
x: null,
y: null,
dir: null,
buildIndex: null,
weaponIndex: null,
weaponVariant: null,
team: null,
isLeader: null,
skinIndex: null,
tailIndex: null,
iconIndex: null,
CAMX: 0,
CAMY: 0,
};
//GUI
const gui = new guify({
title: 'MultiHack',
align: 'right',
width: 600,
opacity: 0.8,
barMode: 'none',
theme: {
colors: {
panelBackground: 'rgb(0,0,0)',
componentBackground: 'rgb(10,10,25)',
componentForeground: 'red',
textPrimary: 'red',
textSecondary: 'red',
textHover: 'rgb(0,0,0)',
},
font: {
fontSize: '20px',
fontFamily: 'Hammersmith',
},
},
})
const folders = [
'Visuals',
'Misc',
'Keybinds',
'Team',
];
const visuals = [
'Ping',
'ShowSID',
'Percents',
'Tracers',
'Hp',
'EnabledHacks',
'ColoredStructures',
'HealthBars',
'Circles_Hp',
'InWeaponRange',
'WhereURLooking',
'HitCounter',
'WeaponRange',
];
const misc = [
'TripleAutoMill',
'AutoBoost',
'AutoBoostSpikes',
'AutoTrap',
'AutoHeal',
'AutoScuba',
'AutoBreak',
'AutoSpeed_Hat_Acc',
'ToggleOffSpeed_Hit_And_On',
'AntiBow',
'Insta_Kill',
'BiomeGear',
];
const team = [
'AutoJoin',
'ID To Join:',
'AutoCreate',
'Name To Create:',
'AutoLeave',
'AutoKick',
'Persons ID To Kick:',
];
for (let key in settings) {
if (localStorage.getItem(key.toLowerCase() === undefined)) {
localStorage.setItem(key.toLowerCase(), 'false')
}
if (localStorage.getItem(key.toLowerCase()) === 'false') {
settings[key].e = false
} else
if (localStorage.getItem(key.toLowerCase()) === 'true') {
settings[key].e = true
}
}
for(let j0 = 0; j0 < folders.length; j0++) {
gui.Register({
type: 'folder',
label: folders[j0],
open: !1
});
};
for (let j1 = 0; j1 < visuals.length; j1++) {
if (visuals[j1].toLowerCase() === 'weaponrange') {
gui.Register({
type: 'range',
label: visuals[j1],
folder: folders[0],
object: settings[visuals[j1].toLowerCase()],
property: 'e',
step: 1,
min: 1,
max: 5,
onChange: (data) => {
saveSettings(visuals[j1].toLowerCase(), data);
}
});
} else {
gui.Register({
type: 'checkbox',
label: visuals[j1],
folder: folders[0],
object: settings[visuals[j1].toLowerCase()],
property: 'e',
onChange: (data) => {
saveSettings(visuals[j1].toLowerCase(), data);
}
});
};
};
for (let j2 = 0; j2 < misc.length; j2++) {
gui.Register({
type: 'checkbox',
label: misc[j2],
folder: folders[1],
object: settings[misc[j2].toLowerCase()],
property: 'e',
onChange: (data) => {
saveSettings(misc[j2].toLowerCase(), data);
}
});
};
const script = {
setKeybind: function (selection, save) {
selection.k = 'Press Any Key'
document.addEventListener('keydown', function set_key(e) {
if (e.key === 'Escape') {
selection.k = 'NONE'
localStorage.setItem(save, selection.k)
document.removeEventListener('keydown', set_key)
} else {
selection.k = e.code
localStorage.setItem(save, selection.k)
document.removeEventListener('keydown', set_key)
}
})
},
};
gui.Register({
type: 'button',
label: 'AUTUTU',
folder: folders[3],
action: () => {
testerWeap()
}
});
gui.Register({
type: 'button',
label: team[0],
folder: folders[3],
action: () => {
joinTeam(settings.autojoin.n)
}
});
gui.Register({
type: 'text',
label: team[1],
folder: folders[3],
object: settings.autojoin,
property: 'n',
onChange: (data) => {
saveSettings('autojoinn', data);
}
});
gui.Register({
type: 'button',
label: team[2],
folder: folders[3],
action: () => {
createTeam(settings.autocreate.n)
}
});
gui.Register({
type: 'text',
label: team[3],
folder: folders[3],
object: settings.autocreate,
property: 'n',
onChange: (data) => {
saveSettings('autocreaten', data);
}
});
gui.Register({ // e
type: 'button',
label: team[4],
folder: folders[3],
action: () => {
leaveTeam()
}
});
gui.Register({ // e
type: 'button',
label: team[5],
folder: folders[3],
action: () => {
kickTeam(settings.autokick.n)
}
});
gui.Register({
type: 'text',
label: team[6],
folder: folders[3],
object: settings.autokick,
property: 'n',
onChange: (data) => {
saveSettings('autokickn', data);
}
});
gui.Register({
type: 'button',
label: 'Set '+misc[0]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.tripleautomill, 'tripleautomillk')
}
});
gui.Register({
type: 'display',
label: misc[0]+' Key:',
folder: folders[2],
object: settings[misc[0].toLowerCase()],
property: 'k',
});
//AutoBoost
gui.Register({
type: 'button',
label: 'Set '+misc[1]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.autoboost, 'autoboostk')
}
});
gui.Register({
type: 'display',
label: misc[1]+' Key:',
folder: folders[2],
object: settings[misc[1].toLowerCase()],
property: 'k',
});
//AutoBoostSpikes
gui.Register({
type: 'button',
label: 'Set '+misc[2]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.autoboostspikes, 'autoboostspikesk')
}
});
gui.Register({
type: 'display',
label: misc[2]+' Key:',
folder: folders[2],
object: settings[misc[2].toLowerCase()],
property: 'k',
});
//AutoTrap
gui.Register({
type: 'button',
label: 'Set '+misc[3]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.autotrap, 'autotrapk')
}
});
gui.Register({
type: 'display',
label: misc[3]+' Key:',
folder: folders[2],
object: settings[misc[3].toLowerCase()],
property: 'k',
});
//AutoHeal
gui.Register({
type: 'button',
label: 'Set '+misc[4]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.autoheal, 'autohealk')
}
});
gui.Register({
type: 'display',
label: misc[4]+' Key:',
folder: folders[2],
object: settings[misc[4].toLowerCase()],
property: 'k',
});
gui.Register({
type: 'range',
label: misc[4]+ ' Speed:',
folder: folders[2],
min: 1,
max: 1000,
step: 1,
object: settings[misc[4].toLowerCase()],
property: 's',
onChange() {
saveSettings('autoheals', settings.autoheal.s)
}
});
//AutoScuba
gui.Register({
type: 'button',
label: 'Set '+misc[5]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.autoscuba, 'autoscubak')
}
});
gui.Register({
type: 'display',
label: misc[5]+' Key:',
folder: folders[2],
object: settings[misc[5].toLowerCase()],
property: 'k',
});
//AutoBreak
gui.Register({
type: 'button',
label: 'Set '+misc[6]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.autobreak, 'autobreakk')
}
});
gui.Register({
type: 'display',
label: misc[6]+' Key:',
folder: folders[2],
object: settings[misc[6].toLowerCase()],
property: 'k',
});
//AutoSpeed_Hat_Acc
gui.Register({
type: 'button',
label: 'Set '+misc[7]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.autospeed_hat_acc, 'autospeed_hat_acck')
}
});
gui.Register({
type: 'display',
label: misc[7]+' Key:',
folder: folders[2],
object: settings[misc[7].toLowerCase()],
property: 'k',
});
//ToggleOffSpeed_Hit_And_On
gui.Register({
type: 'button',
label: 'Set '+misc[8]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.toggleoffspeed_hit_and_on, 'toggleoffspeed_hit_and_onk')
}
});
gui.Register({
type: 'display',
label: misc[8]+' Key:',
folder: folders[2],
object: settings[misc[8].toLowerCase()],
property: 'k',
});
//AntiBow
gui.Register({
type: 'button',
label: 'Set '+misc[9]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.antibow, 'antibowk')
}
});
gui.Register({
type: 'display',
label: misc[9]+' Key:',
folder: folders[2],
object: settings[misc[9].toLowerCase()],
property: 'k',
});
//Insta_Kill
gui.Register({
type: 'button',
label: 'Set '+misc[10]+' Key',
folder: folders[2],
action: () => {
script.setKeybind(settings.insta_kill, 'insta_killk')
}
});
gui.Register({
type: 'display',
label: misc[10]+' Key:',
folder: folders[2],
object: settings[misc[10].toLowerCase()],
property: 'k',
});
const join = message => Array.isArray(message) ? [...message] : [...message];
// WebSocket setup
ws = new Promise(function (resolve) {
let {
send
} = WebSocket.prototype;
WebSocket.prototype.send = function (...x) {
send.apply(this, x);
this.send = send;
this.io = function (...datas) {
const [packet, ...data] = datas;
this.send(new Uint8Array(Array.from(msgpack.encode([packet, data]))));
};
document.addEventListener("keydown", event => {
if ('Key'+event.key.toLocaleUpperCase() === settings.autoboost.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autoboost.e = true;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.autoboostspikes.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autoboostspikes.e = true;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.autotrap.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autotrap.e = true;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.insta_kill.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.insta_kill.e = true;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.autospeed_hat_acc.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autospeed_hat_acc.e = true;
};
});
document.addEventListener("keyup", event => {
if ('Key'+event.key.toLocaleUpperCase() === settings.autoboost.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autoboost.e = false;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.autoboostspikes.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autoboostspikes.e = false;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.autotrap.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autotrap.e = false;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.insta_kill.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.insta_kill.e = false;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.autospeed_hat_acc.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autospeed_hat_acc.e = false;
};
});
document.addEventListener("keydown", event => {
if ('Key'+event.key.toLocaleUpperCase() === settings.tripleautomill.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.tripleautomill.e = !settings.tripleautomill.e;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.autoheal.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autoheal.e = !settings.autoheal.e;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.autobreak.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autobreak.e = !settings.autobreak.e;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.antibow.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.antibow.e = !settings.antibow.e;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.toggleoffspeed_hit_and_on.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.toggleoffspeed_hit_and_on.e = !settings.toggleoffspeed_hit_and_on.e;
};
if ('Key'+event.key.toLocaleUpperCase() === settings.autoscuba.k && document.activeElement.id.toLowerCase() !== 'chatbox') {
settings.autoscuba.e = !settings.autoscuba.e;
};
});
this.addEventListener("message", function (e) {
const [packet, data] = msgpack.decode(new Uint8Array(e.data));
let sid = data[0];
let health = data[1];
var tmpData = msgpack.decode(new Uint8Array(e.data));
var ms = e;
let addEventListener = {
setupGame: "C",
updateHealth: "O",
killPlayer: "P",
updateItems: "V"
};
switch (packet) {
case addEventListener.setupGame:
inGame = true;
items = [0, 3, 6, 10];
weapons = [0];
break;
case addEventListener.updateHealth:
if (sid === myPlayer.sid) {
if (inGame) {
if (health < 100 && health > 0 && settings.autoheal.e) {
setTimeout(function () {
chat('AutoHealing...')
place(inventory.food);
}, Number(settings.autoheal.s));
}
}
if (tmpHealth - health < 0) {
if (sTime) {
let timeHit = Date.now() - sTime;
sTime = 0;
sCount = timeHit <= 120 ? sCount + 1 : Math.max(0, sCount - 2);
}
} else {
sTime = Date.now();
}
tmpHealth = health;
}
break;
case addEventListener.killPlayer:
inGame = false;
tmpHealth = 200;
break;
case addEventListener.updateItems:
if (sid) {
if (health) {
weapons = sid;
} else {
items = sid;
}
}
break;
};
if ((ms = undefined) || (tmpData = (ms = tmpData.length > 1 ? [tmpData[0], ...join(tmpData[1])] : tmpData)[0]) || ms) {
if ("C" == tmpData && null === myPlayer.sid && (myPlayer.sid = ms[1]) || "a" == tmpData) {
for (tmpData = 0; tmpData < ms[1].length / 13; tmpData++) {
var data2 = ms[1].slice(13 * tmpData, 13 * (tmpData + 1));
if (data2[0] == myPlayer.sid) {
Object.assign(myPlayer, {
food: document.getElementById("foodDisplay").innerText,
wood: document.getElementById("woodDisplay").innerText,
stone: document.getElementById("stoneDisplay").innerText,
points: document.getElementById("scoreDisplay").innerText,
kills: document.getElementById("killCounter").innerText,
sid: data2[0],
x: data2[1],
y: data2[2],
dir: data2[3],
buildIndex: data2[4],
weaponIndex: data2[5],
weaponVariant: data2[6],
team: data2[7],
isLeader: data2[8],
skinIndex: data2[9],
tailIndex: data2[10],
iconIndex: data2[11]
});
} else {
const existingAllPlayerIndex = Allplayers.findIndex(Allplayers => Allplayers.sid === data2[0]);
const existingPlayerIndex = players.findIndex(players => players.sid === data2[0]);
if (existingPlayerIndex !== -1) {
// Update existing player information
players[existingPlayerIndex] = {
sid: data2[0],
x: data2[1],
y: data2[2],
dir: data2[3],
buildIndex: data2[4],
weaponIndex: data2[5],
weaponVariant: data2[6],
team: data2[7],
isLeader: data2[8],
skinIndex: data2[9],
tailIndex: data2[10],
iconIndex: data2[11]
};
} else {
players.push({
sid: data2[0],
x: data2[1],
y: data2[2],
dir: data2[3],
buildIndex: data2[4],
weaponIndex: data2[5],
weaponVariant: data2[6],
team: data2[7],
isLeader: data2[8],
skinIndex: data2[9],
tailIndex: data2[10],
iconIndex: data2[11]
});
}
if (existingAllPlayerIndex !== -1) {
// Update existing player information
Allplayers[existingAllPlayerIndex] = {
sid: data2[0],
x: data2[1],
y: data2[2],
dir: data2[3],
buildIndex: data2[4],
weaponIndex: data2[5],
weaponVariant: data2[6],
team: data2[7],
isLeader: data2[8],
skinIndex: data2[9],
tailIndex: data2[10],
iconIndex: data2[11]
};
} else {
// Add a new player entry to the players array
Allplayers.push({
sid: data2[0],
x: data2[1],
y: data2[2],
dir: data2[3],
buildIndex: data2[4],
weaponIndex: data2[5],
weaponVariant: data2[6],
team: data2[7],
isLeader: data2[8],
skinIndex: data2[9],
tailIndex: data2[10],
iconIndex: data2[11]
});
}
};
if (myPlayer.skinIndex < 1 || !myPlayer.tailIndex < 1) {
PLAYER_SPEED = .0016;
} else {
PLAYER_SPEED = (.0016 * (myPlayer.skinIndex ? (myPlayer.skinIndex === 56 ? (1.1) : myPlayer.skinIndex === 12 ? (1.16) : 1 ) : 1 ) * (myPlayer.tailIndex ? (myPlayer.tailIndex === 11 ? (1.35) : (myPlayer.tailIndex === 19 ? (1.1) : 1 ) ) : 1 ));
};
// LOGIC AUTO MILL :D
if (y1 !== myPlayer.y || x1 !== myPlayer.x) {
if (Math.atan2(y1 - myPlayer.y, x1 - myPlayer.x) < (scale + placeOffset) * 2) {
const millCost = {
wood: (inventory.mill === 10 ? 50 : (inventory.mill === 11 ? 60 : (inventory.mill === 12 ? 100 : 50))),
stone: (inventory.mill === 10 ? 10 : (inventory.mill === 11 ? 20 : (inventory.mill === 12 ? 50 : 10))),
};
if (settings.tripleautomill.e && myPlayer.wood >= millCost.wood && myPlayer.stone >= millCost.stone && inGame) {
let angle = Math.atan2(y1 - myPlayer.y, x1 - myPlayer.x);
setTimeout(function () {
chat('TripleMill...')
place(inventory.mill, angle + Math.PI / 2.5);
place(inventory.mill, angle);
place(inventory.mill, angle - Math.PI / 2.5);
}, PLAYER_SPEED);
};
// AUTO BOOST PAD :D
const boostCost = {
wood: 5,
stone: 20,
};
if (settings.autoboost.e && myPlayer.wood >= boostCost.wood && myPlayer.stone >= boostCost.stone && inGame) {
let angle = Math.atan2(y1 - myPlayer.y, x1 - myPlayer.x);
setTimeout(function () {
chat('Boosting...')
place(inventory.boostPad, angle + Math.PI);
}, PLAYER_SPEED);
};
// AUTO BOOST SPIKES :D
const spikeCost = {
wood: (inventory.spike === 6 ? 20 : (inventory.spike === 7 ? 30 : (inventory.spike === 8 ? 35 : (inventory.spike === 9 ? 30 : 20)))),
stone: (inventory.spike === 6 ? 5 : (inventory.spike === 7 ? 10 : (inventory.spike === 8 ? 15 : (inventory.spike === 9 ? 20 : 5)))),
}
if (settings.autoboostspikes.e && myPlayer.wood >= boostCost.wood+spikeCost.wood && myPlayer.stone >= boostCost.stone+spikeCost.stone && inGame) {
let angle = Math.atan2(y1 - myPlayer.y, x1 - myPlayer.x);
chat('Boosting + Spikes...')
place(inventory.spike, angle + Math.PI / 2);
place(inventory.boostPad, angle + Math.PI);
place(inventory.spike, angle - Math.PI / 2);
};
// AUTO TRAP :D
const trapCost = {
wood: 30,
stone: 30,
}
if (settings.autotrap.e && myPlayer.wood >= trapCost.wood && myPlayer.stone >= trapCost.stone && inGame) {
setTimeout(function () {
chat('AutoTraping...')
let angle = Math.atan2(y1 - myPlayer.y, x1 - myPlayer.x);
place(inventory.trap, angle + Math.PI / 2.5);
place(inventory.trap, angle + Math.PI);
place(inventory.trap, angle - Math.PI / 2.5);
}, PLAYER_SPEED);
};
// AUTO SCUBA :D
if (Boughtscuba === true) {} else {
BoughtscubaEle = document.getElementById('storeDisplay21');
};
if (Boughtscuba !== true && Number(myPlayer.points) >= 2500 && settings.autoscuba.e) { console.log(`BUY ${myPlayer.points}`); storeBuy(31); storeEquip(31); Boughtscuba = true; BoughtscubaEle = true; };
if (BoughtscubaEle !== true && BoughtscubaEle !== null) {
if (BoughtscubaEle.innerText.includes('Equip') && Boughtscuba !== false) { Boughtscuba = true; BoughtscubaEle = true; };
};
var inWater = false;
var inSnow = false;
if (Number(myPlayer.y) >= ((14400 / 2) - 375) && Number(myPlayer.y) <= ((14400 / 2) + 375)) {
inWater = true;
};
const snowY = window.config.snowBiomeTop
if(myPlayer.y <= snowY) {
inSnow = true;
};
if (settings.autospeed_hat_acc.e || inWater || inSnow) {
if (!snowGear && Number(myPlayer.points) >= 600) {
storeBuy(15);
snowGear = true;
};
if (inSnow && snowGear && inGame && settings.biomegear.e) {
storeEquip(15);
};
if (inWater && settings.autoscuba.e && inGame && Boughtscuba) {
storeEquip(31);
};
if (!boughtItems && settings.autospeed_hat_acc.e && Number(myPlayer.points) >= 6000) {
storeBuy(12, 0);
boughtItems = true;
} else
if (!boughtItems2 && settings.autospeed_hat_acc.e && Number(myPlayer.points) >= 2000) {
storeBuy(11, 1);
boughtItems2 = true;
};
if (settings.autospeed_hat_acc.e && inGame && boughtItems && boughtItems2) {
chat('Speed...')
if (boughtItems && !boostHat && monkeyTail) {
storeEquip(12, 0);
boostHat = true;
} else
if (boughtItems2 && !monkeyTail) {
storeEquip(11, 1);
monkeyTail = true;
};
}
} else {
if (!settings.autospeed_hat_acc.e && inGame) {
if (monkeyTail && boughtItems2 && !boostHat) {
storeEquip(prevTailID, 1);
monkeyTail = false;
} else
if (boostHat && boughtItems) {
storeEquip(prevHatID, 0);
boostHat = false;
};
};
if (prevHatID !== Number(myPlayer.skinIndex) && myPlayer.skinIndex !== 31 && myPlayer.skinIndex !== 12 && myPlayer.skinIndex !== 15) {
prevHatID = Number(myPlayer.skinIndex);
};
if (prevTailID !== Number(myPlayer.tailIndex) && myPlayer.tailIndex !== 11) {
prevTailID = Number(myPlayer.tailIndex);
};
i === 0 ? (
storeEquip(prevHatID, i),
i = 1
) : (
storeEquip(prevTailID, i),
i = 0
);
};
x1 = myPlayer.x;
y1 = myPlayer.y;
};
};
};
};
cacheItems();
};
});
resolve(this);
};
});
// Functions
const sendPacket = function (...datas) {
const [type, ...data] = datas;
var binary = msgpack.encode([type, data]);
ws.then(function (wsInstance) {
wsInstance.send(new Uint8Array(Array.from(binary)));
});
};
function findPlayerBySID(sid) {
for (var i = 0; i < Allplayers.length; i++) {
if (Allplayers[i].sid == sid) {
return Allplayers[i];
}
} return null;
};
function objectAlly(sid) {
var tmpObj = findPlayerBySID(sid);
if (myPlayer.sid == sid) {
return true
} else if (!tmpObj) {
return false;
} else if (tmpObj.team) {
return tmpObj.team === myPlayer.team ? true : false
} else {
return false
};
};
function isAlly(sid){
var tmpObj = findPlayerBySID(sid)
if (!tmpObj){
return false
}
if (myPlayer.sid == sid){
return true
}else if (tmpObj.team){
return tmpObj.team === myPlayer.team ? true : false
} else {
return
}
};
const emit = (event, a, b, c, m, r) => ws.then(function (wsInstance){wsInstance.send(Uint8Array.from([...msgpack.encode([event, [a, b, c, m, r]])]))});
//BUYEQUIP
const buyEquip = (id) => {
window.storeBuy(id)
setTimeout(() => {
window.storeEquip(id)
}, 15);
}
//TEAM
const leaveTeam = () => {
sendPacket("N")
};
const kickTeam = (id) => {
sendPacket("Q", Number(id))
}
const createTeam = (name) => {
sendPacket("L", name.toString().charAt(0).toUpperCase()+name.toString().slice(1));
}
const joinTeam = (id) => {
sendPacket("b", Number(id));
};
// PLACE
const place = (thing, angle) => {
emit("G", thing, false);
emit("d", 1, angle);
emit("d", 0, angle);
emit("G", myPlayer.weaponIndex, true);
};
// SELECT WEAPON
const selectWeapon = function (index) {
if (inGame) {
console.log(weapons[index])
emit("G", weapons[index], true);
}
};
// HIT
const hit = function (ang) {
if (inGame) {
emit("d", 1, ang);
emit("d", 0, ang);
}
};
// CHAT
const chat = function (e) {
if (inGame) {
sendPacket("S", 1);
sendPacket("K", 1);
}
};
const cacheItems = () => {
for (let c = 0; c < 9; c++) {
var _document$getElementB;
if (((_document$getElementB = document.getElementById(`actionBarItem${c}`)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.offsetParent) !== null) {
inventory.primary = c;
}
}
for (let s = 9; s < 16; s++) {
var _document$getElementB2;
if (((_document$getElementB2 = document.getElementById(`actionBarItem${s}`)) === null || _document$getElementB2 === void 0 ? void 0 : _document$getElementB2.offsetParent) !== null) {
inventory.secondary = s;
}
}
for (let P = 16; P < 19; P++) {
var _document$getElementB3;
if (((_document$getElementB3 = document.getElementById(`actionBarItem${P}`)) === null || _document$getElementB3 === void 0 ? void 0 : _document$getElementB3.offsetParent) !== null) {
inventory.food = P - 16;
}
}
for (let f = 19; f < 22; f++) {
var _document$getElementB4;
if (((_document$getElementB4 = document.getElementById(`actionBarItem${f}`)) === null || _document$getElementB4 === void 0 ? void 0 : _document$getElementB4.offsetParent) !== null) {
inventory.wall = f - 16;
}
}
for (let _ = 22; _ < 26; _++) {
var _document$getElementB5;
if (((_document$getElementB5 = document.getElementById(`actionBarItem${_}`)) === null || _document$getElementB5 === void 0 ? void 0 : _document$getElementB5.offsetParent) !== null) {
inventory.spike = _ - 16;
}
}
for (let u = 26; u < 29; u++) {
var _document$getElementB6;
if (((_document$getElementB6 = document.getElementById(`actionBarItem${u}`)) === null || _document$getElementB6 === void 0 ? void 0 : _document$getElementB6.offsetParent) !== null) {
inventory.mill = u - 16;
}
}
for (let I = 29; I < 31; I++) {
var _document$getElementB7;
if (((_document$getElementB7 = document.getElementById(`actionBarItem${I}`)) === null || _document$getElementB7 === void 0 ? void 0 : _document$getElementB7.offsetParent) !== null) {
inventory.mine = I - 16;
}
}
for (let p = 31; p < 33; p++) {
var _document$getElementB8;
if (((_document$getElementB8 = document.getElementById(`actionBarItem${p}`)) === null || _document$getElementB8 === void 0 ? void 0 : _document$getElementB8.offsetParent) !== null) {
inventory.boostPad = p - 16;
}
}
for (let x = 31; x < 33; x++) {
var _document$getElementB9;
if (((_document$getElementB9 = document.getElementById(`actionBarItem${x}`)) === null || _document$getElementB9 === void 0 ? void 0 : _document$getElementB9.offsetParent) !== null) {
inventory.trap = x - 16;
}
}
for (let g = 29; g < 31; g++) {
var _document$getElementB10;
if (((_document$getElementB10 = document.getElementById(`actionBarItem${g}`)) === null || _document$getElementB10 === void 0 ? void 0 : _document$getElementB10.offsetParent) !== null && g !== 36) {
inventory.turret = g - 16;
}
}
inventory.spawnpad = 36;
};
window.addEventListener('DOMContentLoaded', () => {
var connecting = document.getElementById('loadingText');
var diedMsg = document.getElementById('diedText');
var gameLogo = document.getElementById('gameName');
connecting.textContent = 'Switching On KillSwitch';
diedMsg.textContent = 'You Died, Go MOD!';
gameLogo.textContent = 'KillSwitch';
gameLogo.style.color = 'black';
lastWeaponRangeMultChange = Date.now()
resetPlayers()
});
function resetPlayers() {
players = [];
setTimeout(() => {
resetPlayers()
}, 1000);
};
function drawCircleBar(color, width, scale, endAngle) {
const { context } = Cow.renderer
context.strokeStyle = color
context.lineWidth = width
context.lineCap = "round"
context.beginPath()
context.arc(0, 0, scale, 0, endAngle)
context.stroke()
context.closePath()
};
function drawCircle(x, y, color, radius, lineWidth) {
const ctx = document.getElementById('gameCanvas').getContext('2d');
ctx.beginPath();
ctx.arc(x, y, radius, 0, 2 * Math.PI);
ctx.strokeStyle = color;
ctx.lineWidth = lineWidth
ctx.stroke();
};
function weaponRanges(weaponID) {
switch (weaponID) {
case 0:
return 65;
break;
case 1:
return 70;
break;
case 2:
return 75;
break;
case 3:
return 110;
break;
case 4:
return 118;
break;
case 5:
return 142;
break;
case 6:
return 110;
break;
case 7:
return 65;
break;
case 8:
return 70;
break;
case 9:
return 200;
break;
case 10:
return 75;
break;
case 11:
return 0;
break;
case 12:
return 200;
break;
case 13:
return 200;
break;
case 14:
return 0;
break;
case 15:
return 200;
break;
default:
return 0;
break;
};
};
Cow.addRender("building-health-bars", () => {
if (!Cow.player?.alive) return
if (settings.insta_kill.e && inGame) {
// console.log('kiddos')
// if (!gear && Number(myPlayer.points) >= 50000) {
// console.log('buying', gearcounter)
// gearcounter === 1 ? (
// storeBuy(53), gearcounter++) : gearcounter === 2 ? (
// storeBuy(20), gearcounter++) : gearcounter === 3 ? (
// storeBuy(7), gearcounter++) : gearcounter === 4 ? (
// storeBuy(55), gearcounter++) : ( gear = true, gearcounter = 1);
// };
// if (gear) {
for (let i = 0; i < players.length; i++) {
buyEquip(53) // turret
var nearestEnemyAngle = Math.atan2(players[i].y - myPlayer.y, players[i].x - myPlayer.x);
const weaponRangePrimary = weaponRanges(inventory.primary);
const weaponRangeSecondary = weaponRanges(inventory.secondary);
console.log(weaponRangeSecondary, weaponRangePrimary, nearestEnemyAngle)
if (nearestEnemyAngle > weaponRangePrimary) return
if (weaponRangeSecondary === 200) {
console.log('selecting')
selectWeapon(1); // select secondary
setTimeout(() => {
buyEquip(7); // bull helmet
hit(nearestEnemyAngle); // fire
setTimeout(() => {
buyEquip(20); // samurai
setTimeout(() => {
if (inventory.primary !== 8) {
buyEquip(55); // bloddthirster
selectWeapon(0); // select primary
setTimeout(() => {
nearestEnemyAngle = Math.atan2(players[i].y - myPlayer.y, players[i].x - myPlayer.x);
hit(nearestEnemyAngle); // hit the enemy
hit(nearestEnemyAngle); // hit the enemy
setTimeout(() => {
selectWeapon(0)
storeEquip(0)
}, 20);
}, 20);
} else {
chat('Sh1t Stick');
buyEquip(53); // turret
setTimeout(() => {
nearestEnemyAngle = Math.atan2(players[i].y - myPlayer.y, players[i].x - myPlayer.x);
place(inventory.spike, nearestEnemyAngle - Math.PI / 2);
place(inventory.spike, nearestEnemyAngle + Math.PI);
place(inventory.spike, nearestEnemyAngle + Math.PI / 2);
setTimeout(() => {
selectWeapon(0)
storeEquip(0)
}, 20);
}, 20);
};
}, 20);
}, 20);
}, 20);
} else {
if (inventory.primary !== 8) {
buyEquip(55); // bloddthirster
selectWeapon(0); // select primary
hit(nearestEnemyAngle); // hit the enemy
hit(nearestEnemyAngle); // hit the enemy
} else {
chat('Sh1t Stick');
buyEquip(53); // turret
place(inventory.spike, nearestEnemyAngle - Math.PI / 2);
place(inventory.spike, nearestEnemyAngle + Math.PI);
place(inventory.spike, nearestEnemyAngle + Math.PI / 2);
};
};
// };
};
};
Object.assign(myPlayer, {
CAMX: Cow.player.renderX,
CAMY: Cow.player.renderY,
});
const { context } = Cow.renderer
const weaponRange = (Cow.player.weapon.range + Cow.player.scale / 2) * parseFloat(settings.weaponrange.e)
if ((Date.now() - lastWeaponRangeMultChange) <= 1500) {
const color = settings.coloredstructures.e?objectAlly(object.owner.sid) ? 'lime':'red':'blue';
context.save()
context.fillStyle = color
context.strokeStyle = color
context.globalAlpha = .3
context.lineWidth = 4
context.translate(Cow.player.renderX, Cow.player.renderY)
context.beginPath()
context.arc(0, 0, weaponRange, 0, Math.PI * 2)
context.fill()
context.globalAlpha = .7
context.stroke()
context.closePath()
context.restore()
} else {
lastWeaponRangeMultChange = null
};
if (settings.enabledhacks.e) {
(function () {
const ctx = document.getElementById('gameCanvas').getContext('2d');
let _ = 100;
let __ = 60;
for (let hack in settings) {
if (settings[hack].e && settings[hack].d) {
if (settings[hack].n === 'Triple AutoMill') __ = 75;
if (settings[hack].n === 'AutoBoost + Spikes') __ = 100;
if (settings[hack].n === 'AutoSpeed + Hat + Acc') __ = 125;
ctx.save();
ctx.beginPath();
ctx.lineWidth = 7;
ctx.fillStyle = 'red';
ctx.strokeStyle = 'black';
ctx.font = '22px Hammersmith, sans-serif';
ctx.strokeText(
settings[hack].n,
__,
_
);
ctx.fillText(
settings[hack].n,
__,
_
);
ctx.restore();
_ += 30;
};
};
})();
};
if (settings.showsid.e && inGame) {
(function () {
const ctx = document.getElementById('gameCanvas').getContext('2d');
ctx.save();
ctx.beginPath();
ctx.lineWidth = 7;
ctx.fillStyle = 'lime';
ctx.strokeStyle = 'black';
ctx.font = '22px Hammersmith, sans-serif';
ctx.strokeText(myPlayer.sid, Cow.player.renderX, Cow.player.renderY);
ctx.fillText(myPlayer.sid, Cow.player.renderX, Cow.player.renderY);
ctx.restore();
for (let t = 0; t < players.length; t++) {
const offsetX = window.config.maxScreenWidth/2-Cow.player.renderX;
const offsetY = window.config.maxScreenHeight/2-Cow.player.renderY;
const endX = Math.round(window.config.maxScreenWidth/2 - myPlayer.x + players[t].x - offsetX*2);
const endY = Math.round(window.config.maxScreenHeight/2 - myPlayer.y + players[t].y - offsetY*2);
ctx.save();
ctx.beginPath();
ctx.lineWidth = 7;
ctx.fillStyle = isAlly(players[t].sid) ? 'lime' : 'red';
ctx.strokeStyle = 'black';
ctx.font = '22px Hammersmith, sans-serif';
ctx.strokeText(players[t].sid, endX, endY);
ctx.fillText(players[t].sid, endX, endY);
ctx.restore();
}
})();
};
if (settings.tracers.e && inGame) {
(function () {
const ctx = document.getElementById('gameCanvas').getContext('2d');
for (let t = 0; t < players.length; t++) {
ctx.save();
ctx.beginPath();
ctx.lineWidth = 3;
ctx.moveTo(Cow.player.renderX, Cow.player.renderY);
const offsetX = window.config.maxScreenWidth/2-Cow.player.renderX
const offsetY = window.config.maxScreenHeight/2-Cow.player.renderY
const endX = Math.round(window.config.maxScreenWidth/2 - myPlayer.x + players[t].x - offsetX*2);
const endY = Math.round(window.config.maxScreenHeight/2 - myPlayer.y + players[t].y - offsetY*2);
ctx.lineWidth = 5
ctx.lineTo(endX, endY);
ctx.strokeStyle = isAlly(players[t].sid) ? 'lime' : 'red';
ctx.stroke();
drawCircle(endX, endY, isAlly(players[t].sid) ? 'lime' : 'red', 45, 5);
ctx.restore();
}
})();
};
if (settings.ping.e) {
const ping = document.getElementById('pingDisplay');
ping.style.display = 'block';
ping.style.fontSize = '22px';
} else {
const ping = document.getElementById('pingDisplay');
ping.style.display = 'none';
};
if (settings.hp.e && inGame) {
const ctx = document.getElementById('gameCanvas').getContext('2d');
ctx.save();
ctx.beginPath();
ctx.lineWidth = 7;
ctx.fillStyle = 'lime';
ctx.strokeStyle = 'black';
ctx.font = '22px Hammersmith, sans-serif';
ctx.strokeText(Math.round(tmpHealth*2)+'hp',Cow.player.renderX,Cow.player.renderY+100);
ctx.fillText(Math.round(tmpHealth*2)+'hp',Cow.player.renderX,Cow.player.renderY+100);
ctx.restore();
};
if (settings.percents.e && inGame) {
const ctx = document.getElementById('gameCanvas').getContext('2d');
ctx.save();
ctx.beginPath();
ctx.lineWidth = 7;
ctx.fillStyle = 'lime';
ctx.strokeStyle = 'black';
ctx.font = '22px Hammersmith, sans-serif';
ctx.strokeText(Math.round(tmpHealth)+'%',Cow.player.renderX,Cow.player.renderY+125);
ctx.fillText(Math.round(tmpHealth)+'%',Cow.player.renderX,Cow.player.renderY+125);
ctx.restore();
};
Cow.objectsManager.eachVisible((object) => {
if (!object.isItem) return
const distance = CowUtils.getDistance(Cow.player, object) - object.scale
const angle = CowUtils.getDirection(object, Cow.player)
if (object.name === 'pit trap') {
if (distance < 50 && object.owner.sid !== myPlayer.sid && !(objectAlly(object.owner.sid))) {
if (settings.autobreak.e && inGame) {
setTimeout(function () {
chat('AutoBreaking...')
var index = 0;
let angle = Math.atan2(object.y - myPlayer.y, object.x - myPlayer.x);
if (inventory.primary === 8 && inventory.secondary !== 10) {
chat("KillSwitch MOD can't help you.");
};
index = inventory.secondary === 10 ? 1 : 0;
selectWeapon(index);
hit(angle);
selectWeapon(0);
}, PLAYER_SPEED);
};
};
};
if (settings.antibow.e && inGame) {
for (let t = 0; t < players.length; t++) {
let nearestEnemyAngle = Math.atan2(players[t].y - myPlayer.y, players[t].x - myPlayer.x);
let nearestEnemyAngleOpp = Math.atan2(myPlayer.y - players[t].y, myPlayer.x - players[t].x);
// console.log(nearestEnemyAngleOpp, players[t].dir, nearestEnemyAngleOpp===players[t].dir?true:false)
if (nearestEnemyAngle &&
(players[t].weaponIndex === 9 || players[t].weaponIndex === 12 || players[t].weaponIndex === 13 || players[t].weaponIndex === 15)
&& EnemyAngle1 !== nearestEnemyAngle && nearestEnemyAngleOpp >= players[t].dir - .25 && nearestEnemyAngleOpp <= players[t].dir + .25) {
chat('AntiBow...')
place(inventory.mill, nearestEnemyAngle);
selectWeapon(0);
EnemyAngle1 = nearestEnemyAngle;
};
};
};
if (settings.inweaponrange.e && distance > weaponRange) return
if (settings.whereurlooking.e && CowUtils.getAngleDist(angle, Cow.player.lookAngle) > Cow.config.gatherAngle) return
if (settings.hitcounter.e) {
const damage = Cow.player.weapon.dmg * Cow.items.variants[Cow.player.weaponVariant].val
const damageAmount = damage * (Cow.player.weapon.sDmg || 1) * (Cow.player.skin?.id === 40 ? 3.3 : 1)
const hits = Math.ceil(object.health / damageAmount)
const offsetY = settings.circles_hp.e ? 2 : 22
context.save()
context.font = `18px Hammersmith, sans-serif`
context.fillStyle = "#fff"
context.textBaseline = "middle"
context.textAlign = "center"
context.lineWidth = 8
context.lineJoin = "round"
context.translate(object.renderX, object.renderY)
context.strokeText(hits, 0, offsetY)
context.fillText(hits, 0, offsetY)
context.restore()
};
if (settings.circles_hp.e) {
const endAngle = ((object.health / object.maxHealth) * 360) * (Math.PI / 180)
const width = 14
const scale = 22
context.save()
context.translate(object.renderX, object.renderY)
context.rotate(object.dir ?? object.dir2)
drawCircleBar("#3d3f42", width, scale, endAngle)
drawCircleBar(settings.coloredstructures.e?objectAlly(object.owner.sid) ? 'lime':'red':'blue', width / 2.5, scale, endAngle)
context.restore()
return
};
if (settings.healthbars.e || settings.circles_hp.e) {
const { healthBarWidth, healthBarPad } = window.config
const width = healthBarWidth / 2 - healthBarPad / 2
const height = 17
const radius = 8
context.save()
context.translate(object.renderX, object.renderY)
context.fillStyle = "#3d3f42"
context.roundRect(-width - healthBarPad, -height / 2, 2 * width + 2 * healthBarPad, height, radius)
context.fill()
context.fillStyle = settings.coloredstructures.e?objectAlly(object.owner.sid) ? 'lime':'red':'blue'
context.roundRect(-width, -height / 2 + healthBarPad, 2 * width * (object.health / object.maxHealth), height - 2 * healthBarPad, radius - 1)
context.fill()
context.restore()
};
});
});
})();