AI Core
Grundlagenai-target

ai-target für Entwickler

Die Client-API von ox_target, die ai-target beantwortet, die Struktur der Optionen, was der Handler einer Option bekommt, und der Export HandleInteract.

Für deine eigenen Orte, NPCs und Modelloptionen nutze die Interaktionspunkte von AI Core: Points der Lib in TypeScript oder aiLib.Points in Lua (siehe die Lib-Referenz). Ein Punkt erscheint als Prompt oder als Target-Marker, je nachdem, was der Betreiber gewählt hat, auf dem gerade laufenden Target-Skript, und in beiden Fällen läuft dasselbe onPressed. Rufe die API unten nur auf, wenn du ein für ox_target geschriebenes Skript portierst.

Exports

Jeder Export läuft clientseitig, antwortet sowohl unter exports['ai-target'] als auch unter exports.ox_target (ai-target providet ox_target) und wartet nicht. Optionen gehören der Ressource, die sie hinzugefügt hat, und werden entfernt, wenn sie stoppt.

TargetOption

Die Optionsstruktur, die jeder add*-Export nimmt, eine Option oder eine Liste. Eine Option ohne label wird weggelassen.

Prop

Type

TargetResponse

Was onSelect, export, event und serverEvent bekommen.

Prop

Type

addBoxZone

Fügt eine quaderförmige Zone mit Optionen hinzu. addSphereZone und addPolyZone funktionieren genauso mit anderen Formen.

Seite: Client · Wartet: nein

Signatur
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[] }): number
Lua
local id = exports.ox_target:addBoxZone({ coords = vec3(x, y, z), size = vec3(2, 2, 2), rotation = 0, options = { ... } })

Parameter

Prop

Type

Rückgabewert

number: die Zonen-ID. 0, wenn die Koordinaten fehlen oder ungültig sind (eine Warnung wird geloggt).

Beispiel

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);
});

Zonen einer Ressource werden entfernt, wenn diese Ressource stoppt, der Stop-Handler oben ist also optional. Entferne eine Zone selbst, wenn der Ort wegfällt, während deine Ressource weiterläuft.

removeZone

Entfernt eine Zone. Seite: Client · Wartet: nein.

Signatur
removeZone(id: number | string): void

id ist die Nummer, die add*Zone zurückgegeben hat, oder der name der Zone.

zoneExists

Seite: Client · Wartet: nein.

Signatur
zoneExists(id: number | string): boolean

Gibt true zurück, solange die Zone mit dieser Nummer oder diesem Namen existiert.

addModel

Setzt Optionen auf jede Entity dieser Modelle (Türen eines Modells, Geldautomaten, Müllcontainer).

Seite: Client · Wartet: nein

Signatur
addModel(models: string | number | Array<string | number>, options: TargetOption | TargetOption[]): void
removeModel(models: string | number | Array<string | number>, names?: string | string[]): void
Lua
exports.ox_target:addModel({ 'prop_atm_01', 'prop_atm_02' }, { { name = 'atm', label = 'Use ATM', icon = 'credit-card', onSelect = openAtm } })

Parameter

Prop

Type

Rückgabewert

Nichts.

addEntity and addLocalEntity

addEntity setzt Optionen auf vernetzte Entities per Network-ID (Fahrzeuge oder Peds, die der Server erstellt hat). addLocalEntity setzt sie auf Entities per Handle (ein Ped oder Prop, das dein Client erstellt hat). Jeder hat ein remove*-Gegenstück, das dieselben IDs und optional Optionsnamen nimmt.

Seite: Client · Wartet: nein

Signatur
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

Globale Optionen nach Art

Optionen auf jedem Ped, Fahrzeug, Objekt oder Spieler.

Seite: Client · Wartet: nein

Signatur
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   // und removeGlobalVehicle, removeGlobalObject, removeGlobalPlayer
Lua
exports.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 (eine Option auf nichts) wird nicht angeboten. Es loggt eine Warnung und tut nichts. Lege solche Aktionen stattdessen ins Radialmenü (radial der Lib).

disableTargeting

Schaltet die Marker für diesen Spieler aus (true) oder wieder ein (false). Seite: Client · Wartet: nein.

Signatur
disableTargeting(state: boolean): void

isActive

Seite: Client · Wartet: nein.

Signatur
isActive(): boolean

Gibt true zurück, solange mindestens ein Marker in der Nähe des Spielers ist.

HandleInteract

Der eigene Export von ai-target (nicht der von ox_target). Die Interaktionstaste von AI Core fragt ihn zuerst: Er führt die Option im Fokus aus.

Seite: Client · Wartet: nein

Signatur
HandleInteract(): boolean

Gibt true zurück, wenn eine Option im Fokus benutzt (oder ihr Menü geöffnet) wurde, false, wenn nichts im Fokus ist, sodass die Taste an die Hinweise weitergeht. Typisiert in AiTargetClientExports. Du musst ihn nicht aufrufen.

Events

Keine für andere Skripte.

Auf dieser Seite