MrPoulpi Labs
ox_target

Scripts disponibles

EN
Centre de documentation

Intégrations

Frameworks, emotes, médical, inventaire, notifications, saisies, météo, clés, factures, réparation et apparence — valeurs acceptées par chaque sélecteur et comportement exact des presets du bridge.

But : brancher ox_target sur vos scripts existants. Fichiers : config.lua (sélecteurs Config.*Script), puis si besoin config_client.lua et config_server.lua (hooks).

Comment le bridge choisit

Pour chaque fonction (Bridge.Notify, Bridge.PlayEmote, Bridge.RevivePlayer…), le bridge applique cet ordre :

  1. Hook : si Config.ClientHooks.<Nom> (ou Config.ServerHooks.<Nom> côté serveur) est une fonction, elle est appelée et remplace entièrement le preset.
  2. Preset : sinon, la valeur du sélecteur décide.

Les valeurs possibles se répartissent en quatre modes :

  • Détection ('auto') : le bridge prend la première ressource de sa liste qui est démarrée (started ou starting) au moment de l’appel ; à défaut, un repli fixe (souvent native, command ou aucune intégration).
  • Ressource nommée ('esx_ambulancejob', 'av_weather'…) : le preset correspondant est utilisé. Selon le preset, l’état de la ressource est vérifié ou non : voir chaque tableau.
  • 'command' et 'native' : commandes de Config.Commands, ou natives GTA sans script externe.
  • 'custom' : aucun preset ; seuls vos hooks agissent. Certains sélecteurs acceptent aussi false pour désactiver l’intégration.

Framework

Valeurs Comportement
'auto' Défaut Premier démarré parmi es_extended, qbx_core, qb-core, ox_core, ND_Core ; sinon standalone.
Ordre de détection : es_extended → qbx_core → qb-core → ox_core → ND_Core → standalone
'esx'
Métier via ESX (PlayerData.job / xPlayer.job), groupe staff via xPlayer.getGroup() comparé exactement au nom du groupe.
'qb'
Métier via QBCore PlayerData.job ; groupe staff via QBCore.Functions.HasPermission puis ACE group.<nom>.
'qbx'
Métier via exports.qbx_core GetPlayerData / GetPlayer ; groupe staff via ACE group.<nom>.
'ox' Le bridge ne lit pas le métier ni l’inventaire framework : prévoyez les hooks GetPlayerJob et HasItem.
Aucune lecture de métier dans le bridge ; groupe staff via ACE group.<nom>.
'nd' Le bridge ne lit pas le métier ni l’inventaire framework : prévoyez les hooks GetPlayerJob et HasItem.
Aucune lecture de métier dans le bridge ; groupe staff via ACE group.<nom>.
'standalone'
Aucun métier ; groupe staff via ACE group.<nom>.

Hooks qui remplacent ce preset : Config.ClientHooks.GetPlayerJob Config.ClientHooks.HasItem Config.ServerHooks.GetPlayerJob Config.ServerHooks.HasGroup Config.ServerHooks.HasItem Config.ServerHooks.RemoveItem

Config.Framework ne concerne que le bridge. Le filtre natif groups des options utilise un module séparé (client/framework) qui détecte lui-même ox_core, es_extended, qb-core, qbx_core puis ND_Core au démarrage de la ressource.

Le framework sert au bridge pour lire le métier (GetPlayerJob), les groupes staff (HasGroup) et l’inventaire framework. Avec ox, nd ou standalone, le bridge ne lit aucun métier : définissez GetPlayerJob côté client et serveur si vous utilisez des filtres jobs.

Emotes

Valeurs Comportement
'auto' Défaut rpemotes-reborn puis rpemotes ; sinon mode command.
Ordre de détection : rpemotes-reborn → rpemotes → command
'rpemotes-reborn'
Emote perso : export EmoteCommandStart si la ressource est démarrée, sinon commande. Emote partagée : toujours Config.Commands.sharedEmote. Copie : export IsPlayerInAnim, exploité seulement s’il renvoie un nom.
'rpemotes'
Même comportement que rpemotes-reborn avec la ressource rpemotes.
'command' Exécute Config.Commands.emote / sharedEmote / cancelEmote.
ExecuteCommand avec Config.Commands. La copie d’emote ne trouve aucun nom sans hook GetCurrentEmote.
'custom' Le bridge ne joue rien : définissez les hooks PlayEmote, PlaySharedEmote, GetCurrentEmote.

Hooks qui remplacent ce preset : Config.ClientHooks.PlayEmote Config.ClientHooks.PlaySharedEmote Config.ClientHooks.GetCurrentEmote Config.ClientHooks.CancelEmote Config.ClientHooks.Me

/me (Bridge.Me) et l’annulation d’emote utilisent toujours Config.Commands.me et cancelEmote, quel que soit le preset, sauf hook Me ou CancelEmote.

