MrPoulpi Labs
ox_target

Scripts disponibles

EN
Centre de documentation

Hooks et actions serveur

Hooks client et serveur qui remplacent les presets du bridge, routines client déclenchables par le serveur et actions serveur sécurisées de Config.ServerActions avec leur contexte ctx.

But : brancher votre propre code là où aucun preset ne convient, et créer des actions contrôlées par le serveur. Fichiers : config_client.lua (Config.ClientHooks) et config_server.lua (Config.ServerHooks, Config.ServerActions).

Principe des hooks

Un hook défini remplace le preset correspondant : le bridge appelle votre fonction et n’exécute plus le code du preset. Laissez un hook à nil (non défini) pour garder le preset choisi dans config.lua. Les hooks serveur sont appelés après les contrôles du moteur : inutile d’y revérifier la permission de l’action qui les déclenche.

Quelques hooks changent aussi la disponibilité d’une option : définir SendBill, GiveVehicleKeys ou RestoreAppearance rend l’option correspondante disponible même avec le sélecteur sur 'custom'.

Exception notable : avec Config.Medical.nativeHealFallback = true, le heal natif complémentaire s’applique après votre hook HealSelf ou HealPlayer.

Hooks client

Hook Signature Retour Utilisation
Notify Config.ClientHooks.Notify(message, ntype, duration) rien Toute notification client. ntype : info, success, error, warning, primary.
TextInput Config.ClientHooks.TextInput(title, label, maxLength) la chaîne saisie ou nil /me, emote forcée, /me forcé.
InputDialog Config.ClientHooks.InputDialog(title, rows) un tableau de valeurs ou nil (format ox_lib inputDialog) Formulaire de facture.
Confirm Config.ClientHooks.Confirm(title, text) true pour confirmer ; toute autre valeur vaut refus Invitation Pierre Feuille Ciseaux.
ProgressBar Config.ClientHooks.ProgressBar(data) true si terminée ; toute autre valeur vaut annulation Crochetage, réparation native, crevaison, coffre (format ox_lib progressBar).
ShowTextUI Config.ClientHooks.ShowTextUI(text) rien Texte affiché dans le coffre.
HideTextUI Config.ClientHooks.HideTextUI() rien Masque le texte du coffre.
GetPlayerJob Config.ClientHooks.GetPlayerJob() { name = 'police', grade = 2 } ou nil Filtres jobs d’affichage, facturation, crochetage, réparation.
HasItem Config.ClientHooks.HasItem(itemName, count) booléen Affichage du crochetage et de la réparation (item requis).
PlayEmote Config.ClientHooks.PlayEmote(emote) rien Type emote, copie et emote forcée.
PlaySharedEmote Config.ClientHooks.PlaySharedEmote(emote, targetServerId) rien Type shared_emote.
GetCurrentEmote Config.ClientHooks.GetCurrentEmote() nom de l’emote (string) ou nil Répond aux demandes de copie d’emote.
CancelEmote Config.ClientHooks.CancelEmote() rien Annulation d’emote.
Me Config.ClientHooks.Me(text) rien /me saisi, forcé et annonce PFC.
ReviveSelf Config.ClientHooks.ReviveSelf() rien self_revive avec selfMode = client.
HealSelf Config.ClientHooks.HealSelf() rien self_heal avec selfMode = client. Le heal natif complémentaire s’applique ensuite si activé.
GiveVehicleKeys Config.ClientHooks.GiveVehicleKeys(vehicle, plate, model) rien give_keys.
Rend l’option give_keys disponible.
LockpickVehicle Config.ClientHooks.LockpickVehicle(vehicle) true si réussi ; le véhicule est alors déverrouillé Remplace la barre de progression du crochetage, après validation serveur.
RepairVehicle Config.ClientHooks.RepairVehicle(vehicle) false pour signaler un échec ; toute autre valeur affiche repair_done repair_vehicle, après validation serveur.
OnTrunkEnter Config.ClientHooks.OnTrunkEnter(vehicle) rien Après l’entrée dans le coffre.
OnTrunkExit Config.ClientHooks.OnTrunkExit(vehicle) rien Après la sortie du coffre (vehicle peut être nil).
SendBill Config.ClientHooks.SendBill(targetServerId, reason, amount, job) rien send_bill.
Rend l’option send_bill disponible.
RestoreAppearance Config.ClientHooks.RestoreAppearance() false pour signaler un échec dev_restore_appearance.
Rend l’option dev_restore_appearance disponible.
SetLocalRain Config.ClientHooks.SetLocalRain(enabled) rien Outils locaux : enabled = true active la pluie.
Rend le menu météo disponible côté client.
SetLocalFreeze Config.ClientHooks.SetLocalFreeze(state) rien Outils locaux.
Rend le menu météo disponible côté client.

