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

[w0te]

Известный
772
493
Вот бы добавили ракнет, апи всеравно когда то закончится для скриптов(
 

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,954
3,234
Поддержку 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,463
867
Поддержку 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
53

Что такое 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

tg/inst: @moujeek
Модератор
9,063
12,017
Пример простенького "мультичита" под названием 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();