Gartic.io Anonim Menu

press F2 to open and close the menu

  1. // ==UserScript==
  2. // @name Gartic.io Anonim Menu
  3. // @namespace https://greasyfork.org/
  4. // @version 2023-12-08
  5. // @description press F2 to open and close the menu
  6. // @author anonimbiri
  7. // @match https://gartic.io/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=gartic.io
  9. // @require https://update.greasyfork.org/scripts/462013/1164920/Abnormal%20Menu.js
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. const AnonimbiriAPI = { ws: null, isGame: false, playerId: null, unlimitedKick: false, autoSkip: false, antiAfk: false, noCooldown:false, debug: false };
  14.  
  15. var menu = new CreateMenu({
  16. title: "Anonim Menu"
  17. });
  18. var fake_win_text = menu.addInput({label: "Fake Win text", value: "anonimbiri"})
  19. var fake_win = menu.addButton({title: "Send Fake Win"})
  20. fake_win.on("click" , () => {
  21. const event = new MessageEvent('message', { data: `42["26","${fake_win_text.getValue()}",10,11,10000]` });
  22. AnonimbiriAPI.ws.dispatchEvent(event);
  23. });
  24. var unlimited_kick = menu.addSwitch({label: "Unlimited Kick"})
  25. unlimited_kick.on("change" , () => {
  26. AnonimbiriAPI.unlimitedKick = unlimited_kick.getValue();
  27. });
  28. var auto_skip = menu.addSwitch({label: "Auto Skip"})
  29. auto_skip.on("change" , () => {
  30. AnonimbiriAPI.autoSkip = auto_skip.getValue();
  31. });
  32. var anti_afk = menu.addSwitch({label: "Anti Afk"})
  33. anti_afk.on("change" , () => {
  34. AnonimbiriAPI.antiAfk = anti_afk.getValue();
  35. });
  36. var no_cooldown = menu.addSwitch({label: "No Cooldown For Room Change"})
  37. no_cooldown.on("change" , () => {
  38. AnonimbiriAPI.noCooldown = no_cooldown.getValue();
  39. });
  40.  
  41. window.WebSocket = class extends WebSocket {
  42. constructor(...args) {
  43. super(...args);
  44. AnonimbiriAPI.ws = this;
  45. this.addEventListener('message', (e) => {
  46. AnonimbiriAPI.debug && console.log("%c<--- Received data:", "color: pink", e.data);
  47. const messageData = JSON.parse(e.data.slice(2));
  48. if (messageData[0] === "45" && AnonimbiriAPI.unlimitedKick) {
  49. const originalDateNow = Date.now;
  50. (original => (Date.now = () => original() * 2123).toString = () => "function now() {\n [native code]\n}")(Date.now);
  51. setTimeout(() => { (original => (Date.now = () => originalDateNow).toString = () => "function now() {\n [native code]\n}")(Date.now); }, 2000);
  52. return;
  53. }else if (messageData[0] === "5") {
  54. AnonimbiriAPI.isGame = true;
  55. AnonimbiriAPI.playerId = messageData[2];
  56. }else if(messageData[0] === "16" && AnonimbiriAPI.autoSkip){
  57. AnonimbiriAPI.ws.send(`42[25,${AnonimbiriAPI.playerId}]`);
  58. }else if(messageData[0] === "34"){
  59. AnonimbiriAPI.ws.send(`42[30,${AnonimbiriAPI.playerId}]`);
  60. AnonimbiriAPI.ws.send(`42[30,${AnonimbiriAPI.playerId}]`);
  61. AnonimbiriAPI.ws.send(`42[30,${AnonimbiriAPI.playerId}]`);
  62. }else if (messageData[0] === "19" && AnonimbiriAPI.antiAfk){
  63. (original => (Date.now = () => original() / 2123).toString = () => "function now() {\n [native code]\n}")(Date.now);
  64. }
  65. });
  66. }
  67.  
  68. send(data) {
  69. AnonimbiriAPI.debug && console.log("%c---> Sent data:", "color: pink", data);
  70. const newData = JSON.parse(data.slice(2));
  71. if (newData[1] && newData[1].nick) {
  72. newData[1].nick = `‎${newData[1].nick}`;
  73. data = data.slice(0, 2) + JSON.stringify(newData);
  74. }else if(newData[0] === "46"){
  75.  
  76. }
  77. super.send(data);
  78. }
  79. }
  80.  
  81. const observer = new MutationObserver(() => {
  82. 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: ''}));
  83. if(document.querySelector('#popUp') && AnonimbiriAPI.noCooldown){
  84. const originalDateNow = Date.now;
  85. (original => (Date.now = () => original() * 2123).toString = () => "function now() {\n [native code]\n}")(Date.now);
  86. setTimeout(() => { (original => (Date.now = () => originalDateNow).toString = () => "function now() {\n [native code]\n}")(Date.now); }, 2000);
  87. document.querySelector('.ic-playHome').click();
  88. }
  89. });
  90. observer.observe(document.body, { childList: true, subtree: false });
  91.  
  92. const keyupEvent = function (e) {
  93. if (e.keyCode === 113) {
  94. MenuShowHide();
  95. }else if (e.keyCode === 13){
  96. var chatInput = document.querySelector('input[name="chat"]');
  97. AnonimbiriAPI.ws.send(`42[11,${AnonimbiriAPI.playerId},"${chatInput.value}"]`);
  98. chatInput.value = '';
  99. }
  100. };
  101.  
  102. window.addEventListener('keyup', keyupEvent);
  103. window.AnonimbiriAPI = AnonimbiriAPI;