MooMoo styles

Moomoo.io/Sploop.io mod [Texture pack editor/ MUSIC PLAYER/HAT KEYBINDS/ MUSIC VISUALIZER/ SKIN SWITCHER/ ANTI-KICK/AUTO LOGIN]

  1. // ==UserScript==
  2. // @name MooMoo styles
  3. // @namespace http://tampermonkey.net/
  4. // @version 4.0
  5. // @description Moomoo.io/Sploop.io mod [Texture pack editor/ MUSIC PLAYER/HAT KEYBINDS/ MUSIC VISUALIZER/ SKIN SWITCHER/ ANTI-KICK/AUTO LOGIN]
  6. // @author Gaston
  7. // @match *://moomoo.io/*
  8. // @match *://dev.moomoo.io/*
  9. // @match *://sploop.io/*
  10. // @match *://sandbox.moomoo.io/*
  11. // @match *://tjmoomoo.ml/*
  12. // @icon https://www.google.com/s2/favicons?sz=64&domain=moomoo.io
  13. // @require http://code.jquery.com/jquery-3.3.1.min.js
  14. // @require https://code.jquery.com/ui/1.12.0/jquery-ui.min.js
  15. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.0/jquery-confirm.min.js
  16. // @grant GM_getValue
  17. // @grant GM_setValue
  18. // @grant GM_addValueChangeListener
  19. // @name:zh MooMoo styles
  20. // @name:en MooMoo styles
  21. // @name:ar أنماط موومو
  22. // @name:es Estilos de moomoo
  23. // @name:ru Moomoo Styles
  24. // @name:hi मूमू स्टाइल्स
  25. // @name:pt Estilos Moomoo
  26. // @name:de Moomoo -Stile
  27. // @name:ja Moomooスタイル
  28. // @name:fr Styles moomoo
  29. // @name:nl Moomoo Styles
  30. // @name:th สไตล์ Moomoo
  31. // @name:pl Style MOOMOO
  32. // @name:ko Moomoo 스타일
  33. // @name:it Stili moomoo
  34. // @name:uk Стилі Moomoo
  35. // @name:vi Phong cách Moomoo
  36. // @name:id Gaya Moomoo
  37. // @name:tr Moomoo Styles
  38. // @name:ro Moomoo Styles
  39. // @name:sv Moomoo -stilar
  40. // @name:no Moomoo -stiler
  41. // @name:hu Moomoo stílusok
  42. // @name:cs Moomoo styly
  43. // @name:bg Стилове Moomoo
  44. // @name:he סגנונות Moomoo
  45. // @name:da Moomoo Styles More actions
  46. // @name:el Στυλ Moomoo More actions
  47. // @name:fi Moomoo Styles
  48. // @name:sk Štýly Moomoo
  49. // @description:zh Moomoo.io/Sploop.io mod [Texture pack editor/ MUSIC PLAYER/HAT KEYBINDS/ MUSIC VISUALIZER/ SKIN SWITCHER/ ANTI-KICK/AUTO LOGIN]
  50. // @description:en Moomoo.io/Sploop.io mod [Texture pack editor/ MUSIC PLAYER/HAT KEYBINDS/ MUSIC VISUALIZER/ SKIN SWITCHER/ ANTI-KICK/AUTO LOGIN]
  51. // @description:fr Mooomoo.io/splophy.io mod [Texture Pack Editor / Music Player / Hat Keybinds / Music Visualizer / Skin Swither / Anti-Kick / Auto Connexion]
  52. // @description:ja Moomoo.io/sploop.io mod [テクスチャパックエディター/音楽プレーヤー/帽子Keybinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Login]
  53. // @description:pt Moomoo.io/sploop.io mod [editor de pacote de texturas/ tocador de música/ hat Keybinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Login] More actions
  54. // @description:ar moomoo.io/sploop.io mod [محرر حزمة الملمس/ مشغل الموسيقى/ القبعة keybinds/ music visualizer/ skin switcher/ anti-kick/ auto login] More actions
  55. // @description:ru Moomoo.io/sploop.io mod [Редактор текстурных пакетов/ музыкальный игрок/ шляпа Keybinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Login]
  56. // @description:de Moomoo.io/sploop.io mod [Texture Pack Editor/ Music Player/ Hat Keybinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Login]
  57. // @description:es Moomoo.io/sploop.io mod [editor de paquetes de textura/ reproductor de música/ keybinds/ music visualizer/ skin switcher/ anti-kick/ inicio de sesión automático]
  58. // @description:hi Moomoo.io/sploop.io mod [बनावट पैक संपादक/ संगीत खिलाड़ी/ हैट कीबाइंड/ संगीत विज़ुअलाइज़र/ स्किन स्विचर/ एंटी-किक/ ऑटो लॉगिन] Explain More actions
  59. // @description:th moomoo.io/sploop.io mod [Texture Pack Editor/ Music Player/ Hat Keybinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Login]
  60. // @description:id Moomoo.io/sploop.io mod [Editor Paket Tekstur/ Pemutar Musik/ Hat Keybinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Login]
  61. // @description:uk Moomoo.io/sploop.io mod [редактор текстурного пакету/ музичний програвач/ ключ-кейс/ музичний візуалізатор/ перемикач шкіри/ анти-kick/ auto Login]
  62. // @description:pl Mooomoo.io/sploop.io mod [edytor pakietu tekstury/ odtwarzacz muzyki/ czapka keebinds/ muzyka wizualizator/ przełącznik skóry/ anty-kick/ auto login]
  63. // @description:vi Moomoo.io/sploop.io mod [Biên tập viên gói kết cấu/ máy nghe nhạc/ hat keybinds/ music Visualizer/ skin Switcher/ anti-kick/ auto đăng nhập]
  64. // @description:it Moomao.io/sploop.io mod [Texture Pack Editor/ Player Music/ Hat KeyBinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Login]
  65. // @description:tr Moomoo.io/sploop.io Mod [Doku Paketi Düzenleyici/ Müzik Oyuncusu/ Hat Keybinds/ Müzik Görselleştirici/ Cilt Değiştiricisi/ Anti-Bick/ Otomatik Giriş]
  66. // @description:nl MOOMOO.IO/SPLOOP.IO MOD [Texture Pack Editor/ Music Player/ Hat Keybinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Login] More actions
  67. // @description:ko moomoo.io/sploop.io mod [텍스처 팩 편집기/ 음악 연주자/ 모자 키 바인드/ 음악 시각 자/ 스킨 스위처/ 킥/ 킥/ 자동 로그인]
  68. // @description:ro Moomoo.io/sploop.io Mod [Texture Pack Editor/ Music Player/ Hat KeyBinds/ Music Visualizator/ Skin Switcher/ Anti-Kick/ Conectare automată]
  69. // @description:sk MOOMOO.IO/SPLOOP.IO MOD [EDITOR BALUCKÉHO PACIEK A AND MUSIC/ HAT KEYBINDS/ Hudba vizualizátora/ Skin Switcher/ Anti-RICK/ AUTO LONGIN]
  70. // @description:sv Moomoo.io/Sploop.io Mod [Texture Pack Editor/ Music Player/ Hat KeyBinds/ Music Visualizer/ Skin Switcher/ Anti-kick/ Auto Login]
  71. // @description:el Moomoo.io/sploop.io mod [Επεξεργαστής συσκευασίας υφής/ Music Player/ Hat Keybinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Login] More actions
  72. // @description:da Moomoo.io/sploop.io mod [tekstur pack editor/ musikafspiller/ hat keyBinds/ musikvisualizer/ hud switcher/ anti-kick/ auto login]
  73. // @description:hu Moomoo.io/sploop.io mod [Texture Pack szerkesztő/ zenelejátszó/ HAT KeyBinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Bejelentkezés]
  74. // @description:fi Moomoo.io/sloop.io mod [tekstuuripakkauseditori/ musiikkisoitin/ hat Keybinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto-kirjautuminen]
  75. // @description:cs Moomoo.io/sploop.io mod [texturní balíček editor/ hudební přehrávač/ klobouk keyBinds/ hudba vizualizátor/ přepínač kůže/ anti-kok/ automatické přihlášení]
  76. // @description:no Moomoo.io/sploop.io mod [Texture Pack Editor/ Music Player/ Hat KeyBinds/ Music Visualizer/ Skin Switcher/ Anti-Kick/ Auto Login]
  77. // @description:he Moomoo.io/sploop.io mod [עורך חבילות טקסטורה/ נגן מוסיקה/ כובע מקש/ מוסיקה Visualizer/ Skiner Stringer/ Anti-בעיטה/ כניסה אוטומטית]
  78. // @description:bg Moomoo.io/sploop.io mod [Редактор на текстурен пакет/ музикален плейър/ шапка ключове/ музикален визуализатор/ превключвател на кожата/ анти-удар/ автоматично влизане]
  79. // @supportURL https://greatest.deepsurf.us/en/scripts/498902/feedback
  80. // @homepageURL https://greatest.deepsurf.us/en/users/689441-gaston
  81. // @license MIT
  82. // ==/UserScript==
  83.  
  84. //YT: https://www.youtube.com/channel/UCOA8lE9-0XnEIdHqjfQUz1A
  85.  
  86. //this function loads external script that cant be included in the meta data!
  87. !function(){_GM_getValue=GM_getValue,_GM_setValue=GM_setValue,["https://cdn.jsdelivr.net/gh/naquangaston/HostedFiles@main/UserScripts/Updater.js"].map((e=>{let t=new URL(e);return t.protocol="https:",t.href})).map((e=>({name:new URL(e).pathname.split("/").pop(),id:new URL(e).pathname,url:e}))).forEach((async e=>{var t=_GM_getValue(e.id),loaded=!1;t?(console.log(e.name,"Loaded",eval(t)),loaded=!0):console.warn(e.name,"wasn't installed. This Userscript may not function as intended."),console.log("Checking",e.name),await fetch(e.url).then((e=>e.text()),(t=>(console.error("Failed:",e.id,t),null))).then((fetchedScript=>{if(fetchedScript&&_GM_getValue(e.id)!==fetchedScript)if(_GM_setValue(e.id,fetchedScript),loaded)console.log(e.name,"Has been updated in background");else try{eval(fetchedScript),console.log(e.name,"Has been updated and loaded")}catch(t){console.error(e.name,"Failed to update",t)}return e}))}))}();
  88. ! function() {
  89. const consoleLogOriginal = console.log,
  90. consoleWarnOriginal = console.warn,
  91. consoleErrorOriginal = console.error;
  92. window.CustomLog = class {
  93. constructor(e) {
  94. this.title = {
  95. body: e || "---",
  96. color: "darkgrey",
  97. size: "1rem"
  98. }, this.body = {
  99. color: "#008f68",
  100. size: "1rem"
  101. }
  102. }
  103. setTitleBody(e) {
  104. return this.title.body = e, this
  105. }
  106. setTitleStyle({
  107. color: e,
  108. size: t
  109. }) {
  110. return void 0 !== e && (this.title.color = e), void 0 !== t && (this.title.size = t), this
  111. }
  112. setBodyStyle({
  113. color: e,
  114. size: t
  115. }) {
  116. return void 0 !== e && (this.body.color = e), void 0 !== t && (this.body.size = t), this
  117. }
  118. log(e = "") {
  119. consoleLogOriginal(`%c${this.title.body} | %c${e}`, `color: ${this.title.color}; font-weight: bold; font-size: ${this.title.size};`, `color: ${this.body.color}; font-weight: bold; font-size: ${this.body.size}; text-shadow: 0 0 5px rgba(0,0,0,0.2);`)
  120. }
  121. warn(e = "") {
  122. consoleWarnOriginal(`%c${this.title.body} | %c${e}`, `color: ${this.title.color}; font-weight: bold; font-size: ${this.title.size};`, `color: orange; font-weight: bold; font-size: ${this.body.size};`)
  123. }
  124. error(e = "") {
  125. consoleErrorOriginal(`%c${this.title.body} | %c${e}`, `color: ${this.title.color}; font-weight: bold; font-size: ${this.title.size};`, `color: red; font-weight: bold; font-size: ${this.body.size};`)
  126. }
  127. };
  128. const logger = new CustomLog("Script Logger");
  129.  
  130. function overrideConsoleMethod(e, t) {
  131. console[e] = function(...n) {
  132. const o = n.some((e => "object" == typeof e && null !== e));
  133. let i = "Anonymous";
  134. try {
  135. throw new Error
  136. } catch (e) {
  137. if (e.stack) {
  138. const t = e.stack.split("\n");
  139. if (t.length >= 3) {
  140. const e = t[2].match(/at\s+(.*?)\s*\(/);
  141. i = e && e[1] ? e[1] : "Anonymous"
  142. }
  143. }
  144. }
  145. if ("Anonymous" === i && (i = e.charAt(0).toUpperCase() + e.slice(1)), o) t.call(console, `[${i}]`, ...n);
  146. else {
  147. const t = n.map((e => String(e))).join(" ");
  148. logger[e](`[${i}] ${t}`)
  149. }
  150. }
  151. }
  152. overrideConsoleMethod("log", consoleLogOriginal), overrideConsoleMethod("warn", consoleWarnOriginal), overrideConsoleMethod("error", consoleErrorOriginal);
  153. let keybinds = GM_getValue("keybinds") || {};
  154. const styleUrl = "https://raw.githubusercontent.com/naquangaston/HostedFiles/main/moostyle.js",
  155. wordWurl = "https://raw.githubusercontent.com/naquangaston/HostedFiles/main/moomooWords.json",
  156. useChat = !1;
  157. var badWords = GM_getValue("moowords") || [],
  158. reg = new RegExp(`(${[...new Set(badWords.join(" ").match(/[\w\d]+/gi))].join("|")})`, "gi");
  159. const filter1 = e => e.replaceAll(reg, (function(e, t, n) {
  160. return e.length > 1 ? e.split(/[aeiou]+/gi).join("*") : e
  161. })),
  162. lolzcatFilterold = e => e.toLowerCase().split("l").join("w").replaceAll(/l/g, "w").replaceAll(/(l|e)(?!d)/gi, (function(e) {
  163. return {
  164. l: "w"
  165. }[e[0]] || e
  166. })).replace(/s/g, "z").replace(/th/g, "d").replace(/e^d/g, (function(e, t, n) {
  167. return n.slice(t - 1, t + 1), "e"
  168. })).replace(/w{2,}/g, "wl").replaceAll(/e{2,}/gi, "ee").replaceAll(/.r/gi, (e => e.replace("r", "w"))),
  169. filter2 = e => e.toLowerCase().replace(/l/g, "w").replace(/th/g, "d").replace(/s/g, "z").replace(/ee+/gi, "ee").replace(/w{2,}/g, "wl").replace(/(r)(?!\b)/gi, "w").replace(/e(?=d)/gi, "e").replace(/l|e(?!d)/gi, (e => ({
  170. l: "w"
  171. }[e] || e))),
  172. game_ = new class {
  173. #e = function() {};
  174. #t = function() {};
  175. #n = !1;
  176. #o = 1e3;
  177. #i = function(e) {
  178. return new Promise((t => setTimeout(t, e)))
  179. };
  180. #l = 0;
  181. #a = 0;
  182. #s = async function() {
  183. for (;;) {
  184. let e = this.#i,
  185. t = this.#t,
  186. n = this.#e;
  187. if (await e(0), this.#a) break;
  188. t() && (await e(this.#o), console.log("Spawning into game"), n(), await e(this.#o))
  189. }
  190. this.#a = !1, console.log("Done", this.#a)
  191. };
  192. set timeOut(e) {
  193. this.#o = Number.isNaN(e) ? 1e3 : Number(e)
  194. }
  195. get timeOut() {
  196. return this.#o
  197. }
  198. start() {
  199. this.#s()
  200. }
  201. stop() {
  202. this.#a = !0
  203. }
  204. set autoSpawn(e) {
  205. this.#n = !!e
  206. }
  207. get autoSpawn() {
  208. return this.#n
  209. }
  210. set testFunction(e) {
  211. this.#t = e
  212. }
  213. get testFunction() {
  214. return this.#t
  215. }
  216. set spawnFunc(e) {
  217. this.#e = e
  218. }
  219. get spawnFunc() {
  220. return this.#e
  221. }
  222. };
  223. class bool {
  224. constructor(e) {
  225. e && this.toggle()
  226. }
  227. #r = !1;
  228. toggle() {
  229. this.#r = !this.#r
  230. }
  231. get status() {
  232. return this.#r
  233. }
  234. set status(e) {
  235. this.#r = !!e
  236. }
  237. }
  238. class element {
  239. static get br() {
  240. return new element("br")
  241. }
  242. constructor(e, t) {
  243. this.element = e.constructor.name.includes("HTML") && e || function() {
  244. for (let e in arguments[1]) arguments[0].setAttribute(e, arguments[1][e]);
  245. return arguments[0]
  246. }(document.createElement(arguments[0]), arguments[1])
  247. }
  248. style(e) {
  249. for (let t in e) this.element.style[t] = e[t];
  250. return this
  251. }
  252. append(e, ...t) {
  253. this.element.append(e.element || e), console.log("T:", {
  254. targets: t,
  255. fe: t && t.forEach
  256. });
  257. for (let e = 0; e < t.length; e++) {
  258. let n = t[e];
  259. console.log("Appending:", {
  260. element: n,
  261. target: this
  262. }), this.element.append(n.element || n)
  263. }
  264. return this
  265. }
  266. appendTo(e) {
  267. try {
  268. (e.element || "string" == typeof e ? document.querySelector(e) : e).append(this.element)
  269. } catch {
  270. (e.element || e).append(this.element)
  271. } finally {
  272. console.warn("Failed to appent", {
  273. this: this,
  274. target: e
  275. })
  276. }
  277. return this
  278. }
  279. on(e, t) {
  280. return this.element[`on${e}`] = t, this
  281. }
  282. set(e, t) {
  283. return this.element[e] = t, this
  284. }
  285. remove() {
  286. return this.element.remove(), this
  287. }
  288. get() {
  289. return this.element[arguments[0]]
  290. }
  291. get children() {
  292. return new class {
  293. constructor(e) {
  294. for (var t = 0; t < e.length; t += 1) this[t] = e[t];
  295. Object.defineProperty(this, "length", {
  296. get: function() {
  297. return e.length
  298. }
  299. }), Object.freeze(this)
  300. }
  301. item(e) {
  302. return null != this[e] ? this[e] : null
  303. }
  304. namedItem(e) {
  305. for (var t = 0; t < this.length; t += 1)
  306. if (this[t].id === e || this[t].name === e) return this[t];
  307. return null
  308. }
  309. get toArray() {
  310. return [...this]
  311. }
  312. }([...this.element.children])
  313. }
  314. }
  315. const alt = name.includes("alt");
  316.  
  317. function isHidden(e) {
  318. return null === e.offsetParent
  319. }
  320.  
  321. function random(e) {
  322. return e[Math.floor(Math.random() * e.length)]
  323. }
  324.  
  325. function dispatchAllMouseEvents(e) {
  326. ["click", "mouseover", "mouseenter", "mousemove", "mousedown", "mouseup", "mouseout", "mouseleave"].forEach((t => {
  327. let n = new Event(t, {
  328. bubbles: !0,
  329. isTrusted: !0
  330. });
  331. e[`on${t}`] && e[`on${t}`](n), e.dispatchEvent(n)
  332. }))
  333. }
  334.  
  335. function dispatchAllInputEvents(e, t) {
  336. ["focus", "input", "change", "blur"].forEach((n => {
  337. let o = new Event(n, {
  338. bubbles: !0,
  339. isTrusted: !0
  340. });
  341. e[`on${n}`] && e[`on${n}`](o), "input" === n && (e.value = t), e.dispatchEvent(o)
  342. }))
  343. }
  344. var _setUp = !1;
  345.  
  346. function add_Style(e) {
  347. var [t, n, o, i] = ["createElement", "textContent", "head", "appendChild"], l = {get k() {
  348. return document
  349. }
  350. }, a = l.k[t]("style");
  351. a[n] = e, l.k[o][i](a)
  352. }
  353.  
  354. function copyElm(e) {
  355. if (!(e instanceof Element)) throw new Error("Provided argument is not a DOM element.");
  356. const t = document.createElement(e.tagName);
  357. for (let n of e.attributes) t.setAttribute(n.name, n.value);
  358. return t.style.cssText = e.style.cssText, t.className = e.className, t.innerHTML = e.innerHTML, t
  359. }
  360. async function SetUpSploop() {
  361. try {
  362. const e = await _SetUpSploop();
  363. console.log("Sploop Returned:", e)
  364. } catch (e) {
  365. console.error("Sploop Error:", e)
  366. }
  367. }
  368. async function _SetUpSploop() {
  369. !async function() {
  370. const e = new Set(["https://sploop.io/img/entity/spike.png?v=1923912", "https://sploop.io/img/entity/hard_spike.png?v=1923912", "https://sploop.io/img/entity/big_spike.png?v=1923912"]);
  371.  
  372. function t(e, t) {
  373. return t.includes("inv_") ? "inventory" : t.includes("hat") ? "hat" : t.includes("accessory") ? "accessory" : e
  374. }
  375. let n = await GM_getValue("allImaes", []),
  376. o = {};
  377. for (const e of n) try {
  378. let n = new URL(e.key).pathname.split("/"),
  379. i = n[2] || "unknown",
  380. l = n[3] || "unknown",
  381. a = t(i, l);
  382. o[a] || (o[a] = {});
  383. let s = await GM_getValue(`${a}_${l}`, e.key);
  384. o[a][l] = {
  385. src: s,
  386. default: e.key
  387. }
  388. } catch (e) {
  389. console.error("Error parsing saved image:", e)
  390. }
  391. let i = new element(document.getElementById("da-right")),
  392. l = new element("h2");
  393. async function a(e) {
  394. const t = await fetch(e),
  395. n = await t.blob();
  396. return new Promise(((e, t) => {
  397. const o = new FileReader;
  398. o.onloadend = () => e(o.result), o.onerror = t, o.readAsDataURL(n)
  399. }))
  400. }
  401.  
  402. function s(e, t, n, i) {
  403. let l = new element("div");
  404. l.style({
  405. marginBottom: "5px"
  406. });
  407. let s = new element("label");
  408. s.set("innerText", t), s.style({
  409. display: "block",
  410. fontSize: "12px"
  411. });
  412. let r = new element("div");
  413. r.style({
  414. display: "flex",
  415. alignItems: "center"
  416. });
  417. let c = new element("input", {
  418. type: "text"
  419. });
  420. c.style({
  421. width: "50%",
  422. fontSize: "12px"
  423. }), c.element.value = n;
  424. let d = new element("img", {
  425. src: n
  426. });
  427. d.style({
  428. width: "50px",
  429. height: "auto",
  430. marginLeft: "10px"
  431. });
  432. let u = new element("button");
  433. return u.set("innerText", "Reset"), u.style({
  434. fontSize: "12px",
  435. marginLeft: "10px"
  436. }), u.element.addEventListener("click", (async function() {
  437. c.element.value = i, await GM_setValue(`${e}_${t}`, i), o[e][t] = {
  438. src: i,
  439. default: i
  440. }, d.element.src = i, console.log(`Reset ${e}_${t} to default`)
  441. })), c.element.addEventListener("change", (async function() {
  442. let n = c.element.value,
  443. l = await a(n);
  444. await GM_setValue(`${e}_${t}`, n), await GM_setValue(`${e}_${t}_uri`, l), o[e][t] = {
  445. src: n,
  446. default: i,
  447. dataURI: l
  448. }, d.element.src = n, console.log(`Updated ${e}_${t} to ${n}`)
  449. })), r.append(c, d, u), l.append(s, r), l
  450. }
  451. l.set("innerText", "Texture Pack Editor"), l.style({
  452. fontSize: "16px",
  453. margin: "0 0 10px 0"
  454. }), i.append(l);
  455. for (const e in o) {
  456. let t = new element("div");
  457. t.style({
  458. marginBottom: "10px",
  459. borderBottom: "1px solid #444",
  460. paddingBottom: "5px"
  461. });
  462. let n = new element("h3");
  463. n.set("innerText", e), n.style({
  464. fontSize: "14px",
  465. margin: "10px 0 5px 0"
  466. }), t.append(n);
  467. for (const n in o[e]) {
  468. const i = o[e][n];
  469. o[e][n] || a(i.src).then((t => o[e][n].dataURI = t));
  470. let l = s(e, n, i.src, i.default);
  471. t.append(l)
  472. }
  473. i.append(t)
  474. }
  475.  
  476. function r(e, l, a, r, c) {
  477. const d = `${e.src}`;
  478. if (!n.some((e => e.key === d))) {
  479. n.push({
  480. key: d,
  481. src: e.src
  482. }), console.log(`img recorded for texture pack: ${d}`);
  483. try {
  484. let n = new URL(e.src).pathname.split("/"),
  485. l = n[2] || "unknown",
  486. a = n[3] || "unknown",
  487. r = t(l, a);
  488. if (!o[r]) {
  489. o[r] = {};
  490. let e = new element("div");
  491. e.style({
  492. marginBottom: "10px",
  493. borderBottom: "1px solid #444",
  494. paddingBottom: "5px"
  495. });
  496. let t = new element("h3");
  497. t.set("innerText", r), t.style({
  498. fontSize: "14px",
  499. margin: "10px 0 5px 0"
  500. }), e.append(t), i.append(e)
  501. }
  502. if (!o[r][a]) {
  503. o[r][a] = {
  504. src: e.src,
  505. default: e.src
  506. };
  507. let t = s(r, a, e.src, e.src);
  508. i.append(t)
  509. }
  510. } catch (e) {
  511. console.error("Error processing new spike image:", e)
  512. }
  513. }
  514. }
  515. window.onbeforeunload = async function() {
  516. await GM_setValue("allImaes", n)
  517. }, window.recordSpike = r;
  518. const c = CanvasRenderingContext2D.prototype.drawImage;
  519. CanvasRenderingContext2D.prototype.drawImage = function(n, ...i) {
  520. if (!(this.canvas && "game-canvas" === this.canvas.id && n instanceof HTMLImageElement && n.src)) return c.apply(this, [n, ...i]); {
  521. let l, a, s, d;
  522. if (2 === i.length)[l, a] = i, s = n.width, d = n.height;
  523. else if (4 === i.length)[l, a, s, d] = i;
  524. else {
  525. if (8 !== i.length) return c.apply(this, [n, ...i]);
  526. [, , , , l, a, s, d] = i
  527. }
  528. if (r(n), e.has(n.src)) {
  529. this.globalAlpha = 0, c.apply(this, [n, ...i]), this.globalAlpha = 1;
  530. ((e, t, n, o, i, l, a) => {
  531. e.save(), e.translate(n + i / 2, o + l / 2), e.rotate(a), c.call(e, t, -i / 2, -l / 2, i, l), e.restore()
  532. })(this, n, l, a, s, d, performance.now() / 1e3 * 3.1 % (2 * Math.PI))
  533. } else try {
  534. let e = new URL(n.src).pathname.split("/"),
  535. l = e[2] || "unknown",
  536. a = e[3] || "unknown",
  537. s = t(l, a),
  538. r = o && o[s] && o[s][a] && (o[s][a].dataURI || o[s][a].src) ? o[s][a].src : n.src,
  539. d = new Image;
  540. d.src = r, c.apply(this, [d, ...i])
  541. } catch (e) {
  542. console.error("Error mapping image:", e), c.apply(this, [n, ...i])
  543. }
  544. }
  545. };
  546. const d = document.createElement("span"),
  547. u = atob("QnkgR2FzdG9u");
  548. d.textContent = u, d.style.position = "absolute", d.style.top = "0", d.style.left = "80px", d.style.zIndex = "9999", d.style.color = "rgba(0, 0, 0, 0.05)", document.body.appendChild(d)
  549. }(), _log = console.log;
  550. let e = GM_getValue("rbi") || 100;
  551. const t = {
  552. update() {
  553. [...document.getElementsByClassName("menu-item")].map((e => ({
  554. name: e.className,
  555. e: e
  556. }))).filter((e => "menu-item" == e.name)).map((e => (e.button = findhref2(e.e, "button")[0], e.canBuy = "BUY" == findhref2(e.e, "button")[0].innerText, e))).forEach((e => {
  557. var n = e.e.children[1].children[0].innerText.split(" ").join("");
  558. e.bn = findhref2(e.e, "button")[0].innerText, e.equiped = "UNEQUIP" == e.bn, e.buy = function() {
  559. t[n].e.scrollIntoView(), t.update(), t[n].canBuy && (t[n].button.onmouseup({
  560. target: t[n].button,
  561. isTrusted: !0
  562. }), t.update())
  563. }, e.equip = function() {
  564. t[n].e.scrollIntoView(), t.update(), e.equiped || (t[n].canBuy && t[n].buy(), t[n].button.onmouseup({
  565. target: t[n].button,
  566. isTrusted: !0
  567. }), setTimeout(t.update, 100))
  568. }, t[n] = e
  569. }))
  570. }
  571. };
  572. _hats = t;
  573. const n = new bool(!!GM_getValue("chatFilter")),
  574. o = new bool(!!GM_getValue("StaySignedIn")),
  575. i = new bool(!!GM_getValue("AntiKickTOggle")),
  576. l = new bool(!!GM_getValue("StreamerMode")),
  577. a = new bool(!!GM_getValue("lolFilter")),
  578. s = new bool(!!GM_getValue("rainbowFit")),
  579. r = (new bool(!!GM_getValue("autoConnectOldServer")), ({
  580. target: e
  581. }) => {
  582. n.status && (e.value = filter1(e.value))
  583. }),
  584. c = ({
  585. target: e
  586. }) => {
  587. a.status && (e.value = filter2(e.value))
  588. };
  589. let d = id("game-left-content-main"),
  590. u = ["#game-bottom-content", "#game-right-content-main"];
  591. var p = await v("#pop-login"),
  592. g = await v("#main-login-button"),
  593. m = p.querySelector("#login");
  594. if (m.addEventListener("click", (() => {
  595. console.log("updated stuff"), GM_setValue("PI", {
  596. p: id("enter-password").value,
  597. e: id("enter-mail").value
  598. })
  599. })), v("#chat").then((e => {
  600. const t = document.getElementById("chat");
  601. var n = copyElm(t);
  602. n.id = "chat2", t.parentNode.append(document.createElement("br")), t.parentNode.append(n), t.onfocus = function(e) {
  603. useChat && (n.focus(), t.parentElement.style.display = "block", n.focus())
  604. };
  605. let o = window.onkeyup,
  606. i = window.onkeydown;
  607.  
  608. function l(e) {
  609. return /^[a-zA-Z0-9]$/.test(e)
  610. }
  611. window.onkeyup = function(e) {
  612. t !== document.activeElement && n !== document.activeElement && o && o(e)
  613. }, window.onkeydown = function(e) {
  614. t !== document.activeElement && n !== document.activeElement && "input" != e.target.tagName && i && i(e)
  615. }, n.addEventListener("keypress", (({
  616. target: e,
  617. key: o
  618. }) => {
  619. l(o) && (t.value = e.value, [r].forEach((t => t({
  620. target: e
  621. })))),
  622. function(e) {
  623. if ("Enter" === e.key) {
  624. console.log("Enter key pressed in chat"), t.focus(), t.value = n.value;
  625. const o = new KeyboardEvent(e.type, e);
  626. t.dispatchEvent(o)
  627. }
  628. }(event)
  629. })), (useChat ? n : t).addEventListener("keyup", (e => {
  630. const {
  631. target: n,
  632. key: o,
  633. code: i
  634. } = e;
  635. console.log(e);
  636. t.value = n.value, l(o) && [r, c].forEach((e => e({
  637. target: t
  638. })))
  639. })), (useChat ? n : t).addEventListener("keydown", (({
  640. target: e,
  641. key: n
  642. }) => {
  643. l(n) && (t.value = e.value, [r].forEach((e => e({
  644. target: t
  645. }))))
  646. }))
  647. })).then(console.log, console.warn), alt) {
  648. var h;
  649. "number" == typeof GM_getValue("alts") && GM_setValue("alts", {});
  650. for (let e = 1;; e++)
  651. if (!GM_getValue("alts")[e]) {
  652. h = e;
  653. let t = GM_getValue("alts");
  654. t[e] = !0, GM_setValue("alts", t);
  655. break
  656. }
  657. console.log("alt:", h), addEventListener("unload", (function() {
  658. if (alt) {
  659. let e = GM_getValue("alts");
  660. e[h] = !1, GM_setValue("alts", e)
  661. }
  662. }))
  663. }
  664. console.log("Set called", SetUpSploop.callee);
  665. var f = null;
  666.  
  667. function y(e = 0, t = 0, n = 0) {
  668. w(0);
  669. try {
  670. !Number.isNaN(e) && findhref2(id("skins-middle-main"), "img").filter((t => t.src.includes(`skin${e}`)))[0].click()
  671. } catch (t) {
  672. console.warn("Failed to Skin", e)
  673. }
  674. w(1);
  675. try {
  676. !Number.isNaN(t) && findhref2(id("skins-middle-main"), "img").filter((e => e.src.includes(`accessory${t}`)))[0].click()
  677. } catch (t) {
  678. console.warn("Failed to accessory$", e)
  679. }
  680. w(2), !Number.isNaN(n) && findhref2(id("skins-middle-main"), "img").filter((e => e.src.includes(`back${n}`)))[0].click(), w(0)
  681. }
  682.  
  683. function w(e) {
  684. findhref2(id("skins-categories"), "img")[e].click()
  685. }
  686. if (_loadFit = y, _GM_setValue = GM_setValue, _GM_getValue = GM_getValue, new Promise(((e, t) => t = setInterval((() => findhref2(id("skins-middle-main"), "img").length && (clearInterval(t), e())), 100))).then((async e => {
  687. await k(1e3), alt || y(GM_getValue("skin"), GM_getValue("accessory$"), GM_getValue("BACK"))
  688. })), id("game-left-content-main").style.overflow = "scroll", id("da-right").parentNode.style.overflow = "scroll", _setUp) return;
  689. add_Style("\n#log{\n background-color: rgba(0,0,0,0);\n color: lightgreen;\n}\n.empty{\n content: attr(value);\n}\nselect,select:focus{\n background-color: rgba(0,0,0,0);\n outline: none;\n border: none;\n color: rgb(255, 136, 0);\n}\nbutton{\n background-color: rgba(0,0,0,0);\n outline: none;\n border: 2px solid rgb(208, 255, 0);\n color: rgb(94, 255, 0);\n}\nbutton:hover,input:focus{\n background-color: rgba(0,0,0,0);\n outline: none;\n border: 2px solid rgb(255, 0, 0);\n color: rgb(0, 132, 255);\n}\n#skin-message{\n\tborder: 2px solid red;\n background-color: rgba(0,0,0,0);\n}\n.green{border: 2px solid green;}\n.red{border: 2px solid blue;}\n::-webkit-scrollbar{\n display:none;\n}\nspan.first{\n border-top: 1px solid white;\n border-bottom: 1px solid white;\n border-left: 1px solid white;\n}\nspan.middle{\n border-top: 1px solid white;\n border-bottom: 1px solid white;\n}\nspan.last{\n border-top: 1px solid white;\n border-bottom: 1px solid white;\n border-right: 1px solid white;\n}\ndel{\n text-decoration: line-through;\n color: red;\n border-radius: 3px;\n border: 1px solid coral;\n background-color: rgba(111,8,8,1);\n}\nins{\n background-color: rgba(7,92,7,1);\n color: rgba(56,233,56,1);\n border-radius: 3px;\n border: 1px solid lightgreen;\n}\ntextarea{\n text-overflow: clip;\n\n}"), GM_getValue("sm") && l.toggle(), await v("#clan-menu"), await v("#pop-login");
  690. let b = id("clan-menu");
  691. game_.autoSpawn = !0, game_.timeOut = 5e3, game_.testFunction = function() {
  692. return !isHidden(play)
  693. }, game_.spawnFunc = function() {
  694. if (alt) {
  695. dispatchAllInputEvents(nickname, `${GM_getValue("nn")}'s alt${h}`), randomFit.element.click();
  696. const {
  697. skin: e,
  698. back: t,
  699. accessory: n
  700. } = localStorage;
  701. f = {
  702. skin: e,
  703. back: t,
  704. accessory: n
  705. }, console.log("Got fit", f)
  706. } else if (f) {
  707. const {
  708. skin: e,
  709. back: t,
  710. accessory: n
  711. } = f;
  712. y(e, n, t)
  713. }
  714. play.click(), setTimeout(x, 200)
  715. };
  716. var k = e => new Promise((t => setTimeout(t, e)));
  717. async function v(e, t = 3e3) {
  718. return await new Promise(((n, o) => {
  719. let i = performance.now();
  720. ! function l() {
  721. document.querySelector(e) ? n(document.querySelector(e)) : performance.now() - i >= t ? o(new Error("Timeout waiting for selector")) : requestAnimationFrame(l)
  722. }()
  723. }))
  724. }
  725. var _ = !1;
  726. async function x() {
  727. dispatchAllInputEvents(nickname, GM_getValue("nn")), w(0), !_ && await k(2e3), !Number.isNaN(GM_getValue("skin")) && findhref2(id("skins-middle-main"), "img").filter((e => e.src.includes(`skin${GM_getValue("skin")}`)))[0].click(), w(1), !_ && await k(100), !Number.isNaN(GM_getValue("accessory")) && findhref2(id("skins-middle-main"), "img").filter((e => e.src.includes(`accessory${GM_getValue("accessory")}`)))[0].click(), !_ && await k(100), w(2), !_ && await k(100), !Number.isNaN(GM_getValue("back")) && findhref2(id("skins-middle-main"), "img").filter((e => e.src.includes(`back${GM_getValue("back")}`)))[0].click(), !_ && await k(100), _ && w(0), _ = 1
  728. }
  729. _game_ = game_, _setUp = !0;
  730. var M = new element(_copyElm(m)).set("id", "login2").set("innerText", `Stay Signed In:${o.status}`).on("click", (e => {
  731. o.toggle(), e.target.innerText = `Stay Signed In:${o.status}`, GM_setValue("StaySignedIn", o.status)
  732. })).style({
  733. display: "inline-block"
  734. }).element;
  735. p.children[1].insertBefore(M, m),
  736. function() {
  737. var [e, t, n, o, i, l] = ["map", "forEach", "log", "length", "children", "remove"], a = {get sn() {
  738. return console
  739. }
  740. };
  741. u[e]($)[t]((e => {
  742. a.sn[n]({
  743. s: e
  744. }), e[o] && [...e[0][i]][t]((e => e[l]()))
  745. }))
  746. }();
  747. var T = id("da-right");
  748. new element("div").style({
  749. padding: "10px",
  750. backgroundColor: "rgba(0, 0, 0, 0)",
  751. color: "#000",
  752. border: "1px solid #ddd",
  753. marginBottom: "10px"
  754. }).append(new element("h2").set("innerText", "MooMoo/Sploop styles")).append(new element("p").set("innerText", "This script can:")).append(new element("ul").append(new element("li").set("innerText", "Change the game's look")).append(new element("li").set("innerText", "Add a built-in YouTube embed video player")).append(new element("li").set("innerText", "Include a random fit generator button")).append(new element("li").set("innerText", "Implement anti-kick functionality from being AFK")).append(new element("li").set("innerText", "Create alts")).append(new element("li").set("innerText", "Automatically join the game and turn on antikick for alts")).append(new element("li").set("innerText", "Hat keybinds that are saved locally!"))).appendTo(T);
  755. const E = new element("div").style({
  756. padding: "10px",
  757. backgroundColor: "#f8d7da",
  758. color: "#721c24",
  759. border: "1px solid #f5c6cb",
  760. borderRadius: "5px",
  761. cursor: "pointer"
  762. }).set("innerText", "Using this script may have consequences, including but not limited to account banning. Use at your own risk. Click to hide.").on("click", (function() {
  763. this.remove(), localStorage.seen = 1
  764. })).appendTo("#game-bottom-content");
  765. var G;
  766. async function S() {
  767. await v("#player-container");
  768. var e = id("player-container");
  769. e.style.display = "none", l.status ? (!G && (G = (await v("#nickname-value")).innerText), "SPLOOP.IO" == G ? G = null : (await v("#nickname-value")).innerText = "streamerMode", (await v("#change-username")).style.display = "none") : G && ((await v("#nickname-value")).innerText = G, (await v("#change-username")).style.display = "block"), e.style.display = "flex"
  770. }
  771. 1 == localStorage.seen && E.element.remove(), id("lostworld-io_300x250_2").remove(), new element("br").appendTo(d);
  772. const V = new element("div", {
  773. id: "keybinds"
  774. }).style({
  775. display: "flex",
  776. flexDirection: "column",
  777. alignItems: "center"
  778. }).appendTo(d);
  779. var I = new element("button").set("innerText", `AntiKick:${i.status}`).on("click", (function(e) {
  780. i.toggle(), e.target.innerText = `AntiKick:${i.status}`, i.status ? game_.start() : game_.stop()
  781. })).appendTo(V);
  782. new element("button").set("innerText", `chatFilter:${n.status}`).on("click", (function(e) {
  783. n.toggle(), e.target.innerText = `chatFilter:${n.status}`
  784. })).appendTo(V), new element("button").set("innerText", `lolFilter:${a.status}`).on("click", (function(e) {
  785. a.toggle(), e.target.innerText = `lolFilter:${a.status}`
  786. })).appendTo(V), new element("button").set("innerText", `StreamerMode:${l.status}`).on("click", (function(e) {
  787. l.toggle(), e.target.innerText = `StreamerMode:${l.status}`, GM_setValue("sm", l.status), S()
  788. })).appendTo(V), new element("button").set("innerText", "SpawnAlt").on("click", (function(e) {
  789. GM_setValue("skin", localStorage.skin || 0), GM_setValue("accessory", localStorage.accessory || 0), GM_setValue("back", localStorage.back || 0), GM_setValue("server", id("server-select").selectedOptions[0].getAttribute("region")), GM_setValue("gm", [id("ffa-mode"), id("sandbox-mode"), id("event-mode")].map((e => [...e.classList].includes("dark-blue-button-3-active"))).indexOf(!0));
  790. var t = id("create_clan");
  791. id("leave_clan"), id("clan-menu-clan-name-input");
  792. if (!("none" == t.style.display)) {
  793. var n = id("create-clan-button"),
  794. o = id("clan-menu-clan-name-input");
  795. o.dispatchEvent(new Event("focus", {
  796. bubbles: !0
  797. })), o.dispatchEvent(new Event("input", {
  798. bubbles: !0
  799. })), o.dispatchEvent(new Event("change", {
  800. bubbles: !0
  801. })), o.value = "Alts", o.dispatchEvent(new Event("blur", {
  802. bubbles: !0
  803. })), n.click(), n.dispatchEvent(new Event("click")), new Promise((e => {
  804. var t = setInterval((() => {
  805. "Clans" != b.children[0].innerText && (clearInterval(t), e())
  806. }), 200)
  807. })).then((e => {
  808. _GM_setValue("clan", b.children[0].innerText)
  809. }))
  810. }
  811. open(location.href, "alt" + Date.now())
  812. })).appendTo(V), new element(findhref2(id("skin-message"))[0]);
  813. randomFit = new element("button").appendTo(V).on("click", (function(e) {
  814. var [t, n] = ["forEach", "click"];
  815. findhref2(id("skins-categories"), "img")[t](((e, t) => {
  816. e[n](), random(findhref2(id("skins-middle-main"), "img"))[n]()
  817. }))
  818. })).set("innerText", "Generate Random Fit"), new element("span").set("innerText", "Rainbow Fit Speed:").appendTo(V);
  819. new element("input", {
  820. id: "rainbowInt",
  821. value: e || 1e3,
  822. size: 3
  823. }).on("change", (function({
  824. target: t
  825. }) {
  826. let {
  827. value: n
  828. } = t;
  829. e = n
  830. })).appendTo(V);
  831. if (new element("br").appendTo(V), new element("br").appendTo(V), function() {
  832. var [e, t, n, o, i, l] = ["children", "insertAdjacentElement", "style", "on", "set", "element"];
  833. id("skin-message")[e][1][t]("afterend", new element("button", {
  834. class: "button-type-1 blue-discord-button text-shadowed-3"
  835. })[n]({
  836. height: "15%",
  837. position: "absolute",
  838. top: "15%"
  839. })[o]("click", (function(e) {
  840. var [t, n] = ["forEach", "click"];
  841. findhref2(id("skins-categories"), "img")[t](((e, t) => {
  842. e[n](), random(findhref2(id("skins-middle-main"), "img"))[n]()
  843. }))
  844. }))[i]("innerText", "Generate Random Fit")[l])
  845. }(), function() {
  846. var [e, t, n, o, i, l] = ["children", "insertAdjacentElement", "style", "on", "set", "element"];
  847. let a = new element("button", {
  848. class: "button-type-1 blue-discord-button text-shadowed-3",
  849. id: "reset-button"
  850. })[n]({
  851. height: "15%",
  852. left: "8%",
  853. position: "absolute"
  854. })[o]("click", (function(e) {
  855. x()
  856. }))[i]("innerText", "Reset Fit");
  857. __a = a, id("skin-message")[e][1][t]("afterend", a[l])
  858. }(), function() {
  859. var [e, t, n, o, i, l] = ["children", "insertAdjacentElement", "style", "on", "set", "element"];
  860. id("skin-message")[e][1][t]("afterend", new element("button", {
  861. class: "button-type-1 blue-discord-button text-shadowed-3"
  862. })[n]({
  863. height: "15%",
  864. left: "50%",
  865. position: "absolute"
  866. })[o]("click", (function(e) {
  867. const {
  868. skin: t,
  869. back: n,
  870. accessory: o
  871. } = localStorage;
  872. f = {
  873. skin: t,
  874. back: n,
  875. accessory: o
  876. }, GM_setValue("skin", localStorage.skin || 0), GM_setValue("accessory", localStorage.accessory || 0), GM_setValue("back", localStorage.back || 0)
  877. }))[i]("innerText", "Save Fit")[l])
  878. }(), function() {
  879. var [t, n, o, i, l, a, r, c, d] = ["element", "style", "set", "status", "appendTo", "on", "toggle", "innerText", "click"];
  880. new element(copyElm(__a[t]))[n]({
  881. left: "19%",
  882. top: "60%"
  883. })[o]("innerText", `rainbowFit:${s[i]}`)[l]("#skin-message")[a]("click", (async function({
  884. target: n
  885. }) {
  886. for (s[r](), n[c] = `rainbowFit:${s[i]}`; s[i];) await k(e), randomFit[t][d]()
  887. }))
  888. }(), addEventListener("unload", (function() {
  889. GM_setValue("keybinds", keybinds), GM_setValue("rbi", e), GM_getValue("skin") && (localStorage.skin = GM_getValue("skin")), GM_getValue("accessory") && (localStorage.accessory = GM_getValue("accessory")), GM_getValue("back") && (localStorage.accessory = GM_getValue("accessory"))
  890. })), alt) {
  891. let e = GM_getValue("server");
  892. var F = id("server-select");
  893. new Promise((e => {
  894. var t = setInterval((() => {
  895. "none" == id("small-waiting").style.display && (clearInterval(t), e())
  896. }), 200)
  897. })).then((t => {
  898. [id("ffa-mode"), id("sandbox-mode"), id("event-mode")][GM_getValue("gm")].click(), new Promise((e => {
  899. var t = setInterval((() => {
  900. "none" == id("small-waiting").style.display && (clearInterval(t), e())
  901. }), 200)
  902. })).then((t => {
  903. let n = F.selectedIndex = [...id("server-select").options].map((e => e.getAttribute("region"))).indexOf(e);
  904. F.dispatchEvent(new Event("click")), F.selectedIndex = n, F.dispatchEvent(new Event("change")), I.element.dispatchEvent(new Event("click")), new Promise((e => {
  905. var t = setInterval((() => {
  906. "flex" != document.querySelector(sploopMenu).style.display && (clearInterval(t), e(id("clan-menu")))
  907. }), 200)
  908. })).then((e => {
  909. e.style.display = "block";
  910. let t = GM_getValue("clan"),
  911. n = [...id("clan_menu_content").children].filter((e => e.getElementsByTagName("p")[0].innerText == _GM_getValue("clan"))),
  912. o = (_GM_getValue("clan_") && _GM_getValue("clan_").name, [...id("clan_menu_content").children].filter((e => e.getElementsByTagName("p")[0].innerText == _GM_getValue("clan_").name)));
  913. if (n.length) {
  914. n[0].children[1].children[0].onmouseup({
  915. bubbles: !0,
  916. isTrusted: !0
  917. })
  918. } else if (o.length) {
  919. o[0].children[1].children[0].onmouseup({
  920. bubbles: !0,
  921. isTrusted: !0
  922. })
  923. } else console.warn("Cant find clan", t, "Or", _GM_getValue("clan_") ? _GM_getValue("clan_").name : null);
  924. let i = e => new Promise((t => setTimeout(t, e)));
  925. async function l() {
  926. for (dispatchAllMouseEvents(id("leave-clan-button"));
  927. "block" != id("create_clan").style.display;) await i(100);
  928. return !0
  929. }
  930. GM_addValueChangeListener("clan_", (function(e, t, n) {
  931. console.log({
  932. c: n,
  933. SelfClan: "block" != id("create_clan").style.display
  934. }), n.inCLan && ("block" != id("create_clan").style.display ? (console.log("Leaving Existing clan"), l().then((async e => {
  935. for (;
  936. "block" == id("create_clan").style.display;) {
  937. let e = [...id("clan_menu_content").children].filter((e => e.getElementsByTagName("p")[0].innerText == n.name));
  938. e[0].children[1].children[0].onmouseup({
  939. bubbles: !0,
  940. isTrusted: !0
  941. }), await n(100)
  942. }
  943. }))) : (console.log("Joining newCLan"), (async e => {
  944. for (;
  945. "block" == id("create_clan").style.display;) {
  946. let e = [...id("clan_menu_content").children].filter((e => e.getElementsByTagName("p")[0].innerText == n.name));
  947. e[0].children[1].children[0].onmouseup({
  948. bubbles: !0,
  949. isTrusted: !0
  950. }), await n(100)
  951. }
  952. })()))
  953. }))
  954. }))
  955. }))
  956. })), id("play").addEventListener("click", (function(e) {
  957. const {
  958. nickname: t,
  959. skin: n,
  960. back: o,
  961. accessory: i
  962. } = localStorage;
  963. !y && (f = {
  964. skin: n,
  965. back: o,
  966. accessory: i
  967. }, console.log("Saved LocalFit"))
  968. })), document.title = "Sploop.io - Fast Alt"
  969. } else {
  970. id("play").addEventListener("click", (function(e) {
  971. const {
  972. nickname: t,
  973. skin: n,
  974. back: o,
  975. accessory: i
  976. } = localStorage;
  977. GM_setValue("skin", localStorage.skin || 0), GM_setValue("accessory", localStorage.accessory || 0), GM_setValue("back", localStorage.back || 0), GM_setValue("nn", localStorage.nickname), GM_setValue("gm", [id("ffa-mode"), id("sandbox-mode"), id("event-mode")].map((e => [...e.classList].includes("dark-blue-button-3-active"))).indexOf(!0))
  978. }));
  979. var L = "";
  980. _loop = setInterval((() => {
  981. b.children[0].innerText != L && (L = b.children[0].innerText, GM_setValue("clan_", {
  982. inCLan: "block" != id("create_clan").style.display,
  983. name: b.children[0].innerText
  984. }))
  985. })), document.title = "Sploop.io - Fast Main";
  986. await async function() {
  987. for (; !Object.keys(t).splice(1).length;) t.update(), await k(0);
  988. if (console.log("Hidden:", isHidden(g)), !isHidden(g) && o.status)
  989. if (console.log("Logging in :>"), g.click(), await k(100), GM_getValue("PI")) {
  990. let e = GM_getValue("PI");
  991. for (dispatchAllInputEvents(id("enter-mail"), e.e), dispatchAllInputEvents(id("enter-password"), e.p), await k(1e3), m.click(); !isHidden(g);) await k(1e3)
  992. } else alert("You have to login at least once :<");
  993. console.log("hats loaded"), id("nav-skins").click(), await k(100), id("nav-game").click(), id("reset-button").click();
  994. const e = Object.keys(t).splice(1);
  995. return e.forEach((e => {
  996. const t = new element("span").set("innerText", `Hat ${e} Key: `),
  997. n = new element("input", {
  998. size: 8,
  999. id: `${e}_key`
  1000. }).set("type", "text").set("value", "").on("keydown", (function(t) {
  1001. t.preventDefault(), this.value = t.code, keybinds[e] = t.code
  1002. })).style({
  1003. "background-color": "rgba(0,0,0,0)",
  1004. color: "white"
  1005. }).set("value", keybinds[e] || "Add key..."),
  1006. o = new element("button", {
  1007. id: `Remove_${e}_key`
  1008. }).set("innerText", "Remove X Binding").on("click", (function(t) {
  1009. delete keybinds[e], n.set("value", "Add key...")
  1010. }));
  1011. V.append(t, n, o), n.on("blur", (function() {
  1012. const t = this.value.toLowerCase();
  1013. t && console.log(`Keybind set for ${e}: ${t}`)
  1014. }))
  1015. })), document.addEventListener("keydown", (function(n) {
  1016. const o = n.code;
  1017. e.forEach((e => {
  1018. keybinds[e] && keybinds[e] === o && (console.log(`Equipping ${e} with key: ${o}`), t[e].equip())
  1019. }))
  1020. })), "Loaded Hats keys"
  1021. }().then(console.log, console.warn), async function() {
  1022. for (;;) await k(0), await S()
  1023. }()
  1024. }
  1025. id("game-bottom-content") && (id("game-bottom-content").style.maxWidth = "100%", id("game-bottom-content").style.maxHeight = "100%", id("game-bottom-content").innerHTML = '<iframe height="100%" style="width: 100%;border-top-left-radius: 15px;overflow: hidden;border-top-right-radius: 15px;" scrolling="no" title="Audio Visualizer" src="https://naquangaston.github.io/HostedFiles/vis/" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">\nSee the Pen <a href="https://codepen.io/_Gaston-/pen/YzRRxXB">\nAudio Visualizer</a> by Gaston (<a href="https://codepen.io/_Gaston-">@_Gaston-</a>)\non <a href="https://codepen.io">CodePen</a>.\n</iframe>', id("game-bottom-content").style.width = "80%")
  1026. }
  1027. findhref2 = function(e, t) {
  1028. var n = [];
  1029. return function e(o) {
  1030. o.tagName.toLowerCase() == (t || "a") ? (n.push(o), o.children.length && ((o = o.children).forEach = [].forEach, o.forEach((t => {
  1031. e(t)
  1032. })))) : o.children.length && ((o = o.children).forEach = [].forEach, o.forEach((t => {
  1033. e(t)
  1034. })))
  1035. }(e), n
  1036. }, _copyElm = copyElm;
  1037. const localStorage_ = {
  1038. getItem: e => GM_getValue(e),
  1039. setItem(e, t) {
  1040. return GM_setValue(e, t), GM_setValue("LC", this), this.getItem(e)
  1041. }
  1042. };
  1043. window.once = window.on;
  1044. let moomooMenu = "#mainMenu",
  1045. sploopMenu = "#homepage";
  1046. document.addEventListener("keydown", (function(e) {
  1047. "`" === e.key && ($(moomooMenu) && $(moomooMenu).toggle && ($(moomooMenu).toggle(), console.log("Toggled MooMoo")), $(sploopMenu) && $(sploopMenu).toggle && (document.querySelector(sploopMenu).style.display = "none" == document.querySelector(sploopMenu).style.display ? "flex" : "none", console.log("Toggled Sploop")))
  1048. })), $("#consentBlock").css({
  1049. display: "none"
  1050. }), $("#mapDisplay").css({
  1051. background: "url('https://i.imgur.com/fgFsQJp.png')"
  1052. });
  1053. var [info2, myPlayer] = [window.info2 || {}, window.myPlayer || []];
  1054.  
  1055. function pingcheck() {
  1056. if (!location.href.includes("sploop")) {
  1057. var e = document.createElement("h1");
  1058. e.id = "Ping2", topInfoHolder.append(e), setInterval((() => {
  1059. e.innerText = pingDisplay.innerText + `DPS:${window.dps} Dir:${myPlayer.dir}`, 1 * pingDisplay.innerText.split(" ")[1].split(" m")[0] > window.pchek && chat(`Ping:${pingDisplay.innerText.split(" ")[1].split(" m")[0]}`)
  1060. }), 500), window.ping = 100, setInterval((() => {
  1061. ping = 1 * pingDisplay.innerText.split(" ")[1].split(" m")[0], ping > window.pchek && chat(`Ping:${pingDisplay.innerText.split(" ")[1].split(" m")[0]}`)
  1062. }), 500), ab = 1, i2 = 80, setInterval((() => {
  1063. ping > pckech && chat(`ping:${ping}`)
  1064. }), 500), window.pckech = 150
  1065. }
  1066. }
  1067. window.selects = window.selects || [];
  1068. var code_ = GM_getValue("styles.js"),
  1069. excuted = !1;
  1070. GM_getValue("styles.js") && (eval(code_), excuted = !0), console.log("Checking for styles updates"), fetch(styleUrl).then((e => e.text())).then((e => (GM_setValue("styles.js", e), e != code_ && console.log("Styles.js as updated"), !excuted && eval(e)))), fetch(wordWurl).then((e => e.json())).then((e => (GM_setValue("moowords", e), e.join() != badWords.join() && console.log("Filtered List updated"), e))).then((e => (badWords = e, reg = new RegExp(`(${[...new Set(badWords.join(" ").match(/[\w\d]+/gi))].join("|")})`, "gi")))),
  1071. function() {
  1072. const e = [];
  1073. var t = {
  1074. inventory: [],
  1075. players: [],
  1076. entities: {},
  1077. buttons: {},
  1078. boss: null,
  1079. bossDrop: null,
  1080. playerDrop: [],
  1081. animals: [],
  1082. bossDetected: !1,
  1083. playerPosition: null
  1084. };
  1085. CanvasRenderingContext2D.prototype.drawImage, CanvasRenderingContext2D.prototype.clearRect;
  1086. const n = e => ({
  1087. x: e.width / 2,
  1088. y: e.height / 2
  1089. });
  1090. window.imagesArray = e, window.tracer = e => {
  1091. const {
  1092. boss: o,
  1093. bossDrop: i,
  1094. playerDrop: l,
  1095. players: a
  1096. } = t;
  1097. let s = n();
  1098. if (s) {
  1099. if (e.strokeStyle = "yellow", e.lineWidth = 1.5, o) {
  1100. e.beginPath(), e.moveTo(s.x + s.width / 2, s.y + s.height / 2);
  1101. const t = o.centerX || o.x + o.width / 2,
  1102. n = o.centerY || o.y + o.height / 2;
  1103. e.lineTo(t, n), e.stroke()
  1104. }
  1105. i && (e.beginPath(), e.moveTo(s.x + s.width / 2, s.y + s.height / 2), e.lineTo(i.x + i.width / 2, i.y + i.height / 2), e.stroke()), l.length > 0 && l.forEach((t => {
  1106. e.beginPath(), e.moveTo(s.x + s.width / 2, s.y + s.height / 2), e.lineTo(t.x + t.width / 2, t.y + t.height / 2), e.stroke()
  1107. })), a.length > 0 && a.forEach((t => {
  1108. e.beginPath(), e.moveTo(s.x + s.width / 2, s.y + s.height / 2), e.lineTo(t.x + t.width / 2, t.y + t.height / 2), e.stroke()
  1109. }))
  1110. }
  1111. }
  1112. }()
  1113. }();