La copie d’emote demande au joueur ciblé son emote en cours via Bridge.GetCurrentEmote ; seul un nom (chaîne non vide) est exploitable. Selon la version de rpemotes, l’export IsPlayerInAnim peut renvoyer un booléen : la copie répond alors « Le joueur ne fait aucune emote à copier. » Définissez le hook GetCurrentEmote si votre script expose le nom autrement.

Médical

Valeurs Comportement
'auto' Défaut esx_ambulancejob puis qb-ambulancejob ; sinon mode native.
Ordre de détection : esx_ambulancejob → qb-ambulancejob → native
'esx_ambulancejob'
Événements esx_ambulancejob:revive et esx_ambulancejob:heal ('big', true).
'qb-ambulancejob'
Événements hospital:client:Revive et hospital:client:HealInjuries ('full').
'command' Commandes Config.Commands.reviveSelf/healSelf (client) et revivePlayer/healPlayer (console serveur).
Commandes de Config.Commands ; côté serveur via ExecuteCommand dans la console.
'native' Résurrection et soin par natives GTA, sans script médical.
Routines client NativeRevive / NativeHeal.
'custom' Aucun preset : définissez les hooks RevivePlayer/HealPlayer (serveur) et ReviveSelf/HealSelf (client).

Hooks qui remplacent ce preset : Config.ClientHooks.ReviveSelf Config.ClientHooks.HealSelf Config.ServerHooks.RevivePlayer Config.ServerHooks.HealPlayer

Avec Config.Medical.nativeHealFallback = true, un heal natif est appliqué après chaque heal, y compris quand un hook est défini.

Config.Medical.selfMode décide où s’exécute le revive/heal sur soi : 'client' appelle Bridge.ReviveSelf / HealSelf après validation serveur ; 'server' appelle Bridge.RevivePlayer(source, source) / HealPlayer. Le message de réussite (self_revived, self_healed) est envoyé par le serveur dans les deux cas, sans attendre le résultat du script médical.

Inventaire

Valeurs Comportement
'auto' Défaut ox_inventory si démarré ; sinon inventaire du framework.
Ordre de détection : ox_inventory → framework
'ox_inventory'
exports.ox_inventory:Search('count', item) et RemoveItem côté serveur.
'framework' Inventaire ESX ou QBCore/Qbox via le framework résolu.
ESX : getInventoryItem / removeInventoryItem. QBCore/Qbox : Functions.GetItemByName / RemoveItem. Rien pour ox, nd et standalone.
'custom' Hooks HasItem / RemoveItem. Sans hook, le client affiche l’option et le serveur lit l’inventaire du framework.

Hooks qui remplacent ce preset : Config.ClientHooks.HasItem Config.ServerHooks.HasItem Config.ServerHooks.RemoveItem

Côté client, la vérification d’item ne sert qu’à afficher ou masquer une option ; le serveur revérifie avant l’action. Le filtre natif items des options passe par un autre mécanisme (module d’origine d’ox_target) qui lit ox_inventory s’il est présent, sinon l’inventaire du framework détecté.

Notifications

Valeurs Comportement
'ox_lib' Défaut
'esx' ESX.ShowNotification si l’objet ESX est disponible, sinon ox_lib.
'qb' QBCore.Functions.Notify si QBCore est disponible, sinon ox_lib.
'dNotif' exports.dNotif:SendBasicNotif avec Config.DNotifColors si dNotif est démarré, sinon ox_lib.
'chat' Message chat:addMessage avec le préfixe « Target ».
'custom' Rien n’est affiché sans hook Notify.

Hooks qui remplacent ce preset : Config.ClientHooks.Notify Config.ServerHooks.Notify

Côté serveur, Bridge.Notify envoie un événement au client, qui applique ensuite ce choix.

Les types internes sont info, success, error, warning et primary. ox_lib reçoit inform pour info et primary ; QBCore reçoit primary, success ou error (warning devient error). Config.DNotifColors associe une couleur dNotif à chaque type.

Saisies et confirmations

Valeurs Comportement
'ox_lib' Défaut
'dNotif' Saisie de texte et confirmation via dNotif si démarré. Les formulaires multi-champs (facture) restent ox_lib.
'custom' Sans hook TextInput / Confirm / InputDialog, le bridge utilise ox_lib.

Hooks qui remplacent ce preset : Config.ClientHooks.TextInput Config.ClientHooks.InputDialog Config.ClientHooks.Confirm Config.ClientHooks.ProgressBar Config.ClientHooks.ShowTextUI Config.ClientHooks.HideTextUI

Avec dNotif, la confirmation n’affiche que le texte : le titre n’est pas transmis.

