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
new Zones()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
zones.add(id: string, options: ZoneOptions): voidzones: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
zones.remove(id: string): voidzones: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
zones.clear(): voidzones: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
zones.isInside(id: string): booleanlocal 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
zones.size: number // propriété en lecture seulePas d’équivalent Lua.
Retour
number : le nombre de zones de ce groupe.
Exemple
console.log(`${zones.size} zones loaded`);Points d’interaction
Points : chaque endroit qu’un joueur utilise (comptoirs, boutiques, portes, PNJ, distributeurs, coffres de véhicules) sous forme d’invite ou d’option de ciblage, avec peds, blips et points construits à partir des enregistrements du panneau.
Peds, blips et props
LocalPed, Blips, createBlip, attachProp, PreviewVehicle et player.holdAnim : PNJ locaux, blips sur la carte, props tenus en main, véhicules de showroom et animations maintenues.