ai-vehiclekeys для разработчиков
Серверные экспорты ai-vehiclekeys, API qbx_vehiclekeys, на который он отвечает, и его события.
Чтобы выдать, забрать или проверить ключи из своего скрипта, используйте vehicleKeys.give(source, vehicle, purpose), vehicleKeys.remove и vehicleKeys.has из lib (сервер). Они идут через слой ключей ai-core и работают с любым скриптом ключей, который запущен на сервере. Экспорты ниже являются тем, что вызывает этот слой, пока ai-vehiclekeys является активной системой ключей.
Все экспорты серверные, синхронные и отвечают и под ai-vehiclekeys, и под qbx_vehiclekeys. Транспорт задаётся хэндлом серверной сущности (число) или номером (текст). Номера сравниваются в нормализованном виде (пробелы и регистр не важны).
import { resourceExport, callExport } from "@aicore-fivem/lib/server";
const keys = resourceExport("ai-vehiclekeys"); // типизированы: HasKeys, GiveKeys, RemoveKeys
// SetLockState и IsPlayerNearVehicle не типизированы: callExport("ai-vehiclekeys", "SetLockState", vehicle, "lock")Серверные экспорты
HasKeys
Есть ли у игрока ключ от транспорта: как у владельца, как у участника работы или банды, которой он принадлежит, или через ключ, выданный в эту сессию.
Сторона: сервер · Ожидание: нет
HasKeys(source: number, vehicle: number | string): booleanlocal has = exports['ai-vehiclekeys']:HasKeys(source, vehicle)Параметры
Prop
Type
Возвращает
true, если у игрока есть ключ. Иначе false, в том числе для несуществующей сущности.
Пример
import { resourceExport } from "@aicore-fivem/lib/server";
const keys = resourceExport("ai-vehiclekeys");
onNet("myscript:openTrunk", (netId: number) => {
const source = globalThis.source;
const vehicle = NetworkGetEntityFromNetworkId(netId);
if (!keys.HasKeys(source, vehicle)) return;
// ... открыть багажник
});GiveKeys
Выдаёт игроку ключ на эту сессию. Игрок хранит его, пока не выйдет с сервера или не сменит персонажа. Выдача ключа, который у игрока уже есть, ничего не делает.
Сторона: сервер · Ожидание: нет
GiveKeys(source: number, vehicle: number | string): voidexports['ai-vehiclekeys']:GiveKeys(source, vehicle)Параметры
Prop
Type
Возвращает
Ничего. Если игрок прямо сейчас сидит в этом транспорте, его клиенту сообщается (ai-vehiclekeys:client:granted): блокировка двигателя снимается, и двигатель заводится.
RemoveKeys
Забирает у игрока ключ сессии. Ключи владения (владелец, автопарк работы или банды) забрать нельзя: они следуют за владельцем транспорта.
Сторона: сервер · Ожидание: нет
RemoveKeys(source: number, vehicle: number | string): voidexports['ai-vehiclekeys']:RemoveKeys(source, vehicle)Возвращает
Ничего.
SetLockState
Запирает или отпирает транспорт на сервере без какой-либо проверки ключа.
Сторона: сервер · Ожидание: нет
SetLockState(vehicle: number, state: "lock" | "unlock" | boolean | number): voidexports['ai-vehiclekeys']:SetLockState(vehicle, 'lock')Параметры
Prop
Type
Возвращает
Ничего. Несуществующая сущность ничего не делает.
IsPlayerNearVehicle
Стоит ли игрок в пределах 5 м от транспорта.
Сторона: сервер · Ожидание: нет
IsPlayerNearVehicle(source: number, vehicle: number): booleanlocal near = exports['ai-vehiclekeys']:IsPlayerNearVehicle(source, vehicle)Возвращает
true в пределах 5 м. false, если дальше или если любой из аргументов не число.
События
Собственные события ai-vehiclekeys внутренние (клиентские колбэки между его клиентом и сервером). Не вызывайте их из других скриптов.
| Имя | Тип | Что делает |
|---|---|---|
ai-vehiclekeys:check | client callback | (netId) -> boolean: есть ли у игрока ключ, запрашивается, когда он садится. |
ai-vehiclekeys:toggleLock | client callback | (netId) -> { ok, locked? }: клавиша замка. |
ai-vehiclekeys:giveNearest | client callback | (netId) -> { ok }: передать ключи ближайшему игроку. |
ai-vehiclekeys:client:granted | сервер к клиенту | (netId): ключ пришёл, пока игрок сидит в этом транспорте; двигатель может завестись. |
Используемый предмет
lockpick регистрируется как используемый предмет через слой инвентаря ai-core. Предмет расходуется, только когда ломается.