// ==UserScript==
// @name Gartic.io Anonim Menu
// @namespace https://greasyfork.org/
// @version 2023-12-08
// @description press F2 to open and close the menu
// @author anonimbiri
// @match https://gartic.io/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=gartic.io
// @require https://update.greasyfork.org/scripts/462013/1164920/Abnormal%20Menu.js
// @grant none
// ==/UserScript==
const AnonimbiriAPI = { ws: null, isGame: false, playerId: null, unlimitedKick: false, autoSkip: false, antiAfk: false, noCooldown:false, debug: false };
var menu = new CreateMenu({
title: "Anonim Menu"
});
var fake_win_text = menu.addInput({label: "Fake Win text", value: "anonimbiri"})
var fake_win = menu.addButton({title: "Send Fake Win"})
fake_win.on("click" , () => {
const event = new MessageEvent('message', { data: `42["26","${fake_win_text.getValue()}",10,11,10000]` });
AnonimbiriAPI.ws.dispatchEvent(event);
});
var unlimited_kick = menu.addSwitch({label: "Unlimited Kick"})
unlimited_kick.on("change" , () => {
AnonimbiriAPI.unlimitedKick = unlimited_kick.getValue();
});
var auto_skip = menu.addSwitch({label: "Auto Skip"})
auto_skip.on("change" , () => {
AnonimbiriAPI.autoSkip = auto_skip.getValue();
});
var anti_afk = menu.addSwitch({label: "Anti Afk"})
anti_afk.on("change" , () => {
AnonimbiriAPI.antiAfk = anti_afk.getValue();
});
var no_cooldown = menu.addSwitch({label: "No Cooldown For Room Change"})
no_cooldown.on("change" , () => {
AnonimbiriAPI.noCooldown = no_cooldown.getValue();
});
window.WebSocket = class extends WebSocket {
constructor(...args) {
super(...args);
AnonimbiriAPI.ws = this;
this.addEventListener('message', (e) => {
AnonimbiriAPI.debug && console.log("%c<--- Received data:", "color: pink", e.data);
const messageData = JSON.parse(e.data.slice(2));
if (messageData[0] === "45" && AnonimbiriAPI.unlimitedKick) {
const originalDateNow = Date.now;
(original => (Date.now = () => original() * 2123).toString = () => "function now() {\n [native code]\n}")(Date.now);
setTimeout(() => { (original => (Date.now = () => originalDateNow).toString = () => "function now() {\n [native code]\n}")(Date.now); }, 2000);
return;
}else if (messageData[0] === "5") {
AnonimbiriAPI.isGame = true;
AnonimbiriAPI.playerId = messageData[2];
}else if(messageData[0] === "16" && AnonimbiriAPI.autoSkip){
AnonimbiriAPI.ws.send(`42[25,${AnonimbiriAPI.playerId}]`);
}else if(messageData[0] === "34"){
AnonimbiriAPI.ws.send(`42[30,${AnonimbiriAPI.playerId}]`);
AnonimbiriAPI.ws.send(`42[30,${AnonimbiriAPI.playerId}]`);
AnonimbiriAPI.ws.send(`42[30,${AnonimbiriAPI.playerId}]`);
}else if (messageData[0] === "19" && AnonimbiriAPI.antiAfk){
(original => (Date.now = () => original() / 2123).toString = () => "function now() {\n [native code]\n}")(Date.now);
}
});
}
send(data) {
AnonimbiriAPI.debug && console.log("%c---> Sent data:", "color: pink", data);
const newData = JSON.parse(data.slice(2));
if (newData[1] && newData[1].nick) {
newData[1].nick = `${newData[1].nick}`;
data = data.slice(0, 2) + JSON.stringify(newData);
}else if(newData[0] === "46"){
}
super.send(data);
}
}
const observer = new MutationObserver(() => {
document.querySelector('input[name="chat"]')?.replaceWith(Object.assign(document.createElement('input'), {type: 'text', name: 'chat', className: 'mousetrap', placeholder: '🔓 Answer Unlocked', autocomplete: 'off', autocorrect: 'off', autocapitalize: 'off', maxLength: 100, value: ''}));
if(document.querySelector('#popUp') && AnonimbiriAPI.noCooldown){
const originalDateNow = Date.now;
(original => (Date.now = () => original() * 2123).toString = () => "function now() {\n [native code]\n}")(Date.now);
setTimeout(() => { (original => (Date.now = () => originalDateNow).toString = () => "function now() {\n [native code]\n}")(Date.now); }, 2000);
document.querySelector('.ic-playHome').click();
}
});
observer.observe(document.body, { childList: true, subtree: false });
const keyupEvent = function (e) {
if (e.keyCode === 113) {
MenuShowHide();
}else if (e.keyCode === 13){
var chatInput = document.querySelector('input[name="chat"]');
AnonimbiriAPI.ws.send(`42[11,${AnonimbiriAPI.playerId},"${chatInput.value}"]`);
chatInput.value = '';
}
};
window.addEventListener('keyup', keyupEvent);
window.AnonimbiriAPI = AnonimbiriAPI;