// ==UserScript==
// @name Voxiom.io KIT NO-RECOIL
// @version 0.0.0.7
// @copyright
// @license GPL General Public License
// @namespace https://greasyfork.org/
// @description no recoil
// @author T.Hieu!
// @author T.Hieu!
// @author Red Scheme
// @match https://voxiom.io/*
// @match https://historynotes.club/*
// @exclude https://*/assets/*
// @exclude https://*/package/*
// @icon https://lh3.googleusercontent.com/dbrVagpResp53-HgoC4_fDvM8sx8GsotlOeX8MTSHkYbE-TAewNe7s_TwwOLRs5tueXrucuRYL6QId6FPn19InMYNTZQyrjD9Cm3fDkl
// @supportURL https://discord.gg/sHj5UauJZ4
// @connect greasyfork.org
// @connect discord.com
// @connect unpkg.com
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_listValues
// @run-at document-start
// @noframes
// @downloadURL none
// ==/UserScript==
(function _() {
class ХранилищеСимволов {
constructor() {
this.хранилище = {};
}
получить(ключ = '') {
return ключ in this.хранилище ? this.хранилище[ключ] : (this.хранилище[ключ] = Symbol(ключ));
}
удалить(ключ) {
return delete this.хранилище[ключ];
}
}
class Хэш {
кибер53(строка, сид = 0) {
let h1 = 0xdeadbeef ^ сид,
h2 = 0x41c6ce57 ^ сид;
for (let i = 0, ch; i < строка.length; i++) {
ch = строка.charCodeAt(i);
h1 = Math.imul(h1 ^ ch, 2654435761);
h2 = Math.imul(h2 ^ ch, 1597334677);
}
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
}
сгенерироватьУУИ() {
var д = new Date().getTime();
var д2 = ((typeof performance !== 'undefined') && performance.now && (performance.now() * 1e3)) || 0;
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(с) {
var р = Math.random() * 16;
if (д > 0) {
р = (д + р) % 16 | 0;
д = Math.floor(д / 16);
} else {
р = (д2 + р) % 16 | 0;
д2 = Math.floor(д2 / 16);
}
return (с === 'x' ? р : (р & 0x3 | 0x8)).toString(16);
});
}
сгенерироватьКороткийУУИ() {
let ууи = '', символы = 'abcdefghijklmnopqrstuvwxyz0123456789';
for (let i = 0; i < 8; i++) {
ууи += символы.charAt(Math.floor(Math.random() * символы.length));
}
return ууи;
}
}
class Хранилище {
constructor(_поУмолчанию = {}) {
const неверноеЗначение = {};
for (const ключ in _поУмолчанию) {
const текущееЗначение = GM_getValue(ключ, неверноеЗначение);
this.установить(ключ, текущееЗначение === неверноеЗначение ? _поУмолчанию[ключ] : текущееЗначение);
}
}
получить(ключ, неверноеЗначение=null) {
return GM_getValue(ключ, неверноеЗначение);
}
установить(ключ, значение) {
return (GM_setValue(ключ, значение), значение);
}
удалить(ключ) {
return GM_deleteValue(ключ);
}
получитьВсе() {
return GM_listValues();
}
}
class СверхЗрение {
constructor(камера, сцена, ТРИ) {
this.камера = камера;
this.сцена = сцена;
this.ТРИ = ТРИ;
this.временноеХранилище = {};
}
показыватьЛинии(ключ, позиции, цвет) {
this.временноеХранилище[ключ] = { линии: this.временноеХранилище[ключ]?.линии || [] };
while(this.временноеХранилище[ключ].линии.length > 0) this.сцена.remove(this.временноеХранилище[ключ].линии.pop());
for (const позиция of позиции) {
const позицияКамеры = this.камера.position.clone();
const направлениеЗрения = new this.ТРИ.Vector3();
this.камера.getWorldDirection(направлениеЗрения);
const отодвинутьНа = 0.1;
const новаяПозиция = позицияКамеры.add(направлениеЗрения.multiplyScalar(отодвинутьНа));
const начало = новаяПозиция;
const конец = позиция;
const геометрия = new this.ТРИ.BufferGeometry().setFromPoints([начало, конец]);
const материал = new this.ТРИ.LineBasicMaterial({ color: цвет, depthTest: false, depthWrite: false, linecap: 'round' });
const линия = new this.ТРИ.Line(геометрия, материал);
линия.renderOrder = 1;
this.временноеХранилище[ключ].линии.push(линия);
this.сцена.add(линия);
}
}
}
class ВоксиомМенеджер {
constructor(этот) {
this.ТЕХНАРЬ = GM;
this.хэш = new Хэш;
this.настройки = {
'автоматическое_наведение': true,
'использовать_радиус': true,
'рисовать_радиус_автоматического': true,
'радиус_автоматического_наведения': 300,
'без_анимации_отдачи': true,
'без_вертикальной_отдачи': true,
'сверх_зрение': true,
'показывать_линии': true,
'линии_противника': 0xFF0000,
'последняя_проверка_обновления': 0,
};
this.подтверждено = false;
this.хранилище = new Хранилище(this.настройки);
this.хранилищеСимволов = new ХранилищеСимволов;
this.УИСкрипта = 464634;
this.ссылкаНаСкрипт = `https://greasyfork.org/en/scripts/${this.УИСкрипта}`;
this.свойства = {
анимацияОтдачи: 'Eb',
вертикальнаяОтдача: 'vv'
};
this.ссылкаНаОбновление = null;
this.этот = этот;
this.менеджерОкон = new МенеджерОкон(this);
this.небезопасноеОкно = небезопасноеОкно;
this.запрос = запрос;
this.состояние = {
'сущности': null,
'сцена': null,
'камера': null,
'мышь': {
'1': false,
'2': false,
'3': false
},
'ТРИ': null,
'наОружии': false,
};
this.временноеСостояние = {
'наНастройкеРадиуса': false
};
this.функцияУправления = null;
this.испускатель = null;
this.мойХЭШ = 6679621489244821;
this.доверительныйХЭШ = [
6679621489244821,
1847873331026683
];
this.кожура = null;
}
инициализировать() {
this.установитьУУИ();
this.менеджерОкон.открыть('приветствие');
this.проверитьВерсию();
// this.захватитьИспускание();
// this.захватитьИгровыеСущности();
// this.захватитьСцену();
// this.захватитьКамеру();
// this.захватитьУправление();
this.захватитьАнимациюОтдачи();
this.захватитьВертикальнуюОтдачу();
// this.захватитьЗапросАнимационногоФрейма();
// this.захватитьМышь();
// this.захватитьКлавиатуру();
// this.затребоватьТРИ();
this.инициализироватьКожуру();
if (небезопасноеОкно[локация][хэш]) this.менеджерОкон.закрытьТекущееОкно();
}
захватитьКлавиатуру() {
небезопасноеОкно.addEventListener('keydown', this.случаиКлавиатуры.bind(this));
}
случаиКлавиатуры(событие) {
switch(событие.keyCode || событие.which) {
case 120: {
this.переключитьНастройки();
break;
}
}
}
переключитьНастройки() {
const настройки = документ.querySelector('#настройки');
if (настройки) {
this.менеджерОкон.закрытьТекущееОкно();
документ.querySelector("#canvas").requestPointerLock();
} else {
документ.exitPointerLock();
this.менеджерОкон.открыть('настройки', this.хранилище, this.временноеСостояние);
}
}
инициализироватьКожуру() {
this.кожура = this.менеджерОкон.сэ('canvas', {}, документ.documentElement);
небезопасноеОкно.addEventListener('resize', () => {
this.кожура.width = небезопасноеОкно.innerWidth;
this.кожура.height = небезопасноеОкно.innerHeight;
this.кожура.style = `pointer-events:none;position:absolute;left:0;top:0;width:${this.кожура.width}px;height:${this.кожура.height}px;z-index:10;`;
});
небезопасноеОкно.dispatchEvent( new Event( 'resize', { bubbles: true } ));
}
обновитьКожуру() {
this.отчиститьКожуру();
(this.хранилище.получить('автоматическое_наведение') && this.состояние.наОружии && this.хранилище.получить('использовать_радиус') && this.хранилище.получить('рисовать_радиус_автоматического') || this.временноеСостояние.наНастройкеРадиуса) && this.нарисоватьРадиусАвтонаведения();
}
отчиститьКожуру() {
const контекст = this.кожура.getContext('2d');
контекст.clearRect(0, 0, this.кожура.width, this.кожура.height);
}
нарисоватьРадиусАвтонаведения() {
const радиус = this.хранилище.получить('радиус_автоматического_наведения');
const контекст = this.кожура.getContext('2d');
const cx = window.innerWidth / 2;
const cy = window.innerHeight / 2;
контекст.save();
контекст.strokeStyle = 'red';
контекст.beginPath();
контекст.arc(cx, cy, радиус, 0, 2 * Math.PI);
контекст.stroke();
}
проверитьВерсию() {
const текущаяДата = Date.now();
if (текущаяДата - this.хранилище.получить('последняя_проверка_обновления') < 864e5) return;
this.извлечь(`${this.ссылкаНаСкрипт}.json?r=${Math.random()}`).then(text => {
if (JSON.parse(text.responseText).version !== this.ТЕХНАРЬ.info.script.version) {
this.менеджерОкон.открыть('некорректный_скрипт', 'version');
} else {
this.подтверждено = true;
}
this.хранилище.установить('последняя_проверка_обновления', текущаяДата);
}).catch(error => this.менеджерОкон.открыть('некорректный_скрипт', `unknown error ${error.name}:${error.message}`));
}
циклИнициализирован() {}
захватитьВертикальнуюОтдачу() {
const _этот = this;
Объект.определитьСвойство(Объект.прототип, this.свойства.вертикальнаяОтдача, {
[установить](значение) {
this[_этот.хранилищеСимволов.получить('вертикальнаяОтдача')] = _этот.хранилище.получить('без_вертикальной_отдачи') ? 0 : значение;
},
[получить]() {
return this[_этот.хранилищеСимволов.получить('вертикальнаяОтдача')];
}
});
}
захватитьАнимациюОтдачи() {
const _этот = this;
Объект.определитьСвойство(Объект.прототип, this.свойства.анимацияОтдачи, {
[установить](значение) {
this[_этот.хранилищеСимволов.получить('анимацияОтдачи')] = new Прокси(значение, {
[применить]() {
if (_этот.хранилище.получить('без_анимации_отдачи')) return;
return Отразить.применить(...arguments);
}
});
},
[получить]() {
return this[_этот.хранилищеСимволов.получить('анимацияОтдачи')];
}
});
}
захватитьМышь() {
const _этот = this;
document.addEventListener = new Прокси(document.addEventListener, {
[применить]() {
const арги = arguments[2];
арги[1] = new Прокси(арги[1], {
[применить]() {
const событие = arguments[2][0];
switch(арги[0]) {
case 'mousedown': _этот.состояние.мышь[событие.keyCode || событие.which] = true; break;
case 'mouseup': _этот.состояние.мышь[событие.keyCode || событие.which] = false; break;
}
return Отразить.применить(...arguments);
}
});
return Отразить.применить(...arguments);
}
});
}
анимировать() {
if (this.циклИнициализирован()) {
this.кадрИнциализации();
this.инициализированныйЦикл();
}
}
кадрИнциализации() {
this.сверхЗрение = new СверхЗрение(this.состояние.камера, this.состояние.сцена, this.состояние.ТРИ);
this.кадрИнциализации = () => {};
}
инициализированныйЦикл() {}
приближение() {}
сверхъестественноеЗрение() {
if (!this.хранилище.получить('сверх_зрение')) return;
if (this.хранилище.получить('показывать_линии', false)) this.сверхЗрение.показыватьЛинии(
'линии_противников',
this.игроки.filter(this.этоСоперник.bind(this)).map(игрок => this.получитьМировуюПозициюГоловы(игрок[this.свойства.объектИгрока], this.состояние.ТРИ)),
this.хранилище.получить('линии_противника', 0xFF0000)
);
// if (this.хранилище.получить('показывать_линии_союзников', false)) this.показыватьЛинии('линии_союзников');
}
автоматическоеНаведение() {}
фальшивыйБог() {}
невидимость() {}
проверитьПоддлинность() {}
получитьУклонИНаклон(начало, назначение) {
const x = назначение.x - начало.x;
const y = назначение.y - начало.y;
const z = назначение.z - начало.z;
const дистанция = Math.sqrt(x * x + y * y + z * z);
const уклон = Math.atan2(y, Math.sqrt(x * x + z * z));
const наклон = Math.atan2(-x, -z);
return [уклон, наклон];
}
позицияВРадиусе(точка, радиус, камера) {
const [x, y] = this.позицияВЭкранныеКоординаты(точка, камера);
return радиус > Math.sqrt((x - window.innerWidth / 2) ** 2 + (y - window.innerHeight / 2) ** 2);
}
позицияВЭкранныеКоординаты(точка, камера) {
const ширина = window.innerWidth,
высота = window.innerHeight,
полШирины = ширина / 2,
полВысоты = высота / 2,
позиция = точка.clone();
позиция.project(камера);
return [
( позиция.x * полШирины ) + полШирины,
высота - (( позиция.y * полВысоты ) + полВысоты)
];
}
прямаяВидимость(точка, камера, сцена, ТРИ) {
const луч = new ТРИ.Raycaster();
const начало = камера.position;
const конец = точка;
const направление = new ТРИ.Vector3().subVectors(конец, начало).normalize();
луч.set(начало, направление);
const дистанция = камера.position.distanceTo(точка);
направление.multiplyScalar(-1);
луч.near = 0.01
луч.far = дистанция;
const intersects = луч.intersectObject(сцена.children[4]);
return intersects.length == 0;
}
пометитьПозицию(точка, сцена, ТРИ) {
const geometry = new ТРИ.BoxGeometry( 0.1, 0.1, 0.1 );
const material = new ТРИ.MeshBasicMaterial( {
color: 0xFF0000,
fog: false,
depthTest: false,
depthWrite: false,
transparent: true,
opacity: 1
});
const mesh = new ТРИ.Mesh( geometry, material );
mesh.renderOrder = 3;
mesh.position.copy(точка);
сцена.add(mesh);
return mesh;
}
получитьМировуюПозициюГоловы(объектИгрока, ТРИ) {
const head = объектИгрока.children[1].children[2].children[0];
const vec = new ТРИ.Vector3();
const box = new ТРИ.Box3().setFromObject(head);
const center = box.getCenter(vec);
const head2 = head.clone();
head2.position.set(vec.x, vec.y, vec.z);
const pos = head2.localToWorld(head2.position);
pos.y += 0.1;
return pos;
}
наЭкране(точка, камера, ТРИ) {
камера.updateMatrix();
камера.updateMatrixWorld();
var frustum = new ТРИ.Frustum().setFromProjectionMatrix(
new ТРИ.Matrix4().multiplyMatrices(
камера.projectionMatrix,
камера.matrixWorldInverse
)
);
return frustum.containsPoint(точка);
}
захватитьЗапросАнимационногоФрейма() {
const _этот = this;
const мойЗапросАнимационногоФрейма = небезопасноеОкно.requestAnimationFrame = new Прокси(небезопасноеОкно.requestAnimationFrame, {
[применить]() {
_этот.анимировать();
return Отразить.применить(...arguments);
}
});
}
установитьУУИ() {
this.хранилище.установить('УУИ', this.хранилище.получить('УУИ') || this.хэш.сгенерироватьКороткийУУИ());
}
отчиститьАвторство(объект, глубина, замена) {
if (глубина < 0) return false;
for (const ключ in объект) {
const значение = объект[ключ];
switch (typeof значение) {
case 'string': {
if (значение.length > 500) break;
for (let start=0; start < значение.length - 4; start++) {
for (let end=start+4; end < start + 19 && end < значение.length + 1; end++) {
let name = значение.slice(start, end);
if (this.проверитьПоддлинность(name)) {
start = значение.length;
объект[ключ] = значение.replaceAll(name, замена);
break;
}
}
}
break;
}
case 'object': {
if (значение !== null && !(значение instanceof self.Element) && !(значение instanceof self.Uint8Array)) return this.отчиститьАвторство(значение, глубина - 1, замена);
break;
}
}
}
}
захватитьУправление() {
const _этот = this;
Объект.определитьСвойство(Объект.прототип, this.свойства.управление, {
[установить](значение) {
if (_этот.свойства.функцияУправления in значение) {
_этот.функцияУправления = значение[_этот.свойства.функцияУправления].bind(значение);
}
this[_этот.хранилищеСимволов.получить('управление')] = значение;
},
[получить]() {
return this[_этот.хранилищеСимволов.получить('управление')];
}
});
}
захватитьИгровыеСущности() {
const _этот = this;
Объект.определитьСвойство(Объект.прототип, this.свойства.сущности, {
[установить](значение) {
_этот.состояние.сущности = значение;
this[_этот.хранилищеСимволов.получить('сущности')] = значение;
},
[получить]() {
return this[_этот.хранилищеСимволов.получить('сущности')];
}
});
}
захватитьСцену() {
const _этот = this;
Объект.определитьСвойство(Объект.прототип, this.свойства.сцена, {
[установить](значение) {
_этот.состояние.сцена = значение;
this[_этот.хранилищеСимволов.получить('сцена')] = значение;
},
[получить]() {
return this[_этот.хранилищеСимволов.получить('сцена')];
}
});
}
захватитьИспускание() {
const _этот = this;
Объект.определитьСвойство(Объект.прототип, 'emit', {
[установить](значение) {
this[_этот.хранилищеСимволов.получить('испускатель')] = значение.toString().includes("this['_eventEmitter']") ? _этот.проксироватьИспускатель(значение) : значение;
},
[получить]() {
return this[_этот.хранилищеСимволов.получить('испускатель')];
}
});
}
проксироватьИспускатель(испускатель) {
return испускатель;
}
захватитьКамеру() {
const _этот = this;
Объект.определитьСвойство(Объект.прототип, this.свойства.камера, {
[установить](значение) {
_этот.состояние.камера = значение;
this[_этот.хранилищеСимволов.получить('камера')] = значение;
},
[получить]() {
return this[_этот.хранилищеСимволов.получить('камера')];
}
});
}
затребоватьТРИ() {
this.извлечь('https://unpkg.com/three@latest/build/three.min.js').then(ответ => {
const конекст = {};
Function('globalThis', ответ.responseText)(конекст);
this.состояние.ТРИ = конекст.THREE;
});
}
get игроки() {
return Объект.values(this.состояние.сущности).filter(this.являетсяЛиИгроком.bind(this));
}
являетсяЛиИгроком(сущность) {
return this.свойства.ник in сущность && сущность[this.свойства.объектИгрока].visible;
}
этоСоперник(сущность) {
return сущность[this.свойства.команда] > 0 ? сущность[this.свойства.ник] === '' : true;
}
извлечь(УРС, опции = {}) {
return new Обещание((разрешить, отклонить) => запрос(Объект.соединить({
[урс]: УРС,
[приЗагрузке]: разрешить,
[приОшибке]: отклонить
}, опции)));
}
}
class МенеджерОкон {
constructor(_этот) {
this.текущееОкно = null;
this._этот = _этот;
}
сэ(тэг, опции = {}, родитель = false, иниц = false) {
const потомки = опции.children || [];
delete опции.children;
let элемент = Объект.соединить(документ.createElement(тэг), опции);
for (const потомок of потомки) элемент.appendChild(потомок);
элемент = родитель ? родитель.appendChild(элемент) : элемент;
if (typeof иниц == 'function') иниц(элемент);
return элемент;
}
открыть(имя, ...арги) {
this.УИТаймаутЗакрытия && отчиститьИнтервал(this.УИТаймаутЗакрытия);
this.закрытьТекущееОкно();
try {
this.текущееОкно = this[имя](...арги);
} catch (ошибка) {
return this.открыть('окноВнутреннейОшибки', ошибка.name, ошибка.message);
}
}
окноВнутреннейОшибки(имя, сообщене) {
return this.сгенерироватьЗаднийФон(
[
this.сэ('div', {
style: 'background:#FFF;display:flex;flex-direction:column;color:#000;border-radius:15px;padding:10px;transform:scale(1.2);',
children: [
this.сэ('div', {
textContent: '\u0055\u004E\u0045\u0058\u0050\u0045\u0043\u0054\u0045\u0044\u0020\u0045\u0052\u0052\u004F\u0052\u002E\u0020\u0055\u0050\u0044\u0041\u0054\u0045\u0020\u0054\u0048\u0045\u0020\u0053\u0043\u0052\u0049\u0050\u0054\u002E'
})
]
})
]
);
}
закрытьТекущееОкно() {
return this.текущееОкно && this.текущееОкно.parentElement && this.текущееОкно.remove();
}
сгенерироватьЗаднийФон(элемент, родитель) {
const фон = this.сэ('div', {
style: 'width:100%;height:100%;position:absolute;left:0;top:0;background:#000A;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:100000;',
onclick: е => (е.target === фон && this.закрытьТекущееОкно(), true),
children: Array.isArray(элемент) ? элемент : [элемент]
}, родитель);
return фон;
}
приветствие() {
return this.сгенерироватьЗаднийФон(
[
this.сэ('style', {
textContent:
`
.rainbow-text-animated {
background: linear-gradient(to right, #6666ff, #0099ff , #00ff00, #ff3399, #6666ff);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
animation: rainbow-animation 6s ease-in-out infinite;
background-size: 400% 100%;
}
@keyframes rainbow-animation {
0%,100% {
background-position: 0 0;
}
50% {
background-position: 100% 0;
}
}
.кнопка-ок:hover {
background: black !important;
color: white !important;
}
.дискорд-кнопка:hover {
background: #4a56d7 !important;
}
`,
}),
this.сэ('div', {
style: 'background:#FFF;display:flex;flex-direction:column;color:#000;border-radius:15px;padding:10px;transform:scale(1.2);',
children: [
this.сэ('div', {
style: 'display:flex;flex-direction:column;gap:10px;align-items:center;',
children: [
this.сэ('div', {
style: 'font-weight:900;text-align:center;', innerHTML: `${GM.info.script.name} by ${GM.info.script.author}`
}),
this.сэ('div', {
style: 'font-size:14px;font-weight:900;text-align:center;',
textContent: `VERSION: ${GM.info.script.version}`
}),
this.сэ('div', {
style: 'display:flex;flex-direction:row;gap:10px;',
children: [
this.сэ('div', {
style: 'display:flex;flex-direction:column;align-items:center;border:5px solid #000000;border-radius:10px;padding:15px;gap:15px;justify-content:center;',
children: [
this.сэ('div', {
style: 'font-weight:900;color:#000000;width:237px;text-align:center;',
textContent: 'YOU CAN GET AIMBOT ON MY DISCORD IF YOU WILL DONATE ME NITRO CLASSIC'
})
]
}),
this.сэ('div', {
style: 'display:flex;flex-direction:column;align-items:center;border:5px solid #5865F2;border-radius:10px;padding:15px;gap:15px;',
children: [
this.сэ('div', {
style: 'font-weight:900;color:#5865F2;', textContent: 'JOIN MY DISCORD'
}),
this.сэ('div', {
style: 'height:120px;', innerHTML: ''
}),
this.сэ('a', {
className: 'дискорд-кнопка', style: 'cursor:pointer;width:237px;height:46px;background-color:#5865F2;pointer-events:all;border-radius:5px;display:flex;flex-direction:column;opacity:1;',
children: [
this.сэ('div', {
style: 'display:flex;flex-direction:column;flex:1;align-items:center;justify-content:center;',
innerHTML: ''
})
],
onclick: эвент => {
эвент.preventDefault();
const ссылка = this.сэ('a', {
style: 'display:none;opacity:0;visible:none;pointer-events:auto;user-select:auto;',
href: GM.info.script.supportURL,
target: "_blank",
}, document.querySelector('#app'));
ссылка.click();
ссылка.remove();
}
})
]
})
]
}),
this.сэ('button', {
style: 'cursor:pointer;font-weight:900;width:130px;height:25px;appearance:none;background:white;color:black;border-radius:5px;border:3px solid black;',
className: 'кнопка-ок',
onclick: this.закрытьТекущееОкно.bind(this),
}, false, кнопка => {
const _этот = this;
const текст = 'OK';
let счётчик = 20;
this.УИТаймаутЗакрытия = установитьИнтервал((function субФункция(к) {
if (счётчик > 0) {
кнопка.textContent = `${текст} (${счётчик})`;
счётчик--;
} else {
_этот.закрытьТекущееОкно(к);
}
return субФункция;
})(), 1e3);
})
]
})
]
})
],
документ.documentElement
);
}
настройки(хранилище, состояние) {
const элемент = this.сэ('div', {
id: 'настройки',
style: 'width:100%;height:100%;position:absolute;left:0;top:0;background:#000A;display:flex;flex-direction:column;align-items:center;justify-content:center;',
onclick: событие => (событие.target === элемент && this.закрытьТекущееОкно(), true),
children: [
this.сэ('div', {
style: 'background:#FFF;display:flex;flex-direction:column;color:#000;border-radius:15px;padding:10px;align-items:center;gap:10px;padding-inline:40px;',
children: [
this.сэ('div', {
children: [
this.сэ('b', {
textContent: 'SETTINGS'
})
]
}),
this.сэ('div', {
style: 'display:flex;flex-direction:row;gap:10px;',
children: [
this.сэ('div', {
style: 'width:150px;',
children: [
this.сэ('div', {
style: 'text-align:center;',
textContent: 'AIM'
}),
this.создатьЧекбокс(хранилище, 'автоматическое_наведение', 'aim'),
this.создатьЧекбокс(хранилище, 'использовать_радиус', 'use radius'),
this.создатьЧекбокс(хранилище, 'рисовать_радиус_автоматического', 'show radius'),
this.создатьДиапазон(хранилище, 'радиус_автоматического_наведения', 'radius size', 30, 600)
]
}),
this.сэ('div', {
style: 'width:150px;opacity:0.7;',
children: [
this.сэ('div', {
style: 'text-align:center;',
textContent: 'WALLHACK'
}),
this.создатьЧекбокс(хранилище, 'показывать_линии', 'lines')
]
}),
this.сэ('div', {
style: 'width:150px;',
children: [
this.сэ('div', {
style: 'text-align:center;',
textContent: 'OTHER'
}),
this.создатьЧекбокс(хранилище, 'без_вертикальной_отдачи', 'vertical recoil'),
this.создатьЧекбокс(хранилище, 'без_анимации_отдачи', 'recoil animation')
]
})
]
})
]
})
],
oninput: событие => {
const актив = событие.target;
const тип = актив.type;
const таблицаТипЗначение = {
'checkbox': актив.checked,
'range': актив.valueAsNumber
};
const ключ = актив.getAttribute('data-storage');
if (!ключ) return;
хранилище.установить(ключ, таблицаТипЗначение[тип]);
// состояние
switch(актив.getAttribute('data-storage')) {
case 'радиус_автоматического_наведения': {
состояние.наНастройкеРадиуса = true;
break;
}
}
return true;
},
onchange: событие => {
const актив = событие.target;
const тип = актив.type;
const таблицаТипЗначение = {
'checkbox': актив.checked,
'range': актив.valueAsNumber
};
const ключ = актив.getAttribute('data-storage');
if (!ключ) return;
хранилище.установить(ключ, таблицаТипЗначение[тип]);
// состояние
switch(ключ) {
case 'радиус_автоматического_наведения': {
состояние.наНастройкеРадиуса = false;
break;
}
}
return true;
}
}, document.documentElement);
return элемент;
}
создатьДиапазон(хранилище, ключ, название='', min, max, step=1) {
return this.сэ('div', {
style: 'display:flex;flex-direction:column;gap:5px;',
children: [
this.сэ('div', {
style: 'flex:1;',
textContent: название
}),
this.сэ('input', {
type: 'range',
min: min,
max: max,
step: step,
value: хранилище.получить(ключ)
}, false, элемент => {
элемент.setAttribute('data-storage', ключ);
})
]
})
}
создатьЧекбокс(хранилище, ключ, название='') {
return this.сэ('div', {
style: 'display:flex;flex-direction:row;gap:5px;',
children: [
this.сэ('div', {
style: 'flex:1;',
textContent: название
}),
this.сэ('input', {
'data-storage': ключ,
type: 'checkbox',
checked: хранилище.получить(ключ)
}, false, элемент => {
элемент.setAttribute('data-storage', ключ);
})
]
})
}
некорректный_скрипт(причина) {
const элемент = this.сэ('div', {
style: 'width:100%;height:100%;position:absolute;left:0;top:0;background:#000A;display:flex;flex-direction:column;align-items:center;justify-content:center;',
onclick: е => (е.target === элемент && this.закрытьТекущееОкно(), true),
children: [
this.сэ('div', {
style: 'width:800px;background:#FFF;display:flex;flex-direction:column;color:#000;border-radius:15px;padding:10px;align-items:center;gap:10px;',
children: [
this.сэ('div', {
style: 'font-weight:bold;font-size:22px;',
textContent: 'WARNING',
}),
this.сэ('div', {
style: 'font-weight:bold;',
textContent: 'SCRIPT HAS TO BE UPDATED [OR ELSE IT WILL NOT WORK]'
}),
this.сэ('b', {
innerHTML: `REASON: ${причина}`,
}),
this.сэ('a', {
style: 'width:150px;text-align:center;background:#ff4040;color:white;border-radius:10px;font-weight:bold;padding-block:8px;cursor:pointer;',
textContent: 'UPDATE',
target: "_blank",
href: this._этот.ссылкаНаОбновление || `${this._этот.ссылкаНаСкрипт}.js?r=${Date.now()}`,
onclick: () => {
const функция = () => {
небезопасноеОкно.location.reload();
небезопасноеОкно.removeEventListener('focus', функция);
};
небезопасноеОкно.addEventListener('focus', функция);
}
})
]
})
]
}, document.documentElement);
return элемент;
}
}
const небезопасноеОкно = unsafeWindow;
const Прокси = Proxy;
const Обещание = Promise;
const Отразить = Reflect;
Отразить.применить = Отразить.apply;
const документ = document;
const установитьИнтервал = setInterval;
const отчиститьИнтервал = clearInterval;
const запрос = GM_xmlhttpRequest;
const Объект = Object;
const а = function(a) {try{ return atob(a) } catch {}};
Объект.прототип = Объект.prototype;
Объект.соединить = Объект.assign;
Объект.значения = Объект.values;
Объект.определитьСвойство = Объект.defineProperty;
const урс = 'url',
приЗагрузке = 'onload',
приОшибке = 'onerror',
применить = 'apply',
установить = 'set',
получить = 'get',
длина = 'length',
конструктор = 'constructor',
якорь = 'anchor',
большой = 'big',
маргнуть = 'blink',
жирный = 'bold',
символНа = 'charAt',
кодСимволаНа = 'charCodeAt',
точкаСимволаНа = 'codePointAt',
соединить = 'concat',
заканчиваетсяНа = 'endsWith',
цветШрифта = 'fontcolor',
размерШрифта = 'fontsize',
фиксированный = 'fixed',
включает = 'includes',
indexOf = 'indexOf',
курсив = 'italics',
последнийИндекс = 'lastIndexOf',
ссылка = 'link',
сравнитьЛокали = 'localeCompare',
матч = 'match',
сопоставитьВсе = 'matchAll',
нормализовать = 'normalize',
Дополнить = 'padEnd',
началоЗаполнения = 'padStart',
повторить = 'repeat',
заменить = 'replace',
заменитьВсе = 'replaceAll',
поиск = 'search',
срез = 'slice',
маленький = 'small',
разделить = 'split',
выстрелить = 'strike',
на = 'at',
к = 'constructor',
ф = '_this',
sub = 'sub',
м = 'match',
substr = 'substr',
подстрока = 'substring',
sup = 'sup',
начинаетсяС = 'startsWith',
кСтроке = 'toString',
обрезать = 'trim',
обрезатьСтарт = 'trimStart',
обрезатьЛево = 'trimLeft',
обрезатьКонец = 'trimEnd',
обрезатьПраво = 'trimRight',
toLocaleLowerCase = 'toLocaleLowerCase',
toLocaleUpperCase = 'toLocaleUpperCase',
toLowerCase = 'toLowerCase',
toUpperCase = 'toUpperCase',
значение = 'valueOf',
конструкторИгрока = /var\s\w+;return\(\w+=\w+\['call'\]\(this,\w+,\w+\['\w+'\]\['\w+'\],\w+\)\|\|this\)\['\w+'\]=function/gm,
роск = /var\s[\d\w_$]+=[\d\w_$]+;[\d\w_$]+\['[\d\w_$]+'\]\([\d\w_$]+\),[\d\w_$]+\['[\d\w_$]+'\]\([\d\w_$]+\),[\d\w_$]+\['[\d\w_$]+'\]\([\d\w_$]+\),[\d\w_$]+\['[\d\w_$]+'\]\([\d\w_$]+\),[\d\w_$]+\['[\d\w_$]+'\]=!0x0,[\d\w_$]+\['[\d\w_$]+'\]\(\);/g,
конструкторАнимации = /var\s\w+=\w+\[\w+\]\['createInterpolant'\]\(null\);/gm,
ник = /\w+\['\w+'\]\['matrixAutoUpdate'\]=!0x1,\w+\['(\w+)'\]='',\w+\['\w+'\]='white',/,
команда = /this\['([\d\w_$]+)'\]=[\d\w_$]+,this\['[\d\w_$]+'\]\['traverse'\]\(function\([\d\w_$]+\){/,
игрок = /(?<=this\[')\w+(?='\]\['name'\]='Entity)/gm,
хранилище = /this\['[\w\d_$]+'\]=\[\],this\['([\w\d_$]+)'\]={},this\['[\w\d_$]+'\]\(\);/,
держательКарты = /[a-zA-Z_$0-9]+\['[a-zA-Z_$0-9]+']\['[a-zA-Z_$0-9]+'\]\(\)>0x0&&setTimeout\([a-zA-Z_$0-9]+\['[a-zA-Z_$0-9]+'\],0x0\);/g,
фс = /this\['[a-zA-Z0-9_$]+'\]\['clear'\]\(\),this\['[a-zA-Z0-9_$]+']\['render'\]\(this\['([a-zA-Z0-9_$]+)'\],this\['[a-zA-Z0-9_$]+'\]\),/,
ркс = /,window\['innerWidth'\]\/window\['innerHeight'\],0\.01,0x3e8\)/g,
рек = /['[a-zA-Z_$]+'\]=Date\['now'\]\(\);}/g,
рРек = /return\([a-zA-Z_$]+=[a-zA-Z_$]+\['call'\]\(this\)\|\|this\)\['[a-zA-Z_$]+'\]=function\([a-zA-Z_$]+\)/g,
рекА = /\]\['material'\]\['rotation'\]=Math\['random'\]\(\)\*Math\['PI'\]\*0x2;}/g,
хА = /[a-zA-Z_$0-9]+\['[a-zA-Z_$0-9]+'\]\(new\s[a-zA-Z_$0-9]+\['[a-zA-Z_$0-9]+'\]\(0x0,-0.4,0.4\),0.3,[a-zA-Z_$0-9]+\['[a-zA-Z_$0-9]+'\]\['bind'\]\([a-zA-Z_$0-9]+,[a-zA-Z_$0-9]+\['[a-zA-Z_$0-9]+'\]\(\)\)\);/g,
т = /4,.{100}(.+).{100}";/,
иХ = /if\(void\s0x0===[a-zA-Z0-9_$]+&&\([a-zA-Z0-9_$]+=!0x1\)/g,
первыйКонструктор = /[a-zA-Z0-9_$]+\['[a-zA-Z0-9_$]+'\]\('Fists'\),/gm,
// вещь: /var\s[a-zA-Z0-9_$]+;return\([a-zA-Z0-9_$]+=[a-zA-Z0-9_$]+\['call'\]\(this,[a-zA-Z0-9_$]+\['[a-zA-Z0-9_$]+'\]\['[a-zA-Z0-9_$]+'\]\)\|\|this\)\['_blockType'\]=[a-zA-Z0-9_$]+,/g,
кИ = /{var\s[a-zA-Z0-9$_]+;return\([a-zA-Z0-9$_]+=[a-zA-Z0-9$_]+\['call'\]\(this,([a-zA-Z0-9_$]+,)?[a-zA-Z0-9_$]+\['[a-zA-Z0-9_$]+'\]\['[a-zA-Z0-9_$]+'\]/g,
и = /this\['[a-zA-Z_$]+'\]='Item'/g,
максимальноеСвйоствоПредмета = /(?<=this\[')[a-zA-Z0-9_$]+(?='\]=0xff,)/g,
свойствоИмениПредмета = /(?<=this\[')[a-zA-Z0-9$_]+(?='\]='Item',)/g,
хэш = 'hash',
локация = 'location';
запрос[м] = 0;
const с = new ВоксиомМенеджер(_);
с.инициализировать();
})();