// ==UserScript==
// @name Moomoo.io - AutoScroll
// @version 0.1
// @description Key-triggered autoscroll: Check the code for more info. I've ditched the 'ping' feature from the 'R' key to keep the bull helmet scroll incognito. You can also ping by simply clicking the minimap.
// @ - Bull Hat (Key: "R")
// @ - Soldier Helmet (Key: "G")
// @ - Tank Gear (Key: "Z")
// @ - Bearbarian Armor (Key: "M")
// @ - Booster Hat (Key: "B")
// @ - Flipper Hat (Key: "Y")
// @ - EMP Helmet (Key: "J")
// @ - Samurai Armor (Key: "U")
// @ - Turret Hat (Key: "T")
// @ - Fluff Head (Key: "I")
// @ - Spike Gear (Key: "H")
// @ - Monkey Tail (Key: "O")
// @author Seryo
// @match *://*.moomoo.io/*
// @namespace https://gf.qytechs.cn/users/1190411
// @icon https://cdn.glitch.com/82ae8945-dcc6-4276-98a9-665381b4cd2b/cursor12.png
// @license MIT
// @grant none
// @require https://gf.qytechs.cn/scripts/440839-moomoo-items/code/MooMoo%20Items.js?version=1023778
// @require https://gf.qytechs.cn/scripts/423602-msgpack/code/msgpack.js?version=1005014
// ==/UserScript==
class MooMoo {
static get hotkeys() {
return {
hat_hotkeys: {
bull_hat: { id: 7, key: "r", scroll: { toggle: true, time: 0, top: 1450 } },
soldier_helmet: { id: 6, key: "g", scroll: { toggle: true, time: 0, top: 1200 } },
tank_gear: { id: 40, key: "z", scroll: { toggle: true, time: 0, top: 2050 } },
bearbarian_armor: { id: 26, key: "m", scroll: { toggle: true, time: 0, top: 1600 } },
booster_hat: { id: 12, key: "b", scroll: { toggle: true, time: 0, top: 1550 } },
flipper_hat: { id: 31, key: "y", scroll: { toggle: true, time: 0, top: 1000 } },
emp_helmet: { id: 22, key: "j", scroll: { toggle: true, time: 0, top: 1500 } },
samurai_armor: { id: 20, key: "u", scroll: { toggle: true, time: 0, top: 1900 } },
turret_hat: { id: 53, key: "t", scroll: { toggle: true, time: 0, top: 1850 } },
fluff_head: { id: 30, key: "i", scroll: { toggle: true, time: 0, top: 200 } },
spike_gear: { id: 11, key: "h", scroll: { toggle: true, time: 0, top: 1800 } },
monkey_tail: { id: 11, key: "o", scroll: { toggle: true, time: 0, top: 250 } }
}
};
}
static init(arg) {
this.hathotkeys();
this.canvas = document.getElementById("gameCanvas");
this.result = "";
this.initcps();
this.doc = document;
this.initlisteners();
this.id = `#${arg.match(/d="?g(.*)?I/g)[0].match(/(?=g).*(?=)/)[0]}`;
window.addEventListener("load", (event) => {
MooMoo.initHTML();
});
}
static get() {
return new Promise((resolve) => {
fetch(arguments[0])
.then((res) => res.text())
.then((res) => {
return resolve(res);
});
});
}
static smoothscroll(scrolltop, time) {
$('#storeHolder').animate({
scrollTop: scrolltop
}, time);
}
static hathotkeys() {
let hotkeys = this.hotkeys.hat_hotkeys;
let locale = this;
for (let i in this.hotkeys.hat_hotkeys) {
document.addEventListener('keydown', (e) => {
if (document.activeElement.type == "text") return;
if (e.key.toLowerCase() == hotkeys[i].key) {
if (!hotkeys[i].scroll.toggle) return;
if (document.getElementById("storeMenu").style.display === "block") {
locale.smoothscroll(hotkeys[i].scroll.top, hotkeys[i].scroll.time);
}
e.preventDefault();
e.stopPropagation();
}
});
}
}
}
(async () => {
const game = await MooMoo.get(document.location.href);
MooMoo.init(game);
var ws;
WebSocket.prototype._send = WebSocket.prototype.send;
WebSocket.prototype.send = function (m) {
if (MooMoo.decode(m)[0] == "c") {
MooMoo.handleHit(m);
}
if (!ws) {
document.ws = this;
ws = this;
this.addEventListener('message', function (message) {
MooMoo.setws(this);
MooMoo.getwsmessage(message);
});
}
this._send(m);
};
})();