// ==UserScript==
// @name Neon's Heav mod
// @namespace http://tampermonkey.net/
// @version 0.8
// @description A Mod for heav.io. type /help for help.
// @author iNeonz
// @match https://heav.io/game.html
// @icon https://www.google.com/s2/favicons?sz=64&domain=heav.io
// @grant none
// @run-at document-idle
// ==/UserScript==
const emojis = {
":skull:":"💀",":omaga:":"😱",":smile:": "😃",":sob:":"😭",":darock:":"🤨",":flushed:":"😳",":cat:":"🐱",":globe:":"🌍",":ball:":"⚽",":balloon:":"🎈",":fest:":"🎉",":umbrella:":"☔",":nerd:":"🤓"
}
let selPet = -1;
let selAcc = -1;
const letters = "a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z".split(" ");
const fonts = {
bold: "𝐚 𝐛 𝐜 𝐝 𝐞 𝐟 𝐠 𝐡 𝐢 𝐣 𝐤 𝐥 𝐦 𝐧 𝐨 𝐩 𝐪 𝐫 𝐬 𝐭 𝐮 𝐯 𝐰 𝐱 𝐲 𝐳 𝟏 𝟐 𝟑 𝟒 𝟓 𝟔 𝟕 𝟖 𝟗 𝐀 𝐁 𝐂 𝐃 𝐄 𝐅 𝐆 𝐇 𝐈 𝐉 𝐊 𝐋 𝐌 𝐍 𝐎 𝐏 𝐐 𝐑 𝐒 𝐓 𝐔 𝐕 𝐖 𝐗 𝐘 𝐙".split(" "),
italic: "𝘢 𝘣 𝘤 𝘥 𝘦 𝘧 𝘨 𝘩 𝘪 𝘫 𝘬 𝘭 𝘮 𝘯 𝘰 𝘱 𝘲 𝘳 𝘴 𝘵 𝘶 𝘷 𝘸 𝘹 𝘺 𝘻 1 2 3 4 5 6 7 8 9 𝘈 𝘉 𝘊 𝘋 𝘌 𝘍 𝘎 𝘏 𝘐 𝘑 𝘒 𝘓 𝘔 𝘕 𝘖 𝘗 𝘘 𝘙 𝘚 𝘛 𝘜 𝘝 𝘞 𝘟 𝘠 𝘡".split(" "),
}
const accessories = [
'birb',
'egg',
'Fedora',
'helmet',
'hammer',
'cta',
'egg2',
'gentleman',
'headphone',
'sus',
'nerd',
'bunny',
'cape',
'cheese',
'new',
'spicebox',
'guns',
'crown',
'noob',
'slimey',
'potato',
'niko',
'default',
'monke',
'gaming',
'isaac',
'horn',
'wings',
'glasses',
'chair'
];
const acessoryLink = {
'birb': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846288388079806/birb.png',
'egg': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846288652325016/egg.png',
'noob': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846290015473786/noob.png',
'nerd': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133847987995557918/nerd.png',
'crown': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133847987521605662/crown.png',
'cheese': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133847987232190504/cheese.png',
'bunny': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846393891598356/bunny.png',
'default': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133847987764867092/default.png',
'Fedora': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846288857829537/Fedora.png',
'cta': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133848562761994352/cta.png',
'gentleman': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133848562992693449/gentleman.png',
'helmet': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846289080139806/helmet.png',
'monke': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846289310830612/monke.png',
'new': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846289533112360/new.png',
'niko': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846289776394290/niko.png',
'hammer': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846508647755886/hammer.png',
'guns': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846508396089364/guns.png',
'sus': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846395732885635/sus.png',
'potato': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846394944356443/potato.png',
'slimey': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846395217002587/slimey.png',
'spicebox': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846395460268042/spicebox.png',
'headphone': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846394705293383/headphone.png',
'egg2': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846394453639189/egg2.png',
'cape': 'https://cdn.discordapp.com/attachments/1128508277827846206/1133846394143244318/cape.png',
'gaming':'https://cdn.discordapp.com/attachments/1128508277827846206/1137513131774591016/gamer.png',
'isaac':'https://cdn.discordapp.com/attachments/1128508277827846206/1137513132420513903/isaac.png',
'horn':'https://cdn.discordapp.com/attachments/1128508277827846206/1137513132206587974/horns.png',
'glasses':'https://cdn.discordapp.com/attachments/1128508277827846206/1137513133028671538/sunglasses.png',
'chair':'https://cdn.discordapp.com/attachments/1128508277827846206/1137513132009463879/gaming.png',
'wings':'https://cdn.discordapp.com/attachments/1128508277827846206/1137513133276151899/wings.png'
}
const textures = [];
const petTextures = [];
const pets = [
'Kitty',
'chat-gpt',
'chaz',
'chad',
'sus',
'egg',
'f',
'cube',
'rock',
'isaac',
'ghost'
]
let settings = {};
const petSkins = {
'Kitty':'https://cdn.discordapp.com/attachments/1128508277827846206/1138568531307409528/catpet.png',
'f':'https://cdn.discordapp.com/attachments/1128508277827846206/1139666785386381362/F.png',
'egg':'https://cdn.discordapp.com/attachments/1128508277827846206/1139666785025662976/egg2.png',
'rock':'https://cdn.discordapp.com/attachments/1128508277827846206/1139666784706899998/darock.jpg',
'cube':'https://cdn.discordapp.com/attachments/1128508277827846206/1139666784442663014/cube.png',
'chaz':'https://cdn.discordapp.com/attachments/1128508277827846206/1139666784174219304/chaz.png',
'chad':'https://cdn.discordapp.com/attachments/1128508277827846206/1139666783909982329/chad.jpg',
'sus':'https://cdn.discordapp.com/attachments/1128508277827846206/1139666786418171925/the_sussy_baka.jpg',
'isaac':'https://cdn.discordapp.com/attachments/1128508277827846206/1139666786099408967/isaac.png',
'ghost':'https://cdn.discordapp.com/attachments/1128508277827846206/1139666785763868762/ghost.png',
'chat-gpt':'https://cdn.discordapp.com/attachments/1128508277827846206/1139667562704162876/gpt.png'
}
for (let acessory of accessories){
let texture = window.PIXI.Texture.from(acessoryLink[acessory]);
texture.baseTexture.scaleMode = window.PIXI.SCALE_MODES.NEAREST;
textures.push(texture);
}
for (let pet of pets){
let texture = window.PIXI.Texture.from(petSkins[pet]);
texture.baseTexture.scaleMode = window.PIXI.SCALE_MODES.NEAREST;
petTextures.push(texture);
}
let myid = -1;
let quickplay = false;
let qpdelay = 0;
let hostId = -1;
let users = [];
let pollActive = false;
let pollTimer = 0;
let rektbot = false;
let pollOptions = [];
let pollVotes = {};
let modeConfig = {};
let modes = [
{
name:"Normal"
},
{
name:"Tag",
tick: function(dt){
if (!modeConfig.isTAG){
modeConfig = {
isTAG: true,
timer: 10,
player: 0
}
}
for (let p of users){
}
},
death: function(plr){
}
}
]
let currentMode = 0;
let abc = 'abcdefghijklmnopqrstuvwxyz';
const cmds = {
"help":"The command list you see right now.",
"qp":"Toggles qp",
'encode':"Encodes the current game settings in a small text so you can share with others.",
'decode':"Decodes the game settings inside a small text so you can play with them",
"pets":"Pet list",
"accs":"Hats list",
'echo <USER>':'Sends the same message that the specified user has sent, or stop sending for the specified user.',
'clearecho':'Clears the echolist',
"poll [A,B,C,...]":"Creates a poll which lasts 30 seconds.",
"stopPoll":"Ends the current active poll.",
"rektbot":"toggles rekbot",
'support':'Credits for the script.'
}
const sbxs = {
"addbot":"adds a bot"
}
let echoList = [];
const admin = [
'iNeonz'
]
function send(txt){
if (WSS){
WSS.send(`42[1,[28,"${txt}"]]`)
}
}
function ask(question){
let response = fetch('https://monke-bot.damcorruption.repl.co/chatbot/'+encodeURIComponent(question.replaceAll('monke','')))
return response.then(r => r.json());
}
window.setPet = (pet) => {
selPet = pet;
if (pets[pet]){
display("* selected pet: "+pets[pet]);
}else{
display("* Removed pet");
}
let pl = findUser(myid);
if (pl){
if (pl.pet){
pl.pet.destroy();
pl.pet = null;
}
}
}
window.setHat = (hat) => {
selAcc= hat;
if (accessories[hat]){
display("* selected hat: "+accessories[hat]);
}else{
display("* Removed hat");
}
let pl = findUser(myid);
if (pl){
if (pl.acc){
pl.acc.destroy();
pl.acc = null;
}
}
}
function runCMD(command){
command = command.replaceAll("\\*","[CODE[:ASTERK:]]");
command = command.replaceAll("\\_","[CODE[:UNLINE:]]");
command = command.replaceAll("\\~","[CODE[:DAS:]]");
command = command.replaceAll("\\|","[CODE[:TE:]]");
command = command.replaceAll("\\:glitch:","[CODE[:GLITCHY:]]");
if (!command.match("https://") && !command.match("www.") && !command.match("http://")){
var bold = /\*\*(.*?)\*\*/gm;
let match;
while ((match = bold.exec(command)) != null) {
let t = '';
for (let i = 0; i < match[0].length; i++){
let l = match[0][i];
let index = letters.indexOf(l);
if (index != -1){
let n = fonts.bold[index] || l;
l = n;
}
t += l;
}
command =command.replace(match[0],t.slice(2,-2))
}
var strike = /\~\~(.*?)\~\~/gm;
while ((match = strike.exec(command)) != null) {
let t = '';
for (let i = 0; i < match[0].length; i++){
if (i > 1 && i < match[0].length-2){
t += "̶"+match[0][i];
}
}
command = command.replace(match[0],t+"̶")
}
var underline = /\_\_(.*?)\_\_/gm;
while ((match = underline.exec(command)) != null) {
let t = '';
for (let i = 0; i < match[0].length; i++){
if (i > 1 && i < match[0].length-2){
t += match[0][i]+"͟";
}
}
command = command.replace(match[0],"͟"+t)
}
var glitches = ["̵̨̤̥̝͉̼̘̜̣͙͍͕̙̜̄̀͐͗̊","̸̡̜̘̜̺̳̞̘̹̻́̈͌͝","̴̮͚͛̌̄","̴̧̗͕͎͎͎̗̮͚̱̜̹̜̦̦͚̙̫͉̬͙̯̣̉̈́̔̿̐̎͝","̸̨̮̲̬̗͉̼͕͚̦͚̺̗̲̦̰̹̣̭͓̮̈́̄̊̑̓͑͌","̵̤̥̄̀͐͗̊","̸̮̲̬̗͉̼͕͚̦͚̺̈́̄̊̑̓͑͌","̸̡̜̘́̈͌͝","̵̤̥̝͉̼̘̄̀͐͗̊"];
var glitch = /\<g (.*?) g\>/gm;
while ((match = glitch.exec(command)) != null) {
let t = '';
for (let i = 0; i < match[0].length; i++){
if (i > 2 && i < match[0].length-3){
t += glitches[Math.floor(Math.random()*glitches.length)]+match[0][i];
}
}
command = command.replace(match[0],t);
}
var italic = /\*(.*?)\*/gm;
while ((match = italic.exec(command)) != null) {
let t = '';
for (let i = 0; i < match[0].length; i++){
if (i > 0 && i < match[0].length-1){
let l = match[0][i];
let index = letters.indexOf(l);
if (index != -1){
let n = fonts.italic[index] || l;
l = n;
}
t += l;
}
}
command = command.replace(match[0],t)
}
var forbidden = /\|\|(.*?)\|\|/gm;
while ((match = forbidden.exec(command)) != null) {
command = command.replace(match[0],"█".repeat((match[0].replaceAll("||","")).length));
}
}
command = command.replaceAll("[CODE[:ASTERK:]]","*");
command = command.replaceAll("[CODE[:UNLINE:]]","_");
command = command.replaceAll("[CODE[:DAS:]]","~");
command = command.replaceAll("[CODE[:TE:]]","|");
command = command.replaceAll("[CODE[:GLITCHY:]]",":glitch:");
if (command == '/help'){
display(`* HELP COMMAND ----------|`)
for (let i in cmds){
display(`* /${i} | ${cmds[i]}`)
}
return ' '
}
if (command == '/encode'){
let t = '';
for (let i in settings){
t += i+":"+settings[i]+"|"
}
display(`* Your smol settings: ${t}`);
return ' '
}
if (command.startsWith('/decode ')){
let setts = command.split('/decode ')[1];
if (setts){
let sett = {};
let sects = setts.split('|');
for (let o of sects){
let pr = o.split(':');
if (pr[1]){
let v = JSON.parse(`[${pr[1]}]`)[0];
sett[pr[0]] = v;
}
}
WSS.onmessage({data: `42[63,${JSON.stringify(sett)}]`})
WSS.send(`42[1,[62,${JSON.stringify(sett)}]]`)
display("Successfully Changed the settings!");
}else{
display("* Please insert a valid smol settings.")
}
return ' '
}
if (command == '/pets'){
display(`* None <a href='javascript:window.setPet(-1);'>[SELECT]</a>`,null,null,false);
for (let i in pets){
display(`* ${pets[i]} <a href='javascript:window.setPet(${i});'>[SELECT]</a>`,null,null,false);
}
return ' ';
}
if (command == '/accs'){
display(`* None <a href='javascript:window.setHat(-1);'>[SELECT]</a>`,null,null,false);
for (let i in accessories){
display(`* ${accessories[i]} <a href='javascript:window.setHat(${i});'>[SELECT]</a>`,null,null,false);
}
return ' ';
}
if (command.startsWith('/echo')){
let player = command.split('/echo ')[1];
let pl = findUser(player);
if (pl && pl.id != myid){
if (echoList.includes(pl.name)){
echoList.splice(echoList.indexOf(pl.name),1);
display("* Stopped echo'in "+pl.name,'#03cafc','#03fc17')
}else{
display("* Now echo'in "+pl.name,'#fcad03','#03fc17')
echoList.push(pl.name);
}
}else if (pl){
display("* You can't echo yourself!",'#fc0303','#03fc17');
}else{
display("* You can't echo no one!",'#fc0303','#03fc17');
}
return ' '
}
if (command == '/clearecho'){
if (echoList.length > 0){
display("* Echo list cleared",'#fcad03','#03fc17');
echoList = [];
}else{
display("* Echo list is empty.",'#fcad03','#03fc17');
}
return ' '
}
if (command == '/qp'){
if (myid == hostId){
quickplay = !quickplay;
display(`qp is now ${quickplay}`);
qpdelay = 1;
}else{
display(`You are not the host! `)
}
return ' '
}
if (command == '/support'){
display(`Thanks iNeonz (tag: ineonz) for creating this amazing script.`);
display(`Thanks Damian for being himself`);
display(`Thanks killmah for`);
}
if (command == '/rektbot'){
rektbot = !rektbot;
display(`rektbot is now ${rektbot}`);
return ' '
}
if (command.startsWith('/poll')){
let options = command.split('/poll ')[1].split(',');
pollOptions = options;
let ptxt = '';
for (let i in options){
let p = options[i];
let letter = abc[i%abc.length];
ptxt += `${letter}) ${p.substring(0,8)}${" ".repeat(5-p.substring(0,4).length)}`
}
display(`A NEW POLL HAS STARTED, AND WILL END IN 30 SECONDS`);
pollActive = true;
pollTimer = 30;
return `Type the letter to vote: ${ptxt}`
}
if (command == '/stopPoll'){
if (pollActive){
pollTimer = .01;
return 'Ending the poll.';
}else{
display("There is no polls active.");
}
return '';
}
// SANDBOX
if (sandboxroom){
if (command == '/addbot'){
bots++
botids.push(bots);
console.log(Date.now());
console.log(window.multiplayerSession);
WSS.onmessage({data: `42[8,["Bot ${bots}",true,1,"",${bots},-1,0,{"1":6372018},false],${Date.now()}]`})
window.multiplayerSession.SE.ve[bots]._P = window.multiplayerSession.SE.ve[0]._P;
return ' ';
}
}
//SANDBOX
if (command.length >= 2){
return command;
}
}
function globalCmds(plrID,txt){
let pl = findUser(plrID);
if (!pl){ return;}
if (echoList.includes(pl.name)){
send(txt);
}
if (txt.toLowerCase().includes("monke")){
ask(txt)
.then(r => {
send('Monke > '+r.response);
})
}
if (txt.length == 1){
let ntxt = txt.toLowerCase();
if (abc.includes(ntxt)){
let option = pollOptions[abc.indexOf(ntxt)];
let pl = findUser(plrID);
if (option && pl){
pollVotes[pl.name] = abc.indexOf(ntxt);
}
}
}
if (txt.startsWith("!info")){
send("Hi, i, iNeonz created a funni script with damian's chatbot.");
}
if (txt.startsWith("!help")){
send("!roll 1-20|!gay");
}
if (txt.startsWith("!roll")){
try {
let num = parseInt(txt.split(' ')[1])
send(`1d${Math.floor(Math.random()*num)}`)
}catch(e){}
}
if (txt == '!track'){
let alivey = 0;
let p1;
let p2;
for (let i in alive){
if (p1 && !p2){
p2 = i;
}else if (!p1){
p1 = i;
}
alivey++;
}
console.log(alivey,p1,p2);
if (alivey== 2 && p1 && p2){
let pl1 = findUser(p1);
let pl2 = findUser(p2);
let arrows = {
"1 0":'➡️',
"1 1":'↘️',
"0 1":'⬇️',
"-1 1":'↙️',
"-1 0":'⬅️',
"-1 -1":'↖️',
"0 -1":'⬆️',
"1 -1":'↗️'
}
let p1c = gCoordinates(pl1.x,pl1.y);
let p2c = gCoordinates(pl2.x,pl2.y);
let dir = Math.atan2(p2c[1]-p1c[1],p2c[0]-p1c[0]);
let c = [Math.cos(dir),Math.sin(dir)];
let p3 = [c[0] > 0.4? 1 : (c[0] < -0.4? -1 : 0),c[1] > 0.4? 1 : (c[1] < -0.4? -1 : 0)];
let t = p3[0]+' '+p3[1];
console.log('p1',p1c,'p2',p2c,'dir',dir,'c',c,'p3',p3);
let arr = arrows[t];
let dist = Math.floor(Math.sqrt(((p1c[0]-p2c[0])**2)+((p1c[1]-p2c[1])**2)));
send(`${pl2.name} is ${dist}ft away from ${pl1.name} (${arr})`);
}else{
send(`There must be 2 players alive, right now there is ${alivey}.`);
}
}
if (txt.startsWith("!gay")){
if (pl){
let perc = Math.floor(Math.random()*10000)/100
/*let txts = [
'Sigma',
'Hetéro',
'Mei viado',
'Beta',
'Viado',
'Boiola Mega'
]*/
let txts = [
'Sigma',
'Straight',
'Kinda gay',
'Beta',
'Gay',
'Very Pretty Much A Gay'
]
let part = Math.floor((Math.floor(perc)/100)*txts.length);
//send(`${pl.name}, você é ${perc}% gay... Eu diria que você é... ${txts[part]}`);
send(`${pl.name}, You are ${perc}% gay... I'd say you are... ${txts[part]}`);
}
}
}
const alive = {};
// Your code here...
const render = window.PIXI.Graphics.prototype.finishPoly
window.PIXI.Graphics.prototype.finishPoly = function(...args){
render.call(this,...args)
if (this.parent) {
for (let i of this.parent.children) {
if (i._text) {
alive[i._text] = {orbj: this,obj: this.parent,frames: 8, txt: i};
if (admin.includes(i._text)){
i.tint = 0xff11ff
}
break;
}
}
}
}
/*for (let i in window.PIXI.Graphics.prototype) {
let v = window.PIXI.Graphics.prototype[i];
if (typeof(v) == 'function') {
console.log(i," injected");
let prot = window.PIXI.Graphics.prototype[i]
window.PIXI.Graphics.prototype[i] = function(...args){
let c = prot.call(this,...args);
if (this.parent && this.parent.children) {
for (let p of this.parent.children) {
if (p._text) {
console.log(i,p._text);
}
}
}
if (this.children) {
for (let p of this.children) {
if (p._text) {
console.log(i,p._text);
}
}
}
return c
}
}
}*/
let frames = 0;
let lc = Date.now();
function gCoordinates(x,y){
let bg = document.getElementById('backgroundImage')
if (bg){
let w = bg.clientWidth;
let h = bg.clientHeight;
let scale = w/730;
return [x/scale,y/scale];
}
return [0,0];
}
function fire(type,options,d = Gdocument){
var event= document.createEvent("HTMLEvents");
event.initEvent(type,true,false);
for(var p in options){
event[p]=options[p];
}
d.dispatchEvent(event);
};
function lerp(a, b, x) {
return a + x * (b - a);
}
let laststate;
//SP.SE.ve[0].name
//SP.zE.eo[0];
window.requestAnimationFrame = new Proxy( window.requestAnimationFrame, {
apply( target, thisArgs, args ) {
let T = Date.now();
let dt = (T-lc)/1000;
lc = T;
frames++
if (frames % 60 == 0){
}
if (pollActive){
if (pollTimer > 0){
pollTimer -= dt;
if (pollTimer <= 0){
let votes = {};
let mostVoted = 0;
let mostVotes = 0;
for (let i in pollVotes){
let option = pollOptions[pollVotes[i]];
if (!votes[option]){votes[option] = 0;}
votes[option] += 1
if (votes[option] > mostVotes){mostVotes = votes[option]; mostVoted = pollVotes[i];}
}
let choosen = pollOptions[mostVoted];
if (choosen){
send(`POLL ENDED: ${choosen} has won the Poll with ${mostVotes} votes! (Which is ${Math.floor((mostVotes/users.length)*10000)/100}% of this room)`);
}
pollVotes = [];
pollOptions = [];
pollActive = false;
}
}
}
//matrix.hue(frames%300);
for (let i in alive) {
let unalive = (!alive[i].obj || !alive[i].obj.transform || !alive[i].obj.parent || !alive[i].txt || !alive[i].txt.visible || alive[i].txt.parent != alive[i].obj || !alive[i].obj.visible || alive[i].obj.alpha <= 0);
let p = findUser(i);
if (p){
if (unalive){
alive[i].frames--
if (alive[i].frames <= 0){
console.log(i,' has died');
if (document.getElementsByClassName('lobbyContainer')[0].style.display == 'none'){
let c = gCoordinates(p.x,p.y);
if (rektbot){
send("[NHM Rekt Bot] > "+i+" L");
}
}
if (p.pet){
p.pet.destroy();
p.pet = null;
}
if (p.acc){
p.acc.destroy();
p.acc = null;
}
delete alive[i];
}
}else{
p.x = alive[i].obj.x;
p.y = alive[i].obj.y;
if (textures[selAcc] && p.id == myid){
if (!p.acc){
p.acc = new window.PIXI.Sprite(textures[selAcc]);
p.acc.cacheAsBitMap = true;
p.acc.anchor.x = 0.5;
p.acc.anchor.y = 0.5;
p.acc.rotation = 0;
p.acc.width = .01;
p.acc.height = .01;
//p.acc.y = -alive[i].obj.height;
p.acc.angle = 0;
alive[i].obj.addChild(p.acc);
}else{
if (p.acc.parent != alive[i].obj){
alive[i].obj.addChild(p.acc);
p.acc.width = .01;
p.acc.height = .01;
}
for (let b of alive[i].obj.children){
if (!b._text && b._geometry && b._geometry.batchDirty == 0){
p.acc.rotation = b.rotation;
p.acc.angle = b.angle;
p.acc.width = b.width*1.3;
p.acc.height = b.width*1.3;
break;
}
}
}
}else{
if (p.acc){
p.acc.destroy();
p.acc = null;
}
}
if (petTextures[selPet] && p.id == myid){
if (!p.pet){
p.pet = new window.PIXI.Sprite(petTextures[selPet]);
p.pet.cacheAsBitMap = true;
p.pet.anchor.x = 0.5;
p.pet.anchor.y = 0.5;
p.pet.rotation = 0;
p.pet.angle = 0;
p.pet.width = .01;
p.pet.height = .01;
for (let b of alive[i].obj.children){
if (b.rotation || b.angle){
p.pet.rotation = b.rotation;
p.pet.angle = b.angle;
p.pet.width = b.width/1.3;
p.pet.height = b.width/1.3;
break;
}
}
alive[i].obj.parent.addChild(p.pet);
p.pet.x = p.x;
p.pet.y = p.y;
}else{
if (p.pet.parent != alive[i].obj.parent){
alive[i].obj.parent.addChild(p.pet);
p.pet.width = .01;
p.pet.height = .01;
}
let angle = Math.atan2(p.pet.y-p.y,p.pet.x-p.x)
p.pet.x = lerp(p.pet.x,p.x+Math.cos(angle)*alive[i].obj.width/3/2,1-(0.005**dt));
p.pet.y = lerp(p.pet.y,p.y+Math.sin(angle)* alive[i].obj.width/3,1-(0.005**dt));
p.pet.scale.x = (p.pet.x > p.x? Math.abs(p.pet.scale.x)*-1 : Math.abs(p.pet.scale.x));
for (let b of alive[i].obj.children){
if (!b._text && b._geometry && b._geometry.batchDirty == 0){
p.pet.rotation = b.rotation;
p.pet.angle = b.angle;
p.pet.width = b.width/1.3;
p.pet.height = b.width/1.3;
break;
}
}
}
}else{
if (p.pet){
p.pet.destroy();
p.pet = null;
}
}
}
}else{
delete alive[i];
}
}
if (quickplay){
if (document.getElementsByClassName('lobbyContainer')[0].style.display != 'none'){
if (qpdelay > 0){
qpdelay -= dt;
}
if (qpdelay <= 0){
qpdelay = 5;
let maps = document.getElementsByClassName('mapsContainer')[0].getElementsByClassName('element');
let map = maps[Math.floor(Math.random()*maps.length)];
map.click();
setTimeout(() => {
document.getElementsByClassName("startButton")[0].click();
},100);
}
}
}
Reflect.apply(...arguments);
}
})
const originalSend = window.WebSocket.prototype.send;
const excludewss = [];
let WSS = 0;
window.sendPacket = function(packet) {
if (WSS) {
console.log("SENT > ",packet);
}else{
console.log("Could not send: No wss connected.");
}
}
/*
*/
function findUser(id){
for (let t in users) {
let o = users[t];
if (o.id == id || o.name == id){
o.index = t;
return o;
break;
}
}
}
window.WebSocket.prototype.send = function(args) {
if(this.url.includes("/socket.io/?EIO=3&transport=websocket&sid=")){
if(typeof(args) == "string" && !excludewss.includes(this)){
if (!WSS){
WSS = this;
}
if (WSS == this){
if (args.startsWith('42[1,[')) {
try{
let packet = JSON.parse(args.slice(5,-1))
if (packet[0] == 62){
settings = packet[1];
}
}catch(error){}
}else if (args.startsWith('42[2,')) {
myid = 0;
hostId = 0;
}
}else{
excludewss.push(this);
}
//console.log('SENT',args);
}
if (!this.injected){
this.injected = true;
const originalClose = this.onclose;
this.onclose = (...args) => {
if (WSS == this){
WSS = 0;
sandboxroom = false;
users = [];
botids = [];
bots = 0;
quickplay = false;
}
originalClose.call(this,...args);
}
this.onmessage2 = this.onmessage;
this.onmessage = function(event){
if(!excludewss.includes(this) && typeof(event.data) == 'string'){
if (event.data.startsWith('42[')){
let packet = JSON.parse(event.data.slice(2,event.data.length));
if (packet[0] == 7){
console.log("ID: ",packet[1][0])
myid = packet[1][0]
hostId = packet[1][1];
for (let i of packet[1][3]){
users.push({"name":i[0],"id":i[4],"lvl":i[6]});
}
}
if (packet[0] == 9){
hostId = packet[2];
let user = findUser(packet[1]);
if (user){
if (user.pet){
user.pet.destroy();
user.pet = null;
}
console.log(user.name,'left');
users.splice(user.index,1);
}
}
if (packet[0] == 45){
hostId = packet[1];
if (hostId != myid){
quickplay = false;
}
}
if (packet[0] == 29 && !packet[2].startsWith("Monke > ")){
globalCmds(packet[1],packet[2])
}
if (packet[0] == 8){
console.log("plr join")
users.push({"name":packet[1][0],"id":packet[1][4],"lvl":packet[1][6]});
setTimeout(() => {
WSS.send(`42[1,[28,"Hello! welcome, user "${packet[1][0]}" that entered with lvl ${packet[1][6]}"]]`)
},100);
}
}
}
this.onmessage2(event);
}
}
}
return originalSend.call(this, args);
}
let chats = document.getElementsByClassName('content');
let inputs = document.getElementsByClassName('input');
console.log(inputs.length);
let chatI = [];
for (let c of inputs){
if (c.parentElement.classList.contains('inGameChat') || c.parentElement.classList.contains('chatBox')){
console.log(c);
chatI.push(c);
c.addEventListener('keydown',(event) => {
if (event.keyCode == 13){
for (let emoji in emojis){
c.value = c.value.replaceAll(emoji,emojis[emoji]);
}
let newMsg = runCMD(c.value);
if (newMsg) {
if (newMsg.length < 2) {c.value = '';}else{c.value = newMsg;}
}
}
});
}
}
window.hescape = (s) => {
let lookup = {'$':'$','%':'%','.':'.','+':'+','-':'-','&':"&",'"': """,'\'': "'",'<': "<",'*':'*','=':'=','>': ">",'#':'#',':':':',';':';','`':'`'};
return s.replace( /[\*=%#\-+&"'<>]/g, c => lookup[c] );
}
let itemDesc = document.createElement('div');
itemDesc.style.whiteSpace = 'pre-wrap';
itemDesc.style.position = 'absolute';
itemDesc.style.opacity = '0.7';
itemDesc.style.color = 'white';
itemDesc.style.fontWeight = '500';
itemDesc.style.width = 'fit-content';
itemDesc.style.height = 'fit-content';
itemDesc.style.textAlign = 'center';
itemDesc.style.pointerEvents = 'none';
itemDesc.style.background = 'black';
itemDesc.style.borderRadius = '10px';
itemDesc.style.left = '500px';
itemDesc.style.top = '500px';
itemDesc.style.index = 99999999999999999999;
itemDesc.textContent = 'hi';
itemDesc.style.visibility = 'hidden';
document.body.appendChild(itemDesc);
var lastMousePos = {x: 0,y: 0};
window.addEventListener("mousemove",(e) => {
e = e || window.event;
let pos1 = lastMousePos.x || e.clientX;
let pos2 = lastMousePos.y || e.clientY;
lastMousePos = {x: e.clientX,y: e.clientY};
if (document.activeElement && document.activeElement.dataset.dragable){
e.preventDefault();
document.activeElement.style.top = (document.activeElement.offsetTop + (e.clientY-pos2)) + "px";
document.activeElement.style.left = (document.activeElement.offsetLeft + (e.clientX-pos1)) + "px";
}
});
window.setDescTXT = (text,description) => {
if (text && text.length > 0){
itemDesc.innerHTML = hescape(text)+"\n<font size=1>"+(hescape(description) || '')+"</font>";
itemDesc.style.left = lastMousePos.x+'px';
itemDesc.style.top = lastMousePos.y+'px';
itemDesc.style.visibility = 'visible';
itemDesc.style.zIndex = 9999999999999999999999999999999999999999999;
}else{
itemDesc.style.visibility = 'hidden';
}
}
for (let i of chats){
i.addEventListener('DOMNodeInserted',(event) => {
let args = event.target;
for (let i of args.children){
if (i.textContent){
let https = /(((https?:\/\/)|(www\.))[^\s]+)|(((http?:\/\/)|(www\.))[^\s]+)/g;
let matches = i.textContent.match(https);
if (matches){
i.style.pointerEvents = 'all';
for (let m of matches){
i.innerHTML = i.innerHTML.replace(m,`<a href='${m}' target='_blank' style='text-decoration-color: #f59342;'><font color='#f59342'>${hescape(m)}</font></a>`)
}
}
}
}
let oDate = new Date();
let time = (Date.now()/1000)-(oDate.getTimezoneOffset()*60)
let mlTime = Math.floor(((time/60)/60))%24+":"+Math.floor(time/60)%60;
let child = args.children[1] || args.children[0];
child.onmouseover = () => {window.setDescTXT(mlTime+" UTC"+(oDate.getTimezoneOffset() < 0? "+" : "")+(-Math.floor(oDate.getTimezoneOffset()/60)),"time at which this message was sent at.");}
child.onmouseout = () => {window.setDescTXT('');}
})
}
function display(text,ingamecolor,lobbycolor,sanitize){
if (WSS){
let div = document.createElement('div');
div.classList.add('statusContainer');
let span = document.createElement('span');
span.classList.add('status');
span.style.color = lobbycolor || "#ffffff";
if (sanitize != false){
span.textContent = text;
}else{
span.innerHTML = text;
}
span.style.backgroundColor = 'rgba(37, 38, 42, 0.768627451)';
div.style.borderRadius = '7px';
div.appendChild(span);
let clone = div.cloneNode(true);
clone.children[0].style.color = ingamecolor || '#ffffff';
setTimeout(() => {
clone.remove();
},11500);
for (let i of chats){
if (i.parentElement.classList.contains('chatBox')){
i.appendChild(div);
i.scrollTop = Number.MAX_SAFE_INTEGER;
}else{
i.appendChild(clone);
}
}
}
}
const bc = document.getElementsByClassName('centerContainer')[0];
let sandboxbutton = document.createElement('div');
sandboxbutton.classList.add('button');
sandboxbutton.classList.add('sandbox');
sandboxbutton.style.textAlign = 'center';
sandboxbutton.style.verticalAlign = 'middle';
sandboxbutton.style.fontSize = '15px';
sandboxbutton.style.backgroundColor = '#4a7ab1';
sandboxbutton.style.color = '#ebebeb';
sandboxbutton.textContent = 'Sandbox';
bc.appendChild(sandboxbutton);
bc.style.height = '200px';
const createbutton = document.getElementsByClassName('bottomButton left')[0];
let sandboxroom = false;
let botids = [];
let bots = 0;
sandboxbutton.onclick = () => {
createbutton.click();
document.getElementsByClassName('button play')[0].click();
document.getElementsByClassName('nameField')[0].value = 'SANDBOX ROOM';
document.getElementsByClassName('maxPlayersField')[0].value = '1';
document.getElementsByClassName('unlistedCheckContainer')[0].children[0].value = true;
document.getElementsByClassName('createButton')[0].click();
sandboxroom = true;
}