ai-target для разработчиков
Клиентский API ox_target, на который отвечает ai-target, формат опции, что получает обработчик опции, и экспорт HandleInteract.
Для своих мест, NPC и опций на моделях используйте точки взаимодействия AI Core: Points из lib в TypeScript или aiLib.Points в Lua (см. справочник lib). Точка показывается как подсказка или как маркер target, как выбрал владелец, на любом запущенном скрипте target, и в обоих случаях выполняется тот же onPressed. Вызывайте API ниже, только когда переносите скрипт, написанный для ox_target.
Экспорты
Каждый экспорт клиентский, отвечает и под exports['ai-target'], и под exports.ox_target (ai-target делает provide для ox_target) и не ждёт. Опции принадлежат ресурсу, который их добавил, и удаляются, когда он останавливается.
TargetOption
Формат опции, который принимает каждый экспорт add*, одна опция или список. Опция без label пропускается.
Prop
Type
TargetResponse
Что получают onSelect, export, event и serverEvent.
Prop
Type
addBoxZone
Добавляет зону в форме параллелепипеда с опциями. addSphereZone и addPolyZone работают так же с другими формами.
Сторона: клиент · Ожидание: нет
addBoxZone(data: { coords: Vec3; size?: Vec3; rotation?: number; name?: string; options: TargetOption | TargetOption[] }): number
addSphereZone(data: { coords: Vec3; radius?: number; name?: string; options: TargetOption | TargetOption[] }): number
addPolyZone(data: { points: Vec3[]; thickness?: number; name?: string; options: TargetOption | TargetOption[] }): numberlocal id = exports.ox_target:addBoxZone({ coords = vec3(x, y, z), size = vec3(2, 2, 2), rotation = 0, options = { ... } })Параметры
Prop
Type
Возвращает
number: id зоны. 0, если координаты отсутствуют или некорректны (в лог пишется предупреждение).
Пример
import { callExport } from "@aicore-fivem/lib/client";
const zone = callExport("ox_target", "addBoxZone", {
coords: { x: 441.8, y: -982.0, z: 30.7 },
size: { x: 1.5, y: 1.5, z: 2 },
rotation: 0,
options: [
{
name: "duty",
label: "Go on duty",
icon: "clipboard-check",
groups: "police",
onSelect: () => emitNet("myscript:toggleDuty"),
},
],
}) as number;
on("onResourceStop", (name: string) => {
if (name === GetCurrentResourceName()) callExport("ox_target", "removeZone", zone);
});Зоны ресурса удаляются, когда этот ресурс останавливается, поэтому обработчик остановки выше необязателен. Удаляйте зону сами, когда место исчезает, а ваш ресурс продолжает работать.
removeZone
Удаляет зону. Сторона: клиент · Ожидание: нет.
removeZone(id: number | string): voidid является номером, который вернул add*Zone, или name зоны.
zoneExists
Сторона: клиент · Ожидание: нет
zoneExists(id: number | string): booleanВозвращает true, пока существует зона с этим номером или именем.
addModel
Ставит опции на каждую сущность этих моделей (двери модели, банкоматы, мусорные контейнеры).
Сторона: клиент · Ожидание: нет
addModel(models: string | number | Array<string | number>, options: TargetOption | TargetOption[]): void
removeModel(models: string | number | Array<string | number>, names?: string | string[]): voidexports.ox_target:addModel({ 'prop_atm_01', 'prop_atm_02' }, { { name = 'atm', label = 'Use ATM', icon = 'credit-card', onSelect = openAtm } })Параметры
Prop
Type
Возвращает
Ничего.
addEntity и addLocalEntity
addEntity ставит опции на сетевые сущности по network id (транспорт или педы, созданные сервером). addLocalEntity ставит их на сущности по хэндлу (пед или проп, созданный вашим клиентом). У каждого есть двойник remove*, который принимает те же id и необязательные имена опций.
Сторона: клиент · Ожидание: нет
addEntity(netIds: number | number[], options: TargetOption | TargetOption[]): void
removeEntity(netIds: number | number[], names?: string | string[]): void
addLocalEntity(entities: number | number[], options: TargetOption | TargetOption[]): void
removeLocalEntity(entities: number | number[], names?: string | string[]): voidГлобальные опции по типу
Опции на каждом педе, транспорте, объекте или игроке.
Сторона: клиент · Ожидание: нет
addGlobalPed(options: TargetOption | TargetOption[]): void
addGlobalVehicle(options: TargetOption | TargetOption[]): void
addGlobalObject(options: TargetOption | TargetOption[]): void
addGlobalPlayer(options: TargetOption | TargetOption[]): void
removeGlobalPed(names?: string | string[]): void // и removeGlobalVehicle, removeGlobalObject, removeGlobalPlayerexports.ox_target:addGlobalVehicle({
{ name = 'myscript_wash', label = 'Wash vehicle', icon = 'soap', distance = 2.0,
canInteract = function(entity) return GetVehicleDirtLevel(entity) > 5.0 end,
onSelect = function(data) TriggerServerEvent('myscript:wash', VehToNet(data.entity)) end },
})addGlobalOption (опция ни на чём) не предоставляется. Он пишет предупреждение в лог и ничего не делает. Помещайте такие действия в радиальное меню (radial из lib).
disableTargeting
Выключает маркеры (true) или снова включает их (false) для этого игрока. Сторона: клиент · Ожидание: нет.
disableTargeting(state: boolean): voidisActive
Сторона: клиент · Ожидание: нет
isActive(): booleanВозвращает true, пока рядом с игроком есть хотя бы один маркер.
HandleInteract
Собственный экспорт ai-target (не из ox_target). Клавиша взаимодействия AI Core спрашивает его первым: он выполняет опцию в фокусе.
Сторона: клиент · Ожидание: нет
HandleInteract(): booleanВозвращает true, если опция в фокусе была использована (или открылось её меню), false, если в фокусе ничего нет, и тогда клавиша переходит к подсказкам. Типизирован в AiTargetClientExports. Вызывать его вам не нужно.
События
Для других скриптов нет.