DocumentationAjouter des interactions

Ajouter des interactions

Ajoutez des interactions personnalisées au context menu via les exports addGlobalPlayers, addGlobalPeds, addGlobalVehicles, addGlobalObjects. Ces exports fonctionnent pour les styles context et custom. Le style normal délègue à ox_target et ne les rend pas.

Exports disponibles

ExportCible
addGlobalPlayersJoueurs
addGlobalPedsPNJ
addGlobalVehiclesVéhicules
addGlobalObjectsObjets

Exemple sur un joueur

lua
exports.core:addGlobalPlayers({
    {
        label = "Saluer",
        distance = 3.0,
        canInteract = function(entity, distance)
            return IsPedAPlayer(entity)
        end,
        onSelect = function(data)
            -- data.entity   = l'entité cliquée
            -- data.coords   = coordonnées
            -- data.distance = distance
            -- data.name     = nom de l'item
            ExecuteCommand("salut")
        end
    }
})

Exemple sur un PNJ

lua
exports.core:addGlobalPeds({
    {
        label = "Parler",
        distance = 3.0,
        canInteract = function(entity)
            return GetEntityModel(entity) == GetHashKey("a_m_y_business_01")
        end,
        onSelect = function(data)
            -- data.entity = le ped
        end
    }
})

Exemple sur un véhicule

lua
exports.core:addGlobalVehicles({
    {
        label = "Copier la plaque",
        distance = 5.0,
        onSelect = function(data)
            lib.setClipboard(GetVehicleNumberPlateText(data.entity))
        end
    }
})

Exemple sur un objet

lua
exports.core:addGlobalObjects({
    {
        label = "Utiliser",
        distance = 2.0,
        canInteract = function(entity)
            return GetEntityModel(entity) == GetHashKey("prop_vend_snak_01")
        end,
        onSelect = function(data)
            -- data.entity = l'objet
        end
    }
})

Exemple de sous-menu

Utilisez le champ items pour créer un sous-menu. Les items enfants peuvent eux-mêmes avoir des items pour des sous-menus imbriqués.

lua
exports.core:addGlobalPlayers({
    {
        label = "Porter",
        distance = 3.0,
        items = {
            { label = "Sur le dos", command = "porter" },
            { label = "Sur l'épaule", command = "porter3" },
            { label = "Dans les bras", command = "porter2" },
        }
    }
})

Exemple de sous-menu dynamique

Si le contenu du sous-menu dépend de l'état du jeu (grades d'entreprise, inventaire, etc.), items peut être une fonction évaluée à chaque ouverture du menu :

lua
exports.core:addGlobalPlayers({
    {
        label = "Recruter",
        distance = 3.0,
        items = function(entity, distance)
            local grades = getCurrentJobGrades()
            local result = {}
            for _, grade in ipairs(grades) do
                result[#result + 1] = {
                    label = grade.label,
                    onSelect = function(data)
                        TriggerServerEvent("myjob:recruit", GetPlayerServerId(NetworkGetPlayerIndexFromPed(data.entity)), grade.id)
                    end
                }
            end
            return result
        end
    }
})

Champs supportés

ChampTypeDescription
labelstringTexte du bouton (requis)
namestringIdentifiant pour delGlobalXxx (par défaut = label)
distancenumberDistance max en mètres (par défaut 3.0)
canInteractboolean | fun(entity, distance): booleanCondition d'affichage
onSelectfun(data)Action au clic
itemstable[] | fun(entity, distance): table[]Sous-menu (statique ou dynamique)
eventstringÉvénement client déclenché au clic (alternative à onSelect)
serverEventstringÉvénement serveur déclenché au clic
commandstringCommande exécutée au clic
exportstring ("resource:name")Export déclenché au clic (exports.resource:name(data))

Provider dynamique (styles context et custom)

Pour injecter des items plats au niveau principal (pas de sous-menu) qui changent dynamiquement, utilisez addGlobalProvider. La fonction est appelée à chaque ouverture du context menu et retourne la liste d'items à afficher.

lua
exports.core:addGlobalProvider(3, function(entity, distance)
    local items = {}
    if isSomeCondition(entity) then
        items[#items + 1] = {
            label = "Action spéciale",
            onSelect = function(data) doSomething(data.entity) end
        }
    end
    return items
end)

Types d'entités : 0 monde, 1 ped, 2 véhicule, 3 objet, 4 joueur.

Retirer une interaction

lua
exports.core:delGlobalPlayers("Saluer")
exports.core:delGlobalVehicles({"Copier la plaque", "Réparer"})
exports.core:delGlobal(1, "Saluer") -- 1 = ped, 2 = véhicule, 3 = objet, 4 = player

Les interactions ajoutées par votre ressource sont automatiquement retirées à son arrêt.

Types d'entités

TypeDescription
0Monde (pas d'entité)
1Ped (PNJ)
2Véhicule
3Objet
4Joueur

Alias ECM

Les mêmes fonctions sont exposées sous un préfixe ECM: pour la compatibilité avec les ressources écrites pour ECM :

lua
exports.core['ECM:addGlobalPlayers'](options)
exports.core['ECM:addGlobalPeds'](options)
exports.core['ECM:addGlobalVehicles'](options)
exports.core['ECM:addGlobalObjects'](options)

exports.core['ECM:delGlobalPlayers'](names)
exports.core['ECM:delGlobalPeds'](names)
exports.core['ECM:delGlobalVehicles'](names)
exports.core['ECM:delGlobalObjects'](names)

Zones

Le context menu expose aussi des zones autonomes, disponibles pour les styles normal et custom :

lua
exports.core:addBoxZone(spec)
exports.core:addSphereZone(spec)
exports.core:addPolyZone(spec)
exports.core:removeZone(name)

local style = exports.core:GetContextType()

Style Normal (ox_target)

Pour le style "normal", utilisez directement les exports ox_target (exports.ox_target:addGlobalPlayer, etc.). Voir la documentation ox_target.

DMCA.com Protection Status