Javascript
Написание сценариев на 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Билк
См. справочник по сценариям, например, использование этих функций.