Interactions
Format des options de config_interactions.lua — listes joueurs, soi-même, véhicules, PNJ, objets, modèles et zones, champs communs, types d’action, objet target et builtins.
But : écrire et comprendre chaque option du menu.
Fichier à modifier : config_interactions.lua (côté client). Redémarrez la ressource après modification : les options sont construites une seule fois, au démarrage.
Les listes
| Liste | Cible | Distance par défaut |
|---|---|---|
Config.PlayerInteractions |
autres joueurs | Distances.player |
Config.SelfInteractions |
votre propre personnage | sans effet |
Config.VehicleInteractions |
tous les véhicules | Distances.vehicle |
Config.PedInteractions |
tous les PNJ | Distances.ped |
Config.ObjectInteractions |
tous les objets | Distances.object |
Config.ModelInteractions |
modèles précis | Distances.default |
Config.ZoneInteractions |
zones box ou sphere | Distances.default |
Les options d’une liste s’affichent dans l’ordre du fichier. Sur un véhicule, les options d’origine d’ox_target (portes, capot, coffre) apparaissent avant celles de VehicleInteractions, puis viennent les options de modèle et les options de zone.
Champs communs
| Champ | Type | Rôle |
|---|---|---|
name |
string, obligatoire | Identifiant unique dans sa liste. Une option sans name est ignorée. |
label |
string | Texte affiché ; vaut name s’il est absent. |
icon |
string | Classes Font Awesome, ex. 'fa-solid fa-star'. La NUI charge Font Awesome Free depuis un CDN, sans version fixée. |
iconColor |
string | Couleur CSS de l’icône. |
description |
string | Texte affiché sous le menu au survol. |
menu |
string | Sous-menu dans lequel l’option apparaît (le opens d’une catégorie). |
separatorAfter |
boolean | Trait de séparation après l’option. |
distance |
number | Distance max en mètres (voir tableau ci-dessus). |
enabled |
false ou fonction |
false : option non créée. Fonction évaluée une fois au démarrage ; une erreur ou un retour false désactive l’option. |
permission |
string | Clé de Config.Permissions, ou 'everyone', 'staff', 'admin'. Une clé inconnue masque toujours l’option. |
jobs |
table ou string | { 'police' }, { police = 2 } (grade minimum) ou 'police'. Affichage uniquement. |
groups, items, anyItem |
— | Filtres natifs d’ox_target (groupes framework, items possédés). |
bones, offset, absoluteOffset, offsetSize |
— | Ciblage d’un os ou d’une position précise de l’entité (champs natifs). |
canInteract |
fonction | function(entity, distance, coords, name, bone) → booléen, évaluée à chaque rafraîchissement. |
Types d’action
Une option déclare son action avec onSelect, un type ou un builtin. Si onSelect est présent, il est prioritaire.
| Déclaration | Effet |
|---|---|
onSelect = function(target) … end |
Votre code Lua, reçoit l’objet target. |
type = 'category', opens = 'mon_menu' |
Ouvre un sous-menu ; opens vaut name s’il est absent. |
type = 'emote', emote = 'wave' |
Bridge.PlayEmote('wave'). |
type = 'shared_emote', emote = 'hug' |
Bridge.PlaySharedEmote('hug', target.serverId) ; prévu pour les joueurs. |
type = 'client_event', event = 'res:event' |
TriggerEvent(event, target, …args). |
type = 'server_event', event = 'res:event' |
TriggerServerEvent(event, payload, …args) — non sécurisé. |
type = 'server_action', action = 'nom' |
Action sécurisée de Config.ServerActions ; args peut être une table ou function(target). |
type = 'export', resource = 'res', export = 'Fn' |
exports.res:Fn(target). |
type = 'command', command = 'cmd {id}' |
ExecuteCommand ; {id} est remplacé par l’ID serveur ciblé (vide hors joueurs). |
type = 'checkbox', default = false |
Case à cocher mémorisée ; voir Catégories et cases à cocher. |
builtin = 'nom' |
Fonctionnalité intégrée (voir plus bas). |
Pour client_event et server_event, un champ args = { … } ajoute des arguments après l’objet transmis. Pour server_event, l’objet transmis est { serverId, netId, coords, name, kind }.
Objet target
Les callbacks onSelect, les événements client_event, les exports et la fonction args d’une server_action reçoivent :
| Champ | Contenu |
|---|---|
entity |
Handle de l’entité ciblée (votre ped pour Soi-même). |
coords, distance |
Point visé et distance au moment du clic. |
zone |
Identifiant de zone, pour les options de zone. |
kind |
'player', 'self', 'vehicle', 'ped', 'object', 'model' ou 'zone'. |
name |
name de l’option. |
isSelf |
true pour la liste Soi-même. |
serverId |
ID serveur du joueur ciblé (ou le vôtre pour Soi-même). |
netId |
Network ID si l’entité est en réseau. |
model, entityType |
Modèle et type d’entité (hors Soi-même). |
plate |
Plaque, pour un véhicule. |
{
name = 'check_plate', label = 'Lire la plaque', icon = 'fa-solid fa-id-card',
onSelect = function(target)
print(target.kind, target.plate, target.netId)
end
},
Builtins
Les builtins sont des fonctionnalités intégrées. Chacun n’est accepté que dans certaines listes : ailleurs, le moteur l’ignore avec un avertissement. Les builtins sensibles gardent leur permission serveur même si vous retirez le champ permission de l’entrée.
| Builtin | Listes | Fonctionnalité / Permission | Effet |
|---|---|---|---|
copy_id | Joueurs | Features.copyId | Copie l’ID serveur du joueur ciblé dans le presse-papiers. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
show_player_id | Joueurs | Features.showPlayerId | Affiche l’ID serveur du joueur ciblé. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
copy_emote | Joueurs | Features.copyEmote | Demande au joueur ciblé son emote en cours et la rejoue. Contrôle serveur : Distance joueur, cooldown 1,5 s ; la réponse doit avoir été sollicitée et arriver sous 5 s. |
rps_challenge | Joueurs | Features.rps | Défie le joueur à Pierre Feuille Ciseaux. Contrôle serveur : Fonctionnalité rps, distance Distances.rps + tolérance, joueurs non occupés, expiration RPS.inviteTimeout. |
send_bill | Joueurs | Features.billing | Ouvre le formulaire de facture et l’envoie au script de facturation. Contrôle serveur : Pas d’action serveur du moteur : la validation dépend du script de facturation. |
admin_revive | Joueurs | Features.medical Permissions.revive | Réanime le joueur ciblé. Contrôle serveur : Permission revive, fonctionnalité medical, script médical disponible, distance Distances.player, cooldown 1 s. |
admin_heal | Joueurs | Features.medical Permissions.heal | Soigne le joueur ciblé. Contrôle serveur : Permission heal, fonctionnalité medical, distance Distances.player, cooldown 1 s. |
force_emote | Joueurs | Features.forceActions Permissions.forceEmote | Fait jouer une emote saisie au joueur ciblé. Contrôle serveur : Permission forceEmote, distance, nom validé par Config.Emotes. |
force_me | Joueurs | Features.forceActions Permissions.forceMe | Fait faire un /me saisi au joueur ciblé. Contrôle serveur : Permission forceMe, distance, texte de 1 à 120 caractères, caractères de contrôle remplacés. |
show_my_id | Soi-même | — | Affiche votre ID serveur. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
me_input | Soi-même | — | Saisie d’un /me puis Bridge.Me. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
anti_punch | Soi-même | Features.antiPunch | Case à cocher mémorisée qui bloque les coups de poing à mains nues. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
self_revive | Soi-même | Features.medical Permissions.selfRevive | Réanime votre personnage selon Config.Medical.selfMode. Contrôle serveur : Permission selfRevive, fonctionnalité medical, cooldown 2 s. |
self_heal | Soi-même | Features.medical Permissions.selfHeal | Soigne votre personnage selon Config.Medical.selfMode. Contrôle serveur : Permission selfHeal, fonctionnalité medical, cooldown 2 s. |
weather_menu | toutes | Features.weather Permissions.weather | Génère tout le sous-menu météo depuis Config.Weather. Contrôle serveur : Permission weather, script météo disponible, valeurs limitées à Config.Weather, cooldown 0,5 s (3 s pour l’aléatoire). |
dev_copy_coords | Soi-même | Features.devTools Permissions.devTools | Copie vector3(x, y, z) de votre position. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
dev_copy_coords_heading | Soi-même | Features.devTools Permissions.devTools | Copie vector4(x, y, z, h). Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
dev_restore_appearance | Soi-même | Features.devTools Permissions.devTools | Recharge votre apparence via le script d’apparence. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
slash_tyre | Véhicules | Features.slashTyre | Crève le pneu le plus proche avec une arme blanche. Contrôle serveur : Distance Distances.slashTyre, index de pneu 0–7, arme en main contrôlée, cooldown 2,5 s. Visible seulement si le joueur n’est pas dans un véhicule et une arme de Config.Vehicles.slashTyre.weapons est en main. |
hide_in_trunk | Véhicules | Features.trunk | Cache le joueur dans le coffre. Contrôle serveur : Réservation serveur : un occupant par véhicule, distance Distances.trunk + tolérance + 2 m. Visible seulement si le joueur n’est pas dans un véhicule et coffre déverrouillé, proche et libre, véhicule non détruit et non exclu. |
lockpick_vehicle | Véhicules | Features.lockpick | Crochète le véhicule (barre de progression ou hook). Contrôle serveur : Métiers et item de Config.Vehicles.lockpick, distance Distances.vehicle, cooldown 3 s. Visible seulement si le joueur n’est pas dans un véhicule. |
repair_vehicle | Véhicules | Features.repair | Répare le véhicule via le preset ou le hook. Contrôle serveur : Métiers et item de Config.Vehicles.repair, retrait éventuel de l’item, distance Distances.vehicle, cooldown 3 s. Visible seulement si le joueur n’est pas dans un véhicule. |
give_keys | Véhicules | Features.giveKeys Permissions.giveKeys | Vous donne les clés du véhicule. Contrôle serveur : Permission giveKeys, distance Distances.vehicle, cooldown 1 s. |
dev_copy_vehicle_name | Véhicules | Features.devTools Permissions.devTools | Copie le nom d’affichage du modèle. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
dev_copy_plate | Véhicules | Features.devTools Permissions.devTools | Copie la plaque. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
dev_delete_entity | Véhicules, PNJ, Objets | Features.devTools Permissions.devTools | Supprime l’entité ciblée (jamais un joueur). Contrôle serveur : Permission devTools, distance Distances.devTools ; les entités locales sont supprimées chez tous les clients à ±1,5 m. Visible seulement si la cible n’est pas un joueur. |
dev_copy_ped_model | PNJ | Features.devTools Permissions.devTools | Copie le hash du modèle du PNJ. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
dev_clone_ped | PNJ | Features.devTools Permissions.devTools | Applique le modèle du PNJ à votre joueur. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
dev_copy_prop_name | Objets | Features.devTools Permissions.devTools | Copie le nom d’archétype du prop. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
dev_copy_prop_full | Objets | Features.devTools Permissions.devTools | Copie nom, vector3 et heading du prop. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
dev_scan_props | Objets | Features.devTools Permissions.devTools | Liste dans F8 les props dans Config.DevTools.scanRadius. Contrôle serveur : Aucune action serveur : exécuté uniquement côté client. |
Dans les listes Modèles et Zones, seul weather_menu est accepté : les autres builtins déclarent des listes précises qui n’incluent pas ces deux types.
Modèles
Config.ModelInteractions = {
{
models = { 'prop_atm_01', 'prop_atm_02' },
options = {
{ name = 'atm_use', label = 'Utiliser le distributeur', icon = 'fa-solid fa-money-bill', type = 'client_event', event = 'ma_banque:ouvrirAtm' },
},
},
}
ma_banque:ouvrirAtm est un nom d’exemple. models accepte des noms ou des hashs. Les options de modèle activent le contour (ox_target:drawOutline) sur ces objets.
Zones
Config.ZoneInteractions = {
{
shape = 'box', name = 'pd_duty', coords = vec3(441.0, -981.0, 30.7), size = vec3(1.5, 1.5, 2.0), rotation = 0,
options = {
{ name = 'pd_duty', label = 'Prendre son service', icon = 'fa-solid fa-clipboard', jobs = { 'police' }, type = 'server_event', event = 'mon_pd:service' },
},
},
{
shape = 'sphere', coords = vec3(-1037.5, -2737.8, 20.2), radius = 1.2,
options = {
{ name = 'info_desk', label = 'Accueil', icon = 'fa-solid fa-circle-info', type = 'command', command = 'aide' },
},
},
}
Champs lus par le registre : shape, coords, size, radius, rotation, debug, drawSprite, name et options. Seules 'box' et 'sphere' sont prises en charge : toute autre valeur de shape est traitée comme une boîte. Les zones polygonales existent via l’export addPolyZone (voir API) mais pas via Config.ZoneInteractions.
Format simplifié et format natif
config_interactions.lua utilise un format simplifié, traduit par le moteur vers le format natif d’ox_target :
| Format simplifié | Format natif produit |
|---|---|
menu |
menuName |
type = 'category', opens |
isCategory = true, openMenu |
type = 'checkbox', default |
isCheckbox = true, checked |
distance absent |
distance résolue depuis Config.Distances |
permission, jobs, enabled |
condition canInteract combinée |
actions (type, builtin) |
onSelect interne |
Dans vos propres ressources, les exports d’ox_target (addGlobalVehicle, addModel…) attendent le format natif : menuName et openMenu, pas menu et opens. Les champs type, builtin, permission et jobs n’y existent pas.
Erreurs fréquentes
- Option invisible :
permissionabsente deConfig.Permissions,menusans catégorie correspondante, ou fonctionnalité désactivée. - Builtin dans la mauvaise liste : F8 affiche « le builtin ‘…’ n’est pas utilisable dans la liste ‘…’ ».
enabled = function()qui dépend du joueur : évaluée au démarrage, avant que le personnage soit chargé. UtilisezcanInteractpour une condition dynamique.server_eventpour une action sensible : le serveur ne vérifie rien ; utilisez uneserver_action.