// ==UserScript==
// @name 'Delta - 999999 in 1
// @name:ru 'Delta - 999999 в 1
// @name:uk 'Delta - 999999 в 1
// @name:ru 'Delta - 999999 в 1'
// @name:ja 'デルタ - 999999 イン 1'
// @name:es 'Delta - 999999 en 1'
// @name:zh-CN 'Delta - 999999 合 1'
// @name:de 'Delta - 999999 in 1'
// @name:ar 'دلتا - 999999 في 1'
// @description Delta - Agario extension, with zoom, minimap, helpers, adblocker
// @description:es Delta - extensión para Agario con zoom, minimapa, ayudas y bloqueador de anuncios
// @description:ru Delta — расширение для Agario с зумом, миникартой, помощниками и блокировщиком рекламы
// @description:zh-CN Delta - agario 的扩展,带有缩放、小地图、辅助功能和广告拦截器
// @description:uk Delta — розширення для Agario із зумом, мінікартою, помічниками та блокувальником реклами
// @description:tr Delta - Agario için yakınlaştırma, mini harita, yardımcılar ve reklam engelleyici uzantısı
// @description:de Delta – Erweiterung für Agario mit Zoom, Minikarte, Helfern und Werbeblocker
// @description:ja Delta - Agario のズーム、ミニマップ、ヘルパー、広告ブロッカー付き拡張機能
// @description:pl Delta - rozszerzenie do Agario z powiększeniem, minimapą, pomocnikami i blokadą reklam
// @description:fr Delta - extension pour Agario avec zoom, mini-carte, assistants et bloqueur de publicité
// @description:ar دلتا - إضافة لـ Agario مع مانع إعلانات
// @version 7.9
// @namespace delta.agar
// @author neo
// @icon https://deltav4.gitlab.io/favicon.ico
// @match *://*.agar.io/
// @run-at document-start
// @grant GM.xmlHttpRequest
// @grant GM.registerMenuCommand
// @grant window.close
// @grant unsafeWindow
// @license MPL-2.0
// @antifeature ads
// @supportURL https://discord.gg/HHmyKW6
// @connect cdnjs.cloudflare.net
// @require https://cdnjs.cloudflare.com/ajax/libs/preact/10.21.0/preact.umd.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/preact/10.21.0/hooks.umd.min.js
// @require https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4
// ==/UserScript==
/*
GREASYFORK VERSION
Sorry, Delta is no longer available for GreasyFork users.
Delta will be available again after all GreasyFork rules are met.
Right now there is a lite version of Delta
en: If this user script does not start, write me a discord
ru: Если данное расширение не запускается, напишите мне в дискорд
https://discord.gg/HHmyKW6
*/(function (window) {
var __webpack_modules__ = {
32: module => {
"use strict";
module.exports = preact;
},
93: (__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.d(__webpack_exports__, {
camelCaseToWords: () => camelCaseToWords,
find_node: () => find_node,
overrideMethod: () => overrideMethod,
overridePrototype: () => overridePrototype,
updateCssString: () => updateCssString
});
function find_node(where = window['agarApp'].home, cond) {
const results = [];
const find_static = (where = window['agarApp'].home, cond) => {
function each_children(child, depth) {
depth += 1;
child.forEach((ch => {
if (cond(ch, depth)) {
results.push(ch);
}
ch.children && each_children(ch.children, depth);
}));
}
each_children(where, -1);
return results;
};
function each_children(child, depth) {
var _a, _b, _c, _d, _e, _f, _g;
depth += 1;
if (cond(child, depth)) {
results.push(child);
}
child._staticTrees && find_static(child._staticTrees, cond);
null === (_a = child.$children) || void 0 === _a || _a.forEach((ch => {
each_children(ch, depth);
}));
null === (_b = child.children) || void 0 === _b || _b.forEach((ch => {
each_children(ch, depth);
}));
null === (_d = null === (_c = child._vnode) || void 0 === _c ? void 0 : _c.children) || void 0 === _d || _d.forEach((ch => {
each_children(ch, depth);
}));
null === (_g = null === (_f = null === (_e = child._vnode) || void 0 === _e ? void 0 : _e.componentOptions) || void 0 === _f ? void 0 : _f.children) || void 0 === _g || _g.forEach((ch => {
each_children(ch, depth);
}));
}
each_children(where, -1);
return results;
}
function overrideMethod(obj, methodName, getMethod) {
const originalMethod = obj[methodName];
obj[methodName] = function() {
return getMethod(originalMethod, arguments);
};
}
function overridePrototype(obj, methodName, getMethod) {
const originalMethod = obj[methodName];
return obj[methodName] = getMethod(originalMethod);
}
const updateCssString = (() => {
const records = {};
return (name, css) => {
if (!records[name]) {
const style = document.createElement('style');
style.setAttribute('data-css-name', name);
document.head.appendChild(style);
records[name] = style;
}
records[name].textContent = css;
};
})();
function camelCaseToWords(s) {
const result = s.replace(/([A-Z])/g, ' $1');
return result.charAt(0).toUpperCase() + result.slice(1);
}
},
122: (module, __unused_webpack___webpack_exports__, __webpack_require__) => {
"use strict";
var Eventify = __webpack_require__(742);
var __classPrivateFieldGet = function(receiver, state, kind, f) {
if ("a" === kind && !f) {
throw new TypeError("Private accessor was defined without a getter");
}
if ("function" === typeof state ? receiver !== state || !f : !state.has(receiver)) {
throw new TypeError("Cannot read private member from an object whose class did not declare it");
}
return "m" === kind ? f : "a" === kind ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _Storage_namespace;
class Storage {
constructor() {
_Storage_namespace.set(this, 'v6');
}
set(key, object, namespace = __classPrivateFieldGet(this, _Storage_namespace, "f"), middleware = d => d) {
localStorage.setItem(namespace + key, middleware(JSON.stringify(object)));
}
get(key, namespace = __classPrivateFieldGet(this, _Storage_namespace, "f"), middleware = d => d) {
let obj = {};
const rawData = localStorage.getItem(namespace + key);
if ('string' === typeof rawData) {
try {
obj = JSON.parse(middleware(rawData));
} catch (e) {
console.error(e);
}
}
return obj;
}
clear(key, namespace = __classPrivateFieldGet(this, _Storage_namespace, "f")) {
return localStorage.removeItem(namespace + key);
}
}
_Storage_namespace = new WeakMap;
const storage = new Storage;
var utils = __webpack_require__(93);
function coreInitPatch() {
(0, utils.overrideMethod)(window['core'], 'setFpsCap', (originalMethod => originalMethod(-1)));
}
function coreUiPatch() {
document.querySelector('#title').innerHTML = 'Delta';
}
function coreAdsPatch() {
var _a, _b, _c, _d, _e;
null === (_a = (0, utils.find_node)(void 0, (child => {
var _a;
return null === (_a = child.$vnode) || void 0 === _a ? void 0 : _a.tag.includes('-ads');
}))[0]) || void 0 === _a || _a.$destroy();
null === (_b = (0, utils.find_node)(void 0, (child => {
var _a;
return null === (_a = child.$vnode) || void 0 === _a ? void 0 : _a.tag.includes('-promo');
}))[0]) || void 0 === _b || _b.$destroy();
(0, utils.find_node)(void 0, (child => {
var _a, _b;
return null === (_b = null === (_a = child.elm) || void 0 === _a ? void 0 : _a.id) || void 0 === _b ? void 0 : _b.includes('agar-io');
})).forEach((child => {
var _a;
null === (_a = child.elm.parentElement) || void 0 === _a || _a.removeChild(child.elm);
}));
(0, utils.find_node)(void 0, (child => child.playVideoAd)).forEach((elem => {
elem.getVideoTimestamp = () => Date.now();
}));
{
const vnode = null === (_c = (0, utils.find_node)(void 0, (child => Object.getPrototypeOf(child).hasOwnProperty('hasBottomAd')))) || void 0 === _c ? void 0 : _c[0];
if (vnode) {
Object.defineProperties(vnode, {
fastEntry: {
get: () => true
}
});
}
}
{
const vnode = (0, utils.find_node)(void 0, (child => {
var _a;
if ('socialButtons' == (null === (_a = null === child || void 0 === child ? void 0 : child.elm) || void 0 === _a ? void 0 : _a.id)) {
return true;
}
}))[0];
if (vnode) {
vnode.elm.parentElement.removeChild(vnode.elm);
}
}
{
const bubble = (0, utils.find_node)(void 0, (child => {
var _a, _b;
return null === (_b = null === (_a = child.data) || void 0 === _a ? void 0 : _a.staticClass) || void 0 === _b ? void 0 : _b.includes('bubble');
}))[0];
null === (_d = null === bubble || void 0 === bubble ? void 0 : bubble.elm) || void 0 === _d || _d.parentElement.removeChild(null === bubble || void 0 === bubble ? void 0 : bubble.elm);
}
{
const vnode = null === (_e = (0, utils.find_node)(void 0, (child => Object.getPrototypeOf(child).hasOwnProperty('hasBottomAd')))) || void 0 === _e ? void 0 : _e[0];
if (vnode) {
[ 'hasBottomAd', 'hasSideAds' ].map((prop => {
vnode._computedWatchers[prop]['getter'] = () => false;
}));
Object.defineProperties(vnode, {
hasBottomAd: {
get: () => false
},
fastEntry: {
get: () => true
}
});
}
}
document.documentElement.style.setProperty("--bottom-banner-height", '0px');
window.Object.defineProperty(window, 'agarApp', {
get() {
return window['agarApp_'];
},
set(value) {
window['agarApp_'] = value;
onAgarApp();
}
});
function onAgarApp() {
var _a, _b, _c;
var _d;
null !== (_a = (_d = window['agarApp']).ads) && void 0 !== _a || (_d.ads = {});
Object.assign(window['agarApp'].ads, {
requestAds() {},
requestAd() {},
refreshAd() {},
destroyAd() {},
adSlots() {},
enableTargetedAds() {},
disableTargetedAds() {},
isTargeted() {},
supersonicAds: {
BrandConnectReadyEvent() {},
BrandConnectDoneEvent() {},
BrandConnectOpenEvent() {},
BrandConnectCloseEvent() {},
BrandConnectCompletedEvent() {},
hasEngagement() {
return false;
}
}
});
if (null === (_b = window['agarApp']) || void 0 === _b ? void 0 : _b.main) {
[ 'sendEndSession', 'initDataDog', 'sendAnalyticsInitEvent', 'onGoliathReady', 'onGoliathUnload', 'initAnalytics', 'initGuestAnalytics', 'sendAnalyticsInitEvent', 'initBrowserId' ].forEach((prop => {
window['agarApp'].main[prop] = () => {};
}));
}
if (null === (_c = window['agarApp']) || void 0 === _c ? void 0 : _c.MCSDK) {
[ 'sendMatchEvent' ].forEach((prop => window['agarApp'].MCSDK[prop] = () => {}));
}
}
try {
onAgarApp();
} catch (e) {}
}
function fixNoServers() {
let AgarioEndpoints = null;
class HookXMLHttpRequest extends window.XMLHttpRequest {
constructor() {
super();
}
open(method, _url, async, username, password) {
const url = new URL(_url, location.href);
if (url.pathname.endsWith('/info')) {
this.addEventListener('load', (() => {
const regions = JSON.parse(this.responseText);
AgarioEndpoints = regions;
}));
}
if (url.pathname.endsWith('/findServerWithFriends')) {
console.log('Hooked XMLHttpRequest:', method, url);
this.addEventListener('load', (e => {
const endpoints = JSON.parse(this.responseText);
if ('no_servers' == endpoints.status) {
e.stopPropagation();
e.stopImmediatePropagation();
[ 'responseText', 'response' ].forEach((prop => {
Object.defineProperty(this, prop, {
value: JSON.stringify({
endpoints: {
http: 'web-arenas-live-v25-0.agario.miniclippt.com/us-east-1/3-80-219-193',
https: 'web-arenas-live-v25-0.agario.miniclippt.com/us-east-1/3-80-219-193'
},
status: 'ok',
count: 0
})
});
}));
this.dispatchEvent(new ProgressEvent('load', e));
}
}));
}
super.open(method, url, async, username, password);
}
}
window.XMLHttpRequest = HookXMLHttpRequest;
}
var external_preact_ = __webpack_require__(32);
var jsxRuntime_module = __webpack_require__(557);
class Portal extends external_preact_.Component {
constructor() {
super(...arguments);
this.isMounted = false;
}
componentDidUpdate(props) {
for (const i in props) {
if (props[i] !== this.props[i]) {
return setTimeout((() => this.renderLayer()));
}
}
}
componentDidMount() {
this.isMounted = true;
this.renderLayer = this.renderLayer.bind(this);
this.renderLayer();
}
componentWillUnmount() {
this.renderLayer(false);
this.isMounted = false;
if (this.remote && this.remote.parentNode) {
this.remote.parentNode.removeChild(this.remote);
}
}
findNode(node) {
return 'string' === typeof node ? document.querySelector(node) : node;
}
renderLayer(show = true) {
if (!this.isMounted) {
return;
}
if (this.props.into !== this.intoPointer) {
this.intoPointer = this.props.into;
if (this.into && this.remote) {
this.remote = (0, external_preact_.render)((0, jsxRuntime_module.jsx)(PortalProxy, {}), createRootFragment(this.into, this.remote));
}
this.into = this.findNode(this.props.into);
}
this.remote = (0, external_preact_.render)((0, jsxRuntime_module.jsx)(PortalProxy, {
context: this.$state,
children: show && this.props.children ? [ this.props.children ] : null
}), createRootFragment(this.into, this.remote));
}
render() {
return null;
}
}
class PortalProxy extends external_preact_.Component {
getChildContext() {
return this.props.context;
}
render({children: children} = this.props) {
return children && children[0] || null;
}
}
function createRootFragment(parent, replaceNode) {
if (replaceNode) {
replaceNode = Array.isArray(replaceNode) ? replaceNode : [ replaceNode ];
} else {
replaceNode = [ parent ];
parent = parent.parentNode;
}
const s = replaceNode[replaceNode.length - 1].nextSibling;
const rootFragment = {
nodeType: 1,
parentNode: parent,
firstChild: replaceNode[0],
childNodes: replaceNode,
insertBefore: (c, r) => {
parent.insertBefore(c, r || s);
return c;
},
appendChild: c => {
parent.insertBefore(c, s);
return c;
},
removeChild: function(c) {
parent.removeChild(c);
return c;
}
};
parent.__k = rootFragment;
return rootFragment;
}
var Contexts = __webpack_require__(621);
var Menu = __webpack_require__(647);
var external_preactHooks_ = __webpack_require__(632);
function g(n, t) {
for (var e in t) {
n[e] = t[e];
}
return n;
}
function E(n, t) {
for (var e in n) {
if ("__source" !== e && !(e in t)) {
return !0;
}
}
for (var r in t) {
if ("__source" !== r && n[r] !== t[r]) {
return !0;
}
}
return !1;
}
function C(n, t) {
var e = t(), r = (0, external_preactHooks_.useState)({
t: {
__: e,
u: t
}
}), u = r[0].t, o = r[1];
return (0, external_preactHooks_.useLayoutEffect)((function() {
u.__ = e, u.u = t, x(u) && o({
t: u
});
}), [ n, e, t ]), (0, external_preactHooks_.useEffect)((function() {
return x(u) && o({
t: u
}), n((function() {
x(u) && o({
t: u
});
}));
}), [ n ]), e;
}
function x(n) {
var t, e, r = n.u, u = n.__;
try {
var o = r();
return !((t = u) === (e = o) && (0 !== t || 1 / t == 1 / e) || t != t && e != e);
} catch (n) {
return !0;
}
}
function R(n) {
n();
}
function w(n) {
return n;
}
function k() {
return [ !1, R ];
}
var I = external_preactHooks_.useLayoutEffect;
function N(n, t) {
this.props = n, this.context = t;
}
function M(n, e) {
function r(n) {
var t = this.props.ref, r = t == n.ref;
return !r && t && (t.call ? t(null) : t.current = null), e ? !e(this.props, n) || !r : E(this.props, n);
}
function u(e) {
return this.shouldComponentUpdate = r, (0, external_preact_.createElement)(n, e);
}
return u.displayName = "Memo(" + (n.displayName || n.name) + ")", u.prototype.isReactComponent = !0, u.__f = !0, u;
}
(N.prototype = new external_preact_.Component).isPureReactComponent = !0, N.prototype.shouldComponentUpdate = function(n, t) {
return E(this.props, n) || E(this.state, t);
};
var T = external_preact_.options.__b;
external_preact_.options.__b = function(n) {
n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), T && T(n);
};
var A = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911;
function D(n) {
function t(t) {
var e = g({}, t);
return delete e.ref, n(e, t.ref || null);
}
return t.$$typeof = A, t.render = t, t.prototype.isReactComponent = t.__f = !0, t.displayName = "ForwardRef(" + (n.displayName || n.name) + ")", t;
}
var L = function(n, t) {
return null == n ? null : (0, external_preact_.toChildArray)((0, external_preact_.toChildArray)(n).map(t));
}, O = {
map: L,
forEach: L,
count: function(n) {
return n ? (0, external_preact_.toChildArray)(n).length : 0;
},
only: function(n) {
var t = (0, external_preact_.toChildArray)(n);
if (1 !== t.length) {
throw "Children.only";
}
return t[0];
},
toArray: external_preact_.toChildArray
}, F = external_preact_.options.__e;
external_preact_.options.__e = function(n, t, e, r) {
if (n.then) {
for (var u, o = t; o = o.__; ) {
if ((u = o.__c) && u.__c) {
return null == t.__e && (t.__e = e.__e, t.__k = e.__k), u.__c(n, t);
}
}
}
F(n, t, e, r);
};
var U = external_preact_.options.unmount;
function V(n, t, e) {
return n && (n.__c && n.__c.__H && (n.__c.__H.__.forEach((function(n) {
"function" == typeof n.__c && n.__c();
})), n.__c.__H = null), null != (n = g({}, n)).__c && (n.__c.__P === e && (n.__c.__P = t), n.__c = null), n.__k = n.__k && n.__k.map((function(n) {
return V(n, t, e);
}))), n;
}
function W(n, t, e) {
return n && e && (n.__v = null, n.__k = n.__k && n.__k.map((function(n) {
return W(n, t, e);
})), n.__c && n.__c.__P === t && (n.__e && e.appendChild(n.__e), n.__c.__e = !0, n.__c.__P = e)), n;
}
function P() {
this.__u = 0, this.o = null, this.__b = null;
}
function j(n) {
var t = n.__.__c;
return t && t.__a && t.__a(n);
}
function z(n) {
var e, r, u;
function o(o) {
if (e || (e = n()).then((function(n) {
r = n.default || n;
}), (function(n) {
u = n;
})), u) {
throw u;
}
if (!r) {
throw e;
}
return (0, external_preact_.createElement)(r, o);
}
return o.displayName = "Lazy", o.__f = !0, o;
}
function B() {
this.i = null, this.l = null;
}
external_preact_.options.unmount = function(n) {
var t = n.__c;
t && t.__R && t.__R(), t && 32 & n.__u && (n.type = null), U && U(n);
}, (P.prototype = new external_preact_.Component).__c = function(n, t) {
var e = t.__c, r = this;
null == r.o && (r.o = []), r.o.push(e);
var u = j(r.__v), o = !1, i = function() {
o || (o = !0, e.__R = null, u ? u(c) : c());
};
e.__R = i;
var c = function() {
if (! --r.__u) {
if (r.state.__a) {
var n = r.state.__a;
r.__v.__k[0] = W(n, n.__c.__P, n.__c.__O);
}
var t;
for (r.setState({
__a: r.__b = null
}); t = r.o.pop(); ) {
t.forceUpdate();
}
}
};
r.__u++ || 32 & t.__u || r.setState({
__a: r.__b = r.__v.__k[0]
}), n.then(i, i);
}, P.prototype.componentWillUnmount = function() {
this.o = [];
}, P.prototype.render = function(n, e) {
if (this.__b) {
if (this.__v.__k) {
var r = document.createElement("div"), o = this.__v.__k[0].__c;
this.__v.__k[0] = V(this.__b, r, o.__O = o.__P);
}
this.__b = null;
}
var i = e.__a && (0, external_preact_.createElement)(external_preact_.Fragment, null, n.fallback);
return i && (i.__u &= -33), [ (0, external_preact_.createElement)(external_preact_.Fragment, null, e.__a ? null : n.children), i ];
};
var H = function(n, t, e) {
if (++e[1] === e[0] && n.l.delete(t), n.props.revealOrder && ("t" !== n.props.revealOrder[0] || !n.l.size)) {
for (e = n.i; e; ) {
for (;e.length > 3; ) {
e.pop()();
}
if (e[1] < e[0]) {
break;
}
n.i = e = e[2];
}
}
};
function Z(n) {
return this.getChildContext = function() {
return n.context;
}, n.children;
}
function Y(n) {
var e = this, r = n.h;
e.componentWillUnmount = function() {
(0, external_preact_.render)(null, e.v), e.v = null, e.h = null;
}, e.h && e.h !== r && e.componentWillUnmount(), e.v || (e.h = r, e.v = {
nodeType: 1,
parentNode: r,
childNodes: [],
contains: function() {
return !0;
},
appendChild: function(n) {
this.childNodes.push(n), e.h.appendChild(n);
},
insertBefore: function(n, t) {
this.childNodes.push(n), e.h.insertBefore(n, t);
},
removeChild: function(n) {
this.childNodes.splice(this.childNodes.indexOf(n) >>> 1, 1), e.h.removeChild(n);
}
}), (0, external_preact_.render)((0, external_preact_.createElement)(Z, {
context: e.context
}, n.__v), e.v);
}
function $(n, e) {
var r = (0, external_preact_.createElement)(Y, {
__v: n,
h: e
});
return r.containerInfo = e, r;
}
(B.prototype = new external_preact_.Component).__a = function(n) {
var t = this, e = j(t.__v), r = t.l.get(n);
return r[0]++, function(u) {
var o = function() {
t.props.revealOrder ? (r.push(u), H(t, n, r)) : u();
};
e ? e(o) : o();
};
}, B.prototype.render = function(n) {
this.i = null, this.l = new Map;
var t = (0, external_preact_.toChildArray)(n.children);
n.revealOrder && "b" === n.revealOrder[0] && t.reverse();
for (var e = t.length; e--; ) {
this.l.set(t[e], this.i = [ 1, 0, this.i ]);
}
return n.children;
}, B.prototype.componentDidUpdate = B.prototype.componentDidMount = function() {
var n = this;
this.l.forEach((function(t, e) {
H(n, e, t);
}));
};
var q = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103, G = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/, J = /^on(Ani|Tra|Tou|BeforeInp|Compo)/, K = /[A-Z0-9]/g, Q = "undefined" != typeof document, X = function(n) {
return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n);
};
function nn(n, t, e) {
return null == t.__k && (t.textContent = ""), (0, external_preact_.render)(n, t), "function" == typeof e && e(), n ? n.__c : null;
}
function tn(n, t, e) {
return (0, external_preact_.hydrate)(n, t), "function" == typeof e && e(), n ? n.__c : null;
}
external_preact_.Component.prototype.isReactComponent = {}, [ "componentWillMount", "componentWillReceiveProps", "componentWillUpdate" ].forEach((function(t) {
Object.defineProperty(external_preact_.Component.prototype, t, {
configurable: !0,
get: function() {
return this["UNSAFE_" + t];
},
set: function(n) {
Object.defineProperty(this, t, {
configurable: !0,
writable: !0,
value: n
});
}
});
}));
var en = external_preact_.options.event;
function rn() {}
function un() {
return this.cancelBubble;
}
function on() {
return this.defaultPrevented;
}
external_preact_.options.event = function(n) {
return en && (n = en(n)), n.persist = rn, n.isPropagationStopped = un, n.isDefaultPrevented = on, n.nativeEvent = n;
};
var cn, ln = {
enumerable: !1,
configurable: !0,
get: function() {
return this.class;
}
}, fn = external_preact_.options.vnode;
external_preact_.options.vnode = function(n) {
"string" == typeof n.type && function(n) {
var t = n.props, e = n.type, u = {}, o = -1 === e.indexOf("-");
for (var i in t) {
var c = t[i];
if (!("value" === i && "defaultValue" in t && null == c || Q && "children" === i && "noscript" === e || "class" === i || "className" === i)) {
var l = i.toLowerCase();
"defaultValue" === i && "value" in t && null == t.value ? i = "value" : "download" === i && !0 === c ? c = "" : "translate" === l && "no" === c ? c = !1 : "o" === l[0] && "n" === l[1] ? "ondoubleclick" === l ? i = "ondblclick" : "onchange" !== l || "input" !== e && "textarea" !== e || X(t.type) ? "onfocus" === l ? i = "onfocusin" : "onblur" === l ? i = "onfocusout" : J.test(i) && (i = l) : l = i = "oninput" : o && G.test(i) ? i = i.replace(K, "-$&").toLowerCase() : null === c && (c = void 0),
"oninput" === l && u[i = l] && (i = "oninputCapture"), u[i] = c;
}
}
"select" == e && u.multiple && Array.isArray(u.value) && (u.value = (0, external_preact_.toChildArray)(t.children).forEach((function(n) {
n.props.selected = -1 != u.value.indexOf(n.props.value);
}))), "select" == e && null != u.defaultValue && (u.value = (0, external_preact_.toChildArray)(t.children).forEach((function(n) {
n.props.selected = u.multiple ? -1 != u.defaultValue.indexOf(n.props.value) : u.defaultValue == n.props.value;
}))), t.class && !t.className ? (u.class = t.class, Object.defineProperty(u, "className", ln)) : (t.className && !t.class || t.class && t.className) && (u.class = u.className = t.className),
n.props = u;
}(n), n.$$typeof = q, fn && fn(n);
};
var an = external_preact_.options.__r;
external_preact_.options.__r = function(n) {
an && an(n), cn = n.__c;
};
var sn = external_preact_.options.diffed;
external_preact_.options.diffed = function(n) {
sn && sn(n);
var t = n.props, e = n.__e;
null != e && "textarea" === n.type && "value" in t && t.value !== e.value && (e.value = null == t.value ? "" : t.value), cn = null;
};
var hn = {
ReactCurrentDispatcher: {
current: {
readContext: function(n) {
return cn.__n[n.__c].props.value;
},
useCallback: external_preactHooks_.useCallback,
useContext: external_preactHooks_.useContext,
useDebugValue: external_preactHooks_.useDebugValue,
useDeferredValue: w,
useEffect: external_preactHooks_.useEffect,
useId: external_preactHooks_.useId,
useImperativeHandle: external_preactHooks_.useImperativeHandle,
useInsertionEffect: I,
useLayoutEffect: external_preactHooks_.useLayoutEffect,
useMemo: external_preactHooks_.useMemo,
useReducer: external_preactHooks_.useReducer,
useRef: external_preactHooks_.useRef,
useState: external_preactHooks_.useState,
useSyncExternalStore: C,
useTransition: k
}
}
};
function dn(n) {
return external_preact_.createElement.bind(null, n);
}
function pn(n) {
return !!n && n.$$typeof === q;
}
function mn(n) {
return pn(n) && n.type === external_preact_.Fragment;
}
function yn(n) {
return !!n && !!n.displayName && ("string" == typeof n.displayName || n.displayName instanceof String) && n.displayName.startsWith("Memo(");
}
function _n(n) {
return pn(n) ? external_preact_.cloneElement.apply(null, arguments) : n;
}
function bn(n) {
return !!n.__k && ((0, external_preact_.render)(null, n), !0);
}
function Sn(n) {
return n && (n.base || 1 === n.nodeType && n) || null;
}
var gn = function(n, t) {
return n(t);
}, En = function(n, t) {
return n(t);
}, Cn = external_preact_.Fragment, xn = pn;
external_preactHooks_.useState, external_preactHooks_.useId, external_preactHooks_.useReducer, external_preactHooks_.useEffect, external_preactHooks_.useLayoutEffect,
external_preactHooks_.useRef, external_preactHooks_.useImperativeHandle, external_preactHooks_.useMemo, external_preactHooks_.useCallback, external_preactHooks_.useContext,
external_preactHooks_.useDebugValue, external_preact_.createElement, external_preact_.createContext, external_preact_.createRef, external_preact_.Fragment, external_preact_.Component;
function Minimap() {
const app = (0, external_preactHooks_.useContext)(Contexts.AppContext);
const $canvas = (0, external_preactHooks_.useRef)(null);
const $sectors = (0, external_preactHooks_.useRef)(null);
(0, external_preactHooks_.useLayoutEffect)((() => {
const ctx = $canvas.current.getContext('2d');
const sectors = $sectors.current.querySelectorAll('.sector');
let sectorIndex = -1;
let rafId = requestAnimationFrame(render);
(0, utils.updateCssString)('minimap-styles', minimapStyles);
function render() {
const sectorId = app.world.drawMinimap(ctx, $canvas.current);
setSector(sectorId);
rafId = requestAnimationFrame(render);
}
function setSector(index) {
if (index === sectorIndex || index < 0) {
return;
}
index = Math.min(index, sectors.length - 1);
-1 !== sectorIndex && sectors[sectorIndex].classList.remove('active');
sectors[index].classList.add('active');
sectorIndex = index;
}
return () => {
cancelAnimationFrame(rafId);
};
}), []);
return (0, jsxRuntime_module.jsxs)("div", {
id: "xevo-minimap",
style: {
zIndex: 1000
},
children: [ (0, jsxRuntime_module.jsxs)("div", {
class: "background",
ref: $sectors,
children: [ (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "A1"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "A2"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "A3"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "A4"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "A5"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "B1"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "B2"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "B3"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "B4"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "B5"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "C1"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "C2"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "C3"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "C4"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "C5"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "D1"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "D2"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "D3"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "D4"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "D5"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "E1"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "E2"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "E3"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "E4"
}), (0, jsxRuntime_module.jsx)("div", {
class: "sector",
children: "E5"
}) ]
}), (0, jsxRuntime_module.jsx)("canvas", {
id: "minimap",
width: "200",
height: "200",
ref: $canvas
}) ]
});
}
const minimapStyles = "\n :root {\n --bottom-banner-height: 0px !important;\n }\n #minimap {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n #xevo-minimap {\n position: fixed;\n bottom: 15px;\n right: 15px;\n width: 200px;\n height: 200px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 10px;\n overflow: hidden;\n background-color: rgba(20, 20, 20, 0.75);\n box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5);\n }\n #xevo-minimap .background {\n display: grid;\n grid-template-columns: repeat(5, 1fr);\n grid-template-rows: repeat(5, 1fr);\n width: 100%;\n height: 100%;\n }\n #xevo-minimap .sector {\n display: flex;\n justify-content: center;\n align-items: center;\n color: #ddd;\n font-size: 12px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n transition: background-color 0.3s ease, transform 0.2s ease;\n }\n #xevo-minimap .sector.active {\n background-color: rgba(0, 191, 255, 0.3);\n border: 1px solid #00bfff;\n }\n ";
function initLiteui(app) {
const liteui = document.createElement('div');
liteui.style = 'display:flex; flex-direction:column; overflow:hidden;';
document.getElementById('instructions').insertAdjacentElement('afterend', liteui);
(0, external_preact_.render)((0, jsxRuntime_module.jsx)(jsxRuntime_module.Fragment, {
children: (0, jsxRuntime_module.jsx)(Portal, {
into: liteui,
children: (0, jsxRuntime_module.jsx)(jsxRuntime_module.Fragment, {
children: (0, jsxRuntime_module.jsxs)("div", {
"data-portal": true,
className: "w-full",
style: "overflow: hidden;display: flex;height: 100%;flex-direction: column;",
children: [ (0, jsxRuntime_module.jsx)(Contexts.AppContext.Provider, {
value: app,
children: (0, jsxRuntime_module.jsx)(Menu.MenuButtons, {})
}), (0, jsxRuntime_module.jsx)(Contexts.AppContext.Provider, {
value: app,
children: (0, jsxRuntime_module.jsx)(Menu.Menu, {})
}) ]
})
})
})
}), document.body);
const minimapElem = document.createElement('div');
(0, external_preact_.render)((0, jsxRuntime_module.jsx)(Contexts.AppContext.Provider, {
value: app,
children: (0, jsxRuntime_module.jsx)(Minimap, {})
}), minimapElem);
document.body.insertAdjacentElement('afterbegin', minimapElem);
const observer = new window.MutationObserver((mtRecs => {
for (const mtRec of mtRecs) {
const elem = mtRec.target;
if ('none' !== elem.style.display) {
elem.style.display = 'flex';
elem.style.display = 'flex-direction:column';
}
}
}));
observer.observe(window.document.querySelector('#mainPanel'), {
attributeFilter: [ 'style' ]
});
}
const styles = "\n#title {\n margin-top: 0 !important;\n}\n#mainui-play {\n height: 595px;\n}\n#mainPanel {\n display: flex ;\n flex-direction: column;\n height: 100%;\n}\n#socialLoginContainer{\n position: initial !important;\n}\n#instructions{\n position: initial !important;\n display: none !important;\n overflow: hidden !important;\n flex-direction: column !important;\n margin: 0 !important;\n}\n.play-container {\n display: flex;\n height: 100%;\n padding: 0 !important;\n}\n\n#play {\n top: initial !important;\n}\n\n#nick{\n position: initial !important;\n left: initial !important;\n top: initial !important; \n float: initial !important;\n}\n\n#skinButton {\n position: relative !important;\n display: block;\n left: initial !important;\n width: 46px;\n height: 46px;\n}\n#playnick {\n position: initial !important;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center\n}\n#socialLoginContainer {\n top: initial !important;\n margin: 4px 20px 0px 20px !important;\n}\n\n.guest{\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n\n.menu-addon {\n gap: 4px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.menu-button {\n color: #fff;\n background-color: #54c800;\n border-color: #54c800;\n height: 34px;\n font-size: 20px;\n line-height: 1.5;\n padding: 0 0.5rem;\n}\n\n.menu-button:hover {\n filter: brightness(0.7) contrast(1);\n}\n.input-addon {\n width: 100%;\n height: 28px;\n}\n\n.circle.green {\n position: absolute !important; \n}\n.sprite-main {\n background-image: url(/mc/atlas/main_shop.png) !important;\n}\n#settingsButton {\n left:5px;\n position: absolute !important;\n}\n.circle {\n display: flex;\n justify-content: center;\n}\n";
var settings = __webpack_require__(423);
function makeGLobal(name, value) {
window[name] = value;
return value;
}
class Sampler {
constructor() {
this.samplerIndex = 0;
this.sampler = new Float32Array(30).fill(0);
this.averagePerSecond = 0;
this.renderedFrames = 0;
this.average = 0;
this.now = 0;
}
step() {
const now = Date.now();
const elapsed = now - this.now;
this.now = now;
const delta = elapsed / 1000;
const perSecond = 1 / delta;
let average = 0;
let howmuchSamples = 0;
this.sampler[this.samplerIndex] = Math.round(perSecond);
this.samplerIndex = (this.samplerIndex + 1) % this.sampler.length;
for (let i = 0; i < Math.min(this.sampler.length, this.renderedFrames); i++) {
average += this.sampler[i];
howmuchSamples++;
}
average = Math.round(average / howmuchSamples);
this.average = average;
if (this.renderedFrames <= this.sampler.length) {
this.renderedFrames++;
}
}
}
function applyPatch(u8, operations, anyFail) {
let result = u8;
for (const {pattern: pattern, payload: payload, type: type} of operations) {
const index = findPattern(result, pattern);
if (-1 === index) {
console.warn(`Pattern not found: ${pattern.map((b => b.toString(16))).join(' ')}`);
anyFail();
continue;
}
let patchIndex = index;
if ('insertAfter' === type) {
patchIndex = index + pattern.length;
} else if ('insertBefore' === type) {
patchIndex = index;
} else if ('replaceAfter' === type) {
patchIndex = index + pattern.length;
const sliceBefore = result.slice(0, patchIndex);
const sliceAfter = result.slice(patchIndex + payload.length);
result = concatUint8Arrays([ sliceBefore, new Uint8Array(payload), sliceAfter ]);
continue;
} else if ('replaceBefore' === type) {
patchIndex = index - payload.length;
if (patchIndex < 0) {
throw new Error('replaceBefore would underflow the buffer');
}
const sliceBefore = result.slice(0, patchIndex);
const sliceAfter = result.slice(index);
result = concatUint8Arrays([ sliceBefore, new Uint8Array(payload), sliceAfter ]);
continue;
}
const sliceBefore = result.slice(0, patchIndex);
const sliceAfter = result.slice(patchIndex);
result = concatUint8Arrays([ sliceBefore, new Uint8Array(payload), sliceAfter ]);
}
return result;
}
function findPattern(buffer, pattern) {
for (let i = 0; i <= buffer.length - pattern.length; i++) {
let match = true;
for (let j = 0; j < pattern.length; j++) {
if (buffer[i + j] !== pattern[j]) {
match = false;
break;
}
}
if (match) {
return i;
}
}
return -1;
}
function concatUint8Arrays(arrays) {
const totalLength = arrays.reduce(((sum, arr) => sum + arr.length), 0);
const result = new Uint8Array(totalLength);
let offset = 0;
for (const arr of arrays) {
result.set(arr, offset);
offset += arr.length;
}
return result;
}
class World {
constructor(app) {
this.xorBuffer = (buffer, key) => {
const dataView = new DataView(buffer);
for (let i = 0; i < dataView.byteLength; i++) {
dataView.setUint8(i, dataView.getUint8(i) ^ key >>> i % 4 * 8 & 255);
}
return buffer;
};
this.overWriteWS = _target => {
const target = _target;
setTimeout((() => {
target._onopen = target.onopen;
target._onmessage = target.onmessage;
target.onopen = e => {
this.reset();
target._onopen(e);
};
target.onmessage = message => {
target._onmessage(message);
let offset = 0;
let msg = message.data;
if (this.decryptionKey) {
msg = this.xorBuffer(msg, 31122 ^ this.decryptionKey);
}
const view = new DataView(msg);
const opcode = view.getUint8(offset++);
switch (opcode) {
case 17:
const playerX = view.getFloat32(offset, true);
offset += 4;
const playerY = view.getFloat32(offset, true);
offset += 4;
this.targetX = this.receiveX(playerX);
this.targetY = this.receiveY(playerY);
break;
case 32:
this.myCellIds.push(view.getUint32(offset, true));
break;
case 69:
this.ghostCells(view, offset);
break;
case 241:
this.decryptionKey = view.getUint32(offset, true);
break;
case 255:
this.handleMessages(this.uncompressMessage(new Uint8Array(view.buffer.slice(5)), new Uint8Array(view.getUint32(offset, true))));
break;
}
};
}), 0);
};
this.websocketHooked = false;
this.reset();
this.app = app;
}
reset() {
this.minimap = [];
this.offsetX = 0;
this.offsetY = 0;
this.borderX = 0;
this.borderY = 0;
this.targetX = 0;
this.targetY = 0;
this.myCellIds = [];
this.decryptionKey = 0;
this.mapOffsetFixed = false;
this.mapShiftX = 0;
this.mapShiftY = 0;
this.mapOffsetX = 0;
this.mapOffsetY = 0;
this.mapMinX = 0;
this.mapMinY = 0;
this.mapMaxX = 0;
this.mapMaxY = 0;
this.mapMidX = 0;
this.mapMidY = 0;
this.mapSizeH = 0;
this.mapSizeV = 0;
this.mapShrinkW = 0;
this.mapShrinkH = 0;
this.viewX = 0;
this.viewY = 0;
this.mirrorV = false;
this.mirrorH = false;
}
uncompressMessage(input, output) {
for (let i = 0, j = 0; i < input.length; ) {
const byte = input[i++];
let literalsLength = byte >> 4;
if (literalsLength > 0) {
let length = literalsLength + 240;
while (255 === length) {
length = input[i++];
literalsLength += length;
}
const end = i + literalsLength;
while (i < end) {
output[j++] = input[i++];
}
if (i === input.length) {
return output;
}
}
const offset = input[i++] | input[i++] << 8;
if (0 === offset || offset > j) {
return -(i - 2);
}
let matchLength = 15 & byte;
let length = matchLength + 240;
while (255 === length) {
length = input[i++];
matchLength += length;
}
let pos = j - offset;
const end = j + matchLength + 4;
while (j < end) {
output[j++] = output[pos++];
}
}
return output;
}
handleMessages(message) {
let offset = 0;
const view = new DataView(message.buffer);
const opcode = view.getUint8(offset++);
switch (opcode) {
case 16:
{
const eatRecordLength = view.getUint16(offset, true);
offset += 2;
for (let i = 0; i < eatRecordLength; i++) {
offset += 8;
}
while (true) {
const id = view.getUint32(offset, true);
offset += 4;
if (0 === id) {
break;
}
const targetX = this.receiveX(view.getInt32(offset, true));
offset += 4;
const targetY = this.receiveY(view.getInt32(offset, true));
offset += 4;
offset += 2;
const flags = view.getUint8(offset++);
const extendedFlags = 128 & flags ? view.getUint8(offset++) : 0;
if (2 & flags) {
offset += 3;
}
if (4 & flags) {
while (0 !== view.getInt8(offset++)) {}
}
if (8 & flags) {
while (0 !== view.getInt8(offset++)) {}
}
if (4 & extendedFlags) {
offset += 4;
}
if (-1 !== this.myCellIds.indexOf(id)) {
this.targetX = targetX;
this.targetY = targetY;
}
}
const removeLength = view.getUint16(offset, true);
offset += 2;
for (let i = 0; i < removeLength; i++) {
const removedID = view.getUint32(offset, true);
offset += 4;
if (this.myCellIds.includes(removedID)) {
this.myCellIds = this.myCellIds.filter((id => id != removedID));
}
}
}
break;
case 64:
const minx = view.getFloat64(offset, true);
offset += 8;
const miny = view.getFloat64(offset, true);
offset += 8;
const maxx = view.getFloat64(offset, true);
offset += 8;
const maxy = view.getFloat64(offset, true);
if (!this.mapOffsetFixed) {
this.offsetX = (minx + maxx) / 2;
this.offsetY = (miny + maxy) / 2;
this.borderX = maxx - minx;
this.borderY = maxy - miny;
this.setMapOffset(minx, miny, maxx, maxy);
this.mapOffsetFixed = true;
}
break;
}
}
setMapOffset(left, top, right, bottom) {
const isAgario = true;
if (right - left > 14000 && bottom - top > 14000 || !isAgario) {
if (this.mapOffsetFixed) {
return;
}
if (isAgario) {
const side = 14142;
this.mapShrinkW = side / (right - left);
this.mapShrinkH = side / (bottom - top);
left = this.shrinkX(left);
top = this.shrinkY(top);
right = this.shrinkX(right);
bottom = this.shrinkY(bottom);
}
this.mapShiftY = 0;
this.mapShiftX = 0;
const prX = 0.5 * -(right - left);
const prY = 0.5 * -(bottom - top);
const diffX = prX - left;
const diffY = prY - top;
this.mapShiftX = -diffX;
this.mapShiftY = -diffY;
left = this.shiftX(left);
top = this.shiftY(top);
right = this.shiftX(right);
bottom = this.shiftY(bottom);
this.mapOffsetX = 0.5 * (right - left) - right;
this.mapOffsetY = 0.5 * (bottom - top) - bottom;
this.mapMinX = left;
this.mapMinY = top;
this.mapMaxX = right;
this.mapMaxY = bottom;
this.mapMidX = 0.5 * (this.mapMaxX + this.mapMinX);
this.mapMidY = 0.5 * (this.mapMaxY + this.mapMinY);
this.mapSizeH = this.mapMaxX - this.mapMinX;
this.mapSizeV = this.mapMaxY - this.mapMinY;
if (!this.mapOffsetFixed) {
this.viewX = 0.5 * (right + left);
this.viewY = 0.5 * (bottom + top);
}
this.mapOffsetFixed = true;
}
}
ghostCells(view, offset) {
this.minimap = [];
let x = 0, y = 0, mass = 0;
const length = view.getUint16(offset, true);
offset += 2;
for (let i = 0; i < length; i++) {
x = this.receiveX(view.getInt32(offset, true));
offset += 4;
y = this.receiveY(view.getInt32(offset, true));
offset += 4;
mass = view.getUint32(offset, true);
offset += 5;
this.minimap.push({
x: x,
y: y,
size: ~~Math.sqrt(100 * mass),
mass: mass
});
}
}
unshrinkX(x) {
return x / this.mapShrinkW;
}
unshrinkY(y) {
return y / this.mapShrinkH;
}
shrinkX(x) {
return x * this.mapShrinkW;
}
shrinkY(y) {
return y * this.mapShrinkH;
}
unshiftX(x) {
return x - -this.mapShiftX;
}
unshiftY(y) {
return y - -this.mapShiftY;
}
shiftX(x) {
return x - this.mapShiftX;
}
shiftY(y) {
return y - this.mapShiftY;
}
invflipX(x) {
return this.mirrorH ? x : this.mapMaxX - (x - this.mapMinX);
}
invflipY(y) {
return this.mirrorV ? y : this.mapMaxY - (y - this.mapMinY);
}
flipX(x) {
return !this.mirrorH ? x : this.mapMaxX - (x - this.mapMinX);
}
flipY(y) {
return !this.mirrorV ? y : this.mapMaxY - (y - this.mapMinY);
}
receiveX(x) {
x = this.shrinkX(x);
x = this.shiftX(x);
x = this.flipX(x);
return x;
}
receiveY(y) {
y = this.shrinkY(y);
y = this.shiftY(y);
y = this.flipY(y);
return y;
}
serverX(x) {
x = this.flipX(x);
x = this.unshiftX(x);
x = this.unshrinkX(x);
return x;
}
serverY(y) {
y = this.flipY(y);
y = this.unshiftY(y);
y = this.unshrinkY(y);
return y;
}
drawMinimap(ctx, canvas, clear = true) {
function safe(number) {
return 0 == number ? 1 : number;
}
if (clear) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
this.minimap.forEach((cell => {
const x = safe(cell.x + this.borderX / 2) / this.borderX * canvas.width;
const y = safe(cell.y + this.borderY / 2) / this.borderY * canvas.height;
const size = cell.size / this.borderX * canvas.width + 1;
ctx.fillStyle = '#ffd700';
ctx.beginPath();
ctx.arc(x, y, size, 0, 2 * Math.PI);
ctx.fill();
}));
const playerX = safe(this.targetX + this.borderX / 2) / this.borderX * canvas.width;
const playerY = safe(this.targetY + this.borderY / 2) / this.borderY * canvas.height;
ctx.fillStyle = '#00bfff';
ctx.beginPath();
ctx.arc(playerX, playerY, 5, 0, 2 * Math.PI);
ctx.fill();
const sectorSizeX = canvas.width / 5;
const sectorSizeY = canvas.height / 5;
const sectorCol = Math.floor(playerX / sectorSizeX);
const sectorRow = Math.floor(playerY / sectorSizeY);
const activeSectorIndex = 5 * sectorRow + sectorCol;
return Number.isFinite(activeSectorIndex) ? activeSectorIndex : -1;
}
initialize() {
if (this.websocketHooked) {
return console.error('Error: WebSocket already hooked');
}
this.websocketHooked = true;
const self = this;
class WS extends window.WebSocket {
constructor(url, protocols) {
const errorStack = (new Error).stack;
const isAgar = /wasm:\/\//.test(errorStack);
super(url, protocols);
if (isAgar) {
self.overWriteWS(this);
}
}
}
WS.injectedOnce = false;
window.WebSocket = WS;
}
}
var __awaiter = function(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}
return new (P || (P = Promise))((function(resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class App {
display_vue() {
return (0, utils.find_node)(window['agarApp'].home, ((child, depth) => {
var _a;
console.log(child, null === (_a = null === child || void 0 === child ? void 0 : child.$vnode) || void 0 === _a ? void 0 : _a.tag);
return true;
}));
}
constructor() {
this.sampler = new Sampler;
this.performance_now = 0;
this.timer_mp = 1;
this.waitForSpawn = false;
this.zoom_speed = 0.8;
this.sector = 5;
this.zoomvalue = 0.3;
this.stopmovement = false;
this.mouse = {
x: 0,
y: 0
};
this.camera = {
x: 0,
y: 0
};
this.state = (0, Eventify.EventObject)({
play: false,
pause: false,
ws: ''
});
this.memory = (0, Eventify.EventObject)({
skinUrl: ''
});
this.mainui = null;
this.emsc = null;
this.observerPatcher = e => {
window['app'] = this;
const app = 'window.app';
window['applyPatch'] = applyPatch;
const replacements = {
registerSkin: [ [ /("\s?registerSkin\s?"\s?:\s?function\s?\(\s?(.+?)\s?,\s?(.+?)\s?,\s?(.+?)\s?,\s?(.+?)\s?,\s?(.+?)\s?\)\s?\{\s?)/i, `$1${app}.onRegisterSkin($2,$3,$4,$5,$6);` ] ],
onConnect: [ [ /(;..?\s?\.\s?onopen\s?=\s?function\s?\(\s?\)\s?\{\s?)/i, `$1${app}.onConnect(this.url, this);` ] ],
mobileData: [ [ /(\s?if\s?\(\s?window\s?\[\s?"\s?MC\s?"\s?]\s?&&\s?window\s?\[\s?"\s?MC\s?"\s?]\s?\[\s?"\s?onMobileData\s?"\s?]\s?\)\s?window\s?\[\s?"\s?MC\s?"\s?]\s?\[\s?"\s?onMobileData\s?"\s?]\s?\(\s?(.+?)\s?\))/i, `$2=${app}.onPacket($2);$1` ] ],
'Emscripten hook': [ [ /(\w+)\W+instantiateWasm/, `(${app}.onEmscripten($1)), $&` ] ],
'Mouse hook': [ [ /("\s?setTarget\s?"\s?:\s?function\s?\(\s?(.+?)\s?,\s?(.+?)\s?\)\s?\{\s?)/i, `$1$2=${app}.onMouseX($2);$3=${app}.onMouseY($3);` ] ],
'Player Zoom': [ [ /("\s?playerZoom\s?"\s?:\s?function\s?\(\s?(.+?)\s?\)\s?\{\s?)/i, `$1$2=${app}.onPlayerZoom($2);` ] ],
'WebSocket onclose': [ [ /(;..?\s?\.\s?onclose\s?=\s?function\s?\(\s?\)\s?\{\s?)/i, `$1${app}.onDisconnect(this);` ] ],
'WebSocket onerror': [ [ /(;..?\s?\.\s?onerror\s?=\s?function\s?\(\s?\)\s?\{\s?)/i, `$1${app}.onDisconnect(this);` ] ],
'Binary Patch': [ [ /(instantiate\(\s?)([^,]+)/, `$1${app}.patchWasm($2)` ] ],
something: [ [ /([a-z]{6}\s?[a-z|A-Z]{16}\s?\(\s?([a-z]{6})\s?,\s?[a-z|A-Z]{10}\s?,\s?[a-z|A-Z]{7}\s?,\s?[a-zA-Z]{8}\s?\)\s?\{\s?)/i, '$1$2=true;' ] ]
};
for (const [name, array] of Object.entries(replacements)) {
let current = 0;
for (const [regexp, replacer] of array) {
if (regexp.test(e)) {
e = e.replace(regexp, replacer);
current++;
} else {
console.log(`[Not Found - ${current}]: `, name);
}
}
}
return e;
};
this.calls = [];
this.world = new World(this);
const storageName = 'lite_settings';
settings.settings.import(Object.assign(Object.assign({}, settings.settings.export()), storage.get(storageName)));
settings.settings.on('*', (_ => {
storage.set(storageName, settings.settings.export());
}));
Object.assign(this.memory, storage.get('memory'));
this.memory.on('*', (() => {
console.log('nick', this.memory);
storage.set('memory', this.memory);
}));
settings.settings.on('ZoomOut', (v => {
v ? this.zoomvalue = 0.3 : this.zoomvalue = 1;
}))(settings.settings.proxy.ZoomOut);
this.initObserver().then((() => {
this.world.initialize();
this.waitCore().then((() => {
this.handleCoreInit();
}));
}));
(0, utils.overrideMethod)(window.console, 'log', (function(o, args) {
var _a, _b;
if (null === (_b = (_a = args[0]).startsWith) || void 0 === _b ? void 0 : _b.call(_a, ' ,,,,,')) {
return window.console.log = o;
}
return o.apply(this, args);
}));
}
loadAndPatchCore(url, resolve) {
return __awaiter(this, void 0, void 0, (function*() {
try {
const request = new XMLHttpRequest;
request.open('GET', url, false);
request.onload = () => {
const patchedText = this.observerPatcher(request.responseText);
const blob = new Blob([ patchedText ], {
type: 'text/javascript'
});
const blobURL = URL.createObjectURL(blob);
const script = document.createElement('script');
script.id = 'agario.core.js';
script.src = blobURL;
script.onload = () => {
URL.revokeObjectURL(blobURL);
resolve();
};
document.body.appendChild(script);
};
request.send();
} catch (error) {
console.error('[ERROR] Failed to load and patch core:', error);
}
}));
}
initObserver() {
const deferred = (0, Eventify.deferrify)();
const observer = new window.MutationObserver((mtRecs => {
var _a;
for (const mtRec of mtRecs) {
for (let i = 0; i < mtRec.addedNodes.length; i++) {
const elem = mtRec.addedNodes[i];
const [t] = elem.src && elem.src.match(/agario\.core\.js.+/i) || [];
if (t) {
observer.disconnect();
elem.remove();
null === (_a = elem.parentNode) || void 0 === _a || _a.removeChild(elem);
this.loadAndPatchCore(t, deferred.resolve);
}
}
}
}));
observer.observe(document, {
childList: true,
subtree: true
});
return deferred.promise;
}
patchWasm(u) {
let anyFail = false;
const patchedUint8Array = applyPatch(new Uint8Array(u), [ {
pattern: [ 0x45, 0x0d, 0x00, 0x20, 0x02, 0x10, 0x0f, 0x20, 0x01, 0x20, 0x02, 0x10, 0x1e, 0x21, 0x01 ],
payload: [ 0x20, 0x00, 0x28, 0x02, 0x1c, 0x45, 0x04, 0x40, 0x0f, 0x0b ],
type: 'insertAfter'
}, {
pattern: [ 0x81, 0x03, 0x84, 0x03, 0x10, 0x87, 0x03, 0x86, 0x03, 0x85, 0x03, 0x0a ],
payload: [ 203 ],
type: 'replaceAfter'
}, {
pattern: [ 0x00, 0x20, 0x00, 0x20, 0x04, 0x37, 0x03, 0x08, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b ],
payload: [ 138 ],
type: 'replaceAfter'
}, {
pattern: [ 0x01, 0x2d, 0x00, 0x07, 0x20, 0x02, 0x41, 0x1b, 0x6c, 0x41, 0x01, 0x6a, 0x73, 0x3a, 0x00, 0x07, 0x20, 0x1f, 0xbf, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
payload: [ 0, 0 ],
type: 'replaceAfter'
} ], (() => anyFail = true));
if (anyFail) {
return u;
}
return patchedUint8Array.buffer;
}
waitCore() {
return __awaiter(this, void 0, void 0, (function*() {
const deferred = (0, Eventify.deferrify)();
addEventListener('core_init_complete', (() => {
var _a;
if (!window['core']) {
if (null === (_a = window['MC']) || void 0 === _a ? void 0 : _a['onAgarioCoreLoaded']) {
const old_loaded = window['MC']['onAgarioCoreLoaded'];
window['MC']['onAgarioCoreLoaded'] = function() {
deferred.resolve();
window['MC']['onAgarioCoreLoaded'] = old_loaded;
return old_loaded.apply(this, arguments);
};
return;
}
Object.defineProperty(window, 'core', {
get: () => window['_core'],
set: value => (window['_core'] = value, deferred.resolve())
});
return;
}
deferred.resolve();
}));
addEventListener('event_regions_update', (() => __awaiter(this, void 0, void 0, (function*() {}))));
return deferred.promise;
}));
}
handleCoreInit() {
this.init();
coreInitPatch();
coreAdsPatch();
fixNoServers();
coreUiPatch();
this.onCoreInit();
(0, utils.updateCssString)('main', styles);
initLiteui(this);
}
modifyScore(sourceString) {
if (!this.state.play) {
sourceString = '';
}
return `${sourceString}`;
}
init() {
const modifyScore = this.modifyScore.bind(this);
const onPlayerSpawn = this.onPlayerSpawn.bind(this);
const onPlayerDeath = this.onPlayerDeath.bind(this);
(0, utils.overridePrototype)(CanvasRenderingContext2D.prototype, 'fillText', (o => function() {
if (arguments[0].includes('Scor')) {
arguments[0] = modifyScore(arguments[0]);
}
return o.apply(this, arguments);
}));
(0, utils.overridePrototype)(CanvasRenderingContext2D.prototype, 'measureText', (o => function() {
if (arguments[0].includes('Scor')) {
arguments[0] = modifyScore(arguments[0]);
}
return o.apply(this, arguments);
}));
(0, utils.overrideMethod)(window['MC'], 'onPlayerSpawn', (function(o, args) {
o.apply(this, args);
onPlayerSpawn(...args);
}));
(0, utils.overrideMethod)(window['MC'], 'onPlayerDeath', (function(o, args) {
o.apply(this, args);
onPlayerDeath(...args);
}));
}
onEmscripten(Module) {
var _a, _b;
this.emsc = Module;
makeGLobal('emsc', Module);
console.log('emsc', Module);
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const world = this.world;
const self = this;
const traceCalls = [ 'clearRect', 'drawImage', 'fillText', 'strokeText', 'fillRect', 'strokeRect', 'moveTo', 'scale', 'save', 'restore', 'translate', 'transform', 'setTransform' ];
let gotScale = false;
let callNumber = -1;
traceCalls.forEach((method => {
(0, utils.overrideMethod)(ctx, method, (function(o, args) {
callNumber++;
const cmd = o.apply(ctx, args);
return cmd;
}));
}));
(0, utils.overrideMethod)(ctx, 'scale', (function(o, args) {
if (!gotScale) {
gotScale = true;
self.zoomvalue = args[0];
}
const cmd = o.apply(ctx, args);
return cmd;
}));
(0, utils.overrideMethod)(ctx, 'drawImage', (function(o, args) {
let dx = 0, dy = 0, dw = 0, dh = 0;
if (9 == args.length) {
dx = args[5];
dy = args[6];
dw = args[7];
dh = args[8];
} else if (3 == args.length) {
dx = args[1];
dy = args[2];
}
const cmd = o.apply(ctx, args);
return cmd;
}));
let translateCall = -1;
(0, utils.overrideMethod)(ctx, 'translate', (function(o, args) {
translateCall++;
if (2 == translateCall) {
self.camera.x = args[0];
self.camera.y = args[1];
self.drawBackground(ctx, world, o);
}
return o.apply(ctx, args);
}));
null !== (_a = Module['preMainLoop']) && void 0 !== _a || (Module['preMainLoop'] = () => {});
(0, utils.overrideMethod)(Module, 'preMainLoop', ((o, args) => {
this.calls = [];
o.apply(this, args);
}));
null !== (_b = Module['postMainLoop']) && void 0 !== _b || (Module['postMainLoop'] = () => {});
(0, utils.overrideMethod)(Module, 'postMainLoop', ((o, args) => {
this.sampler.step();
callNumber = -1;
translateCall = -1;
gotScale = false;
this.drawHud(ctx);
o.apply(this, args);
}));
}
onRegisterSkin() {}
onMouseX(x) {
if (this.state.pause) {
return window.innerWidth / 2;
}
this.syncMouse(x, void 0);
return x;
}
onMouseY(y) {
if (this.state.pause) {
return window.innerHeight / 2;
}
this.syncMouse(void 0, y);
return y;
}
onCoreInit() {
settings.settings.on('Minimap', (() => {}))();
settings.settings.on('AcidMode', (v => {
window['core'].setAcid(v);
}))(settings.settings.proxy.AcidMode);
}
get menuShow() {
if (!this.mainui) {
this.mainui = (0, utils.find_node)(window['agarApp'].home, (child => {
var _a, _b;
return null === (_b = null === (_a = child.$vnode) || void 0 === _a ? void 0 : _a.tag) || void 0 === _b ? void 0 : _b.toLowerCase().includes('mainui');
}))[0];
}
if (!this.mainui) {
return false;
}
return this.mainui.menuShow;
}
onConnect(url) {
console.log('Connected', url);
this.state.ws = url;
if (this.waitForSpawn) {
window['MC'].playGame();
this.waitForSpawn = false;
}
this.disableMenuBackground();
}
disableMenuBackground() {
this.emsc._ac_special_on();
window['core'].setFpsCap(-1);
window['core'].setFadeout(false);
requestAnimationFrame((() => {
window['core'].setFadeout(true);
}));
this.emsc._ac_spectate();
}
spetate() {
var _a;
null === (_a = (0, utils.find_node)(void 0, (child => null === child || void 0 === child ? void 0 : child.spectate))[0]) || void 0 === _a || _a.spectate();
}
connect(url) {
window['core'].disableIntegrityChecks(!url.includes('miniclippt'));
if (window['raga'] && url.indexOf('raga') > -1) {
window['raga'].isSwitchingGameMode = true;
window['raga'].gameMode = 'ragaffa-16x';
}
window['core'].connect(url);
}
respawn() {
if (this.state.play) {
this.connect(this.state.ws);
this.waitForSpawn = true;
} else {
window['core'].setFadeout(false);
window['core'].sendSpectate();
window['MC'].playGame();
setTimeout((() => {}), 200);
}
}
onPlayerSpawn(...args) {
this.state.play = true;
this.reset();
}
onPlayerDeath(...args) {
(0, utils.find_node)(void 0, (child => {
if (void 0 !== child.fastEntry) {
return true;
} else {
return false;
}
})).forEach((child => {
!child.fastEntry && Object.defineProperty(child, 'fastEntry', {
get: () => true,
set: x => x
});
}));
window['core'].setFadeout(true);
window['_setInterval'] || window.setInterval;
window['_clearInterval'] || window.clearInterval;
const setTimeout = window['_setTimeout'] || window.setTimeout;
window['_clearTimeout'] || window.clearTimeout;
this.state.play = false;
this.reset();
if (!window['agarApp'].home.$children[0].$children[0].showMenu && settings.settings.proxy.AutoRespawn) {
this.respawn();
return true;
} else {
const prev = this.timer_mp;
this.timer_mp = 10000;
setTimeout((() => this.timer_mp = prev), 800);
}
}
onPacket(packet) {
return packet;
}
reset() {
this.stopmovement = false;
this.world.myCellIds = [];
}
dumpMem() {
const blob = new Blob([ this['emsc'].buffer ]);
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'dump.bin';
a.click();
URL.revokeObjectURL(a.href);
}
onDisconnect(obj) {
console.log('disconnected', obj);
}
onPlayerZoom(zoom) {
this.zoomvalue = zoom;
return zoom;
}
syncCamera(x, y) {
this.camera.x = x;
this.camera.y = y;
}
syncMouse(x, y) {
if (void 0 !== x) {
this.mouse.x = x - this.world.mapOffsetX;
}
if (void 0 !== y) {
this.mouse.y = y - this.world.mapOffsetY;
}
}
renderLoop() {}
drawBackground(ctx, world, translate = ctx['translate']) {
const offsetX = this.camera.x + this.world.offsetX;
const offsetY = this.camera.y + this.world.offsetY;
const initialAlpha = ctx.globalAlpha;
translate(offsetX, offsetY);
if (settings.settings.proxy.MapBorder) {
ctx.globalAlpha = 0.2;
ctx.lineWidth = 20;
ctx.fillStyle = 'green';
ctx.strokeRect(this.world.mapMinX, this.world.mapMinY, this.world.mapSizeH, this.world.mapSizeV);
ctx.globalAlpha = initialAlpha;
}
const parselw = this.world.mapSizeH / this.sector;
const parselh = this.world.mapSizeV / this.sector;
if (settings.settings.proxy.MapSectors) {
ctx.beginPath();
ctx.lineWidth = 10;
ctx.strokeStyle = 'green';
ctx.globalAlpha = 0.2;
for (let zi = 1; zi < this.sector; zi++) {
ctx.moveTo(this.world.mapMinX, this.world.mapMinY + parselw * zi);
ctx.lineTo(this.world.mapMaxX, this.world.mapMinY + parselw * zi);
ctx.moveTo(this.world.mapMinX + parselh * zi, this.world.mapMinY);
ctx.lineTo(this.world.mapMinX + parselh * zi, this.world.mapMaxY);
}
ctx.stroke();
ctx.closePath();
ctx.globalAlpha = initialAlpha;
}
if (settings.settings.proxy.MapSectorLabels) {
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.font = parselw / 2.8 + 'px Segoe Print';
ctx.globalAlpha = 0.2;
ctx.fillStyle = 'green';
const bucw = parselw / 2, buch = parselh / 2;
for (let sat = 0; sat < this.sector; sat++) {
const label = String.fromCharCode(65 + sat);
for (let sut = 0; sut < this.sector; sut++) {
ctx.fillText(label + (sut + 1), this.world.mapMinX + parselw * sut + bucw, this.world.mapMinY + parselh * sat + buch);
}
}
ctx.globalAlpha = initialAlpha;
}
ctx.textBaseline = 'middle';
ctx.textAlign = 'center';
ctx.font = '380px Segoe Print';
ctx.globalAlpha = 0.5;
ctx.fillStyle = '#808080';
ctx.fillText('Delta', 0, 0);
ctx.globalAlpha = initialAlpha;
translate(-offsetX, -offsetY);
return;
}
drawHud(ctx) {
ctx.fillStyle = 'rgba(0, 0, 0, 0.3)';
ctx.fillRect(0, 0, 0, 0);
}
}
function registerMenuCommands() {
const links = [ {
name: '🜂⁷ Play cell games on Delt.io',
url: 'https://delt.io'
}, {
name: '🖭 Delta Discord',
url: 'https://bit.ly/3RXQXQd'
} ];
try {
links.forEach((link => GM.registerMenuCommand(link.name, (() => window.location.href = link.url))));
} catch (e) {}
}
function registerCheckUpdates() {
GM.registerMenuCommand(`Version: ${GM.info.script.version} - Check for updates`, checkUpdates);
}
function checkUpdates() {
const url = GM.info.scriptUpdateURL;
if (!url) {
return alert('⛔ Error:\nNo update URL found!');
}
const version2int = (x = "0") => x.split('.').reduce(((n, c, i, a) => n + parseInt(c) * Math.pow(100, a.length - i - 1)), 0);
const req = new Promise((r => GM.xmlHttpRequest({
method: 'GET',
url: url,
onload: r
})));
req.then((res => {
const matches = /\/\/\s*@version\s*(\S+)/im.exec(res.responseText);
if (!matches) {
return alert('⛔ Error:\nNo version found!');
}
const remoteVersion = version2int(matches[1]);
const localVersion = version2int(GM.info.script.version);
if (remoteVersion > localVersion) {
const msg = `🔔 New version available: ${matches[1]}\n\nDo you want to update?`;
if (confirm(msg)) {
const installer = window.open(url, '_blank');
const i = setInterval((() => {
if (!installer.closed) {
return;
}
clearInterval(i);
location.reload();
}), 100);
}
} else {
alert('👍 You are using the latest version!');
}
})).catch((e => {
console.error(e);
alert('⛔ Error: Cant fetch update info!\n' + e);
}));
}
function isGM() {
return 'undefined' !== typeof GM && GM;
}
function enableVueDevtools() {
(0, utils.overrideMethod)(window.Object, 'defineProperty', ((originalMethod, args) => {
if ('config' === args[1]) {
const orig_getter = args[2].get;
args[2].get = function() {
const vueConfig = orig_getter();
vueConfig.devtools = true;
vueConfig.productionTip = true;
return () => vueConfig;
};
window.Object.defineProperty = originalMethod;
}
return originalMethod.apply(window.Object, args);
}));
}
function enableFastCanvasView() {
Object.defineProperty(window.HTMLCanvasElement.prototype, 'aaa', {
get() {
this.toBlob((blob => {
const blobUrl = URL.createObjectURL(blob);
window.open(blobUrl);
}));
return 1;
}
});
}
module = __webpack_require__.hmd(module);
enableVueDevtools();
enableFastCanvasView();
const app = new App;
makeGLobal('app', app);
makeGLobal('find_node', utils.find_node);
if (isGM()) {
registerMenuCommands();
registerCheckUpdates();
}
if (null === module || void 0 === module ? void 0 : module['hot']) {
module['hot'].accept();
module['hot'].addDisposeHandler((function() {
console.log('module.hot.addDisposeHandler', ...arguments);
}));
module['hot'].addStatusHandler((function() {
console.log('module.hot.addStatusHandler', ...arguments);
}));
}
},
423: (__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.d(__webpack_exports__, {
settings: () => settings
});
var Eventify = __webpack_require__(742);
class FontManager {
constructor() {
this.possibleFonts = {
Ubuntu: {
fontWeights: {
700: 'bold',
500: ''
}
},
Roboto: {
fontWeights: {
700: 'bold',
500: ''
}
},
Oswald: {
fontWeights: {
700: 'bold',
500: ''
}
},
'Titillium Web': {
fontWeights: {
400: ''
}
},
'Exo 2': {
fontWeights: {
400: '',
600: 'semi-bold'
}
},
Play: {
fontWeights: {
400: '',
700: 'bold'
}
},
'Press Start 2P': {
fontWeights: {
500: ''
}
},
Pacifico: {
fontWeights: {
500: ''
}
},
'VCR OSD Mono': {
fontWeights: {
500: ''
}
}
};
this.h = null;
this.d = document.createElement('DIV');
this.s = document.createElement('SPAN');
this.defaultWidth = 0;
this.defaultHeight = 0;
this.d.appendChild(this.s);
this.d.style.fontFamily = 'sans';
this.s.style.fontFamily = 'sans';
this.s.style.fontSize = '72px';
this.s.innerHTML = 'mmmmmmmmmmlil';
document.addEventListener('DOMContentLoaded', (() => {
this.h = document.getElementsByTagName('BODY')[0];
this.h.appendChild(this.d);
this.defaultWidth = this.s.offsetWidth;
this.defaultHeight = this.s.offsetHeight;
this.h.removeChild(this.d);
}));
}
test(fontFamily) {
this.h.appendChild(this.d);
const b = {};
b.name = this.s.style.fontFamily = fontFamily;
b.width = this.s.offsetWidth;
b.height = this.s.offsetHeight;
this.h.removeChild(this.d);
fontFamily = fontFamily.toLowerCase();
if ('serif' == fontFamily) {
b.found = true;
} else {
b.found = b.width != this.defaultWidth || b.height != this.defaultHeight;
}
return b;
}
}
FontManager.el = document.createElement('span');
const fontManager = new FontManager;
var _a;
class MicroColor {
constructor(red = 255, green = 255, blue = 255, alpha = 255) {
this.r = red;
this.g = green;
this.b = blue;
this.a = alpha;
this.vector = new Float32Array(4);
this.bytes = new Uint8Array(4);
this.dataview = new DataView(this.bytes.buffer);
this.string = '#000000';
this.int = 0;
this.inta = 0;
this.updVector();
this.updString();
this.updInt();
}
updVector() {
this.vector[0] = this.r / 255;
this.vector[1] = this.g / 255;
this.vector[2] = this.b / 255;
this.vector[3] = this.a / 255;
this.bytes[0] = this.r;
this.bytes[1] = this.g;
this.bytes[2] = this.b;
this.bytes[3] = this.a;
this.float = this.dataview.getFloat32(0, true);
this.u32 = this.r | this.g << 8 | this.b << 16 | this.a << 24;
}
updString() {
this.string = this.toRgb(true);
}
updInt() {
this.int = this.getInt();
this.inta = this.getInta();
}
cloneFrom(t) {
this.r = t.r;
this.g = t.g;
this.b = t.b;
this.a = t.a;
this.updVector();
this.updString();
return this;
}
fromHSL(h, s, l, a = 255) {
s /= 100;
l /= 100;
const c = (1 - Math.abs(2 * l - 1)) * s;
const x = c * (1 - Math.abs(h / 60 % 2 - 1));
const m = l - c / 2;
let r = 0;
let g = 0;
let b = 0;
if (0 <= h && h < 60) {
r = c, g = x, b = 0;
} else if (60 <= h && h < 120) {
r = x, g = c, b = 0;
} else if (120 <= h && h < 180) {
r = 0, g = c, b = x;
} else if (180 <= h && h < 240) {
r = 0, g = x, b = c;
} else if (240 <= h && h < 300) {
r = x, g = 0, b = c;
} else if (300 <= h && h < 360) {
r = c, g = 0, b = x;
}
this.r = Math.round(255 * (r + m));
this.g = Math.round(255 * (g + m));
this.b = Math.round(255 * (b + m));
this.a = a;
return this;
}
fromRGB(r, g, b, a = 255) {
this.r = r;
this.g = g;
this.b = b;
this.a = a;
this.updVector();
this.updString();
return this;
}
fromINT(int, reorder) {
this.a = (4278190080 & int) >>> 24;
this.r = (16711680 & int) >>> 16;
this.g = (65280 & int) >>> 8;
this.b = (255 & int) >>> 0;
if (reorder) {
Object.assign(this, {
r: this.a,
g: this.r,
b: this.g,
a: this.b
});
}
this.updVector();
this.updString();
return this;
}
fromHex(hex) {
const len = hex.length;
if (!hex || 7 !== len && 9 !== len) {
return this;
}
let i = 9 === hex.length ? 32 : 24;
const n = parseInt(hex.slice(1), 16);
const r = n >> (i -= 8) & 255;
const g = n >> (i -= 8) & 255;
const b = n >> (i -= 8) & 255;
const a = i ? n >> i - 8 & 255 : 255;
return this.fromRGB(r, g, b, a);
}
get getNormalFromSecure() {
return _a.rgbToInt(Math.ceil(this.r / 0.9), Math.ceil(this.g / 0.9), Math.ceil(this.b / 0.9));
}
toRgb(useAlpha) {
return useAlpha ? `rgba(${this.r}, ${this.g}, ${this.b}, ${this.a / 255})` : `rgb(${this.r}, ${this.g}, ${this.b})`;
}
getHEXA() {
let r = this.r.toString(16);
let g = this.g.toString(16);
let b = this.b.toString(16);
let a = this.a.toString(16);
if (1 == r.length) {
r = '0' + r;
}
if (1 == g.length) {
g = '0' + g;
}
if (1 == b.length) {
b = '0' + b;
}
if (1 == a.length) {
a = '0' + a;
}
return '#' + r + g + b + a;
}
getFloat() {
const bits = this.a << 24 | this.b << 16 | this.g << 8 | this.r;
return _a.pack(0xfeffffff & bits);
}
getHEX() {
return '#' + (16777216 | this.getInt()).toString(16).substring(1);
}
getInt() {
return this.r << 16 | this.g << 8 | this.b;
}
getIntaShader(alpha) {
return this.r | this.g << 8 | this.b << 16 | (alpha < 0 ? this.a : alpha) << 24;
}
getIntShader() {
return this.r | this.g << 8 | this.b << 16;
}
getInta() {
return this.a << 24 | this.r << 16 | this.g << 8 | this.b;
}
getSecureHex() {
return _a.colorIntToHex(_a.rgbToInt(~~(0.9 * this.r), ~~(0.9 * this.g), ~~(0.9 * this.b)));
}
static rgbToInt(r, g, b) {
return r << 16 | g << 8 | b;
}
static colorIntToHex(int) {
let s = int.toString(16);
for (;s.length < 6; ) {
s = '0' + s;
}
return '#' + s;
}
static inta2shader(int) {
const a = (0xff000000 & int) >>> 24;
const r = (0xff0000 & int) >>> 16;
const g = (0xff00 & int) >>> 8;
const b = (0xff & int) >>> 0;
return r | g << 8 | b << 16 | a << 24;
}
toHEX8() {
return `#${(16777216 | this.getInt()).toString(16).substring(1)}${this.a.toString(16).padStart(2, '0')}`;
}
static pack(i) {
_a.int32[0] = i;
return _a.float32[0];
}
static unpack(f) {
_a.float32[0] = f;
return _a.int32[0];
}
static darkenColor(color, percent) {
const num = 'string' == typeof color ? parseInt(color, 16) : color, amt = Math.round(2.55 * percent), R = (num >> 16) + amt, B = (num >> 8 & 0x00ff) + amt, G = (0x0000ff & num) + amt;
return 255 << 24 | R << 16 | G << 8 | B;
}
static brighten(int, amount = 10) {
const a = (4278190080 & int) >>> 24;
let r = (16711680 & int) >>> 16;
let g = (65280 & int) >>> 8;
let b = (255 & int) >>> 0;
r = Math.max(0, Math.min(255, r - Math.round(-amount / 100 * 255)));
g = Math.max(0, Math.min(255, g - Math.round(-amount / 100 * 255)));
b = Math.max(0, Math.min(255, b - Math.round(-amount / 100 * 255)));
return a << 24 | r << 16 | g << 8 | b;
}
static multiplyAlpha(int, alpha) {
return ((int >>> 24) * alpha & 0xff) << 24 | 0x00ffffff & int;
}
}
_a = MicroColor;
(() => {
_a.int8 = new Int8Array(4);
_a.int32 = new Int32Array(_a.int8.buffer, 0, 1);
_a.float32 = new Float32Array(_a.int8.buffer, 0, 1);
})();
MicroColor.temp = new _a;
MicroColor.isValidHex = hex => /^#([A-Fa-f0-9]{3,4}){1,2}$/.test(hex);
MicroColor.getChunksFromString = (st, chunkSize) => st.match(new RegExp(`.{${chunkSize}}`, 'g'));
MicroColor.convertHexUnitTo256 = hexStr => parseInt(hexStr.repeat(2 / hexStr.length), 16);
MicroColor.getAlphafloat = (a, alpha) => {
if ('undefined' !== typeof a) {
return a / 255;
}
if ('number' != typeof alpha || alpha < 0 || alpha > 1) {
return 1;
}
return alpha;
};
MicroColor.hexToRGBA = hex => {
if (!_a.isValidHex(hex)) {
throw new Error('Invalid HEX');
}
const chunkSize = Math.floor((hex.length - 1) / 3);
const hexArr = _a.getChunksFromString(hex.slice(1), chunkSize);
return hexArr.map(_a.convertHexUnitTo256);
};
class BasicSetting {
constructor({path: path = "DEFAULT", name: name = ""}) {
this.exportable = true;
this.type = 'NONE';
this._value = null;
this.default = null;
this.path = path;
this.name = name;
}
get value() {
return this._value;
}
set value(data) {
this._value = data;
}
setter(data) {
this.value = data;
}
get export() {
return this.value;
}
}
class Slider extends BasicSetting {
constructor({name: name, min: min, max: max, step: step, value: value, useCss: useCss = false, dim: dim = "", unit: unit = "", path: path}) {
var _a;
super({
name: name,
path: path
});
this.type = 'SLD';
this.min = min;
this.max = max;
this.step = step;
this.value = value;
this.default = value;
this.useCss = useCss;
this.dim = dim;
this.unit = unit;
this.precision = (null === (_a = step.toString().split('.')[1]) || void 0 === _a ? void 0 : _a.length) || 0;
this.setter(value);
}
get export() {
return this.value;
}
toJSON() {
return this.export;
}
setter(data) {
if ('number' !== typeof data || 'undefined' == typeof data) {
data = this.default;
}
this.value = data;
}
}
class Option extends BasicSetting {
constructor({name: name, value: value, path: path}) {
super({
name: name,
path: path
});
this.type = 'OPT';
this.value = value;
this.default = value;
this.setter(value);
}
get export() {
return this.value;
}
toJSON() {
return this.export;
}
setter(data) {
this.value = data;
}
}
class Input extends BasicSetting {
constructor({name: name, value: value, csshook: csshook = s => s, path: path, useCss: useCss = false, options: options = {}}) {
super({
name: name,
path: path
});
this.type = 'INP';
this.value = value;
this.default = value;
this.csshook = csshook;
this.useCss = useCss;
this.options = options;
this.setter(value);
}
get export() {
return this.value;
}
toJSON() {
return this.export;
}
setter(data) {
if ('string' !== typeof data || 'undefined' == typeof data) {
data = this.default;
}
this.value = String(data);
}
cssValue() {
return this.csshook ? this.csshook(this.value) : this.value;
}
}
class Font extends BasicSetting {
constructor({value: value = "normal normal 500 25px Ubuntu", path: path = ""}) {
super({
path: path
});
this.fontStyle = 'normal';
this.fontVariant = 'normal';
this.fontWeight = '500';
this.fontSize = '25px';
this.lineHeight = 'normal';
this.fontFamily = 'Ubuntu';
this.type = 'FONT';
this.default = this.value;
this.setter(value);
}
get value() {
const fontSize_lineHeight = this.fontSize + '/' + this.lineHeight;
return `${this.fontStyle} ${this.fontVariant} ${this.fontWeight} ${fontSize_lineHeight} ${this.fontFamily}`;
}
set value(cssFontString) {
this.setter(cssFontString);
}
get export() {
return this.value;
}
setter(cssFontString) {
var _a;
if ('undefined' === typeof cssFontString || null === cssFontString) {
cssFontString = this.default;
}
if ('string' === typeof cssFontString && ' ' == cssFontString[0]) {
cssFontString = this.default;
}
null !== (_a = Font.el) && void 0 !== _a || (Font.el = Font.getElem());
Font.el.style.font = cssFontString;
this.fontStyle = Font.el.style.fontStyle;
this.fontVariant = Font.el.style.fontVariant;
this.fontWeight = Font.el.style.fontWeight;
this.fontSize = Font.el.style.fontSize;
this.lineHeight = Font.el.style.lineHeight;
this.fontFamily = Font.el.style.fontFamily;
}
toJSON() {
return this.export;
}
toSelectboxFormat() {
return this.fontWeight + ' 25px ' + this.fontFamily;
}
load(text, timeout) {
return new Promise(((resolve, reject) => {
const fontFamily = this.fontFamily.replace(/"/g, '');
if (fontManager.possibleFonts[fontFamily] && fontManager.possibleFonts[fontFamily].isSystemFont) {
return resolve();
}
const fonts = Array.from(document.fonts).filter((font => font.family === fontFamily && font.weight === this.fontWeight));
Promise.all(fonts.map((font => font.load()))).then((() => resolve()));
new FontFaceObserver(fontFamily.replace(/"/g, ''), {
weight: this.fontWeight
}).load(text, timeout).then(resolve, reject);
}));
}
}
Font.getElem = () => {
var _a;
const el = document.createElement('span');
null === (_a = document.body) || void 0 === _a || _a.appendChild(el);
el.style.zIndex = '-9999';
el.style.position = 'absolute';
el.style.top = '-100px';
return el;
};
Font.el = null;
class Settings extends Eventify.Eventify {
constructor(descriptions) {
super();
this.raw = descriptions;
const self = this;
this.proxy = new Proxy(this.raw, {
set: (target, prop, newValue) => {
const previous = target[prop].value;
self.emit('before*', prop, newValue);
target[prop].setter(newValue);
try {
newValue !== previous && self.emit.call(this, prop, newValue, previous);
newValue !== previous && self.emit('*', prop, newValue, previous);
} catch (message) {
console.error(message);
}
return true;
},
get(target, prop) {
return target[prop].value;
}
});
}
import(object) {
if (!object) {
return;
}
for (const option in this.raw) {
if (this.raw.hasOwnProperty(option) && object.hasOwnProperty(option)) {
this.proxy[option] = object[option];
}
}
}
export() {
const export_data = {};
for (const option in this.raw) {
export_data[option] = this.raw[option].export;
}
return export_data;
}
restore() {
for (const opt in this.raw) {
const option = opt;
if (this.raw.hasOwnProperty(option)) {
this.proxy[option] = this.raw[option].default;
}
}
}
}
var Group1;
(function(Group1) {
Group1["s_game"] = "gameplayGroup";
})(Group1 || (Group1 = {}));
const settingsDescriptions = {
AutoZoom: new Option({
path: Group1.s_game,
value: false
}),
Minimap: new Option({
path: Group1.s_game,
value: true
}),
ZoomOut: new Option({
path: Group1.s_game,
value: false
}),
AutoRespawn: new Option({
path: Group1.s_game,
value: false
}),
AcidMode: new Option({
path: Group1.s_game,
value: false
}),
LeaderboardTitle: new Input({
path: Group1.s_game,
value: 'Delta'
}),
MapBorder: new Option({
path: Group1.s_game,
value: true
}),
MapSectors: new Option({
path: Group1.s_game,
value: true
}),
MapSectorLabels: new Option({
path: Group1.s_game,
value: true
}),
transparent_cells: new Slider({
path: Group1.s_game,
value: 1,
min: 0.1,
max: 1,
step: 0.1
})
};
const settings = new Settings(settingsDescriptions);
},
557: (__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.d(__webpack_exports__, {
Fragment: () => preact__WEBPACK_IMPORTED_MODULE_0__.Fragment,
jsx: () => u,
jsxs: () => u
});
var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(32);
var f = 0;
Array.isArray;
function u(e, t, n, o, i, u) {
t || (t = {});
var a, c, p = t;
if ("ref" in p) {
for (c in p = {}, t) {
"ref" == c ? a = t[c] : p[c] = t[c];
}
}
var l = {
type: e,
props: p,
key: n,
ref: a,
__k: null,
__: null,
__b: 0,
__e: null,
__c: null,
constructor: void 0,
__v: --f,
__i: -1,
__u: 0,
__source: i,
__self: u
};
if ("function" == typeof e && (a = e.defaultProps)) {
for (c in a) {
void 0 === p[c] && (p[c] = a[c]);
}
}
return preact__WEBPACK_IMPORTED_MODULE_0__.options.vnode && preact__WEBPACK_IMPORTED_MODULE_0__.options.vnode(l), l;
}
},
621: (__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.d(__webpack_exports__, {
AppContext: () => AppContext
});
var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(32);
const AppContext = (0, preact__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);
},
632: module => {
"use strict";
module.exports = preactHooks;
},
647: (module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.d(__webpack_exports__, {
Menu: () => Menu,
MenuButtons: () => MenuButtons
});
var external_preactHooks_ = __webpack_require__(632);
var settings = __webpack_require__(423);
var Contexts = __webpack_require__(621);
var utils = __webpack_require__(93);
var Eventify = __webpack_require__(742);
function vh(v) {
const h = window.innerHeight;
return v * h / 100;
}
function vw(v) {
const w = window.innerWidth;
return v * w / 100;
}
function gcd(a = window.innerWidth, b = window.innerHeight) {
return 0 == b ? a : gcd(b, a % b);
}
const scaling = (0, Eventify.EventObject)({
uiScale: 1
});
function calcScale() {
const gc = gcd();
let sizeOfMap = 1;
const {w: w, h: h} = {
w: 4,
h: 3
};
if (gc * window.innerWidth / (gc * window.innerHeight) > w / h) {
sizeOfMap = vh(27) / 200;
} else {
sizeOfMap = h * vw(27) / w / 200;
}
scaling.uiScale = Math.min(1, sizeOfMap);
}
window.addEventListener('resize', calcScale);
calcScale();
function useEventify(effect, deps) {
const eventify = (0, external_preactHooks_.useMemo)((() => new Eventify.Eventify), []);
(0, external_preactHooks_.useEffect)((() => {
const destroy = effect(eventify);
return () => {
if (destroy) {
destroy();
}
eventify.unlisten();
};
}), deps);
}
var jsxRuntime_module = __webpack_require__(557);
function keepValue(a) {
const e = a;
if (27 === e.keyCode) {
e.target.blur();
e.preventDefault();
}
}
function UiOption({target: target, name: name}) {
const [value, updateValue] = (0, external_preactHooks_.useState)(target.raw[name].value);
useEventify((e => e.listenTo(target, name, (() => updateValue(target.raw[name].value)))()), [ name ]);
return (0, jsxRuntime_module.jsx)(UiOptionMarkup, {
name: (0, utils.camelCaseToWords)(target.raw[name].name || name),
value: value,
onValue: value => {
updateValue(value);
target.proxy[name] = value;
}
});
}
function UiOptionMarkup({name: name, value: value, onValue: onValue}) {
return (0, jsxRuntime_module.jsxs)("label", {
className: "flex p-1 text-left gap-2",
children: [ (0, jsxRuntime_module.jsx)("div", {
className: "grow",
children: name
}), (0, jsxRuntime_module.jsx)("div", {
className: "",
children: (0, jsxRuntime_module.jsxs)("label", {
className: "switch",
children: [ (0, jsxRuntime_module.jsx)("input", {
name: Math.random().toString(),
className: "",
onChange: e => onValue(e.target['checked']),
checked: value,
defaultChecked: value,
type: "checkbox"
}), (0, jsxRuntime_module.jsx)("div", {
className: "slider round",
"data-on": 'ui_on',
"data-off": 'ui_off'
}) ]
})
}) ]
});
}
function UiSlider({target: target, name: name}) {
const helperRef = (0, external_preactHooks_.useRef)();
const unit = target.raw[name].unit || '';
function updateValue(value) {
helperRef.current.innerText = String(value.toFixed(target.raw[name].precision)) + unit;
}
useEventify((e => {
e.listenTo(target, name, (() => updateValue(target.raw[name].value)))();
return () => e.unlisten();
}), [ name ]);
return (0, jsxRuntime_module.jsx)(SliderRender, {
name: (0, utils.camelCaseToWords)(name),
value: target.raw[name].value,
data: target.raw[name],
onValue: value => {
target.proxy[name] = value;
updateValue(value);
},
helperRef: helperRef
});
}
function SliderRender({name: name, value: value, data: data, onValue: onValue, helperRef: helperRef}) {
const rangeRef = (0, external_preactHooks_.useRef)();
return (0, jsxRuntime_module.jsxs)("label", {
class: "flex p-1 text-left gap-2",
children: [ (0, jsxRuntime_module.jsx)("div", {
class: "grow",
children: name
}), (0, jsxRuntime_module.jsx)("div", {
ref: helperRef,
class: "helper"
}), (0, jsxRuntime_module.jsx)("div", {
class: "text-left",
children: (0, jsxRuntime_module.jsx)("input", {
name: Math.random().toString(),
ref: rangeRef,
class: "",
type: "range",
onInput: e => onValue(Number(e.target['value'])),
min: data.min,
max: data.max,
step: data.step,
value: value,
defaultValue: value.toString()
})
}) ]
});
}
function UiSelectbox({target: target, name: name}) {
const [value, updateValue] = (0, external_preactHooks_.useState)(target.raw[name].value);
useEventify((e => {
const handleStatusChange = () => updateValue(target.raw[name].value);
e.listenTo(target, name, handleStatusChange);
handleStatusChange();
return () => e.unlisten();
}), [ name ]);
return (0, jsxRuntime_module.jsx)(SelectboxRender, {
name: (0, utils.camelCaseToWords)(name.toString()),
value: value,
data: target.raw[name].options,
onValue: value => {
target.proxy[name] = value;
}
});
}
function SelectboxRender({name: name, value: value, data: data, onValue: onValue}) {
return (0, jsxRuntime_module.jsxs)("div", {
className: "flex p-1 text-left gap-2",
children: [ (0, jsxRuntime_module.jsx)("div", {
className: "grow",
children: name
}), (0, jsxRuntime_module.jsx)("div", {
className: "",
children: (0, jsxRuntime_module.jsx)("select", {
name: Math.random().toString(),
className: "selectbox",
value: value,
onChange: e => onValue(isNaN(e.target.value) ? e.target.value : Number(e.target.value)),
children: Object.entries(data).map((([name, value]) => (0, jsxRuntime_module.jsx)("option", {
value: value,
children: (0, utils.camelCaseToWords)(name)
})))
})
}) ]
});
}
function UiInputbox({target: target, name: name}) {
var _a;
function onValue(value) {
target.proxy[name] = value;
}
const [value, updateValue] = (0, external_preactHooks_.useState)(target.raw[name].value);
useEventify((e => {
const handleStatusChange = () => updateValue(target.raw[name].value);
e.listenTo(target, name, handleStatusChange);
handleStatusChange();
return () => e.unlisten();
}), [ name ]);
const display_name = (0, utils.camelCaseToWords)(name);
return (0, jsxRuntime_module.jsxs)("div", {
class: "flex p-1 text-left gap-2",
children: [ (0, jsxRuntime_module.jsx)("div", {
class: "grow",
children: display_name
}), (0, jsxRuntime_module.jsxs)("div", {
class: "flex grow",
style: {
width: '30%'
},
children: [ (0, jsxRuntime_module.jsx)("input", {
name: Math.random().toString(),
class: "input",
type: "search",
inputMode: "text",
autocomplete: "off",
style: "width: 100%;",
placeholder: name.toString(),
onKeyDown: keepValue,
onInput: e => onValue(e.target['value']),
value: value,
defaultValue: value
}), true ? (0, jsxRuntime_module.jsxs)("select", {
name: 'select-' + Math.random(),
class: "w-4",
onChange: _e => {
const e = _e;
void 0 != e.target.value && onValue(e.target.value);
e.target.value = '';
e.target.blur();
},
style: "",
children: [ (0, jsxRuntime_module.jsx)("option", {
value: ""
}), 'undefined' !== typeof target.raw[name].default && (0, jsxRuntime_module.jsx)("option", {
value: target.raw[name].default,
children: "Default"
}), null === (_a = Object.entries(target.raw[name].options)) || void 0 === _a ? void 0 : _a.map((([key, val]) => (0, jsxRuntime_module.jsx)("option", {
value: val,
children: key
}))) ]
}) : 0 ]
}) ]
});
}
function SettingsList({array: array, target: target}) {
const result = array.map((([optName, setting]) => {
const type = setting.type;
if ('OPT' == type) {
return (0, jsxRuntime_module.jsx)(UiOption, {
target: target,
name: optName
});
}
if ('SLD' == type) {
return (0, jsxRuntime_module.jsx)(UiSlider, {
target: target,
name: optName
});
}
if ('SEL' == type) {
return (0, jsxRuntime_module.jsx)(UiSelectbox, {
target: target,
name: optName
});
}
if ('INP' == type) {
return (0, jsxRuntime_module.jsx)(UiInputbox, {
target: target,
name: optName
});
}
if ('COL' == type) {
return (0, jsxRuntime_module.jsx)(UiColorbox, {
target: target,
name: optName
});
}
}));
return result;
}
module = __webpack_require__.hmd(module);
var _a;
function MenuButtons() {
const app = (0, external_preactHooks_.useContext)(Contexts.AppContext);
const inputRef = (0, external_preactHooks_.useRef)();
useEventify((e => {
e.listenTo(app.state, 'ws', (() => {
inputRef.current.value = app.state.ws;
}))();
}), []);
return (0, jsxRuntime_module.jsxs)("div", {
class: 'menu-addon',
style: {
marginTop: '4px',
display: 'flex',
flexDirection: 'column',
alignItems: 'center'
},
children: [ (0, jsxRuntime_module.jsx)("button", {
style: {
width: '242px'
},
type: "submit",
class: "btn menu-button ",
onClick: () => app.spetate(),
children: "Spectate"
}), (0, jsxRuntime_module.jsxs)("div", {
style: {
display: 'flex',
gap: '4px',
paddingTop: '4px'
},
children: [ (0, jsxRuntime_module.jsx)("input", {
class: "input-addon",
placeholder: "server",
ref: inputRef
}), (0, jsxRuntime_module.jsx)("button", {
type: "submit",
class: "btn menu-button",
onClick: () => app.connect(inputRef.current.value),
children: "Connect"
}) ]
}) ]
});
}
const Menu = () => (0, jsxRuntime_module.jsx)("div", {
style: {
overflowY: 'scroll'
},
onWheel: e => e.stopPropagation(),
children: (0, jsxRuntime_module.jsxs)("div", {
className: "mx-2",
children: [ (0, jsxRuntime_module.jsx)(SettingsList, {
array: Object.entries(settings.settings.raw),
target: settings.settings
}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0,
jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0,
jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0,
jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0,
jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), (0, jsxRuntime_module.jsx)("br", {}), " Delta" ]
})
});
null === (_a = null === module || void 0 === module ? void 0 : module['hot']) || void 0 === _a || _a.accept();
},
742: (__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.d(__webpack_exports__, {
EventObject: () => EventObject,
Eventify: () => Eventify,
deferrify: () => deferrify
});
function EventMixin(Base) {
class EventifyBase extends Base {
events={};
ev=[];
blockRemovingListeners=false;
on(...rest) {
if (rest.length < 2) {
throw new Error('Eventify.on() need at least 2 arguments');
}
const length = rest.length;
const listener = rest[length - 1];
for (let i = 0; length - 1 > i; i++) {
const event = rest[i];
if ('object' !== typeof this.events[event]) {
this.events[event] = [];
}
this.events[event].push(listener);
}
return listener;
}
removeListener(event, listener) {
if ('object' === typeof this.events[event]) {
const idx = this.events[event].indexOf(listener);
if (idx > -1) {
this.events[event].splice(idx, 1);
}
if (0 === this.events[event].length) {
delete this.events[event];
}
}
}
emit(event, ...rest) {
if ('object' === typeof this.events[event]) {
const listeners = this.events[event].slice();
for (const listener of listeners) {
listener.apply(this, rest);
}
}
}
once(event, listener) {
const once_listener = (...args) => {
this.removeListener(event, once_listener);
listener.apply(this, args);
};
this.on(event, once_listener);
return once_listener;
}
waitTimeout(event, timeout, abortController) {
const ret = this.waitfor(event, ((_, rejector) => {
const timeoutId = setTimeout((() => {
const error = new Error(`Waiting "${event.toString()}" Timeout`);
error.cause = 'timeout';
rejector(error);
}), timeout);
if (abortController) {
function abort() {
clearTimeout(timeoutId);
const error = new Error(`Waiting "${event.toString()}" Aborted`);
error.cause = 'aborted';
rejector(error);
}
if (abortController.signal.aborted) {
abort();
} else {
abortController.signal.addEventListener('abort', abort, {
once: true
});
}
}
return () => {
clearTimeout(timeoutId);
};
}));
return ret;
}
waitfor(event, reject_callback) {
return new Promise(((_resolve, _reject) => {
let destroyCallbackCalled = false;
const removeListener = () => {
this.removeListener(event, resolver);
this.removeListener(event, rejector);
if (destroyCallbackCalled) {
return;
}
destroyCallbackCalled = true;
destroyRejectCallback();
};
function resolver(v) {
_resolve(v);
removeListener();
}
function rejector(e) {
_reject(e);
removeListener();
}
const destroyRejectCallback = reject_callback(resolver, rejector);
const self = this;
self.listenSelf(event, resolver);
self.listenSelf(event, rejector);
}));
}
delegateTo(target, ...rest) {
if (arguments.length < 3) {
throw new Error('Eventify.delegateTo() need at least 3 arguments');
}
const length = rest.length, listener = rest[length - 1];
for (let i = 0; length - 1 > i; i++) {
const event = rest[i];
if ('object' !== typeof target.events[event]) {
target.events[event] = [];
}
target.ev.push({
delegated: this,
event: event,
listener: listener
});
this.on(event, listener);
}
return listener;
}
listenTo(target, ...rest) {
return target.delegateTo(this, ...rest);
}
listenSelf(...rest) {
return this.listenTo(this, ...rest);
}
unlisten() {
const before = this.ev.slice();
for (let i = 0; before.length > i; i++) {
const target = before[i].delegated;
const eventName = before[i].event;
const listener = before[i].listener;
target.removeListener(eventName, listener);
const idx = this.ev.indexOf(before[i]);
if (idx > -1) {
this.ev.splice(idx, 1);
}
}
if (this.ev.length > 0) {
console.error('We have error in unlisten()', before, this.ev);
}
}
}
return EventifyBase;
}
class Eventify extends(EventMixin(class {})){}
const props = [ 'on', 'removeListener', 'emit', 'once', 'listenTo', 'delegateTo', 'listenSelf', 'unlisten', 'ev', 'events', 'waitfor', 'waitTimeout' ];
const eventify = function(object) {
const EVENTIFY = new Eventify;
props.forEach((key => {
Object.defineProperty(object, key, {
value: EVENTIFY[key],
enumerable: false,
writable: false
});
}));
return object;
};
function EventObject(object) {
const _Eventify = eventify(object);
const eventObject = new Proxy(object, {
set(target, prop, val) {
const prev = object[prop];
const curr = val;
_Eventify.emit('before*', prop, val);
object[prop] = val;
try {
_Eventify.emit(prop, val, prev);
if (prev !== curr) {
_Eventify.emit('change:*', prop, val);
_Eventify.emit('change:' + String(prop), val, prev);
}
_Eventify.emit('*', prop, val, prev);
} catch (message) {
console.error(message);
}
return true;
}
});
Object.defineProperty(eventObject, 'raw', {
get() {
return object;
}
});
return eventObject;
}
function deferrify(params) {
let resolve = null;
let reject = null;
const promise = new Promise(((resolveFunc, rejectFunc) => {
resolve = resolveFunc;
reject = rejectFunc;
if (params?.signal instanceof Promise) {
params.signal.catch(reject);
} else if (params?.signal?.aborted) {
reject();
}
}));
return {
promise: promise,
resolve: resolve,
reject: reject
};
}
}
};
var __webpack_module_cache__ = {};
function __webpack_require__(moduleId) {
var cachedModule = __webpack_module_cache__[moduleId];
if (void 0 !== cachedModule) {
return cachedModule.exports;
}
var module = __webpack_module_cache__[moduleId] = {
id: moduleId,
loaded: false,
exports: {}
};
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
module.loaded = true;
return module.exports;
}
(() => {
__webpack_require__.n = module => {
var getter = module && module.__esModule ? () => module['default'] : () => module;
__webpack_require__.d(getter, {
a: getter
});
return getter;
};
})();
(() => {
__webpack_require__.d = (exports, definition) => {
for (var key in definition) {
if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
Object.defineProperty(exports, key, {
enumerable: true,
get: definition[key]
});
}
}
};
})();
(() => {
__webpack_require__.hmd = module => {
module = Object.create(module);
if (!module.children) {
module.children = [];
}
Object.defineProperty(module, 'exports', {
enumerable: true,
set: () => {
throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);
}
});
return module;
};
})();
(() => {
__webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
})();
var __webpack_exports__ = __webpack_require__(122);
MyLibrary = __webpack_exports__;
})(typeof unsafeWindow !== 'undefined' ? unsafeWindow : window);