GW-Drag-lib
GW Draggable Lib — Guide complet (GitBook)
Ce guide explique comment installer, configurer et utiliser la librairie de drag & drop d’objets, l’UI intégrée (steps + contrôles), ainsi que les fonctions utilitaires d’animation et d’effets. Le but est qu’un débutant puisse tout utiliser rapidement.
Présentation
Déplacement d’objets 3D à la souris avec surbrillance et rotation à la molette
Interactions “drag → drop” validées par modèles, avec distance et tolérance
UI “Étapes” (steps) à gauche et “Contrôles” en bas à gauche
Timer d’étapes (optionnel)
Localisation (FR/EN/ES)
Affichage d’un label près du curseur (configurable)
Fonctions utilitaires prêtes à l’emploi (shake, move, fade, rotation smooth)
Sécurité/robustesse: auto-stop si le joueur meurt/ragdoll/chute libre, callbacks encapsulés en pcall
Limitations actuelles
Drag d’un seul objet à la fois (pas de “multi-drag” simultané). Vous pouvez toutefois afficher/spawner plusieurs objets à manipuler dans une session.
Installation
Placer la ressource dans votre serveur:
Dossier:
resources/[LOCK]/gw-draggable-lib
Manifeste
fxmanifest.luainclut déjà:client_scripts:config.lua,functions.lua,Draggable.lua,exemple.luaui_page+filespour l’UI
Démarrer la ressource
ensure gw-draggable-libdans votreserver.cfg
Configuration globale (config.lua)
config.lua)Debug et couleur de surbrillance:
Constantes du drag:
Caméra:
UI “Steps”:
Locale:
Label du nom sous le curseur:
Noms de modèles (affichés au survol) centralisés:
API Client
1) Draggable:Register(config)
Enregistre une “session” avec:
props: objets à spawnerinteractions: règles “drag → drop” et callbackssteps: liste d’étapes (UI)stepsTitle(optionnel)stepsMaxTimeSecondsoustepsMaxTimeMs(optionnels)onTimeout(optionnel)onStop(optionnel)
Exemple:
2) Draggable:Start([targetOrOptions])
Démarre l’interaction.
Paramètre facultatif:
Entité à focus (handle)
Coords à focus (
vector3)Table d’options:
{ focusEntity=..., focusCoords=..., enableCamera=true/false, camera={...} }
Exemples:
3) Draggable:Stop()
Arrête l’interaction proprement:
Restaure collision/Freeze, détruit les props de la session
Masque l’UI “Steps” et la barre “Contrôles”
Appelle
onStopsi défini
4) Draggable:SetCustomCamera(camHandle)
Spécifie une caméra custom à utiliser pour le raycast souris.
Structure d’une session
props[]:model: string (nom de modèle) ou hashcoords:vector3rotation:vector3name(optionnel): si non fourni ici, le nom est récupéré dansConfig.props
interactions[]:drag: string/hash outablede modèles autorisésdrop: string/hash outablede modèles ciblesstepId(optionnel): id d’étape à cocher si drop validemaxDistance(optionnel): distance de validation “drag vs drop”callback(draggingProp, dropTarget): appelé quand la règle est validée
steps[]:id,title,description
stepsMaxTimeSeconds/stepsMaxTimeMs(optionnels)si non complété à temps:
onTimeout()+ stop
UI intégrée
Panneau “Étapes” (gauche) avec liste des steps
Barre “Contrôles” (bas gauche) avec:
Souris G.: saisir/lâcher
Molette: rotation
ESC: quitter
Note: lorsque toutes les steps sont cochées, l’UI se masque (selon config et flux). Si vous arrêtez juste après, l’UI se fermera immédiatement.
Contrôles par défaut
Clic gauche (ATTACK): saisir/lâcher l’objet
Molette haut/bas: rotation Z +/- pendant le drag
ESC: quitter sans valider
Astuce: ajustez ROTATION_SPEED dans Config.CONSTANTS pour une rotation plus lente/rapide.
Validation des drops
Matching par hash modèle:
dragetdropacceptent noms ou hashes (ou listes)Si le raycast sous la souris n’attrape pas la bonne cible, fallback sur la cible valide la plus proche dans un rayon (
DROP_PROXIMITY_THRESHOLD)Distance de validation entre l’objet lâché et la cible (
DROP_VALIDATE_MAX_DISTANCEglobal ouinteraction.maxDistance)Si les conditions sont OK:
stepId(si défini) est cochépuis
callback(draggingProp, dropTarget)est exécuté (protégé par pcall)
Fonctions utilitaires (animations/effets)
Disponibles côté client (via functions.lua). Signatures et exemples:
MoveEntitySmoothly(entity, targetCoords, duration)
Déplace en douceur vers
targetCoordsendurationmsExemple:
SetRotationSmoothly(entity, targetRotation, duration)
Fait pivoter progressivement jusqu’à
targetRotationExemple:
Shakeprops(entity, duration?, intensity?, smoothness?)
“Tremblement” doux d’un objet (par défaut 2500ms, intensité 0.03, lissage 0.05)
Exemple:
DeleteEntityFade(entity, duration?)
Fade out puis suppression de l’entité (par défaut 1000ms)
Helpers math:
Normalize(v), CrossProduct(v1, v2), DotProduct(v1, v2), LerpColor(c1, c2, t), CT(table)
Localisation
Définir
Config.Locale('fr','en','es')Les libellés UI (steps title, contrôles) suivent cette locale
Bonnes pratiques
Définissez
Config.propspour nommer vos modèles une seule fois; vous n’aurez pas à répéternamedans chaque sessionAjustez
DROP_VALIDATE_MAX_DISTANCEsi vos modèles sont gros/petits pour éviter des validations “trop faciles” ou “impossibles”Dans vos callbacks, utilisez les utilitaires
MoveEntitySmoothly,SetRotationSmoothly,Shakeprops,DeleteEntityFadepour donner du pep’sPour plusieurs interactions, utilisez des
stepIddifférents pour guider l’utilisateur étape par étape
Exemple de bout en bout
Dépannage
Le menu pause s’ouvre avec ESC
Config.CONSTANTS.CONTROLS.DISABLEDinclut déjà199, 200. Assurez-vous queConfig.luaest bien chargé en premier (fxmanifest).
Le label du nom ne s’affiche pas
Assurez-vous d’avoir un
namedansConfig.propspour ce modèle (ou directement danspropInfo.name).
Le drop valide trop loin / trop près
Ajustez
DROP_VALIDATE_MAX_DISTANCE(global) ouinteraction.maxDistance(local).
Les steps ne se cochent pas
Vérifiez
stepIddansinteractioncorrespond exactement à l’id d’une step danssteps.Vérifiez les modèles
drag/drop(noms GTAV corrects).
Last updated