Hooks serveur

Hook Signature Retour Utilisation
Notify Config.ServerHooks.Notify(source, message, ntype, duration) rien Notifications envoyées par le serveur.
HasGroup Config.ServerHooks.HasGroup(source, group) true si le joueur appartient au groupe Niveaux admin/staff et listes de groupes.
GetPlayerJob Config.ServerHooks.GetPlayerJob(source) { name = 'mechanic', grade = 0 } ou nil Contrôle jobs des actions serveur.
HasItem Config.ServerHooks.HasItem(source, item, count) true si possédé Contrôle item des actions serveur.
RemoveItem Config.ServerHooks.RemoveItem(source, item, count) rien Réparation avec removeItem = true.
RevivePlayer Config.ServerHooks.RevivePlayer(source, targetId) false pour signaler un échec admin_revive et self_revive avec selfMode = server.
HealPlayer Config.ServerHooks.HealPlayer(source, targetId) ignoré : heal_sent est toujours affiché admin_heal et self_heal avec selfMode = server.
ForceMe Config.ServerHooks.ForceMe(source, targetId, text) rien force_me ; sans hook, le client ciblé exécute Bridge.Me.
SetWeather Config.ServerHooks.SetWeather(zone, weather) false pour signaler un échec zone vaut nil si useZones = false.
Rend les actions météo disponibles côté serveur.
SetTime Config.ServerHooks.SetTime(hour, minute) false pour signaler un échec Heures prédéfinies.
FreezeTime Config.ServerHooks.FreezeTime(state) false pour signaler un échec Freeze ON/OFF.
SetBlackout Config.ServerHooks.SetBlackout(state) false pour signaler un échec Blackout ON/OFF/Toggle.
GetBlackout Config.ServerHooks.GetBlackout() booléen Toggle et info blackout.
GenerateWeathers Config.ServerHooks.GenerateWeathers() false pour signaler un échec Météo aléatoire.
GetTime Config.ServerHooks.GetTime() { hour = 12, minutes = 0, seconds = 0 } ou nil Info heure et freeze du preset av_weather.
GetZoneInfo Config.ServerHooks.GetZoneInfo(zone) { zone, weather, fog, temperature, wind } ou nil Info zone active.
OnSuspiciousActivity Config.ServerHooks.OnSuspiciousActivity(source, reason) rien Requête rejetée de façon suspecte ; remplace l’affichage console de logSuspicious.
OnActionExecuted Config.ServerHooks.OnActionExecuted(source, actionName, ctx) rien Après chaque action serveur exécutée sans erreur.

Exemple : notifications personnalisées

mon_notify est un nom d’exemple de ressource.

Config.ClientHooks.Notify = function(message, ntype, duration)
    exports['mon_notify']:Show(message, ntype, duration)
end
Config.ServerHooks.Notify = function(source, message, ntype, duration)
    TriggerClientEvent('mon_notify:show', source, message, ntype, duration)
end

Routines client

Le serveur peut lancer une routine client whitelistée : TriggerClientEvent('ox_target:core:run', id, '<Routine>', ...). Routines documentées par l’archive : PlayEmote(emote), Me(text), ReviveSelf(), HealSelf(), NativeRevive(), NativeHeal(). Elles passent par le bridge, donc par vos hooks client. PlayEmote revalide le nom avec Config.Emotes ; Me tronque à 120 caractères.

Config.ServerHooks.RevivePlayer = function(source, targetId)
    TriggerClientEvent('ox_target:core:run', targetId, 'NativeRevive')
end

Actions serveur personnalisées

Une action déclarée dans Config.ServerActions est appelée par une option type = 'server_action'. Le moteur exécute ses contrôles puis votre handler(ctx).

