Исходник Гайд NodeJS SAMP UDF !???

Revalto

Известный
Автор темы
532
225
Здрасце. Сегодня мы будем учиться заменять AHK на NodeJS...

1607460336552.png

Для начала установить модуль memoryjs (npm i memoryjs). Советую почитать инструкцию по установке данного модуля.

Далее мы просто берем и тырим адреса с AHK UDF (лол чё)
Samp UDF for Samp 0.3.7 R1
Samp UDF for Samp 0.3.7 R2


А теперь можешь спокойной перетаскивать функции...
Вот пару примеров:​
Code:
; AHK
getUsername() {
    if(!checkHandles())
        return ""
  
    dwAddress := dwSAMP + ADDR_SAMP_USERNAME
    sUsername := readString(hGTA, dwAddress, 25)
    if(ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return ""
    }
  
    ErrorLevel := ERROR_OK
    return sUsername
}

// NodeJS
getUserName() {
    return memoryjs.readMemory(this.hProcess.handle, this.hModule.modBaseAddr + this.ADDR_SAMP_USERNAME, "str");
}

Code:
; AHK
getPlayerHealth() {
    if(!checkHandles())
        return -1
  
    dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
    if(ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return -1
    }
  
    dwAddr := dwCPedPtr + ADDR_CPED_HPOFF
    fHealth := readFloat(hGTA, dwAddr)
    if(ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return -1
    }
  
    ErrorLevel := ERROR_OK
    return Round(fHealth)
}

// NodeJS
getPlayerHealth() {
        const cPed = memoryjs.readMemory(this.hProcess.handle, this.ADDR_CPED_PTR, "dword");
        return memoryjs.readMemory(this.hProcess.handle, cPed + this.ADDR_CPED_HPOFF, "float");
}

Можно полностью перевести AHK SAMP UDF на NodeJS. Удобно будет в виде класса, как я и начал делать:
1607460988982.png


Собственно вот исходный код: GitHub
Перевел лишь часть SAMP UDF, дальше лень...​
 

molimawka

Известный
Друг
443
647
Гитхаб: убери папку node_modules и package-lock.json. Добавь package.json.

lib.js: ты 2 раза указываешь имя процесса. Лучше дать возможность самому указывать имя процесса или брать дефолтную гта_са.ехе. Адреса и т.д. лучше вынести в другой файл и подключать через require, так будет удобнее менять адрес если что и сделать мультиверсию (р1-р3).
 
Последнее редактирование:

Revalto

Известный
Автор темы
532
225
Гитхаб: убери папку node_modules и package-lock.json. Добавь package.json.

lib.js: ты 2 раза указываешь имя процесса. Лучше дать возможность самому указывать имя процесса или брать дефолтную гта_са.ехе. Адреса и т.д. лучше вынести в другой файл и подключать через require, так будет удобнее менять адрес если что и сделать мультиверсию (р1-р3).
Я просто проводил много тестов и кусками переносил в класс, вот и остались остатки :)
Да, конечно. Я задумался о вынесение адресов в JSON файл. Но когда заметил, что половина адресов не находится в переменных, а напрямую указываются в функцию, то собственно и решил оставить на потом ;D

Причины почему я залил node_modules:
- Есть возможность, что memoryjs попусту не установится, поэтому я сразу закинул с node_modules ;D

UPDATE
- Добавил package.json, удалил node_modules, package_lock.json
- Разбил основной файл на несколько классов
- Добавил работу с диалогим (не полностью)
- Добавил работу с чатом (не полностью)
JavaScript:
const UDF = require('../index');
const udf = new UDF();

udf.updates.on('message_new', str => {
    console.log(str); // Вывод в консоль

    // Обрабатываем сообщение
});

udf.Chat.startPolling(); // Запуск чтения
-Что-то еще сделал, но я уже не помню что...
 
Последнее редактирование: