- 2,867
- 1,644
В гит пишите разрабу(на англ) , он отвечает там.такая же проблема
В гит пишите разрабу(на англ) , он отвечает там.такая же проблема
А какой прогресс у тебя за 2 года?Не зря JS 2 года учил, спасибо, нансевен)
ХаыххахахааххНикакого
Установите cleo 4.4.0такая же проблема
За 2 года кажись можно миддлом уже работать )Никакого
Умею писать симпл димпл ддос арз на нодеЗа 2 года кажись можно миддлом уже работать )
А если серьёзно, просто интересно. Что ты знаешь из Натив ЖС?
До фреймворка не дошёл никакого?
You made a mistake, you can not use wait(10) on while loop, it Will freeze game, minimum is 250ms...Что такое 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
i use sometimes 10, 20 .... No problemYou made a mistake, you can not use wait(10) on while loop, it Will freeze game, minimum is 250ms...
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+ и импортПоддержку 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 }
Скоро сделаю свою, обновлëнную тему про CLEO Redux, ибо я сам один из контрибьюторов, а инфа из этой темы устарела (также могу помочь развивать эту тему).Что такое 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
/// <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();