blackpill mod

don't use this for sandbox unless you wanna get clapped

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(Tôi đã có Trình quản lý tập lệnh người dùng, hãy cài đặt nó!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         blackpill mod
// @namespace    bl4ckpill
// @version      1.1
// @description  don't use this for sandbox unless you wanna get clapped
// @match        *://moomoo.io/*
// @match        *://*.moomoo.io/*
// @run-at       document-start
// @grant        none
// @license MIT
// ==/UserScript==
// ══════════════════════════════════════════════
//             BEST CLASSIC MOOMOO MOD
// ══════════════════════════════════════════════
//
//  KEYBINDS
//  ────────────────────────────────────────────
//  -  Auto Spike Tick(1/0)      T  One-Tick
//  G  Bull                  +  AutoBull
//  J  AntiBull              B  AutoMill
//  N  Mill                  F  Trap
//  V  Spike                 H  2 Turrets
//  Z  Tank                  R Instakill
//
//  FEATURES
//  ────────────────────────────────────────────
//  • No spam auto-placing
//  • Auto Spike Tick
//  • Anti-Insta
//  • AutoBreak
//
//  DISCORD
//  ────────────────────────────────────────────
//  'feature.' — for bugs or questions
//  Katana+hammer or polearm+hammer recommended (sword + musket also works)
//  minifier degraded the quality A LOT sorry
// ══════════════════════════════════════════════
(() => {
	"use strict";
	const t = {
		0: 300,
		1: 400,
		2: 400,
		3: 300,
		4: 300,
		5: 700,
		6: 300,
		7: 300,
		8: 400,
		9: 600,
		10: 400,
		11: 1,
		12: 700,
		13: 230,
		14: 700,
		15: 1500
	};
	let e = !1,
		n = !1,
		r = !1,
		i = null;
	let o = !1,
		a = null,
		s = !1,
		l = !1,
		u = !1,
		c = -1,
		f = -1,
		d = !1,
		y = !1,
		m = null;
	setTimeout(() => {
		document.getElementById("gameName").innerText = "success"
	}, 1e3);
	let g = 0,
		h = -1,
		w = !1,
		p = !1,
		b = !1;
	const A = window.WebSocket,
		I = A.prototype.send,
		v = new WeakMap;
	let M = null,
		U = innerWidth / 2,
		E = innerHeight / 2;
	const k = new Map,
		T = new TextEncoder,
		x = new TextDecoder,
		D = ["M", "D", "9", "e", "F", "z", "H", "K", "L", "N", "b", "P", "Q", "c", "6", "S", "0"],
		F = ["A", "B", "C", "D", "E", "a", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "X", "Y", "Z", "g", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"],
		N = 64,
		S = new Uint32Array([1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298]),
		C = new Map;
	let L = 1;

	function z(t) {
		c !== t && (c = t, X("c", 0, t, 0))
	}
	let K = 12,
		B = 22,
		O = 6;
	const P = new Set(["KeyW", "KeyA", "KeyS", "KeyD", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"]),
		H = new Set,
		V = new Map;
	window.MOO_PLAYERS = V, document.addEventListener("keydown", t => {
		if (! function() {
				const t = document.activeElement;
				return t && ("INPUT" === t.tagName || "TEXTAREA" === t.tagName || t.isContentEditable)
			}()) switch (t.key) {
			case "z":
				z(40);
				break;
			case "g":
				z(7);
				break;
			case "Shift":
				z(12);
				break;
			case "c":
				z(6)
		}
	}), document.addEventListener("keydown", t => {
		P.has(t.code) && (H.add(t.code), ct())
	}), document.addEventListener("keyup", t => {
		P.has(t.code) && (H.delete(t.code), ct())
	});
	const W = t => {
			const e = t.reduce((t, e) => t + e.length, 0),
				n = new Uint8Array(e);
			let r = 0;
			for (const e of t) n.set(e, r), r += e.length;
			return n
		},
		R = t => {
			if (null == t) return Uint8Array.of(192);
			if (!1 === t) return Uint8Array.of(194);
			if (!0 === t) return Uint8Array.of(195);
			if ("number" == typeof t) {
				if (Number.isInteger(t)) {
					if (t >= 0 && t < 128) return Uint8Array.of(t);
					if (t >= -32 && t < 0) return Uint8Array.of(256 + t);
					if (t >= 0 && t <= 255) return Uint8Array.of(204, t);
					if (t >= 0 && t <= 65535) return Uint8Array.of(205, t >>> 8, t);
					if (t >= -128 && t < 0) return Uint8Array.of(208, t);
					if (t >= -32768 && t < 0) return Uint8Array.of(209, t >>> 8, t);
					const e = new Uint8Array(5),
						n = new DataView(e.buffer);
					return e[0] = t >= 0 ? 206 : 210, t >= 0 ? n.setUint32(1, t) : n.setInt32(1, t), e
				}
				const e = new Uint8Array(9);
				return e[0] = 203, new DataView(e.buffer).setFloat64(1, t), e
			}
			if ("string" == typeof t) {
				const e = T.encode(t);
				return e.length < 32 ? W([Uint8Array.of(160 | e.length), e]) : e.length <= 255 ? W([Uint8Array.of(217, e.length), e]) : W([Uint8Array.of(218, e.length >>> 8, e.length), e])
			}
			if (t instanceof Uint8Array) return t.length <= 255 ? W([Uint8Array.of(196, t.length), t]) : W([Uint8Array.of(197, t.length >>> 8, t.length), t]);
			if (Array.isArray(t)) {
				const e = t.length < 16 ? Uint8Array.of(144 | t.length) : Uint8Array.of(220, t.length >>> 8, t.length);
				return W([e, ...t.map(R)])
			}
			const e = Object.entries(t),
				n = e.length < 16 ? Uint8Array.of(128 | e.length) : Uint8Array.of(222, e.length >>> 8, e.length);
			return W([n, ...e.flatMap(([t, e]) => [R(t), R(e)])])
		},
		j = t => {
			const e = t instanceof Uint8Array ? t : new Uint8Array(t),
				n = new DataView(e.buffer, e.byteOffset, e.byteLength);
			let r = 0;
			const i = () => {
					const t = e[r++];
					if (t <= 127) return t;
					if (t >= 224) return t - 256;
					if (160 == (224 & t)) return l(31 & t);
					if (144 == (240 & t)) return c(15 & t);
					if (128 == (240 & t)) return f(15 & t);
					if (192 === t) return null;
					if (194 === t) return !1;
					if (195 === t) return !0;
					if (196 === t) return u(e[r++]);
					if (197 === t) return u(a());
					if (198 === t) return u(s());
					if (202 === t) return o(4, t => n.getFloat32(t));
					if (203 === t) return o(8, t => n.getFloat64(t));
					if (204 === t) return e[r++];
					if (205 === t) return a();
					if (206 === t) return s();
					if (208 === t) return o(1, t => n.getInt8(t));
					if (209 === t) return o(2, t => n.getInt16(t));
					if (210 === t) return o(4, t => n.getInt32(t));
					if (217 === t) return l(e[r++]);
					if (218 === t) return l(a());
					if (219 === t) return l(s());
					if (220 === t) return c(a());
					if (221 === t) return c(s());
					if (222 === t) return f(a());
					if (223 === t) return f(s());
					throw new Error("Unsupported packet")
				},
				o = (t, e) => {
					const n = r;
					return r += t, e(n)
				},
				a = () => o(2, t => n.getUint16(t)),
				s = () => o(4, t => n.getUint32(t)),
				l = t => x.decode(e.subarray(r, r += t)),
				u = t => e.slice(r, r += t),
				c = t => Array.from({
					length: t
				}, i),
				f = t => {
					const e = {};
					for (let n = 0; n < t; n++) e[i()] = i();
					return e
				};
			return i()
		};
	! function t(e) {
		window.config && window.config.maxScreenWidth ? e() : setTimeout(() => t(e), 100)
	}(() => {
		const t = window.config.maxScreenWidth,
			e = window.config.maxScreenHeight;
		let n = null;
		const r = CanvasRenderingContext2D.prototype.moveTo,
			i = CanvasRenderingContext2D.prototype.lineTo;
		CanvasRenderingContext2D.prototype.moveTo = function(t, e) {
			return n = [t, e], r.call(this, t, e)
		}, CanvasRenderingContext2D.prototype.lineTo = function(r, o) {
			if (!window.TRASHMOD_VISUALS?.grid && n) {
				const [i, a] = n, s = t => t % 50 <= 1.5 || 50 - t % 50 <= 1.5;
				if ((i === r || a === o) && (s(i) || s(a)) && r >= 0 && r <= t && o >= 0 && o <= e) return this
			}
			return i.call(this, r, o)
		}
	});
	const G = (t, e) => t >>> e | t << 32 - e,
		_ = t => {
			const e = new Uint32Array([1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225]),
				n = t.length,
				r = new Uint8Array(64 * Math.ceil((n + 9) / 64));
			r.set(t), r[n] = 128;
			const i = new DataView(r.buffer);
			i.setUint32(r.length - 4, 8 * n >>> 0), i.setUint32(r.length - 8, Math.floor(8 * n / 4294967296));
			const o = new Uint32Array(64);
			for (let t = 0; t < r.length; t += 64) {
				for (let e = 0; e < 16; e++) o[e] = i.getUint32(t + 4 * e);
				for (let t = 16; t < 64; t++) {
					const e = G(o[t - 15], 7) ^ G(o[t - 15], 18) ^ o[t - 15] >>> 3,
						n = G(o[t - 2], 17) ^ G(o[t - 2], 19) ^ o[t - 2] >>> 10;
					o[t] = o[t - 16] + e + o[t - 7] + n | 0
				}
				let n = e[0],
					r = e[1],
					a = e[2],
					s = e[3],
					l = e[4],
					u = e[5],
					c = e[6],
					f = e[7];
				for (let t = 0; t < 64; t++) {
					const e = f + (G(l, 6) ^ G(l, 11) ^ G(l, 25)) + (l & u ^ ~l & c) + S[t] + o[t] | 0,
						i = (G(n, 2) ^ G(n, 13) ^ G(n, 22)) + (n & r ^ n & a ^ r & a) | 0;
					f = c, c = u, u = l, l = s + e | 0, s = a, a = r, r = n, n = e + i | 0
				}
				e[0] = e[0] + n | 0, e[1] = e[1] + r | 0, e[2] = e[2] + a | 0, e[3] = e[3] + s | 0, e[4] = e[4] + l | 0, e[5] = e[5] + u | 0, e[6] = e[6] + c | 0, e[7] = e[7] + f | 0
			}
			const a = new Uint8Array(32),
				s = new DataView(a.buffer);
			for (let t = 0; t < 8; t++) s.setUint32(4 * t, e[t]);
			return a
		},
		q = (t, e) => {
			const n = t.length > N ? _(t) : t,
				r = new Uint8Array(N);
			r.set(n);
			const i = new Uint8Array(N + e.length),
				o = new Uint8Array(96);
			for (let t = 0; t < N; t++) i[t] = 54 ^ r[t], o[t] = 92 ^ r[t];
			return i.set(e, N), o.set(_(i), N), _(o).subarray(0, 6)
		},
		Q = t => {
			let e = 0 | t;
			return () => {
				e = e + 1831565813 | 0;
				let t = Math.imul(e ^ e >>> 15, 1 | e);
				return t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t, ((t ^ t >>> 14) >>> 0) / 4294967296
			}
		},
		X = (t, ...e) => {
			"D" === t && ut && null !== a && !l && (e = [a]);
			const n = M,
				r = n && v.get(n);
			if (!n || n.readyState !== A.OPEN || !r || !r.ready) return !1;
			const i = ((t, e, n, r) => {
				if (!t.key) return R([e, n]);
				const i = t.c2s[e];
				if (void 0 === i) return null;
				const o = R([i, n, r]);
				return W([q(t.key, o), o])
			})(r, t, e, r.key ? ++r.seq : 0);
			return !!i && (I.call(n, i), !0)
		};

	function Y(...c) {
		const f = new A(...c),
			I = {
				ready: !1,
				key: null,
				c2s: null,
				s2c: null,
				seq: 0
			};
		return v.set(f, I), f.addEventListener("message", c => {
			var A;
			if (c.data instanceof ArrayBuffer) try {
				const v = j(new Uint8Array(c.data));
				if (!Array.isArray(v)) return;
				let U = v[0];
				const E = v[1];
				if ("io-init" === U) {
					if (I.ready = !0, I.seq = 0, 1 === E[3] && "string" == typeof E[2]) {
						const t = (E[1] ^ Math.imul(1, 2654435761)) >>> 0;
						I.key = (A = E[2], Uint8Array.from({
							length: A.length / 2
						}, (t, e) => parseInt(A.slice(2 * e, 2 * e + 2), 16))), I.c2s = ((t, e) => {
							const n = t.map((t, e) => e),
								r = Q(e >>> 0);
							for (let t = n.length - 1; t > 0; t--) {
								const e = Math.floor(r() * (t + 1));
								[n[t], n[e]] = [n[e], n[t]]
							}
							return Object.fromEntries(t.map((t, e) => [t, n[e]]))
						})(D, t), I.s2c = ((t, e) => {
							const n = t.map((t, e) => e),
								r = Q(e >>> 0);
							for (let t = n.length - 1; t > 0; t--) {
								const e = Math.floor(r() * (t + 1));
								[n[t], n[e]] = [n[e], n[t]]
							}
							return Object.fromEntries(n.map((e, n) => [e, t[n]]))
						})(F, (2246822507 ^ t) >>> 0)
					}
					return void(M = f)
				}
				if ("number" == typeof U && I.s2c && (U = I.s2c[U]), "C" === U) Bt = E[0], Kt = 100, qt = 0, Qt = 0, Xt = 0, re = !1, null !== Ht && (clearTimeout(Ht), Ht = null);
				else if ("Q" === U) {
					const t = C.get(E[0]);
					t && (! function(t) {
						if (!t || dt) return;
						const n = V.get(Bt);
						if (!n) return;
						const r = xt();
						if (!r || r.distance > 250) return;
						const i = t.x - n.x,
							o = t.y - n.y;
						if (Math.hypot(i, o) > 120) return;
						dt = !0;
						const a = Math.atan2(o, i),
							s = $(et.spike),
							l = [a - .55, a - .28, a, a + .28, a + .55];
						let u = 0;
						const c = () => {
							if (u >= l.length) {
								if (d && !ut) {
									const t = xt();
									t && t.distance <= 130 && (w = !0, e = !0, X("z", pt, !0), z(7), setTimeout(() => {
										X("F", 1), setTimeout(() => {
											X("F", 0, null), setTimeout(() => {
												X("z", tt(), !0), z(6), w = !1, e = !1
											}, 150)
										}, 40)
									}, 40))
								}
								return void setTimeout(() => {
									dt = !1
								}, 20)
							}
							const t = l[u++];
							X("z", s, !1), X("D", t), X("F", 1), X("F", 0, null), X("z", pt, !0), c()
						};
						c()
					}(t), C.delete(E[0]))
				} else if ("R" === U) {
					E[0]
				} else if ("O" === U && E[0] === Bt) {
					const t = V.get(E[0]);
					t && (t.health = E[1], t.lastUpdate = Date.now(), E[1] <= 0 && (t.dead = !0));
					const e = Number(E[1]);
					if (Ot && void 0 !== Kt && e < Kt) {
						const t = Kt - e;
						Rt = Date.now(), p && (m = e, function(t) {
								if (!p || !n) return;
								if (o) return;
								const e = xt();
								if (!e || e.distance > 250) return void st();
								if (!r) return;
								if (null !== i && t >= i) return;
								r = !1, o = !0, z(7), w = !0, X("z", tt(), !0), setTimeout(() => {
									if (!p || !n) return;
									const t = xt();
									!t || t.distance > 250 ? st() : (X("F", 1), setTimeout(() => {
										if (!p || !n) return;
										const t = xt();
										if (!t || t.distance > 250) return st(), X("F", 0, null), void(w = !1);
										setTimeout(() => {
											if (!p || !n) return;
											const t = xt();
											if (!t || t.distance > 250) return st(), X("F", 0, null), void z(6);
											t.distance < 250 ? z(11) : z(6), i = Kt, r = !0, o = !1
										}, 80)
									}, 120))
								}, 45)
							}(e)),
							function(t, e) {
								const n = xt();
								if (n && n.distance <= 300 && 5 === n.weaponIndex && (12 === n.weaponVariant || 13 === n.weaponVariant || 15 === n.weaponVariant)) return s = !0, z(6), void _t(100 - e, t >= 25);
								s = !1, _t(100 - e, t >= 38)
							}(t, e)
					}
					Kt = e
				} else if ("H" === U && Array.isArray(E) && Array.isArray(E[0])) {
					const t = E[0];
					for (let e = 0; e < t.length; e += 8) {
						const n = t[e + 0],
							r = t[e + 1],
							i = t[e + 2],
							o = t[e + 3],
							a = t[e + 4],
							s = t[e + 6],
							l = t[e + 7];
						C.set(n, {
							id: n,
							x: r,
							y: i,
							angle: o,
							scale: a,
							type: s,
							ownerID: l
						})
					}
				} else if ("a" === U && null !== Bt && Array.isArray(E) && Array.isArray(E[0])) {
					const e = E[0];
					for (let t = 0; t + 13 <= e.length; t += 13)
						if (e[t] === Bt) {
							const n = e[t + 1],
								r = e[t + 2];
							re ? (Zt = Yt, $t = Jt, te = n, ee = r) : (Yt = Zt = te = n, Jt = $t = ee = r, ie = n, oe = r), ne = 0, re = !0;
							break
						} const n = 13;
					for (let t = 0; t + n - 1 < e.length; t += n) {
						const n = e[t],
							r = Number(e[t + 1]),
							i = Number(e[t + 2]),
							o = Number(e[t + 3]);
						if (!Number.isFinite(r) || !Number.isFinite(i)) continue;
						let a = V.get(n);
						a || (a = {
							sid: n,
							name: "Unknown",
							health: 100,
							maxHealth: 100,
							isMe: n === Bt
						}, V.set(n, a)), a.x = r, a.y = i, a.dir = o, a.buildIndex = e[t + 4], a.weaponIndex = e[t + 5], a.weaponVariant = e[t + 6], a.team = e[t + 7], a.isLeader = e[t + 8], a.skinIndex = e[t + 9], a.tailIndex = e[t + 10], a.iconIndex = e[t + 11], a.zIndex = e[t + 12], a.dead = !1, a.lastUpdate = Date.now(), n === Bt && (Yt = r, Jt = i)
					}
					const r = xt();
					b = !!r && r.distance < 300, ct(),
						function() {
							if (u) return void lt();
							const t = V.get(Bt),
								e = function() {
									const t = V.get(Bt);
									if (!t) return null;
									let e = null,
										n = 1 / 0;
									for (const r of C.values()) {
										if (15 !== r.type) continue;
										if (r.ownerID === Bt) continue;
										const i = V.get(r.ownerID);
										if (i && null != t.team && null != i.team && i.team === t.team) continue;
										const o = r.x - t.x,
											a = r.y - t.y,
											s = Math.hypot(o, a);
										s < n && (n = s, e = r)
									}
									return e ? {
										...e,
										distance: n
									} : null
								}();
							if (!t || !e) return void lt();
							if (e.distance > 70) return void lt();
							if (l) return void lt();
							a = Math.atan2(e.y - t.y, e.x - t.x), ut ? (X("F", 1), X("D", a)) : (ut = !0, X("F", 1), X("z", tt(), !0), X("D", a))
						}(),
						function() {
							if (!y) return void ct();
							if (l || ut) return;
							const t = xt();
							if (!t || t.distance >= 180) return X("F", 0, null), ct(), void z(6);
							z(7), X("D", t.angle), X("z", pt, !0), X("F", 1)
						}(),
						function() {
							if (!w || ut) return;
							const t = xt(),
								e = V.get(Bt);
							if (!(t && e && Number.isFinite(t.x) && Number.isFinite(t.y))) return;
							const n = Math.atan2(t.y - e.y, t.x - e.x);
							X("D", n)
						}(),
						function() {
							if (s) return;
							if (!ut) return;
							const e = tt(),
								n = t[e] || 300;
							e !== h && (h = e, g = 0);
							const r = performance.now();
							if (r >= g) {
								z(40);
								const t = Math.max(15, .85 * n);
								setTimeout(() => {
									if (ut) {
										const t = xt();
										t && t.distance < 250 && (4 === t.weaponIndex || 3 === t.weaponIndex || 6 === t.weaponIndex) && z(26), z(6)
									}
								}, t), g = r + n
							}
						}(), ut || l || X("z", tt(), !0)
				} else if ("D" === U) {
					const t = E[0],
						e = !0 === E[1],
						n = {
							id: t[0],
							sid: t[1],
							name: t[2] ?? "Unknown",
							x: Number(t[3]) || 0,
							y: Number(t[4]) || 0,
							dir: Number(t[5]) || 0,
							health: Number(t[6]) || 100,
							maxHealth: Number(t[7]) || 100,
							scale: Number(t[8]) || 35,
							skinColor: t[9],
							isMe: e,
							lastUpdate: Date.now()
						};
					V.set(n.sid, n)
				} else if ("5" === U && Array.isArray(E) && 0 === E[0] && void 0 !== E[1] && void 0 !== E[2]) {
					const t = E[2] + ":" + E[1];
					se.add(t), le.delete(t)
				}! function() {
					for (let t = 0; t < 9; t++) wt(document.getElementById("actionBarItem" + t.toString())) && (pt = t);
					for (let t = 9; t < 16; t++) wt(document.getElementById("actionBarItem" + t.toString())) && (bt = t);
					for (let t = 16; t < 19; t++) wt(document.getElementById("actionBarItem" + t.toString())) && t - 16;
					for (let t = 19; t < 22; t++) wt(document.getElementById("actionBarItem" + t.toString())) && t - 16;
					for (let t = 22; t < 26; t++) wt(document.getElementById("actionBarItem" + t.toString())) && t - 16;
					for (let t = 26; t < 29; t++) wt(document.getElementById("actionBarItem" + t.toString())) && t - 16;
					for (let t = 29; t < 31; t++) wt(document.getElementById("actionBarItem" + t.toString())) && t - 16;
					for (let t = 31; t < 33; t++) wt(document.getElementById("actionBarItem" + t.toString())) && t - 16;
					for (let t = 33; t < 39; t++) wt(document.getElementById("actionBarItem" + t.toString())) && 36 != t && (At = t - 16);
					0
				}()
			} catch {}
		}), f.addEventListener("close", () => {
			M === f && (M = null)
		}), f
	}
	A.prototype.send = function(t) {
		const e = v.get(this);
		if (!(e && e.ready && e.key && (t instanceof ArrayBuffer || ArrayBuffer.isView(t)))) return I.call(this, t);
		try {
			const n = t instanceof ArrayBuffer ? new Uint8Array(t) : new Uint8Array(t.buffer, t.byteOffset, t.byteLength),
				r = j(n.subarray(6));
			if (Array.isArray(r) && 3 === r.length) {
				const t = R([r[0], r[1], ++e.seq]);
				return I.call(this, W([q(e.key, t), t]))
			}
		} catch {}
		return I.call(this, t)
	}, Y.prototype = A.prototype, Object.defineProperties(Y, {
		CONNECTING: {
			value: A.CONNECTING
		},
		OPEN: {
			value: A.OPEN
		},
		CLOSING: {
			value: A.CLOSING
		},
		CLOSED: {
			value: A.CLOSED
		}
	}), window.WebSocket = Y;
	for (const t of ["__gmMonkey", "GM_info", "GM", "unsafeWindow"]) try {
		Object.defineProperty(window, t, {
			configurable: !1,
			enumerable: !1,
			get: () => {},
			set: () => {}
		})
	} catch {}
	const J = window.setInterval;
	window.setInterval = function(t, e, ...n) {
		return "function" == typeof t && /\bdebugger\b/.test(Function.prototype.toString.call(t)) ? 0 : J.call(this, t, e, ...n)
	};
	try {
		const t = Object.getOwnPropertyDescriptor(HTMLImageElement.prototype, "src");
		t && t.get && t.set && Object.defineProperty(HTMLImageElement.prototype, "src", {
			configurable: t.configurable,
			enumerable: t.enumerable,
			get() {
				return t.get.call(this)
			},
			set(e) {
				"string" == typeof e && e.startsWith("chrome-extension://") || t.set.call(this, e)
			}
		})
	} catch {}
	const Z = t => t && "none" !== getComputedStyle(t).display,
		$ = t => t.find(t => Z(document.getElementById("actionBarItem" + (16 + t)))) ?? t[0],
		tt = () => L,
		et = {
			spike: [6, 7, 8, 9],
			trap: [15],
			windmill: [10, 11, 12]
		},
		nt = {
			KeyV: "spike",
			KeyF: "trap",
			KeyN: "windmill"
		},
		rt = (t, e) => {
			X("z", t, !1), X("D", e), X("F", 1, e), X("F", 0, e), X("z", tt(), !0)
		},
		it = () => {
			const t = V.get(Bt);
			return t && Number.isFinite(t.dir) ? t.dir : null
		},
		ot = () => {
			const t = it();
			if (null === t) return;
			const e = $(et.trap);
			rt(e, t), rt(e, t + Math.PI / 2), rt(e, t - Math.PI / 2), rt(e, t + Math.PI)
		};

	function at(t) {
		f !== t && (f = t, X("c", 0, t, 1))
	}

	function st() {
		n = !1, r = !1, o = !1, i = Kt, z(6), ct()
	}

	function lt() {
		ut ? (ut = !1, a = null, X("F", 0, null), X("z", tt(), !0), setTimeout(() => {
			z(6)
		}, 200), ct()) : a = null
	}
	let ut = !1;

	function ct() {
		const t = xt();
		if (!s)
			if (ut) at(21);
			else {
				if (t) {
					if (y && t.distance < 250) return;
					if (n && t.distance < 250) return;
					if (d && t.distance < 150) return;
					if (p && t.distance < 250) return
				}!(r && t.distance < 300) || ut || l || e ? l || e || (t && t.distance < 250 && (p || y) ? at(21) : (at(19), b ? z(O) : H.size > 0 ? z(K) : z(B))) : z(11)
			}
	}
	let ft = !1;
	setInterval(() => {
		! function() {
			const t = xt();
			t && t.distance < 100 && !ut && !ft && (ft = !0, ot(), setTimeout(() => {
				X("z", tt(), !0)
			}, 50), setTimeout(() => {
				ft = !1
			}, 1e4))
		}(), X("K", 0)
	}, 250);
	let dt = !1;
	let yt = null;

	function mt() {
		let t = 0,
			e = 0;
		for (const n of H) {
			const r = Dt[n];
			r && (t += r[0], e += r[1])
		}
		return 0 === t && 0 === e ? null : Math.atan2(e, t)
	}

	function gt() {
		const t = V.get(Bt);
		if (!t) return null;
		const e = xt();
		if (!e || e.distance > 200) return null;
		for (const n of C.values()) {
			if (15 !== n.type) continue;
			if (n.ownerID === Bt) continue;
			const r = V.get(n.ownerID);
			if (r && null != t.team && null != r.team && r.team === t.team) continue;
			const i = e.x - n.x,
				o = e.y - n.y;
			if (Math.hypot(i, o) <= 65) return e
		}
		return null
	}

	function ht() {
		const t = V.get(Bt),
			e = gt();
		if (ut) return;
		if (!t || !e) return;
		const n = mt();
		if (null === n) return;
		const r = $(et.spike);
		if (null == r) return;
		const i = tt(),
			o = Math.atan2(t.y - e.y, t.x - e.x),
			a = n + Math.PI,
			s = a + .65 * Math.atan2(Math.sin(o - a), Math.cos(o - a)),
			l = [s - .45, s, s + .45];
		for (const t of l) X("z", r, !1), X("D", t), X("F", 1), X("F", 0, null);
		X("z", i, !0)
	}

	function wt(t) {
		return null !== t.offsetParent
	}
	var pt, bt, At;
	setInterval(function() {
		const t = gt();
		!t || t.distance > 200 || null === mt() ? null !== yt && (clearInterval(yt), yt = null) : null === yt && (ht(), yt = setInterval(ht, 120))
	}, 75);
	let It = !1,
		vt = !1,
		Mt = !1;
	const Ut = 500;

	function Et() {
		It = !1, vt = !1,
			function() {
				for (const t of [...Ft]) window.dispatchEvent(new KeyboardEvent("keyup", {
					key: t.replace("Key", "").toLowerCase(),
					code: t,
					bubbles: !0
				}));
				Ft.clear()
			}(), w = !1, l = !1, X("F", 0, null), X("9", null, 0), z(6)
	}

	function kt() {
		if (!It || Mt) return;
		const t = xt(),
			e = V.get(Bt);
		if (t && e && !(t.distance > Ut)) {
			if (t.distance > 250) {
				const e = t.angle;
				let n;
				X("9", e, 1);
				const r = Math.cos(e),
					i = Math.sin(e);
				return n = Math.abs(r) > Math.abs(i) ? r > 0 ? "KeyD" : "KeyA" : i > 0 ? "KeyS" : "KeyW", void(Ft.has(n) || window.dispatchEvent(new KeyboardEvent("keydown", {
					key: n.replace("Key", "").toLowerCase(),
					code: n,
					bubbles: !0
				})))
			}
			t.distance < 200 || function() {
				if (!It || vt || Mt) return;
				const t = xt();
				if (!t || t.distance > Ut) return;
				vt = !0, w = !0, l = !0, X("z", tt(), !0), z(53), kt(), setTimeout(() => {
					if (!It || Mt) return void Et();
					const t = xt();
					!t || t.distance > Ut ? Et() : (z(7), X("z", pt, !0), X("F", 1), setTimeout(() => {
						It && !Mt ? (X("F", 0, null), z(6), X("z", tt(), !0), w = !1, l = !1, Mt = !0, vt = !1) : Et()
					}, 45))
				}, 100)
			}()
		}
	}

	function Tt(t) {
		X("6", t)
	}

	function xt() {
		if (null == Bt) return null;
		const t = V.get(Bt);
		if (!t) return null;
		const e = Date.now();
		let n = null,
			r = 1 / 0;
		for (const i of V.values()) {
			if (i.sid === Bt || i.dead || i.health <= 0 || !Number.isFinite(i.x) || !Number.isFinite(i.y) || !Number.isFinite(i.lastUpdate) || e - i.lastUpdate > 500) continue;
			if (null != t.team && null != i.team && t.team === i.team) continue;
			const o = i.x - t.x,
				a = i.y - t.y,
				s = Math.hypot(o, a);
			s < r && (r = s, n = i)
		}
		return n ? {
			...n,
			distance: r,
			angle: Math.atan2(n.y - t.y, n.x - t.x)
		} : null
	}
	window.addEventListener("mousemove", t => {
		U = t.clientX, E = t.clientY
	}, !0);
	const Dt = {
			KeyW: [0, -1],
			KeyS: [0, 1],
			KeyA: [-1, 0],
			KeyD: [1, 0],
			ArrowUp: [0, -1],
			ArrowDown: [0, 1],
			ArrowLeft: [-1, 0],
			ArrowRight: [1, 0]
		},
		Ft = new Set,
		Nt = (t, e, n) => {
			X("z", t, !1), X("F", 1, e), X("F", 0, e), X("z", n, !0)
		},
		St = () => {
			const t = (() => {
				let t = 0,
					e = 0;
				for (const n of Ft) {
					const r = Dt[n];
					t += r[0], e += r[1]
				}
				return t || e ? Math.atan2(e, t) : null
			})();
			if (null === t) return;
			const e = $(et.windmill),
				n = tt(),
				r = t + Math.PI,
				i = 78 * Math.PI / 180;
			Nt(e, r + i, n), Nt(e, r - i, n), Nt(e, r, n), X("D", Math.atan2(E - innerHeight / 2, U - innerWidth / 2))
		};
	let Ct = null,
		Lt = !1;
	const zt = {
		0: 20,
		1: 40,
		2: 30
	};
	let Kt, Bt = null,
		Ot = !0,
		Pt = !1,
		Ht = null,
		Vt = 0,
		Wt = 0,
		Rt = 0,
		jt = 0;
	const Gt = () => {
			if (Vt <= 0) return;
			const t = Vt;
			Vt = 0, (() => {
				const t = Date.now();
				if (!Rt) return;
				const e = t - Rt;
				e < 70 ? Wt = Math.min(3, Wt + 1) : e >= 130 && (Wt = Math.max(0, Wt - 1)), jt = t
			})();
			const e = $([0, 1, 2]);
			if (null == e || e < 0) return;
			const n = zt[e] || 20;
			for (let r = 0; r < t; r += n) X("z", e, !1), X("F", 1, null), X("F", 0, null), X("z", tt(), !0)
		},
		_t = (t, e = !1) => {
			if (Number.isFinite(t) && !(t <= 0)) {
				if (Vt = Math.max(Vt, t), e) return null !== Ht && (clearTimeout(Ht), Ht = null), void Gt();
				null === Ht && (Ht = setTimeout(() => {
					Ht = null, Gt()
				}, (() => {
					const t = Number(window.pingTime);
					let e;
					return e = Number.isFinite(t) ? t <= 70 ? 125 : t >= 200 ? 115 : t >= 80 ? 120 : 130 : 130, Wt >= 3 ? e : Wt >= 2 || Wt >= 1 ? 0 : e
				})()))
			}
		};
	let qt = 0,
		Qt = 0,
		Xt = 0;
	let Yt = 0,
		Jt = 0,
		Zt = 0,
		$t = 0,
		te = 0,
		ee = 0,
		ne = 0,
		re = !1,
		ie = 0,
		oe = 0;
	const ae = [{
			id: 6,
			type: 0,
			cost: 4e3
		}, {
			id: 40,
			type: 0,
			cost: 15e3
		}, {
			id: 7,
			type: 0,
			cost: 6e3
		}, {
			id: 12,
			type: 0,
			cost: 6e3
		}, {
			id: 22,
			type: 0,
			cost: 6e3
		}, {
			id: 53,
			type: 0,
			cost: 1e4
		}, {
			id: 11,
			type: 0,
			cost: 1e4
		}, {
			id: 19,
			type: 1,
			cost: 15e3
		}, {
			id: 21,
			type: 0,
			cost: 2e4
		}],
		se = new Set,
		le = new Set;
	setInterval(() => {
		if (null === Bt) return;
		const t = (() => {
			const t = document.getElementById("scoreDisplay");
			if (!t) return 0;
			const e = (t.innerText || "").trim(),
				n = parseFloat(e);
			return isNaN(n) ? 0 : /k$/i.test(e) ? Math.round(1e3 * n) : Math.round(n)
		})();
		for (const e of ae) {
			const n = e.type + ":" + e.id;
			if (!se.has(n) && !le.has(n)) return void(t >= e.cost && (X("c", 1, e.id, e.type), le.add(n)))
		}
	}, 200);
	const ue = t => t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement || t instanceof HTMLSelectElement || t instanceof HTMLElement && t.isContentEditable,
		ce = t => {
			Ft.delete(t), "KeyB" !== t || (Lt = !1)
		};
	let fe;
	document.addEventListener("keydown", t => {
		if (90 === t.keyCode && z(40), 69 === t.keyCode) {
			if (!ut || !l || !d) return;
			t.preventDefault(), X("F", 1)
		}
	}), window.addEventListener("keydown", t => {
		const e = t.target;
		if (ue(e)) return;
		if (Dt[t.code] && Ft.add(t.code), t.ctrlKey || t.altKey || t.metaKey) return;
		if ("KeyB" === t.code) {
			if (Lt) return;
			return Lt = !0, void(() => {
				if (null !== Ct) return clearInterval(Ct), void(Ct = null);
				St(), Ct = setInterval(St, 1e3 / 3)
			})()
		}
		if ("KeyH" === t.code) return t.preventDefault(), void(() => {
			const t = it();
			if (null === t || void 0 === At) return;
			const e = Math.PI / 4;
			rt(At, t + e), rt(At, t - e)
		})();
		if ("KeyI" === t.code) return t.preventDefault(), void ot();
		"KeyM" === t.code && X("N");
		const n = nt[t.code] ?? null;
		null !== n && (t => {
			const e = $(et[t]),
				n = Math.round(100 * Math.atan2(E - innerHeight / 2, U - innerWidth / 2)) / 100;
			setTimeout(() => {
				X("z", e, !1), X("D", n), X("F", 1, n), X("F", 0, n), X("z", tt(), !0)
			}, 20)
		})(n)
	}), document.addEventListener("keydown", t => {
		const e = t.target;
		if (!ue(e)) {
			if ("1" === t.key && (L = 0), "2" === t.key && (L = 1), 82 === t.keyCode && (ut && (u = !0, Tt("test"), lt()), function() {
					const t = xt();
					t && (t && t.distance > 300 || (w = !0, l = !0, X("z", pt, !0), z(7), setTimeout(() => {
						X("F", 1), setTimeout(() => {
							z(53), X("z", bt, !0), setTimeout(() => {
								ut ? X("z", pt, !0) : setTimeout(() => {
									X("z", pt, !0)
								}, 1300)
							}, 80), setTimeout(() => {
								w = !1, l = !1, z(6), X("F", 0, null), u = !1
							}, 150)
						}, 120)
					}, 40)))
				}()), 188 === t.keyCode) {
				V.get(Bt);
				ut = !1, X("F", 0, null), ct()
			}
			if (84 === t.keyCode) {
				if (t.preventDefault(), It) return;
				It = !0, Mt = !1, vt = !1, w = !0, l = !0,
					function() {
						if (!It || Mt) return;
						const t = xt();
						!t || t.distance > Ut || kt()
					}()
			}
			74 === t.keyCode && (ut || (p = !p, p ? function() {
				if (!p) return;
				const t = xt();
				!t || t.distance > 250 ? st() : (n = !0, r = !0, o = !1, i = Kt, z(11), setTimeout(() => {
					at(21)
				}, 120))
			}() : st(), Tt("anb " + p))), 189 === t.keyCode && (d = !d, Tt("stachel takt " + (d ? "1" : "0"))), 187 === t.keyCode && (y = !y, Tt("ab " + y))
		}
	}), window.addEventListener("keyup", t => {
		if ("KeyT" === t.code) return Et(), void(Mt = !1);
		ce(t.code)
	}, !0), window.addEventListener("blur", () => {
		for (const t of k.keys()) ce(t);
		Ft.clear(), null !== Ct && (clearInterval(Ct), Ct = null), Lt = !1, Pt = !1
	}, !0);
	let de = 0;
	setInterval(() => {
		fe = parseInt(document.getElementById("killCounter").innerText), fe > de && (Tt(fe + " kills"), setTimeout(() => {
			Tt("get better")
		}, 800)), de = fe
	}, 200)
})();
!function(){"use strict";function e(e,t=3e3){const o=document.createElement("div");o.textContent=e,o.style.position="fixed",o.style.bottom="20px",o.style.right="20px",o.style.backgroundColor="#323232",o.style.color="#fff",o.style.padding="10px 20px",o.style.borderRadius="5px",o.style.boxShadow="0px 0px 10px rgba(0,0,0,0.5)",o.style.zIndex="1000",o.style.fontSize="24px",o.style.opacity="0",o.style.transition="opacity 0.5s",document.body.appendChild(o),setTimeout(()=>{o.style.opacity="1"},100),setTimeout(()=>{o.style.opacity="0",setTimeout(()=>{document.body.removeChild(o)},500)},t)}window.addEventListener("load",()=>{e("Please support me by Subscribing.",3e3),setTimeout(()=>{e("Youtube: Feature69_",3e3)},4e3),setTimeout(()=>{e("Thanks.",3e3)},8e3)})}();
(window, document);