Javascript

From FiveM Wikipedia

Написание сценариев на JavaScript

FiveM поддерживает JavaScript в качестве языка сценариев. Чтобы использовать JavaScript, просто используйте .js в имени файла скрипта.

FiveM имеет встроенную стандартную библиотеку ES2017. FiveM также реализует WHATWG-совместимый API (некоторые редко используемые методы пока не реализованы).console

Обратите внимание, что FiveM (на клиенте) не включает в себя браузер или API.js специфичные для Node, такие как как DOM, localStorage, IndexedDB, WebGL и т.д.

Использование нативных носителей

Собственные команды сопоставляются с глобальными функциями JavaScript с именами, похожими на сопоставление собственных пользователей Lua. Определения для они расположены по адресу .path\to\fivem\FiveM.app\citizen\scripting\v8\natives_universal.d.ts

Для автоматического завершения методов FiveM API и сопоставленных нативных функций мы рекомендуем использовать официальные пакеты NPM @citizenfx/клиент и @citizenfx/сервер соответственно.

Пример:

// The native command GET_PLAYER_PED translates to the following:
GetPlayerPed(-1);

Использование API node.js

FiveM включает в себя настроенную версию Node.js 16.x на сервере. Вы можете просто использовать в сервере сценарии, и он разрешит пакет либо из Node.js встроенных компонентов, либо из папки в вашем ресурсе каталог.requirenode_modules/

Чтобы автоматически установить и обновить Yarn при запуске, убедитесь, что ресурс запущен перед запуском ресурса или предпочтительно добавьте его в качестве элемента в манифест ресурса.package.jsonyarndependency

Использование экспорта

Прокси-объект для обработки экспорта. Экспорт может быть вызван с помощью (или с помощью скобки) syntax: ), экспорт может быть добавлен с помощью .exports.resourceName.exportNameexports['resourceName']['exportName']exports('func', () => 42)

Пример:

exports('myFunc', (arg) => {
  console.log(arg);
});

on('onClientGameTypeStart', () => {
  exports.spawnmanager.setAutoSpawnCallback(() => {
    exports.spawnmanager.spawnPlayer({
      x: 686.245,
      y: 577.950,
      z: 130.461,
      model: 'a_m_m_skater_01'
    }, () => {
      emit('chat:addMessage', {
        args: [
          'Hi, there!'
        ]
      })
    });
  });

  exports.spawnmanager.setAutoSpawn(true)
  exports.spawnmanager.forceRespawn()
});

Поддержка TypeScript

Определения для API JavaScript FiveM доступны в виде файла определения TypeScript, который может быть найден по адресу , что позволит для обеспечения автоматического завершения методов FiveM API и сопоставленных собственных функций.path\to\fivem\FiveM.app\citizen\scripting\v8\natives_universal.d.ts

Для набора текста используются официальные пакеты NPM @citizenfx/клиент и @citizenfx/сервер. Эти пакеты также рекомендуются для автоматического завершения.

Готчи

Сродство нитей

В среде выполнения Node.js все обратные вызовы, инициируемые Node.js, будут выполняться в отдельном потоке, в котором размещен libuv цикл событий. Поскольку нативные серверы CitizenFX могут быть вызваны только в основном игровом потоке, попытка вызвать любую волю, скорее всего, привести к ошибке "Нет текущего менеджера ресурсов".

Чтобы устранить эту проблему, запланируйте обратный вызов, который будет выполняться в основном потоке, если вы собираетесь вызвать любые нативные серверы.setImmediate

Например:

const root = GetResourcePath(GetCurrentResourceName());

// wrong
fs.readFile(`${root}/test.txt`, { encoding: 'utf8' }, (err, data) => {
  emitNet('chat:addMessage', -1, { // this call will error out due to thread affinity
    args: [ data ]
  });
});

// right
fs.readFile(`${root}/test.txt`, { encoding: 'utf8' }, (err, data) => {
  setImmediate(() => { // the callback will be called next game tick
    emitNet('chat:addMessage', -1, {
      args: [ data ]
    });
  });
});

Обратите внимание, что при вложении Node.js обратных вызовов и не использовании собственных носителей между ними, вам не нужно планировать код обратно в основной поток, и рекомендуется не делать этого ради производительности.

Функции в JavaScript

  • on (псевдоним: addEventListener, AddEventHandler)
  • onNet (псевдоним: addNetEventListener)
  • RegisterNetEvent (псевдоним: RegisterServerEvent)
  • испускать
  • emitNet (псевдоним: TriggerClientEvent, TriggerServerEvent)
  • addRawEventListener (псевдоним: addRawEventHandler)
  • удалитьСобытиеСписыватель
  • setБилк
  • clearБилк

См. справочник по сценариям, например, использование этих функций.


Среды выполнения сценариев