Исходник Софт [SA/III/VC] CLEO Redux

[w0te]

Потрачен
772
488
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вот бы добавили ракнет, апи всеравно когда то закончится для скриптов(
 

Fr0z3n

Участник
50
30

Что такое CLEO Redux?​

Это та же самая CLEO библиотека, но с поддержкой JavaScript языка.
CLEO Redux поддерживает как и стандартные скомпилированные скрипты (.cs), так и скрипты написанные на языке JavaScript (.js)


CLEO Redux поддерживает GTA:SA, GTA:VC, GTA:III

Установка CLEO Redux:​

- Убедитесь, что у вас стоит CLEO 4.4, без него работать не будет.
- Загружаем последнею версию библиотеки с официального сайта (https://re.cleo.li/)
- Копируем "cleo_redux.asi" в корневую папку с игрой.
- Запускаем игру.
Если библиотека установилась, вы увидите в главном меню надпись "CLEO Redux"

Написание простого .js скрипта:​

JavaScript:
// code author: seven.
const VK_F5 = 116; // записывает в переменную ид клавиши F5, чтобы было проще.
const PLAYER = new Player(0); // получаем указатель на нашего педа.

while (true) { // бесконечный цикл
    wait(10); // задержка бесконечного цикла
    if (Pad.IsKeyPressed(VK_F5) && PLAYER.isPlaying()) { // проверяет нажатие клавиши F5
        var pos = PLAYER.getChar().getCoordinates(); // получаем координаты персонажа, они сохраняются в объект pos
        Text.PrintStringNow(`Your coordinates: X - ${pos.x} Y - ${pos.y} Z - ${pos.z}`, 1000); //  Выводим текст внизу экрана
    }
}

JavaScript:
// code author D3.Pheonix
/// <reference path=".config/sa.d.ts" />

wait(5000);
const KEY = 0x72; // F3
var toggle = 0;
var library = DynamicLibrary.Load("samp.dll");

if (!library) {
    exit("samp.dll load failed");
}

var ntDistance = Memory.ReadFloat(serverPresets(library) + 39, true);
var noBehindWalls = Memory.ReadI8(serverPresets(library) + 47, true);
var showNames = Memory.ReadI8(serverPresets(library) + 56, true);

while (true) {
wait(10);
    if (Pad.IsKeyPressed(KEY)) {
        toggle = toggle ^ 1; // XOR
            if (toggle) {
                wallhackEnable(serverPresets(library));
                Text.PrintStringNow("Wallhack ~g~Enabled", 800);
                wait(200);
            } else {
                wallhackDisable(serverPresets(library));
                Text.PrintStringNow("Wallhack ~r~Disabled", 800);
                wait(200);
            }
    }
}

function serverPresets(lib) {
    var stSamp = Memory.Read(lib + 0x21A0F8, 4, true);
    var serverPresets = Memory.Read(stSamp + 0x3C5, 4, true);
    return serverPresets;
}

function wallhackEnable(stServerPresets) {
    Memory.WriteFloat(stServerPresets + 39, 500.0, true);
    Memory.WriteI8(stServerPresets + 47, false, true);
    Memory.WriteI8(stServerPresets + 56, true, true);
}

function wallhackDisable(stServerPresets) {
    Memory.WriteFloat(stServerPresets + 39, ntDistance, true);
    Memory.WriteI8(stServerPresets + 47, noBehindWalls, true);
    Memory.WriteI8(stServerPresets + 56, showNames, true);
}

Документация по функциям - https://library.sannybuilder.com/
Подробная информация о библиотеке - https://github.com/cleolibrary/CLEO-Redux
You made a mistake, you can not use wait(10) on while loop, it Will freeze game, minimum is 250ms...
 

_razor

t.me/sssecretway | ТГК: t.me/razor_code
Автор темы
Модератор
1,912
3,110
Поддержку require не завезли, жалко

Самая простая проверка на инициализацию SA:MP

JavaScript:
function sampIsInit() { // only R1
    var samp_addrs = [0x21A0E4, 0x21A0E8, 0x21A0EC, 0x21A0B4, 0x21A10C]
    var library = DynamicLibrary.Load("samp.dll")
    if (library) {
        for (var i = 0; i < samp_addrs.length; i++) {
            var offsetValue = Memory.Read(library + samp_addrs[i], 4, true);
            if (offsetValue) {
                return true
            }
            return false
        }
    }
    return false
}
 
Последнее редактирование:
  • Нравится
Реакции: leekyrave

ufdhbi

Известный
Проверенный
1,456
863
Поддержку require не завезли, жалко

Самая простая проверка на инициализацию SA:MP

JavaScript:
function sampIsInit() { // only R1
    var samp_addrs = [0x21A0E4, 0x21A0E8, 0x21A0EC, 0x21A0B4, 0x21A10C]
    var library = DynamicLibrary.Load("samp.dll")
    if (library) {
        for (var i = 0; i < samp_addrs.length; i++) {
            var offsetValue = Memory.Read(library + samp_addrs[i], 4, true);
            if (offsetValue) {
                return true
            }
            return false
        }
    }
    return false
}
Завезли ES6+ и импорт
1644008174527.png
 
  • Нравится
Реакции: D3.Pheonix и _razor

{$FANTOMCODER .cs}

Известный
212
52

Что такое CLEO Redux?​

Это та же самая CLEO библиотека, но с поддержкой JavaScript языка.
CLEO Redux поддерживает как и стандартные скомпилированные скрипты (.cs), так и скрипты написанные на языке JavaScript (.js)


CLEO Redux поддерживает GTA:SA, GTA:VC, GTA:III

Установка CLEO Redux:​

- Убедитесь, что у вас стоит CLEO 4.4, без него работать не будет.
- Загружаем последнею версию библиотеки с официального сайта (https://re.cleo.li/)
- Копируем "cleo_redux.asi" в корневую папку с игрой.
- Запускаем игру.
Если библиотека установилась, вы увидите в главном меню надпись "CLEO Redux"

Написание простого .js скрипта:​

JavaScript:
// code author: seven.
const VK_F5 = 116; // записывает в переменную ид клавиши F5, чтобы было проще.
const PLAYER = new Player(0); // получаем указатель на нашего педа.

while (true) { // бесконечный цикл
    wait(10); // задержка бесконечного цикла
    if (Pad.IsKeyPressed(VK_F5) && PLAYER.isPlaying()) { // проверяет нажатие клавиши F5
        var pos = PLAYER.getChar().getCoordinates(); // получаем координаты персонажа, они сохраняются в объект pos
        Text.PrintStringNow(`Your coordinates: X - ${pos.x} Y - ${pos.y} Z - ${pos.z}`, 1000); //  Выводим текст внизу экрана
    }
}

JavaScript:
// code author D3.Pheonix
/// <reference path=".config/sa.d.ts" />
const KEY = 0x72; // F3
var toggle = 0;
var ntDistance;
var noBehindWalls;
var showNames;
var library;

wait(5000)

const PLAYER = new Player(0);

if (!(library = DynamicLibrary.Load("samp.dll"))) {
    exit("samp.dll load failed");
} else {
    ntDistance = Memory.ReadFloat(serverPresets(library) + 39, true);
    noBehindWalls = Memory.ReadI8(serverPresets(library) + 47, true);
    showNames = Memory.ReadI8(serverPresets(library) + 56, true);
}

while (true) {
wait(10);
    if (Pad.IsKeyPressed(KEY)) {
        toggle = toggle ^ 1; // XOR
            if (toggle) {
                wallhackEnable(serverPresets(library));
                Text.PrintStringNow("Wallhack ~g~Enabled", 800);
                wait(200);
            } else {
                wallhackDisable(serverPresets(library));
                Text.PrintStringNow("Wallhack ~r~Disabled", 800);
                wait(200);
            }
    }
}

function serverPresets(lib) {
    var stSamp = Memory.Read(lib + 0x21A0F8, 4, true);
    var serverPresets = Memory.Read(stSamp + 0x3C5, 4, true);
    return serverPresets;
}

function wallhackEnable(stServerPresets) {
    Memory.WriteFloat(stServerPresets + 39, 500.0, true);
    Memory.WriteI8(stServerPresets + 47, false, true);
    Memory.WriteI8(stServerPresets + 56, true, true);
}

function wallhackDisable(stServerPresets) {
    Memory.WriteFloat(stServerPresets + 39, ntDistance, true);
    Memory.WriteI8(stServerPresets + 47, noBehindWalls, true);
    Memory.WriteI8(stServerPresets + 56, showNames, true);
}

Документация по функциям - https://library.sannybuilder.com/
Подробная информация о библиотеке - https://github.com/cleolibrary/CLEO-Redux
Скоро сделаю свою, обновлëнную тему про CLEO Redux, ибо я сам один из контрибьюторов, а инфа из этой темы устарела (также могу помочь развивать эту тему).
Русская документация кстати тоже моих рук дело: https://re.cleo.li/docs/ru/
 
Последнее редактирование:

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,793
11,294
Пример простенького "мультичита" под названием RETARDHAX
* работает в ремастере и в сампике

Так же можете посмотреть принцип работы с конфигом, так как встроенные функции не могут создавать кфг если его не существует.

Функции:
  • спидхак (L.Alt)
  • зажимной гмкар в тс (L.Shift)
  • зажимная коллизия на тс (C)
  • починка и переворот тс (R)
  • сбив анимки (R)
  • ноу-байк
  • бесконечный бег
  • аирбрейк (R.Shift, скорость: +/-)
Все бинды можно менять в ини файлике
Требования: vkeys.ts
TypeScript:
/// <reference path=".config/sa.d.ts" />
// by chapo and neverlane специально для дани петрова

import { VKCodes } from "./vkeys";
const { VK_C, VK_SPACE, VK_W, VK_A, VK_S, VK_D, VK_SHIFT, VK_OEM_PLUS, VK_OEM_MINUS, VK_RSHIFT, VK_LMENU, VK_R } = VKCodes;

let airbrakeState = false;
let speed = 1;
let speed_step = 0.5;

interface RetardSettings {
    clearAnimation: number,
    clearAnimationKey: string,
    gmCar: number,
    gmCarKey: string,
    shCar: number,
    shCarKey: string,
    colCar: number,
    colCarKey: string,
    fixCar: number,
    fixCarKey: string,
    infinityRun: number,
    noBike: number
}

class Config {
    read(file: string, defaultValue: RetardSettings): RetardSettings {
        //@ts-ignore
        const settings: RetardSettings = {};
        for (const key of Object.keys(defaultValue)) {
            const value = (typeof(defaultValue[key]) == 'number' ? IniFile.ReadInt(file, 'main', key) : IniFile.ReadString(file, 'main', key));
            //@ts-ignore
            if (!value) IniFile[typeof(defaultValue[key]) == 'number'? 'WriteInt' : 'WriteString'](defaultValue[key], file, 'main', key);
            settings[key] = value ?? defaultValue[key];
        }
        return settings;
    }
}

const displayMessage = (msg: string, time: number | undefined | null, big = false) => {
    if (!big && HOST == 'sa_unreal') return showTextBox(msg);
    FxtStore.insert('ret', msg, false);
    Text.PrintBig('ret', time, 4);
}

const cfg: RetardSettings = new Config().read('./RetardHax.ini', {
    clearAnimation: 1,
    clearAnimationKey: 'R',
    gmCar: 1,
    gmCarKey: 'SHIFT',
    colCar: 1,
    colCarKey: 'C',
    shCar: 1,
    shCarKey: 'LMENU',
    fixCar: 1,
    fixCarKey: 'R',
    infinityRun: 1,
    noBike: 1
});

const main = (debug = false): void => {
    const ped = new Player(0);
    const char = ped.getChar();
    if (debug) char.setCoordinates(0, 0, 3);
    while (true) {
        wait(0);
        // AirBrake
        if (Pad.IsKeyDown(VK_RSHIFT)) {
            airbrakeState = !airbrakeState;
            displayMessage(`~n~~n~Airbrake by chapo: ${airbrakeState ? '~g~ENABLED' : '~r~DISABLED'}`, 500, true);
        };
        if (airbrakeState) airbrake(char);

        // other shit
        if (char.isSittingInAnyCar()) {
            char.setCanBeKnockedOffBike(cfg.noBike == 1);
            const veh = char.getCarIsUsing();
            if (Pad.IsKeyDown(VKCodes['VK_' + cfg.fixCarKey]) && cfg.fixCar) {
                veh.fix();
                const {x, y, z} = veh.getCoordinates();
                veh.setCoordinates(x, y, z);
            };
            if (Pad.IsKeyPressed(VKCodes['VK_' + cfg.shCarKey]) && cfg.shCar == 1) veh.setForwardSpeed(veh.getSpeed() + 10);
            const gm = Pad.IsKeyPressed(VKCodes['VK_' + cfg.gmCarKey]) && cfg.gmCar == 1;
            veh.setProofs(gm, gm, gm, gm, gm);
            if (cfg.colCar) veh.setCollision(!Pad.IsKeyPressed(VKCodes['VK_' + cfg.colCarKey]));
        } else {
            ped.setNeverGetsTired(cfg.infinityRun == 1);
            if (Pad.IsKeyDown(VKCodes['VK_' + cfg.clearAnimationKey]) && cfg.clearAnimation) {
                char.clearTasksImmediately();
                displayMessage('Animation cleared!');
            }
        }
    }
}

const airbrake = (char: Char): void => {
    const math_rad = (degrees: number) => degrees * (Math.PI/180);
    const air_brk_getAngle = (_speed) => [_speed * Math.sin(-math_rad(char.getHeading() - 90)), _speed * Math.cos(-math_rad(char.getHeading() - 90))]
    const p = char.getCoordinates();
    const { x: cx, y: cy, z: cz } = Camera.GetActiveCoordinates();
    const { x: px, y: py, z: pz } = Camera.GetActivePointAt();
    const camDirection = Math.atan2( (px-cx), (py-cy) ) * 180 / Math.PI;
    if (char.isSittingInAnyCar()) {
        char.getCarIsUsing().setHeading(-camDirection);
    } else {
        char.setHeading(-camDirection);
    }
 
    if (Pad.IsKeyDown(VK_OEM_PLUS)) speed += speed_step;
    if (Pad.IsKeyDown(VK_OEM_MINUS)) speed -= speed_step;
    if (speed <= 0) speed = 1;

    if (Pad.IsKeyPressed(VK_SPACE)) p.z = p.z + speed / 2;
    if (Pad.IsKeyPressed(VK_SHIFT)) p.z = p.z - speed / 2;
 
    if (Pad.IsKeyPressed(VK_W)) {
        p.x = p.x + speed * Math.sin(-math_rad(char.getHeading()));
        p.y = p.y + speed * Math.cos(-math_rad(char.getHeading()));
    }
     
    if (Pad.IsKeyPressed(VK_S)) {
        p.x = p.x - speed * Math.sin(-math_rad(char.getHeading()));
        p.y = p.y - speed * Math.cos(-math_rad(char.getHeading()));
    }

    if (Pad.IsKeyPressed(VK_A)) {
        p.x = p.x - air_brk_getAngle(speed)[0];
        p.y = p.y - air_brk_getAngle(speed)[1];
    }

    if (Pad.IsKeyPressed(VK_D)) {
        p.x = p.x + air_brk_getAngle(speed)[0];
        p.y = p.y + air_brk_getAngle(speed)[1];
    }
 
    char.setCoordinates(p.x, p.y, p.z - (char.isSittingInAnyCar() ? 0.9 : 1));
}

main();