Champ Valeurs Effet
permission clé de Config.Permissions, 'everyone', 'staff', 'admin', liste de groupes, false ou function(source) Absent : tout le monde.
jobs { 'police' }, { police = 2 }, 'police' Métier vérifié côté serveur.
item, itemCount nom d’item, entier (1 par défaut) Possession vérifiée côté serveur ; rien n’est retiré automatiquement.
feature clé de Config.Features Refus si la fonctionnalité vaut false.
target 'none' (défaut), 'player', 'vehicle', 'entity' Type de cible attendu et vérifié.
allowSelf booléen Avec target = 'player', autorise à se cibler soi-même.
maxDistance mètres, ou false false : distance illimitée. Absent : Config.Distances.default. S’y ajoute Security.distanceTolerance.
cooldown ms Absent : Config.Security.actionCooldown.
args liste de règles Schéma des arguments envoyés par le client.
handler function(ctx) Obligatoire. Sans lui, l’action est refusée à l’enregistrement.

Les noms des actions intégrées (admin_revive, weather_set…) ne peuvent pas être réutilisés.

Règles d’arguments

Type Options
{ type = 'string' } min (1 par défaut), max (255 par défaut), pattern (motif Lua), oneOf ({ valeur = true }). Les espaces de début et de fin sont retirés.
{ type = 'number' } min, max, integer = true. NaN et infinis sont refusés.
{ type = 'boolean' } —
{ type = 'vector3' } Accepte un vector3 ou une table { x, y, z }.

Chaque règle accepte optional = true. Un argument manquant non optionnel ou invalide fait refuser la requête (invalid_input) et la signale comme suspecte.

Objet ctx

Champ Contenu
ctx.source ID serveur du joueur qui a déclenché l’action.
ctx.action Nom de l’action.
ctx.args Arguments validés (liste).
ctx.target, ctx.targetPed Avec target = 'player' : ID serveur et ped de la cible.
ctx.entity, ctx.netId Avec target = 'vehicle' ou 'entity' : entité serveur et network ID.
ctx.notify(message, ntype) Notifie le joueur source.
ctx.notifyTarget(message, ntype) Notifie le joueur ciblé (si target = 'player').
ctx.runClient(routine, ...) Lance une routine client sur le joueur source.
ctx.runClientOn(id, routine, ...) Lance une routine client sur un autre joueur.

Exemple complet

Côté serveur (config_server.lua) ; mon_script:afficherPermis est un nom d’exemple :

Config.ServerActions = {
    check_license = {
        permission  = 'everyone',
        jobs        = { 'police' },
        target      = 'player',
        maxDistance = 3.0,
        cooldown    = 2000,
        args        = { { type = 'string', oneOf = { quick = true, full = true } } },
        handler     = function(ctx)
            TriggerClientEvent('mon_script:afficherPermis', ctx.target, ctx.source, ctx.args[1])
            ctx.notify('Demande envoyée.', 'success')
        end,
    },
}

Côté client (config_interactions.lua) :

{ name = 'check_license', label = 'Vérifier les papiers', icon = 'fa-solid fa-id-card', jobs = { 'police' }, type = 'server_action', action = 'check_license', args = { 'quick' } },

Le client envoie l’ID serveur de la cible pour les listes Joueurs et Soi-même, et le network ID de l’entité pour les autres listes. Choisissez target en conséquence.

Journaliser

Config.ServerHooks.OnActionExecuted = function(source, actionName, ctx)
    print(('[ox_target] %s a utilisé %s'):format(GetPlayerName(source), actionName))
end

D’autres ressources peuvent enregistrer des actions avec exports.ox_target:registerAction.

Erreurs fréquentes

  • Action sans permission : autorisée à tout le monde, ce qui est rarement voulu pour une action sensible.
  • target = 'player' sur une option de véhicule : la requête envoie un network ID, refusé comme « cible joueur inexistante ».
  • Hook vide function() end : le preset est remplacé par une fonction qui ne fait rien.
  • Handler qui modifie de l’argent ou un inventaire sans revérifier les montants : le moteur valide les types et bornes déclarés, pas la logique métier.

Rechercher

Tapez un terme : paramètre, export, erreur…