AI Core
Référence de l’APILib : client

Zones

Zones : des zones avec des callbacks d’entrée et de sortie (sphère, cylindre, polygone), vérifiées à leur propre intervalle, jamais à chaque frame.

Une zone est une zone qui exécute du code quand le joueur y entre ou en sort : entrer dans un quartier, une zone de limitation de vitesse, un marqueur qui ne se dessine qu’à proximité. Quand le joueur doit faire quelque chose à cet endroit (appuyer sur une touche, choisir une option de ciblage), utilisez plutôt un point : c’est une zone avec l’invite, le ciblage, le ped et le blip déjà câblés.

En TypeScript, chaque zone est vérifiée par l’unique vérificateur d’ai-lib pour toutes les ressources (les zones sont rangées dans une grille de 64 m, si bien qu’un million de zones coûte autant que quelques-unes). Votre ressource ne vérifie ses propres zones que lorsque ai-lib ne tourne pas. En Lua, chaque ressource exécute une tâche du planificateur pour ses zones.

new Zones

Crée un groupe de zones. Créez un groupe par fonctionnalité en haut du fichier.

Côté : client · Attend : non

Signature
new Zones()
Lua
local zones = aiLib.Zones.new()

Retour

Un groupe Zones avec les méthodes ci-dessous.

Exemple

import { Zones } from "@aicore-fivem/lib/client";

const zones = new Zones();

zones.add

Ajoute une zone, ou remplace la zone portant le même id. Quand le joueur se trouvait dans la zone remplacée, son onExit s’exécute d’abord.

Côté : client · Attend : non

Signature
zones.add(id: string, options: ZoneOptions): void
Lua
zones:add(id, options)

Paramètres

Prop

Type

ZoneOptions

Prop

Type

ZoneShape

ZoneShape est l’un de trois objets, choisi par type :

Prop

Type

En Lua, center peut être un vector3 et les points des tables { x = ..., y = ... }.

Retour

void.

Exemple

import { createLocale, notify, Zones } from "@aicore-fivem/lib/client";

const Locale = createLocale<typeof import("../../locales/en.json")>();
const zones = new Zones();

zones.add("safezone", {
  shape: { type: "cylinder", center: { x: 298.6, y: -584.5, z: 43.3 }, radius: 60, height: 30 },
  onEnter: () => notify(Locale("SAFEZONE_IN"), "info"),
  onExit: () => notify(Locale("SAFEZONE_OUT"), "info"),
});

zones.add("yard", {
  shape: {
    type: "poly",
    points: [
      { x: 1700.1, y: 2560.4 },
      { x: 1780.6, y: 2560.4 },
      { x: 1780.6, y: 2620.2 },
      { x: 1700.1, y: 2620.2 },
    ],
    minZ: 40,
    maxZ: 60,
  },
  interval: 1000,
  onEnter: () => SetPedMoveRateOverride(PlayerPedId(), 0.8),
});

Une zone dessinée dans votre panneau d’administration avec le widget zone donne des coins ; transformez-les en polygone avec polyFromCorners(corners, height) depuis @aicore-fivem/lib/shared. Le serveur peut tester les mêmes formes avec zoneContains(shape, x, y, z).

zones.remove

Retire une zone. Quand le joueur s’y trouvait, onExit s’exécute. Un id inconnu ne fait rien.

Côté : client · Attend : non

Signature
zones.remove(id: string): void
Lua
zones:remove(id)

Paramètres

Prop

Type

Retour

void.

Exemple

zones.remove("safezone");

zones.clear

Retire toutes les zones du groupe ; onExit s’exécute pour celles où se trouve le joueur.

Côté : client · Attend : non

Signature
zones.clear(): void
Lua
zones:clear()

Retour

void.

Exemple

onServerEvent("myscript:eventOver", () => zones.clear());

zones.isInside

Indique si le joueur est dans une zone, d’après sa dernière vérification.

Côté : client · Attend : non

Signature
zones.isInside(id: string): boolean
Lua
local inside = zones:isInside(id)

Paramètres

Prop

Type

Retour

boolean : true tant que le joueur est à l’intérieur ; false à l’extérieur ou pour un id inconnu. La valeur reflète la dernière vérification, elle peut donc dater de jusqu’à interval ms.

Exemple

if (zones.isInside("safezone")) return notify(Locale("NO_WEAPONS_HERE"), "error");

zones.size

Le nombre de zones que contient le groupe.

Côté : client · Attend : non

Signature
zones.size: number // propriété en lecture seule

Pas d’équivalent Lua.

Retour

number : le nombre de zones de ce groupe.

Exemple

console.log(`${zones.size} zones loaded`);

Sur cette page