您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
old mod, ur gonna have to fix it urself if u want it to work (is easy)
// ==UserScript== // @name Luminary // @version 1 // @description old mod, ur gonna have to fix it urself if u want it to work (is easy) // @icon https://media.discordapp.net/attachments/1142509243988201492/1156159254957400094/PSX_20230926_142239.jpg?ex=6513f4b6&is=6512a336&hm=2ce7f5ecd6ba5c88558c44026953ea84b843b27cae8539d9613d1a8f1099c6dd&=&width=536&height=538 // @author onion, pulsar // @match *://*.moomoo.io/* // @grant none // @run-at document-start // @license MIT // @namespace https://greasyfork.org/users/1360517 // ==/UserScript== /* Running bundle in VM */ // The process of transforming bundle is slow, but we need that // for optimisation of firefox and recent chrome bug window.ae = 2420; window.re = 1480; const babelURL = "https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.18.2/babel.js"; const obs = new MutationObserver(function(mutations) { for (let mutation of mutations) { const node = mutation.previousSibling; if (/bundle|jquery|howler|platform|ads/gm.test(node?.src)) { node.remove(); } } }); obs.observe(document.documentElement, { childList: true, subtree: true, attributes: true }); const msgpackUrl = "https://greasyfork.org/scripts/423602-msgpack/code/msgpack.js?version=1005014"; if (!localStorage.bundle) { document.write("<style>body{font-family:monospace;font-size:20px;background:black;color:white}</style><h1>===</h1><br>"); document.write("[*] KMDLoader 1.0 <br>"); fetch(babelURL).then(e => e.text()).then(function(babel) { document.write("[*] Importing processor script (using Babel) <br>"); (new Function(babel))(); document.write("[*] Processor Loaded! <br>"); fetch("bundle.js").then(r => r.text()).then(BUNDLE_SCRIPT => { document.write("[*] Bundle fetched <br>"); // eslint-disable-next-line const { code } = Babel.transform( BUNDLE_SCRIPT.replaceAll("/18", "*18").replaceAll("(U==A?ci():U.dir)", "U.dir").replaceAll(",ae=r.maxScreenWidth,re=r.maxScreenHeight", "") , { presets: [ "es2015", "es2016" ] }); localStorage.bundle = code; document.write("[*] Cached 1/2 Files <br>"); fetch(msgpackUrl).then(r => r.text()).then((msgpackCode) => { localStorage.msgpack = msgpackCode; document.write("[*] Cached 2/2 Files <br>"); localStorage._grecaptcha = null; localStorage.moofoll = true; document.write("[*] Installed! Reloading... <br>"); setTimeout(function() { location.href = "https://sandbox.moomoo.io"; }, 1000); }); }); }); } else { (new Function(localStorage.msgpack))(); } let item; const boughtHats = []; class GammaAPI { coff = 0; packets = 0; dead = false; taskRunning = false; events = []; nextTick = 111; speeds = [300, 400, 400, 300, 300, 700, 300, 100, 400, 600, 400, 1, 700, 230, 700, 1500]; moveDir = null; qHoldRunning = false; onTick = []; findAngle(angle) { for (let i =-(Math.PI / 2 + angle); i < Math.PI / 2 + angle; i+=Math.PI / 3) { const player = this.__exports._items.context; const x = Math.cos(i) * 22 + player.x; const y = Math.sin(i) * 22 + player.y; const canPlace = this.__exports._checkItemLocation.hook(x, y, 22, 0.6, 2, false, storage.__exports._items.player); if (canPlace === true) { return i; } }; return angle; }; hatBuyer() { const hatsList = [ { acc: 11, cost: 2000, isAcc: 1 }, { hat: 6, cost: 4000, isAcc: 0 }, { hat: 12, cost: 6000, isAcc: 0 }, { hat: 7, cost: 6300, isAcc: 0 }, { hat: 53, cost: 10000, isAcc: 0}, { hat: 40, cost: 15000, isAcc: 0 }, { acc: 13, cost: 16000, isAcc: 1 }, { acc: 21, cost: 20000, isAcc: 1 } ]; hatsList.forEach(item => { const property = item?.isAcc ? "acc" : "hat"; if (item.cost < storage.__exports._items.context.points && !boughtHats.includes(item[property])) { window.storeBuy(item[property], property == "acc" ? 1 : 0); boughtHats.push(item[property]); } }); }; repeat(key, callback) { const that = this; this.onTick.push(function() { if (that.events[key]) { callback(); } }); }; myPlayer = { id: null, x: null, y: null }; enemiesNear = []; _state = false; heal(count) { while(count--) { if (storage.__exports._items.context.health == 100) break; this.emit(["5", [storage.__exports._items.hook[0], false]]); this.emit(["c", [1]]); }; this.emit(["5", [storage.__exports._items.context.weaponIndex, true]]); if (this._state) this.emit(["c", [1]]); }; oldAE = 2420; oldRE = 1080 * 1.2; resize(x, y) { window.ae = x; window.re = y; dispatchEvent(new Event("resize")); }; process = "in"; place(id, dir = storage.nDir, check = true) { if (!storage.__exports._checkItemLocation.hook( Math.cos(dir) * 22 + storage.__exports._items.context.x, Math.sin(dir) * 22 + storage.__exports._items.context.y, 22, 0.6, 2, false, storage.__exports._items.context )) return; this.emit(["5", [id, false]]); this.emit(["c", [1, dir]]); this.emit(["5", [storage.__exports._items.context.weaponIndex, true]]); if (this._state) this.emit(["c", [1, storage.nDir]]); }; ws = WebSocket; wss = { send: () => { }, onmessage: () => { } }; __exports = {}; __bundle_export__(func, checkup = (e => e), setter = e => e) { const symbol = Symbol(func); const that = this; Object.defineProperty(Object.prototype, func, { get() { return this[symbol]; }, set(value) { this[symbol] = setter(value); if (!checkup(this)) return; that.__exports["_" + func] = { hook: this[func], context: this } } }); }; __force_value__(func, val) { Object.defineProperty(Object.prototype, func, { get() { return val }, set(v) { } }); }; settings = { spamReplace: false, coff: 0, tickRate: 9 } }; const storage = window.storage = new GammaAPI; storage.__force_value__("turnSpeed", 0); storage.__force_value__("maxPlayers", 50); storage.__force_value__("checkTrusted", e => e); Object.defineProperty(Object.prototype, "clientSendRate", { get() { return storage.settings.tickRate; }, set(value) { } }); window.addEventListener("keydown", (e) => { if (document.activeElement.tagName != "INPUT") { storage.events[e.keyCode] = true; } }); window.addEventListener("keyup", ({ keyCode }) => { storage.events[keyCode] = false; }); window.WebSocket = class { constructor(url) { storage.wss = new storage.ws(url); storage.wss.binaryType = "arraybuffer"; storage.emit = function(packet) { if (this.dead) return; storage.wss.send(window.msgpack.encode(packet)); } storage.wss.addEventListener("message", function(event) { this._server = this.onmessage; const packet = window.msgpack.decode(event.data); switch(packet[0]) { case "11": storage.dead = true; storage.lastHp = 100; storage.trap = {}; storage._state = false; break; case "1": storage.myPlayer.id = packet[1][0]; break; case "h": if (packet[1][0] == storage.myPlayer.id && packet[1][1] < 100) { shameCount = Math.min(shameCount + 1, 8); if (packet[1][1] < 60) { window.addChat("Anti-Insta", "#fff", "[System]:", "#ffffff"); if (storage.__exports._items.context.tails[13]) { window.storeEquip(13, 1); } else if (storage.__exports._items.context.skins[6]) { window.storeEquip(6); } else if (storage.__exports._items.context.skinIndex === 7) { if (storage.__exports._items.context.skins[26]) { window.storeEquip(26); } else { window.storeEquip(0); } }; } else { shameCount = Math.max(shameCount - 2, 0); }; setTimeout(() => { storage.heal(Math.ceil((100 - packet[1][1]) / (storage.__exports._items.hook[0] == 0 ? 20 : 40))); storage.lastHp = packet[1][1]; }, packet[1][1] < 60 ? 0 : 120 - window.pingTime); } break; case "ch": window.addChat(packet[1][1], "#fff", "[" + packet[1][0] + "]:", "#1192f0"); break; case "7": if (packet[1][0] == storage.myPlayer.id) { execHold(); }; break; case "33": storage.nextTick = 111 - window.pingTime; if ((Date.now() - lastUpd) % window.pingTime < (1000 / storage.settings.tickRate) + window.pingTime) { tickNum++; } else if (Date.now() - lastUpd > 1000) { storage.settings.tickRate = tickNum; tickNum = 0; lastUpd = Date.now(); } storage.hatBuyer(); storage.onTick.forEach(task => task()); storage.nextTick--; break; } }); storage.wss.send = new Proxy(storage.wss.send, { apply(target, that, args) { const packet_ = window.msgpack.decode(args[0]); if (packet_[0] == "33") { storage.moveDir = packet_[1][0]; storage.events[66] = false; setTimeout(() => { storage.events[66] = true; }, 1000 / storage.settings.tickRate); } else if (packet_[0] == "sp") { storage.events[66] = true; packet_[1][0].skin = "__proto__"; packet_[1][0].name = "L-" + packet_[1][0].name; args[0] = window.msgpack.encode(packet_); storage.dead = false; } else if (packet_[0] == "c" && packet_[1][0] == 0) { storage.trap = false; } else if (packet_[0] == "2" && packet_[1][0] !== storage.trapDir && storage.trap?.sid) { packet_[1][0] = storage.trapDir; args[0] = window.msgpack.encode(packet_); } else if (packet_[0] == "2" && !storage.trap?.sid) { storage.nDir = packet_[1][0]; } storage.packets++; if (that.readyState !== 3) { return Reflect.apply(...arguments); } else { const server = location.href.split("server=")[1]; const generateServer = function* generator() { // Frankfurt yield "9:0:0"; yield "9:2:0"; yield "9:1:0"; // Miami yield "39:2:0"; yield "39:0:0"; yield "39:1:0"; // Failed yield "39:2:0"; }; let pickNext = false; const iterator = generateServer(); for (let _server of iterator) { if (_server === server) { pickNext = true; } else if (pickNext === true) { window.onbeforeunload = null; location.href = location.href.split("server=")[0] + "server=" + _server; } } } } }); return storage.wss; } } storage.__bundle_export__("checkItemLocation"); storage.__bundle_export__("items", context => { return context.sid == storage.myPlayer.id; }); if (localStorage.bundle) { storage.__bundle_export__("list", context => { return !context.list.includes("ass"); }); } storage.__bundle_export__("disableObj", context => { return context }, value => { return new Proxy(value, { apply(target, that, args) { const player = storage.__exports._items.context; const item = args[0]; args[0].breaked = true; const dist = Math.hypot(player.x - item.x, player.y - item.y); if (dist < 180) { if (storage.settings.spamReplace === false) { if (item.name == "pit trap" && item.sid == storage?.trap?.sid) { window.storeEquip(6); storage.trap = {}; storage.noTrap = true; target.apply(that, args); storage.noTrap = false; storage._state = false; storage.place(storage.__exports._items.hook[2], storage.findAngle(storage.trapDir)); } else { const angle = Math.atan2(player.y - item.y, player.x - item.x); const itemId = item.name.includes("trap") ? storage.__exports._items.hook[4] : storage.__exports._items.hook[2]; if (itemId) { storage.place(itemId, storage.findAngle(angle - Math.PI)); } } } else { for (let i = 0; i < Math.PI * 2; i+=Math.PI / 3) { storage.place(storage.__exports._items.hook[4], storage.nDir + i /* + Math.cos(storage.settings.coff) */); }; if (storage._state === true) { storage.emit(["c", [1, storage.nDir]]); }; } } return target.apply(that, args); } }); }); storage.repeat(86, () => storage.place(storage.__exports._items.hook[2], storage.nDir)); storage.repeat(70, () => storage.place(storage.__exports._items.hook[4], storage.nDir)); storage.repeat(66, () => { if (storage.__exports._items.context?.itemCounts && storage.__exports._items.context?.itemCounts[storage?.__exports?._list?.hook[storage.__exports._items.hook[3]]?.group?.id] > 95) { storage.events[66] = false; return; } const player = storage.__exports._items.context; const millPos = [1.15, -1.15, 0]; millPos.map(millAmg => { return storage.place(storage.__exports._items.hook[3], storage.moveDir - millAmg - Math.PI); }); }); storage.repeat(71, () => storage.place(storage.__exports._items.hook[5], storage.nDir)); storage.repeat(82, () => { window.storeEquip(boughtHats.includes(7) ? 7 : 0); window.storeEquip(0, 1); storage.emit(["c", [1]]); setTimeout(() => { storage.emit(["c", [1]]); storage.emit(["5", [storage.__exports._items.context.weapons[1], true]]); storage.emit(["c", [0]]); window.storeEquip(53); setTimeout(() => { storage.emit(["5", [storage.__exports._items.context.weapons[0], true]]); window.storeEquip(6); }, 1000 / storage.settings.tickRate); }, 1000 / storage.settings.tickRate); }); const execHold = () => { const hat = storage.__exports._items.context.health == 100 ? 12 : 6; window.storeEquip(boughtHats.includes(hat) ? hat : 28); window.storeEquip(boughtHats.includes(11) ? 11 : 0, 1); setTimeout(() => { storage.heal(storage.__exports._items.context.health !== 100 ? 3 : 2); if (!storage._state) return; const hat = (storage.trap?.sid || click != 0) ? 40 : 7; const acc = 21 window.storeEquip(boughtHats.includes(hat) ? hat : (hat === 40 ? 29 : 0)); window.storeEquip(boughtHats.includes(acc) ? acc : 0, 1); }, storage.speeds[storage.__exports._items.context.weaponIndex] - window.pingTime - storage.nextTick); }; let tickNum = 0; let lastUpd = Date.now(); let shameCount = 0; const ft1 = CanvasRenderingContext2D.prototype.fillText; const st1 = CanvasRenderingContext2D.prototype.strokeText; CanvasRenderingContext2D.prototype.fillText = function() { if (typeof arguments[0] === "string" && arguments[0].includes("L-")) { arguments[0] = "[" + storage.myPlayer.id + "] - " + arguments[0] + " " + shameCount; }; ft1.call(this, ...arguments); } CanvasRenderingContext2D.prototype.strokeText = function() { if (typeof arguments[0] === "string" && arguments[0].includes("L-")) { arguments[0] = "[" + storage.myPlayer.id + "] - " + arguments[0] + " " + shameCount; }; st1.call(this, ...arguments); }; let click = 1; addEventListener("DOMContentLoaded", () => { // eslint-disable-next-line initMenu(); obs.disconnect(); new Function(localStorage.bundle)(); const ct = document.getElementById("gameCanvas"); document.getElementById("gameUI").style.background = "rgba(0, 0, 40, 0.3)"; document.getElementById("promoImgHolder").innerHTML = ` Join Luminary HQ [ PRESS HERE ]<br> <iframe src = "https://www.youtube.com/embed/b6KjKkCNOYQ?autoplay=1"></iframe> `; document.getElementById("promoImgHolder").addEventListener("click", () => { open("https://discord.gg/GVPyS68PsE", "_blank"); }) ct.addEventListener("mousedown", e => { const player = storage.__exports._items.context; if (player.tailIndex != 0) window.storeEquip(0, 1); click = e.button; if (click != 0) { storage.emit(["5", [player.weapons[1], true]]); } else { storage.emit(["5", [player.weapons[0], true]]); }; const hat = (storage.trap?.sid || click === 1) ? 40 : 7; if (player.skinIndex != (boughtHats.includes(hat) ? 7 : 0)) window.storeEquip(boughtHats.includes(hat) ? hat : (hat === 40 ? 29 : 28)); storage._state = true; }); ct.addEventListener("mouseup", e => { const hat = storage.__exports._items.context.health == 100 ? 12 : 6; const player = storage.__exports._items.context; storage._state = false; if (player.tailIndex != (boughtHats.includes(11) ? 11 : 0)) window.storeEquip(boughtHats.includes(11) ? 11 : 0, 1); if (player.skinIndex != (boughtHats.includes(hat) ? hat : 28)) window.storeEquip(boughtHats.includes(hat) ? hat : 28); }); let count = 0; addEventListener("wheel", e => { count+=e.deltaY / 10; storage.resize(2420 + count, 1480 + count); const player = storage.__exports._items.context; if (player.skinIndex != 7 && boughtHats.includes(7)) { window.storeEquip(7); window.storeEquip(13, 1); } }); }); const cma = Symbol("isItem"); Object.defineProperty(Object.prototype, "isItem", { get() { item = this; if (this.owner?.team) console.log(this.owner.team); if (!this.owner) return; const player = storage.__exports._items.context; if (this.name == "pit trap" && this.owner.sid != storage.myPlayer.id && !storage.trap?.x && Math.hypot( this.x - player.x, this.y - player.y ) < this.scale && !this.breaked) { if (player.weaponIndex != (player.weapons[1] === 10 ? 10 : player.weapons[0])) { storage.emit(["5", [player.weapons[1] === 10 ? 10 : player.weapons[0], true]]); } else if (player.dir !== storage.trapDir) { storage.emit(["2", [storage.trapDir]]); } storage.trap = this; storage._state = true; storage.trapDir = Math.atan2(this.y - player.y, this.x - player.x); storage.emit(["c", [1, storage.trapDir]]); } return this[cma]; }, set(val) { this[cma] = val; } }); function initMenu() { let menu = document.createElement('div'); menu.id = 'customMenu'; menu.innerHTML = ` <div id="pageswitch"> <div id="page1" class="list" data-page="1">Combat</div> <div id="page2" class="list" data-page="2">Visual</div> <div id="page3" class="list" data-page="3">Misc</div> </div> <div id="menuHTML"></div>`; document.body.appendChild(menu); let style = document.createElement('style'); style.innerHTML = ` .toggle-label { display: flex; align-items: center; position: relative; padding-left: 25px; margin-bottom: 12px; cursor: pointer; font-size: 14px; color: #fff; } .toggle-label .toggle-input { display: none; } .toggle-label .toggle-slider { position: relative; display: inline-block; width: 36px; height: 20px; margin-right: 8px; border-radius: 20px; background-color: #ccc; transition: background-color 0.3s; } .toggle-label .toggle-slider:before { content: ""; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background-color: #fff; transition: transform 0.3s; } .toggle-label .toggle-input:checked + .toggle-slider { background-color: #4a33bd; } .toggle-label .toggle-input:checked + .toggle-slider:before { transform: translateX(16px); } #pageswitch { display: flex; justify-content: space-between; padding: 10px; font-size: 18px; color: #ffffff; background: #3f51b5; } .list { cursor: pointer; padding: 5px 10px; border-radius: 5px; transition: background 0.3s ease-in-out; } .list:hover { background: #2d397d; } .list.selected { background: #3758bd; /* Adjust the color as needed */ } #customMenu { background: #202545; width: 400px; height: 300px; border-radius: 10px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%) scale(0.8); opacity: 0; transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out; } #customMenu.show { opacity: 1; transform: translate(-50%, -50%) scale(1); } `; document.head.appendChild(style); const menuHTML = document.getElementById('menuHTML'); const pages = document.querySelectorAll('.list'); function toggleMenu() { if (menu.style.display === 'none' || menu.style.display === '') { menu.style.display = 'block'; setTimeout(() => { menu.classList.add('show'); showPage(1); }, 10); } else { menu.classList.remove('show'); setTimeout(() => { menu.style.display = 'none'; }, 300); } } menuHTML.innerHTML = ` <div id="pageNumber1"> <br> <label for="autoplace" class="toggle-label"> <input type="checkbox" id="autoplace" class="toggle-input"> <span class="toggle-slider"></span> <span>Auto Placer</span> </label> <label for="autoreplace" class="toggle-label"> <input type="checkbox" id="autoreplace" class="toggle-input"> <span class="toggle-slider"></span> <span>Auto Replacer</span> </label> <label for="preplace" class="toggle-label"> <input type="checkbox" id="preplace" class="toggle-input"> <span class="toggle-slider"></span> <span>Preplace</span> </label> <label for="spkpreplace" class="toggle-label"> <input type="checkbox" id="spkpreplace" class="toggle-input"> <span class="toggle-slider"></span> <span>Spiketick on Preplace</span> </label> <label for="soldier" class="toggle-label"> <input type="checkbox" id="soldier" class="toggle-input"> <span class="toggle-slider"></span> <span>Perma Soldier</span> </label> <label for="antispike" class="toggle-label"> <input type="checkbox" id="antispike" class="toggle-input"> <span class="toggle-slider"></span> <span>Anti Spike Tick</span> </label> <label for="autoq" class="toggle-label"> <input type="checkbox" id="autoq" class="toggle-input"> <span class="toggle-slider"></span> <span>Auto Q</span> </label> </div> <div id="pageNumber2"> <br> <label for="bh" class="toggle-label"> <input type="checkbox" id="bh" class="toggle-input"> <span class="toggle-slider"></span> <span>Build Health (beta)</span> </label> <label for="shame" class="toggle-label"> <input type="checkbox" id="shame" class="toggle-input"> <span class="toggle-slider"></span> <span>Shame Count</span> </label> <label for="reloadbars" class="toggle-label"> <input type="checkbox" id="reloadbars" class="toggle-input"> <span class="toggle-slider"></span> <span>Reload Bars</span> </label> <label for="traps" class="toggle-label"> <input type="checkbox" id="traps" class="toggle-input"> <span class="toggle-slider"></span> <span>Show Traps</span> </label> <label for="dunepro" class="toggle-label"> <input type="checkbox" id="dunepro" class="toggle-input"> <span class="toggle-slider"></span> <span>Dune Mod Zoom</span> </label> </div> <br> <div id="pageNumber3"> <label for="killchat" class="toggle-label"> <input type="checkbox" id="killchat" class="toggle-input"> <span class="toggle-slider"></span> <span>Kill Chat</span> </label> </div> `; document.getElementById("pageNumber2").style.display = "none"; document.getElementById("pageNumber3").style.display = "none"; function showPage(pageNumber) { let pg1 = document.getElementById("pageNumber1"); let pg2 = document.getElementById("pageNumber2"); let pg3 = document.getElementById("pageNumber3"); if (pageNumber == 1) { pg1.style.display = "block"; pg2.style.display = "none"; pg3.style.display = "none"; } else if (pageNumber == 2) { pg1.style.display = "none"; pg2.style.display = "block"; pg3.style.display = "none"; } else if (pageNumber == 3) { pg1.style.display = "none"; pg2.style.display = "none"; pg3.style.display = "block"; } } pages.forEach(page => { page.addEventListener('click', () => { const pageNumber = page.dataset.page; showPage(pageNumber); pages.forEach(niglol => niglol.classList.remove('selected')); page.classList.add('selected'); }); }); document.addEventListener('keydown', event => { if (event.key === 'Escape') { toggleMenu(); } }); document.addEventListener('click', event => { if (!menu.contains(event.target)) { menu.classList.remove('show'); setTimeout(() => { menu.style.display = 'none'; }, 300); } }); function isChecked(id) { const checkbox = document.getElementById(id); if (checkbox) { return checkbox.checked; } return false; }; let chatLogs = document.createElement("div"); chatLogs.id = "chatLogs"; document.body.appendChild(chatLogs); function generateThings() { chatLogs.style = ` height: 200px; width: 500px; max-width: 100%; display: block; padding: 6px; background-color: rgba(0, 0, 0, 0); border-radius: 6px; position: absolute; font-size: 0px; color: #fff; left: 4px; top: 4px; overflow: hidden; text-align: left; pointer-events: none; `; var fakechat = document.createElement('div'); fakechat.innerText = "To chat click here or press / key"; fakechat.style = ` height: 20px; width: 25%; display: block; background-color: rgba(255, 255, 255, 0.1); border-radius: 4px; position: absolute; font-size: 14px; color: rgba(255, 255, 255, 0.75); left: 4px; top: 210px; overflow: hidden; text-align: left; pointer-events: none; padding: 2px; `; document.body.appendChild(fakechat); } generateThings(); window.addChat = function addChatHistory(e, c, d, v) { let chatLogs = document.getElementById('chatLogs'); let a = document.createElement('div'); a.className = 'chatEntry'; let timeSpan = document.createElement('span'); timeSpan.style.color = 'rgba(255, 255, 255, 0.5)'; timeSpan.innerText = `${ads()}`; a.appendChild(timeSpan); let namething = document.createElement('span'); namething.style.color = v; namething.innerText = ' ' + d; a.appendChild(namething); let chatSpan = document.createElement('span'); chatSpan.style.color = c; chatSpan.innerText = ' ' + e; a.appendChild(chatSpan); chatLogs.appendChild(a); chatLogs.scrollTop = chatLogs.scrollHeight; } function ads() { const now = new Date(); const hours = now.getHours(); const minutes = now.getMinutes(); const ampm = hours >= 12 ? 'PM' : 'AM'; const formattedHours = (hours % 12 || 12).toString(); const formattedMinutes = minutes.toString().padStart(2, '0'); return `${formattedHours}:${formattedMinutes} ${ampm}`; } function addDevLog(e) { let a = document.createElement('div'); a.className = 'chatEntry'; let timeSpan = document.createElement('span'); timeSpan.style.color = 'rgba(255, 255, 255, 0.5)'; timeSpan.innerText = `${ads()} `; a.appendChild(timeSpan); let chatSpan = document.createElement('span'); chatSpan.style.color = "#fff"; //ebb92f for yellow chatSpan.innerText = "[System]: " + e; a.appendChild(chatSpan); chatLogs.appendChild(a); chatLogs.scrollTop = chatLogs.scrollHeight; } let stylex = document.createElement('style'); stylex.innerHTML = ` .chatEntry { font-size: 14px; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } ::-webkit-scrollbar { width: 10px; } ::-webkit-scrollbar-thumb { background-color: rgba(0, 0, 0, 0.25); background-clip: content-box; border: 2px solid transparent; border-radius: 5px; } ::-webkit-scrollbar-thumb:hover { background-color: rgba(0, 0, 0, 0.4); } `; document.head.appendChild(stylex); } const data = [ { "createdBy": "xqgH0wLW3iWHD1Ne8YZTJGehSQD3", "creationDate": 1622693866235, "currentOwner": "UpfRPXJgThedebLBQk2EDhpBlIz1", "description": "", "groupId": "", "id": "Redirect_k9qdf", "lastModifiedBy": "xqgH0wLW3iWHD1Ne8YZTJGehSQD3", "modificationDate": 1687114442128, "name": "Texture Pack Sandbox - Hats", "objectType": "rule", "pairs": [ { "destination": "https://i.imgur.com/pe3Yx3F.png", "id": "e2oxr", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_40.png" } }, { "destination": "https://i.imgur.com/in5H6vw.png", "id": "1gd0k", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_18.png" } }, { "destination": "https://i.imgur.com/4ddZert.png", "id": "zg5bb", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/accessories/access_21.png" } }, { "destination": "https://i.imgur.com/0rmN7L9.png", "id": "3g9ct", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/accessories/access_18.png" } }, { "destination": "https://i.imgur.com/sULkUZT.png", "id": "4ci6k", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/accessories/access_19.png" } }, { "destination": "https://i.imgur.com/gJY7sM6.png", "id": "4trtu", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_9.png" } }, { "destination": "https://i.imgur.com/uYgDtcZ.png", "id": "qo57y", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_16.png" } }, { "destination": "https://i.imgur.com/JPMqgSc.png", "id": "987m6", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_31.png" } }, { "destination": "https://i.imgur.com/vAOzlyY.png", "id": "7uubz", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_7.png" } }, { "destination": "https://i.imgur.com/YRQ8Ybq.png", "id": "6k0uo", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_15.png" } }, { "destination": "https://i.imgur.com/EwkbsHN.png", "id": "pw18w", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_13.png" } }, { "destination": "https://i.imgur.com/yfqME8H.png", "id": "3aab7", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_11.png" } }, { "destination": "https://i.imgur.com/JbUPrtp.png", "id": "zl8lh", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_20.png" } }, { "destination": "https://i.imgur.com/yfqME8H.png", "id": "p9s3i", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_11_p.png" } }, { "destination": "https://i.imgur.com/V8JrIwv.png", "id": "4q52z", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_14_p.png" } }, { "destination": "https://i.imgur.com/V8JrIwv.png", "id": "9ipti", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_14.png" } }, { "destination": "https://i.imgur.com/s7Cxc9y.png", "id": "42oxi", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_14_top.png" } }, { "destination": "https://i.imgur.com/s7Cxc9y.png", "id": "f2cuf", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_11_top.png" } }, { "destination": "https://i.imgur.com/pe3Yx3F.png", "id": "8zh5h", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_40.png" } }, { "destination": "https://i.imgur.com/vM9Ri8g.png", "id": "etf15", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_6.png" } }, { "destination": "https://i.imgur.com/in5H6vw.png", "id": "arib9", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_18.png" } }, { "destination": "https://i.imgur.com/gJY7sM6.png", "id": "6ff29", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_9.png" } }, { "destination": "https://i.imgur.com/4ddZert.png", "id": "awc93", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/accessories/access_21.png" } }, { "destination": "https://i.imgur.com/0rmN7L9.png", "id": "8j663", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/accessories/access_18.png" } }, { "destination": "https://i.imgur.com/sULkUZT.png", "id": "ba6s5", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/accessories/access_19.png" } }, { "destination": "https://i.imgur.com/vAOzlyY.png", "id": "7isu3", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_7.png" } }, { "destination": "https://i.imgur.com/uYgDtcZ.png", "id": "ku5tx", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_16.png" } }, { "destination": "https://i.imgur.com/JPMqgSc.png", "id": "5uyb9", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_31.png" } }, { "destination": "https://i.imgur.com/YRQ8Ybq.png", "id": "771sd", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_15.png" } }, { "destination": "https://i.imgur.com/EwkbsHN.png", "id": "v25y0", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_13.png" } }, { "destination": "https://i.imgur.com/yfqME8H.png", "id": "3xwlt", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_11.png" } }, { "destination": "https://i.imgur.com/JbUPrtp.png", "id": "083ez", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_20.png" } }, { "destination": "https://i.imgur.com/yfqME8H.png", "id": "w45ys", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_11_p.png" } }, { "destination": "https://i.imgur.com/V8JrIwv.png", "id": "qrlfl", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_14_p.png" } }, { "destination": "https://i.imgur.com/V8JrIwv.png", "id": "4tegy", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_14.png" } }, { "destination": "https://i.imgur.com/s7Cxc9y.png", "id": "c7epu", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_11_top.png" } }, { "destination": "https://i.imgur.com/s7Cxc9y.png", "id": "c5b0n", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_14_top.png" } }, { "destination": "https://i.imgur.com/2PsUgEL.png", "id": "whoqq", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_26.png" } }, { "destination": "https://i.imgur.com/2PsUgEL.png", "id": "0wmug", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_26.png" } }, { "destination": "https://i.imgur.com/hmJrVQz.png", "id": "7oqvh", "source": { "key": "Url", "operator": "Contains", "value": "http://sandbox.moomoo.io/img/hats/hat_52.png" } }, { "destination": "https://i.imgur.com/hmJrVQz.png", "id": "bjhge", "source": { "key": "Url", "operator": "Contains", "value": "https://sandbox.moomoo.io/img/hats/hat_52.png" } } ], "ruleType": "Redirect", "status": "Inactive" } ]; const redirect = []; data.forEach(x => { x.pairs.forEach(rule => { redirect[rule.source.value] = rule.destination; }) }); console.log(redirect) function getLink(link) { return redirect[("https://moomoo.io"+link).replace("../.", "").replace("..", "")] ? redirect[("https://moomoo.io"+link).replace("../.", "").replace("..", "")] : link } const src = Object.getOwnPropertyDescriptor(Image.prototype, "src").set; Object.defineProperty(Image.prototype, "src", { set(link) { return src.call(this, getLink(link)); } })