AI Core
Essentielsai-target

ai-target pour les développeurs

L’API client d’ox_target à laquelle répond ai-target, la forme d’une option, ce que reçoit le gestionnaire d’une option, et l’export HandleInteract.

Pour vos propres lieux, PNJ et options de modèles, utilisez les points d’interaction d’AI Core : Points de la lib en TypeScript ou aiLib.Points en Lua (voir la référence de la lib). Un point s’affiche comme une invite ou comme un marqueur de ciblage, selon le choix du propriétaire, sur le script de ciblage qui tourne, quel qu’il soit, et le même onPressed s’exécute dans les deux cas. N’appelez l’API ci-dessous que pour porter un script écrit pour ox_target.

Exports

Chaque export est côté client, répond sous exports['ai-target'] comme sous exports.ox_target (ai-target fait un provide d’ox_target), et n’attend pas. Les options appartiennent à la ressource qui les a ajoutées et sont retirées quand elle s’arrête.

TargetOption

La forme d’option que prend chaque export add*, une option ou une liste. Une option sans label est ignorée.

Prop

Type

TargetResponse

Ce que reçoivent onSelect, export, event et serverEvent.

Prop

Type

addBoxZone

Ajoute une zone en forme de boîte avec des options. addSphereZone et addPolyZone fonctionnent de la même façon avec d’autres formes.

Côté : client · Attend : non

Signature
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 = { ... } })

Paramètres

Prop

Type

Retour

number : l’id de la zone. 0 quand les coordonnées sont absentes ou invalides (un avertissement est journalisé).

Exemple

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

Les zones d’une ressource sont retirées quand cette ressource s’arrête, donc le gestionnaire d’arrêt ci-dessus est facultatif. Retirez vous-même une zone quand le lieu disparaît alors que votre ressource continue de tourner.

removeZone

Retire une zone. Côté : client · Attend : non.

Signature
removeZone(id: number | string): void

id est le numéro qu’a renvoyé add*Zone, ou le name de la zone.

zoneExists

Côté : client · Attend : non.

Signature
zoneExists(id: number | string): boolean

Renvoie true tant que la zone avec ce numéro ou ce nom existe.

addModel

Place des options sur chaque entité de ces modèles (portes d’un modèle, distributeurs, bennes).

Côté : client · Attend : non

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

Paramètres

Prop

Type

Retour

Rien.

addEntity et addLocalEntity

addEntity place des options sur des entités en réseau par network id (véhicules ou peds créés par le serveur). addLocalEntity les place sur des entités par handle (un ped ou un prop créé par votre client). Chacun a un jumeau remove* qui prend les mêmes id et des noms d’options facultatifs.

Côté : client · Attend : non

Signature
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

Options globales par type

Des options sur chaque ped, véhicule, objet ou joueur.

Côté : client · Attend : non

Signature
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   // et 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 (une option rattachée à rien) n’est pas proposé. Il journalise un avertissement et ne fait rien. Placez plutôt ces actions dans le menu radial (radial de la lib).

disableTargeting

Désactive les marqueurs (true) ou les réactive (false) pour ce joueur. Côté : client · Attend : non.

Signature
disableTargeting(state: boolean): void

isActive

Côté : client · Attend : non.

Signature
isActive(): boolean

Renvoie true tant qu’au moins un marqueur est proche du joueur.

HandleInteract

L’export propre à ai-target (pas celui d’ox_target). La touche d’interaction d’AI Core l’interroge en premier : il exécute l’option qui a le focus.

Côté : client · Attend : non

Signature
HandleInteract(): boolean

Renvoie true quand une option ayant le focus a été utilisée (ou que son menu s’est ouvert), false quand rien n’a le focus, et la touche passe alors aux invites. Typé dans AiTargetClientExports. Vous n’avez pas besoin de l’appeler.

Events

Aucun pour les autres scripts.

Sur cette page