Bridge.ProgressBar, ShowTextUI et HideTextUI utilisent toujours ox_lib sauf hook.

Météo

Valeurs Comportement
'auto' Défaut av_weather si démarré ; sinon aucune intégration.
Ordre de détection : av_weather → false
'av_weather'
Exports av_weather updateZone, updateTime, setBlackout, getBlackout, generateWeathers, getTime, getZone, setRain et événement av_weather:freeze.
'custom' Hooks serveur SetWeather, SetTime… et hooks client SetLocalRain / SetLocalFreeze.
false

Hooks qui remplacent ce preset : Config.ClientHooks.SetLocalRain Config.ClientHooks.SetLocalFreeze Config.ServerHooks.SetWeather Config.ServerHooks.SetTime Config.ServerHooks.FreezeTime Config.ServerHooks.SetBlackout Config.ServerHooks.GetBlackout Config.ServerHooks.GenerateWeathers Config.ServerHooks.GetTime Config.ServerHooks.GetZoneInfo

Le menu météo n’est visible côté client que si av_weather est résolu et démarré, ou si un hook client SetLocalRain ou SetLocalFreeze existe. Les hooks serveur seuls ne suffisent pas à l’afficher.

Avec av_weather, les zones et valeurs envoyées sont celles de Config.Weather. Vérifiez qu’elles existent dans votre configuration av_weather (santos, sandy, paleto, cayo et les types CLEAR, RAIN… par défaut).

Clés de véhicule

Valeurs Comportement
'auto' Défaut qs-vehiclekeys si démarré.
Ordre de détection : qs-vehiclekeys → false
'qs-vehiclekeys'
exports['qs-vehiclekeys']:GiveKeys(plaque, modèle, true).
'custom' Nécessite le hook client GiveVehicleKeys.
false

Hooks qui remplacent ce preset : Config.ClientHooks.GiveVehicleKeys

Facturation

Valeurs Comportement
'auto' Défaut esx_billing si démarré.
Ordre de détection : esx_billing → false
'esx_billing'
TriggerServerEvent('esx_billing:sendBill', id, Config.Billing.societyPrefix .. métier, motif, montant).
'custom' Nécessite le hook client SendBill.
false

Hooks qui remplacent ce preset : Config.ClientHooks.SendBill

La facture n’est pas une action serveur du moteur : sa validation repose sur le script de facturation destinataire.

L’option est masquée pour les métiers de Config.Billing.excludedJobs et pour un joueur sans métier. Le montant est arrondi à l’entier inférieur.

Réparation

Valeurs Comportement
'auto' Défaut jg-mechanic si démarré ; sinon mode native.
Ordre de détection : jg-mechanic → native
'jg-mechanic'
TriggerEvent('jg-mechanic:client:repair-vehicle'). Choisi explicitement, ce preset ne vérifie pas que jg-mechanic est démarré.
'native' Barre de progression puis réparation par natives.
Durée et animation de Config.Vehicles.repair, puis SetVehicleFixed et santé moteur/carrosserie à 1000.
'custom' Nécessite le hook client RepairVehicle.

Hooks qui remplacent ce preset : Config.ClientHooks.RepairVehicle

Apparence

Valeurs Comportement
'auto' Défaut illenium-appearance si démarré.
Ordre de détection : illenium-appearance → false
'illenium-appearance'
Callback illenium-appearance:server:getAppearance puis export setPlayerAppearance.
'custom' Nécessite le hook client RestoreAppearance.
false

Hooks qui remplacent ce preset : Config.ClientHooks.RestoreAppearance

« Prendre apparence » (dev_clone_ped) n’utilise pas ce sélecteur : il applique directement le modèle du PNJ avec SetPlayerModel.

Exemple : passer une intégration en hook

Votre script de clés n’est pas qs-vehiclekeys. Réglez Config.KeysScript = 'custom' puis, dans config_client.lua :

Config.ClientHooks.GiveVehicleKeys = function(vehicle, plate, model)
    TriggerEvent('mes_cles:donner', plate)
end

mes_cles:donner est un nom d’exemple. Le hook rend aussi l’option « Se donner les clés » disponible : sans lui, avec 'custom', elle reste masquée.

Erreurs fréquentes

  • NotifyScript = 'custom' sans hook Notify : plus aucune notification.
  • WeatherScript = 'custom' avec uniquement des hooks serveur : le menu météo reste invisible côté client. Ajoutez aussi SetLocalRain ou SetLocalFreeze dans config_client.lua (comportement observé dans bridge/client.lua).
  • MedicalScript = 'auto' sans script médical : repli sur native ; le revive fonctionne mais sans la logique de votre script (factures d’hôpital, états…).
  • RepairScript = 'jg-mechanic' sans la ressource : l’événement part dans le vide et le joueur voit quand même « Véhicule réparé ».

Rechercher

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