您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A Mod for heav.io. type /help for help.
当前为
// ==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; }