MooMoo styles

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

目前为 2024-09-23 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name MooMoo styles
  3. // @namespace http://tampermonkey.net/
  4. // @version 3.5
  5. // @description Moomoo.io/Sploop.io mod [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:en MooMoo styles
  20. // @name:zh MooMoo styles
  21. // @name:de Moomoo -Stile
  22. // @name:ru Moomoo Styles Moomoo Styles
  23. // @name:ar أنماط موومو 'anmat mwumu
  24. // @name:es Estilos de moomoo
  25. // @name:pt Estilos Moomoo
  26. // @name:hi मूमू स्टाइल्स moomoo stails
  27. // @name:fr Styles moomoo
  28. // @name:ja Moomooスタイル Moomoo sutairu
  29. // @name:vi Phong cách Moomoo
  30. // @name:uk Стилі Moomoo Styli Moomoo
  31. // @name:ro Moomoo Styles
  32. // @name:nl Moomoo Styles
  33. // @name:ko Moomoo 스타일 Moomoo seutail
  34. // @name:it Stili moomoo
  35. // @name:pl Style MOOMOO
  36. // @name:id Gaya Moomoo
  37. // @name:tr Moomoo Styles
  38. // @name:th สไตล์ Moomoo S̄tịl̒ Moomoo
  39. // @name:no Moomoo -stiler
  40. // @name:bg Стилове Moomoo Stilove Moomoo
  41. // @name:sv Moomoo -stilar
  42. // @name:da Moomoo Styles
  43. // @name:el Στυλ Moomoo Styl Moomoo
  44. // @name:he סגנונות Moomoo
  45. // @name:sk Moomoo Styles
  46. // @name:fi Moomoo Styles
  47. // @name:hu Moomoo stílusok
  48. // @name:cs Moomoo styly
  49. // @description:zh Moomoo.io/Sploop.io mod [MUSIC PLAYER/HAT KEYBINDS/MUSIC VISUALIZER/SKIN SWITCHER/ANTI-KICK/AUTO LOGIN]
  50. // @description:en Moomoo.io/Sploop.io mod [MUSIC PLAYER/HAT KEYBINDS/MUSIC VISUALIZER/SKIN SWITCHER/ANTI-KICK/AUTO LOGIN]
  51. // @description:pt Moomoo.io/sploop.io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Login Auto]
  52. // @description:ar moomoo.io/sploop.io mod [مشغل الموسيقى/hat Keybinds/Music Visualizer/Skin Switcher/anti-kick/login] moomoo.io/sploop.io mod [mshaghil almusiqaa/hat Keybinds/Music Visualizer/Skin Switcher/anti-kick/login]
  53. // @description:de Moomoo.io/sploop.io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login]
  54. // @description:ru Moomoo.io/sploop.io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login] Moomoo.io/sploop.io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login]
  55. // @description:ja Moomoo.io/sploop.io mod [音楽プレーヤー/帽子Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login] Moomoo. Io/ sploop. Io mod [ongaku purēyā/ bōshi Keybinds/ myūjikku bijuaraizā/ Skin suitchā/ anchi - Kick/ Auto Login]
  56. // @description:fr Moomoo.io/splophy.io mod [lecteur de musique / chapeau keybinds / visualiseur musical / commutateur de peau / anti-kick / connexion automatique]
  57. // @description:hi Moomoo.io/sploop.io mod [म्यूजिक प्लेयर/हैट कीबाइंड्स/म्यूजिक विज़ुअलाइज़र/स्किन स्विचर/एंटी-किक/ऑटो लॉगिन] moomoo.io/sploop.io mod [myoojik pleyar/hait keebainds/myoojik vizualaizar/skin svichar/entee-kik/oto login]
  58. // @description:es Moomoo.io/sploop.io mod [reproductor de música/hat keybinds/music visualizer/skin switcher/anti-kick/autocompling]
  59. // @description:tr Moomoo.io/sploop.io Mod [Müzik Çalar/Hat Keybinds/Müzik Görselleştiricisi/Cilt Switcher/Anti-Bick/Otomatik Oturum Açma]
  60. // @description:id Moomoo.io/sploop.io mod [pemutar musik/topi keybinds/musik visualizer/switcher kulit/anti-kick/login otomatis]
  61. // @description:ko moomoo.io/sploop.io mod [음악 플레이어/모자 키 바인드/음악 비주얼 라이저/스킨 스위처/안티 킥/자동 로그인]] moomoo.io/sploop.io mod [eum-ag peulleieo/moja ki baindeu/eum-ag bijueol laijeo/seukin seuwicheo/anti kig/jadong logeu-in]]
  62. // @description:vi Moomoo.io/sploop.io mod [máy nghe nhạc/hat keybinds/music Visualizer/skin-salitor/anti-kick/auto đăng nhập]
  63. // @description:it Moomao.io/sploop.io mod [lettore musicale/cappello Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login]
  64. // @description:pl Mooomoo.io/sploop.io mod [odtwarzacz muzyki/czapka keebinds/muzyka wizualizator/przełącznik skóry/anty-kick/auto login]
  65. // @description:nl MOOMOO.IO/SPLOOP.IO MOD [Muziekspeler/hoed Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login]
  66. // @description:th moomoo.io/sploop.io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login] Moomoo.Io/sploop.Io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login]
  67. // @description:uk Moomoo.io/sploop.io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login] Moomoo.io/sploop.io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login]
  68. // @description:ro Moomoo.io/sploop.io Mod [Music Player/Hat KeyBinds/Music Visualizer/Skin Switcher/Anti-Kick/Conectare automată]
  69. // @description:fi Moomoo.io/sloop.io Mod [Music Player/Hat KeyBinds/Music Visualizer/Skin Switcher/Anti-Kick/Automaattinen sisäänkirjautuminen]
  70. // @description:cs Moomoo.io/sploop.io mod [hudební přehrávač/klobouk keyBinds/hudba vizualizátor/Skin Switcher/Anti-Kick/Automatické přihlášení]
  71. // @description:he Moomoo.io/sploop.io mod [נגן מוסיקה/כובע מקש/מוסיקה Visualizer/Skiner Stringer/Anti-בעיטה/כניסה אוטומטית]
  72. // @description:no Moomoo.io/sploop.io mod [Music Player/Hat KeyBinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login]
  73. // @description:bg Moomoo.io/sploop.io mod [музикален плейър/шапка ключове/музикален визуализатор/превключвател на кожата/анти-удар/автоматично влизане] Moomoo.io/sploop.io mod [muzikalen pleĭŭr/shapka klyuchove/muzikalen vizualizator/prevklyuchvatel na kozhata/anti-udar/avtomatichno vlizane]
  74. // @description:hu Moomoo.io/sploop.io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Bejelentkezés]
  75. // @description:sv Moomoo.io/Sploop.io Mod [Musikspelare/hatt KeyBinds/Music Visualizer/Skin Switcher/Anti-kick/Auto Login]
  76. // @description:sk MOOMOO.IO/SPLOOP.IO MOD [hudobný prehrávač/HAT KEYBINDS/HUDBUS VISUFIZER/SKIN SWITKER/ANTI-KICK/AUTO LONGIN]
  77. // @description:da Moomoo.io/sploop.io mod [musikafspiller/hat keyBinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login]
  78. // @description:el Moomoo.io/sploop.io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login] Moomoo.io/sploop.io mod [Music Player/Hat Keybinds/Music Visualizer/Skin Switcher/Anti-Kick/Auto Login]
  79. // @license MIT
  80. // ==/UserScript==
  81.  
  82. //YT: https://www.youtube.com/channel/UCOA8lE9-0XnEIdHqjfQUz1A
  83. ! function() {
  84. console.log("00");
  85. let keybinds = GM_getValue("keybinds") || {};
  86. const styleUrl = "https://raw.githubusercontent.com/naquangaston/HostedFiles/main/moostyle.js",
  87. wordWurl = "https://raw.githubusercontent.com/naquangaston/HostedFiles/main/moomooWords.json",
  88. useChat = !1;
  89. var badWords = GM_getValue("moowords") || [],
  90. reg = new RegExp(`(${[...new Set(badWords.join(" ").match(/[\w\d]+/gi))].join("|")})`, "gi");
  91. const filter1 = e => e.replaceAll(reg, (function(e, t, n) {
  92. return e.length > 1 ? e.split(/[aeiou]+/gi).join("*") : e
  93. })),
  94. filter2 = e => e.toLowerCase().split("l").join("w").replaceAll(/l/g, "w").replaceAll(/(l|e)(?!d)/gi, (function(e) {
  95. return {
  96. l: "w"
  97. }[e[0]] || e
  98. })).replace(/s/g, "z").replace(/th/g, "d").replace(/e^d/g, (function(e, t, n) {
  99. return n.slice(t - 1, t + 1), "e"
  100. })).replace(/w{2,}/g, "wl").replaceAll(/e{2,}/gi, "ee").replaceAll(/.r/gi, (e => e.replace("r", "w"))),
  101. game_ = new class {#e = function() {};#t = function() {};#n = !1;#o = 1e3;#a = function(e) {
  102. return new Promise((t => setTimeout(t, e)))
  103. };#i = 0;#l = 0;#s = async function() {
  104. for (;;) {
  105. let e = this.#a,
  106. t = this.#t,
  107. n = this.#e;
  108. if (await e(0), this.#l) break;
  109. t() && (await e(this.#o), console.log("Spawning into game"), n(), await e(this.#o))
  110. }
  111. this.#l = !1, console.log("Done", this.#l)
  112. };
  113. set timeOut(e) {
  114. this.#o = Number.isNaN(e) ? 1e3 : Number(e)
  115. }
  116. get timeOut() {
  117. return this.#o
  118. }
  119. start() {
  120. this.#s()
  121. }
  122. stop() {
  123. this.#l = !0
  124. }
  125. set autoSpawn(e) {
  126. this.#n = !!e
  127. }
  128. get autoSpawn() {
  129. return this.#n
  130. }
  131. set testFunction(e) {
  132. this.#t = e
  133. }
  134. get testFunction() {
  135. return this.#t
  136. }
  137. set spawnFunc(e) {
  138. this.#e = e
  139. }
  140. get spawnFunc() {
  141. return this.#e
  142. }
  143. };
  144. class bool {
  145. constructor(e) {
  146. e && this.toggle()
  147. }#r = !1;
  148. toggle() {
  149. this.#r = !this.#r
  150. }
  151. get status() {
  152. return this.#r
  153. }
  154. set status(e) {
  155. this.#r = !!e
  156. }
  157. }
  158. class element {
  159. static get br() {
  160. return new element("br")
  161. }
  162. constructor(e, t) {
  163. this.element = e.constructor.name.includes("HTML") && e || function() {
  164. for (let e in arguments[1]) arguments[0].setAttribute(e, arguments[1][e]);
  165. return arguments[0]
  166. }(document.createElement(arguments[0]), arguments[1])
  167. }
  168. style(e) {
  169. for (let t in e) this.element.style[t] = e[t];
  170. return this
  171. }
  172. append(e, ...t) {
  173. this.element.append(e.element || e), console.log("T:", {
  174. targets: t,
  175. fe: t && t.forEach
  176. });
  177. for (let e = 0; e < t.length; e++) {
  178. let n = t[e];
  179. console.log("Appending:", {
  180. element: n,
  181. target: this
  182. }), this.element.append(n.element || n)
  183. }
  184. return this
  185. }
  186. appendTo(e) {
  187. try {
  188. (e.element || "string" == typeof e ? document.querySelector(e) : e).append(this.element)
  189. } catch {
  190. (e.element || e).append(this.element)
  191. } finally {
  192. console.warn("Failed to appent", {
  193. this: this,
  194. target: e
  195. })
  196. }
  197. return this
  198. }
  199. on(e, t) {
  200. return this.element[`on${e}`] = t, this
  201. }
  202. set(e, t) {
  203. return this.element[e] = t, this
  204. }
  205. remove() {
  206. return this.element.remove(), this
  207. }
  208. get() {
  209. return this.element[arguments[0]]
  210. }
  211. get children() {
  212. return new class {
  213. constructor(e) {
  214. for (var t = 0; t < e.length; t += 1) this[t] = e[t];
  215. Object.defineProperty(this, "length", {
  216. get: function() {
  217. return e.length
  218. }
  219. }), Object.freeze(this)
  220. }
  221. item(e) {
  222. return null != this[e] ? this[e] : null
  223. }
  224. namedItem(e) {
  225. for (var t = 0; t < this.length; t += 1)
  226. if (this[t].id === e || this[t].name === e) return this[t];
  227. return null
  228. }
  229. get toArray() {
  230. return [...this]
  231. }
  232. }([...this.element.children])
  233. }
  234. }
  235. const alt = name.includes("alt");
  236.  
  237. function isHidden(e) {
  238. return null === e.offsetParent
  239. }
  240.  
  241. function random(e) {
  242. return e[Math.floor(Math.random() * e.length)]
  243. }
  244.  
  245. function dispatchAllMouseEvents(e) {
  246. ["click", "mouseover", "mouseenter", "mousemove", "mousedown", "mouseup", "mouseout", "mouseleave"].forEach((t => {
  247. let n = new Event(t, {
  248. bubbles: !0,
  249. isTrusted: !0
  250. });
  251. e[`on${t}`] && e[`on${t}`](n), e.dispatchEvent(n)
  252. }))
  253. }
  254.  
  255. function dispatchAllInputEvents(e, t) {
  256. ["focus", "input", "change", "blur"].forEach((n => {
  257. let o = new Event(n, {
  258. bubbles: !0,
  259. isTrusted: !0
  260. });
  261. e[`on${n}`] && e[`on${n}`](o), "input" === n && (e.value = t), e.dispatchEvent(o)
  262. }))
  263. }
  264. var _setUp = !1;
  265.  
  266. function add_Style(e) {
  267. var [t, n, o, a] = ["createElement", "textContent", "head", "appendChild"], i = {get k() {
  268. return document
  269. }
  270. }, l = i.k[t]("style");
  271. l[n] = e, i.k[o][a](l)
  272. }
  273.  
  274. function copyElm(e) {
  275. if (!(e instanceof Element)) throw new Error("Provided argument is not a DOM element.");
  276. const t = document.createElement(e.tagName);
  277. for (let n of e.attributes) t.setAttribute(n.name, n.value);
  278. return t.style.cssText = e.style.cssText, t.className = e.className, t.innerHTML = e.innerHTML, t
  279. }
  280. async function SetUpSploop() {
  281. try {
  282. const e = await _SetUpSploop();
  283. console.log("Sploop Returned:", e)
  284. } catch (e) {
  285. console.error("Sploop Error:", e)
  286. }
  287. }
  288. async function _SetUpSploop() {
  289. ! function() {
  290. 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"]),
  291. t = CanvasRenderingContext2D.prototype.drawImage;
  292. CanvasRenderingContext2D.prototype.drawImage = function(n, ...o) {
  293. if (!(this.canvas && "game-canvas" === this.canvas.id && n instanceof HTMLImageElement && n.src && e.has(n.src))) return t.apply(this, [n, ...o]); {
  294. let e, a, i, l;
  295. if (2 === o.length)[e, a] = o, i = n.width, l = n.height;
  296. else if (4 === o.length)[e, a, i, l] = o;
  297. else {
  298. if (8 !== o.length) return t.apply(this, [n, ...o]);
  299. [, , , , e, a, i, l] = o
  300. }
  301. this.globalAlpha = 0, t.apply(this, [n, ...o]), this.globalAlpha = 1;
  302. ((e, n, o, a, i, l, s) => {
  303. e.save(), e.translate(o + i / 2, a + l / 2), e.rotate(s), t.call(e, n, -i / 2, -l / 2, i, l), e.restore()
  304. })(this, n, e, a, i, l, performance.now() / 1e3 * 3.1 % (2 * Math.PI))
  305. }
  306. };
  307. var n = document.createElement("span"),
  308. o = atob("YnkgZml6eml4d3c=");
  309. n.textContent = o, n.style.position = "absolute", n.style.top = "0", n.style.left = "80px", n.style.zIndex = "9999", n.style.color = "rgba(0, 0, 0, 0.05)", document.body.appendChild(n)
  310. }(), _log = console.log;
  311. let e = GM_getValue("rbi") || 100;
  312. const t = {
  313. update() {
  314. [...document.getElementsByClassName("menu-item")].map((e => ({
  315. name: e.className,
  316. e: e
  317. }))).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 => {
  318. var n = e.e.children[1].children[0].innerText.split(" ").join("");
  319. e.bn = findhref2(e.e, "button")[0].innerText, e.equiped = "UNEQUIP" == e.bn, e.buy = function() {
  320. t[n].e.scrollIntoView(), t.update(), t[n].canBuy && (t[n].button.onmouseup({
  321. target: t[n].button,
  322. isTrusted: !0
  323. }), t.update())
  324. }, e.equip = function() {
  325. t[n].e.scrollIntoView(), t.update(), e.equiped || (t[n].canBuy && t[n].buy(), t[n].button.onmouseup({
  326. target: t[n].button,
  327. isTrusted: !0
  328. }), setTimeout(t.update, 100))
  329. }, t[n] = e
  330. }))
  331. }
  332. };
  333. _hats = t;
  334. const n = new bool(!!GM_getValue("chatFilter")),
  335. o = new bool(!!GM_getValue("StaySignedIn")),
  336. a = new bool(!!GM_getValue("AntiKickTOggle")),
  337. i = new bool(!!GM_getValue("StreamerMode")),
  338. l = new bool(!!GM_getValue("lolFilter")),
  339. s = new bool(!!GM_getValue("rainbowFit")),
  340. r = (new bool(!!GM_getValue("autoConnectOldServer")), ({
  341. target: e
  342. }) => {
  343. n.status && (e.value = filter1(e.value))
  344. }),
  345. c = ({
  346. target: e
  347. }) => {
  348. l.status && (e.value = filter2(e.value))
  349. };
  350. let d = id("game-left-content-main"),
  351. u = ["#game-bottom-content", "#game-right-content-main"];
  352. var p = await v("#pop-login"),
  353. g = await v("#main-login-button"),
  354. m = p.querySelector("#login");
  355. if (m.addEventListener("click", (() => {
  356. console.log("updated stuff"), GM_setValue("PI", {
  357. p: id("enter-password").value,
  358. e: id("enter-mail").value
  359. })
  360. })), v("#chat").then((e => {
  361. const t = document.getElementById("chat");
  362. var n = copyElm(t);
  363. n.id = "chat2", t.parentNode.append(document.createElement("br")), t.parentNode.append(n), t.onfocus = function(e) {
  364. useChat && (n.focus(), t.parentElement.style.display = "block", n.focus())
  365. };
  366. let o = window.onkeyup,
  367. a = window.onkeydown;
  368.  
  369. function i(e) {
  370. return /^[a-zA-Z0-9]$/.test(e)
  371. }
  372. window.onkeyup = function(e) {
  373. t !== document.activeElement && n !== document.activeElement && o && o(e)
  374. }, window.onkeydown = function(e) {
  375. t !== document.activeElement && n !== document.activeElement && "input" != e.target.tagName && a && a(e)
  376. }, n.addEventListener("keypress", (({
  377. target: e,
  378. key: o
  379. }) => {
  380. i(o) && (t.value = e.value, [r].forEach((t => t({
  381. target: e
  382. })))),
  383. function(e) {
  384. if ("Enter" === e.key) {
  385. console.log("Enter key pressed in chat"), t.focus(), t.value = n.value;
  386. const o = new KeyboardEvent(e.type, e);
  387. t.dispatchEvent(o)
  388. }
  389. }(event)
  390. })), (useChat ? n : t).addEventListener("keyup", (e => {
  391. const {
  392. target: n,
  393. key: o,
  394. code: a
  395. } = e;
  396. console.log(e);
  397. t.value = n.value, i(o) && [r, c].forEach((e => e({
  398. target: t
  399. })))
  400. })), (useChat ? n : t).addEventListener("keydown", (({
  401. target: e,
  402. key: n
  403. }) => {
  404. i(n) && (t.value = e.value, [r].forEach((e => e({
  405. target: t
  406. }))))
  407. }))
  408. })).then(console.log, console.warn), alt) {
  409. var h;
  410. "number" == typeof GM_getValue("alts") && GM_setValue("alts", {});
  411. for (let e = 1;; e++)
  412. if (!GM_getValue("alts")[e]) {
  413. h = e;
  414. let t = GM_getValue("alts");
  415. t[e] = !0, GM_setValue("alts", t);
  416. break
  417. }
  418. console.log("alt:", h), addEventListener("unload", (function() {
  419. if (alt) {
  420. let e = GM_getValue("alts");
  421. e[h] = !1, GM_setValue("alts", e)
  422. }
  423. }))
  424. }
  425. console.log("Set called", SetUpSploop.callee);
  426. var f = null;
  427.  
  428. function b(e = 0, t = 0, n = 0) {
  429. y(0);
  430. try {
  431. !Number.isNaN(e) && findhref2(id("skins-middle-main"), "img").filter((t => t.src.includes(`skin${e}`)))[0].click()
  432. } catch (t) {
  433. console.warn("Failed to Skin", e)
  434. }
  435. y(1);
  436. try {
  437. !Number.isNaN(t) && findhref2(id("skins-middle-main"), "img").filter((e => e.src.includes(`accessory${t}`)))[0].click()
  438. } catch (t) {
  439. console.warn("Failed to accessory$", e)
  440. }
  441. y(2), !Number.isNaN(n) && findhref2(id("skins-middle-main"), "img").filter((e => e.src.includes(`back${n}`)))[0].click(), y(0)
  442. }
  443.  
  444. function y(e) {
  445. findhref2(id("skins-categories"), "img")[e].click()
  446. }
  447. if (_loadFit = b, _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 => {
  448. await k(1e3), alt || b(GM_getValue("skin"), GM_getValue("accessory$"), GM_getValue("BACK"))
  449. })), id("game-left-content-main").style.overflow = "scroll", id("da-right").parentNode.style.overflow = "scroll", _setUp) return;
  450. 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") && i.toggle(), await v("#clan-menu"), await v("#pop-login");
  451. let w = id("clan-menu");
  452. game_.autoSpawn = !0, game_.timeOut = 5e3, game_.testFunction = function() {
  453. return !isHidden(play)
  454. }, game_.spawnFunc = function() {
  455. if (alt) {
  456. dispatchAllInputEvents(nickname, `${GM_getValue("nn")}'s alt${h}`), randomFit.element.click();
  457. const {
  458. skin: e,
  459. back: t,
  460. accessory: n
  461. } = localStorage;
  462. f = {
  463. skin: e,
  464. back: t,
  465. accessory: n
  466. }, console.log("Got fit", f)
  467. } else if (f) {
  468. const {
  469. skin: e,
  470. back: t,
  471. accessory: n
  472. } = f;
  473. b(e, n, t)
  474. }
  475. play.click(), setTimeout(x, 200)
  476. };
  477. var k = e => new Promise((t => setTimeout(t, e)));
  478. async function v(e, t = 3e3) {
  479. return await new Promise(((n, o) => {
  480. let a = performance.now();
  481. ! function i() {
  482. document.querySelector(e) ? n(document.querySelector(e)) : performance.now() - a >= t ? o(new Error("Timeout waiting for selector")) : requestAnimationFrame(i)
  483. }()
  484. }))
  485. }
  486. var _ = !1;
  487. async function x() {
  488. dispatchAllInputEvents(nickname, GM_getValue("nn")), y(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(), y(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), y(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), _ && y(0), _ = 1
  489. }
  490. _game_ = game_, _setUp = !0;
  491. var M = new element(_copyElm(m)).set("id", "login2").set("innerText", `Stay Signed In:${o.status}`).on("click", (e => {
  492. o.toggle(), e.target.innerText = `Stay Signed In:${o.status}`, GM_setValue("StaySignedIn", o.status)
  493. })).style({
  494. display: "inline-block"
  495. }).element;
  496. p.children[1].insertBefore(M, m),
  497. function() {
  498. var [e, t, n, o, a, i] = ["map", "forEach", "log", "length", "children", "remove"], l = {get sn() {
  499. return console
  500. }
  501. };
  502. u[e]($)[t]((e => {
  503. l.sn[n]({
  504. s: e
  505. }), e[o] && [...e[0][a]][t]((e => e[i]()))
  506. }))
  507. }();
  508. var T = id("da-right");
  509. new element("div").style({
  510. padding: "10px",
  511. backgroundColor: "rgba(0, 0, 0, 0)",
  512. color: "#000",
  513. border: "1px solid #ddd",
  514. marginBottom: "10px"
  515. }).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);
  516. const E = new element("div").style({
  517. padding: "10px",
  518. backgroundColor: "#f8d7da",
  519. color: "#721c24",
  520. border: "1px solid #f5c6cb",
  521. borderRadius: "5px",
  522. cursor: "pointer"
  523. }).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() {
  524. this.remove(), localStorage.seen = 1
  525. })).appendTo("#game-bottom-content");
  526. var G;
  527. async function V() {
  528. await v("#player-container");
  529. var e = id("player-container");
  530. e.style.display = "none", i.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"
  531. }
  532. 1 == localStorage.seen && E.element.remove(), id("lostworld-io_300x250_2").remove(), new element("br").appendTo(d);
  533. const S = new element("div", {
  534. id: "keybinds"
  535. }).style({
  536. display: "flex",
  537. flexDirection: "column",
  538. alignItems: "center"
  539. }).appendTo(d);
  540. var I = new element("button").set("innerText", `AntiKick:${a.status}`).on("click", (function(e) {
  541. a.toggle(), e.target.innerText = `AntiKick:${a.status}`, a.status ? game_.start() : game_.stop()
  542. })).appendTo(S);
  543. new element("button").set("innerText", `chatFilter:${n.status}`).on("click", (function(e) {
  544. n.toggle(), e.target.innerText = `chatFilter:${n.status}`
  545. })).appendTo(S), new element("button").set("innerText", `lolFilter:${l.status}`).on("click", (function(e) {
  546. l.toggle(), e.target.innerText = `lolFilter:${l.status}`
  547. })).appendTo(S), new element("button").set("innerText", `StreamerMode:${i.status}`).on("click", (function(e) {
  548. i.toggle(), e.target.innerText = `StreamerMode:${i.status}`, GM_setValue("sm", i.status), V()
  549. })).appendTo(S), new element("button").set("innerText", "SpawnAlt").on("click", (function(e) {
  550. 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));
  551. var t = id("create_clan");
  552. id("leave_clan"), id("clan-menu-clan-name-input");
  553. if (!("none" == t.style.display)) {
  554. var n = id("create-clan-button"),
  555. o = id("clan-menu-clan-name-input");
  556. o.dispatchEvent(new Event("focus", {
  557. bubbles: !0
  558. })), o.dispatchEvent(new Event("input", {
  559. bubbles: !0
  560. })), o.dispatchEvent(new Event("change", {
  561. bubbles: !0
  562. })), o.value = "Alts", o.dispatchEvent(new Event("blur", {
  563. bubbles: !0
  564. })), n.click(), n.dispatchEvent(new Event("click")), new Promise((e => {
  565. var t = setInterval((() => {
  566. "Clans" != w.children[0].innerText && (clearInterval(t), e())
  567. }), 200)
  568. })).then((e => {
  569. _GM_setValue("clan", w.children[0].innerText)
  570. }))
  571. }
  572. open(location.href, "alt" + Date.now())
  573. })).appendTo(S), new element(findhref2(id("skin-message"))[0]);
  574. randomFit = new element("button").appendTo(S).on("click", (function(e) {
  575. var [t, n] = ["forEach", "click"];
  576. findhref2(id("skins-categories"), "img")[t](((e, t) => {
  577. e[n](), random(findhref2(id("skins-middle-main"), "img"))[n]()
  578. }))
  579. })).set("innerText", "Generate Random Fit"), new element("span").set("innerText", "Rainbow Fit Speed:").appendTo(S);
  580. new element("input", {
  581. id: "rainbowInt",
  582. value: e || 1e3,
  583. size: 3
  584. }).on("change", (function({
  585. target: t
  586. }) {
  587. let {
  588. value: n
  589. } = t;
  590. e = n
  591. })).appendTo(S);
  592. if (new element("br").appendTo(S), new element("br").appendTo(S), function() {
  593. var [e, t, n, o, a, i] = ["children", "insertAdjacentElement", "style", "on", "set", "element"];
  594. id("skin-message")[e][1][t]("afterend", new element("button", {
  595. class: "button-type-1 blue-discord-button text-shadowed-3"
  596. })[n]({
  597. height: "15%",
  598. position: "absolute",
  599. top: "15%"
  600. })[o]("click", (function(e) {
  601. var [t, n] = ["forEach", "click"];
  602. findhref2(id("skins-categories"), "img")[t](((e, t) => {
  603. e[n](), random(findhref2(id("skins-middle-main"), "img"))[n]()
  604. }))
  605. }))[a]("innerText", "Generate Random Fit")[i])
  606. }(), function() {
  607. var [e, t, n, o, a, i] = ["children", "insertAdjacentElement", "style", "on", "set", "element"];
  608. let l = new element("button", {
  609. class: "button-type-1 blue-discord-button text-shadowed-3",
  610. id: "reset-button"
  611. })[n]({
  612. height: "15%",
  613. left: "8%",
  614. position: "absolute"
  615. })[o]("click", (function(e) {
  616. x()
  617. }))[a]("innerText", "Reset Fit");
  618. __a = l, id("skin-message")[e][1][t]("afterend", l[i])
  619. }(), function() {
  620. var [e, t, n, o, a, i] = ["children", "insertAdjacentElement", "style", "on", "set", "element"];
  621. id("skin-message")[e][1][t]("afterend", new element("button", {
  622. class: "button-type-1 blue-discord-button text-shadowed-3"
  623. })[n]({
  624. height: "15%",
  625. left: "50%",
  626. position: "absolute"
  627. })[o]("click", (function(e) {
  628. const {
  629. skin: t,
  630. back: n,
  631. accessory: o
  632. } = localStorage;
  633. f = {
  634. skin: t,
  635. back: n,
  636. accessory: o
  637. }, GM_setValue("skin", localStorage.skin || 0), GM_setValue("accessory", localStorage.accessory || 0), GM_setValue("back", localStorage.back || 0)
  638. }))[a]("innerText", "Save Fit")[i])
  639. }(), function() {
  640. var [t, n, o, a, i, l, r, c, d] = ["element", "style", "set", "status", "appendTo", "on", "toggle", "innerText", "click"];
  641. new element(copyElm(__a[t]))[n]({
  642. left: "19%",
  643. top: "60%"
  644. })[o]("innerText", `rainbowFit:${s[a]}`)[i]("#skin-message")[l]("click", (async function({
  645. target: n
  646. }) {
  647. for (s[r](), n[c] = `rainbowFit:${s[a]}`; s[a];) await k(e), randomFit[t][d]()
  648. }))
  649. }(), addEventListener("unload", (function() {
  650. 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"))
  651. })), alt) {
  652. let e = GM_getValue("server");
  653. var F = id("server-select");
  654. new Promise((e => {
  655. var t = setInterval((() => {
  656. "none" == id("small-waiting").style.display && (clearInterval(t), e())
  657. }), 200)
  658. })).then((t => {
  659. [id("ffa-mode"), id("sandbox-mode"), id("event-mode")][GM_getValue("gm")].click(), new Promise((e => {
  660. var t = setInterval((() => {
  661. "none" == id("small-waiting").style.display && (clearInterval(t), e())
  662. }), 200)
  663. })).then((t => {
  664. let n = F.selectedIndex = [...id("server-select").options].map((e => e.getAttribute("region"))).indexOf(e);
  665. F.dispatchEvent(new Event("click")), F.selectedIndex = n, F.dispatchEvent(new Event("change")), I.element.dispatchEvent(new Event("click")), new Promise((e => {
  666. var t = setInterval((() => {
  667. "flex" != document.querySelector(sploopMenu).style.display && (clearInterval(t), e(id("clan-menu")))
  668. }), 200)
  669. })).then((e => {
  670. e.style.display = "block";
  671. let t = GM_getValue("clan"),
  672. n = [...id("clan_menu_content").children].filter((e => e.getElementsByTagName("p")[0].innerText == _GM_getValue("clan"))),
  673. o = (_GM_getValue("clan_") && _GM_getValue("clan_").name, [...id("clan_menu_content").children].filter((e => e.getElementsByTagName("p")[0].innerText == _GM_getValue("clan_").name)));
  674. if (n.length) {
  675. n[0].children[1].children[0].onmouseup({
  676. bubbles: !0,
  677. isTrusted: !0
  678. })
  679. } else if (o.length) {
  680. o[0].children[1].children[0].onmouseup({
  681. bubbles: !0,
  682. isTrusted: !0
  683. })
  684. } else console.warn("Cant find clan", t, "Or", _GM_getValue("clan_") ? _GM_getValue("clan_").name : null);
  685. let a = e => new Promise((t => setTimeout(t, e)));
  686. async function i() {
  687. for (dispatchAllMouseEvents(id("leave-clan-button"));
  688. "block" != id("create_clan").style.display;) await a(100);
  689. return !0
  690. }
  691. GM_addValueChangeListener("clan_", (function(e, t, n) {
  692. console.log({
  693. c: n,
  694. SelfClan: "block" != id("create_clan").style.display
  695. }), n.inCLan && ("block" != id("create_clan").style.display ? (console.log("Leaving Existing clan"), i().then((async e => {
  696. for (;
  697. "block" == id("create_clan").style.display;) {
  698. let e = [...id("clan_menu_content").children].filter((e => e.getElementsByTagName("p")[0].innerText == n.name));
  699. e[0].children[1].children[0].onmouseup({
  700. bubbles: !0,
  701. isTrusted: !0
  702. }), await n(100)
  703. }
  704. }))) : (console.log("Joining newCLan"), (async e => {
  705. for (;
  706. "block" == id("create_clan").style.display;) {
  707. let e = [...id("clan_menu_content").children].filter((e => e.getElementsByTagName("p")[0].innerText == n.name));
  708. e[0].children[1].children[0].onmouseup({
  709. bubbles: !0,
  710. isTrusted: !0
  711. }), await n(100)
  712. }
  713. })()))
  714. }))
  715. }))
  716. }))
  717. })), id("play").addEventListener("click", (function(e) {
  718. const {
  719. nickname: t,
  720. skin: n,
  721. back: o,
  722. accessory: a
  723. } = localStorage;
  724. !b && (f = {
  725. skin: n,
  726. back: o,
  727. accessory: a
  728. }, console.log("Saved LocalFit"))
  729. })), document.title = "Sploop.io - Fast Alt"
  730. } else {
  731. id("play").addEventListener("click", (function(e) {
  732. const {
  733. nickname: t,
  734. skin: n,
  735. back: o,
  736. accessory: a
  737. } = localStorage;
  738. 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))
  739. }));
  740. var A = "";
  741. _loop = setInterval((() => {
  742. w.children[0].innerText != A && (A = w.children[0].innerText, GM_setValue("clan_", {
  743. inCLan: "block" != id("create_clan").style.display,
  744. name: w.children[0].innerText
  745. }))
  746. })), document.title = "Sploop.io - Fast Main";
  747. await async function() {
  748. for (; !Object.keys(t).splice(1).length;) t.update(), await k(0);
  749. if (console.log("Hidden:", isHidden(g)), !isHidden(g) && o.status)
  750. if (console.log("Logging in :>"), g.click(), await k(100), GM_getValue("PI")) {
  751. let e = GM_getValue("PI");
  752. for (dispatchAllInputEvents(id("enter-mail"), e.e), dispatchAllInputEvents(id("enter-password"), e.p), await k(1e3), m.click(); !isHidden(g);) await k(1e3)
  753. } else alert("You have to login at least once :<");
  754. console.log("hats loaded"), id("nav-skins").click(), await k(100), id("nav-game").click(), id("reset-button").click();
  755. const e = Object.keys(t).splice(1);
  756. return e.forEach((e => {
  757. const t = new element("span").set("innerText", `Hat ${e} Key: `),
  758. n = new element("input", {
  759. size: 8,
  760. id: `${e}_key`
  761. }).set("type", "text").set("value", "").on("keydown", (function(t) {
  762. t.preventDefault(), this.value = t.code, keybinds[e] = t.code
  763. })).style({
  764. "background-color": "rgba(0,0,0,0)",
  765. color: "white"
  766. }).set("value", keybinds[e] || "Add key..."),
  767. o = new element("button", {
  768. id: `Remove_${e}_key`
  769. }).set("innerText", "Remove X Binding").on("click", (function(t) {
  770. delete keybinds[e], n.set("value", "Add key...")
  771. }));
  772. S.append(t, n, o), n.on("blur", (function() {
  773. const t = this.value.toLowerCase();
  774. t && console.log(`Keybind set for ${e}: ${t}`)
  775. }))
  776. })), document.addEventListener("keydown", (function(n) {
  777. const o = n.code;
  778. e.forEach((e => {
  779. keybinds[e] && keybinds[e] === o && (console.log(`Equipping ${e} with key: ${o}`), t[e].equip())
  780. }))
  781. })), "Loaded Hats keys"
  782. }().then(console.log, console.warn), async function() {
  783. for (;;) await k(0), await V()
  784. }()
  785. }
  786. 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%")
  787. }
  788. findhref2 = function(e, t) {
  789. var n = [];
  790. return function e(o) {
  791. o.tagName.toLowerCase() == (t || "a") ? (n.push(o), o.children.length && ((o = o.children).forEach = [].forEach, o.forEach((t => {
  792. e(t)
  793. })))) : o.children.length && ((o = o.children).forEach = [].forEach, o.forEach((t => {
  794. e(t)
  795. })))
  796. }(e), n
  797. }, _copyElm = copyElm;
  798. const localStorage_ = {
  799. getItem: e => GM_getValue(e),
  800. setItem(e, t) {
  801. return GM_setValue(e, t), GM_setValue("LC", this), this.getItem(e)
  802. }
  803. };
  804. window.once = window.on;
  805. let moomooMenu = "#mainMenu",
  806. sploopMenu = "#homepage";
  807. document.addEventListener("keydown", (function(e) {
  808. "`" === 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")))
  809. })), $("#consentBlock").css({
  810. display: "none"
  811. }), $("#mapDisplay").css({
  812. background: "url('https://i.imgur.com/fgFsQJp.png')"
  813. });
  814. var [info2, myPlayer] = [window.info2 || {}, window.myPlayer || []];
  815.  
  816. function pingcheck() {
  817. if (!location.href.includes("sploop")) {
  818. var e = document.createElement("h1");
  819. e.id = "Ping2", topInfoHolder.append(e), setInterval((() => {
  820. 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]}`)
  821. }), 500), window.ping = 100, setInterval((() => {
  822. ping = 1 * pingDisplay.innerText.split(" ")[1].split(" m")[0], ping > window.pchek && chat(`Ping:${pingDisplay.innerText.split(" ")[1].split(" m")[0]}`)
  823. }), 500), ab = 1, i2 = 80, setInterval((() => {
  824. ping > pckech && chat(`ping:${ping}`)
  825. }), 500), window.pckech = 150
  826. }
  827. }
  828. window.selects = window.selects || [];
  829. var code_ = GM_getValue("styles.js"),
  830. excuted = !1;
  831. 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"))))
  832. }();