Documentation

Documentation Dance minigame

Le minijeu de danse des boîtes de nuit de GTA Online, refait pour FiveM et jouable n'importe où sur votre map. Tapez sur le rythme pour grimper les quatre niveaux d'intensité, maintenez pour les garder, montez ou redescendez à la demande, enchaînez dix styles et lancez 27 mouvements spéciaux sans quitter la piste. Tout le monde autour voit la scène, et votre serveur n'en exécute pas une ligne.

  • ESX
  • QBCore
  • Qbox
  • vRP
  • Standalone
01

Installation

  1. Déposer la ressource

    Récupérez le script depuis votre compte Tebex, copiez le dossier avenida_dance/ dans votre dossier resources, et ajoutez ensure avenida_dance à votre configuration serveur. Rien n'a besoin de démarrer avant.

  2. Choisir le déclencheur

    Ouvrez config/config.lua. Config.Command est la commande de chat, Config.Keybind enregistre une touche remappable avec Config.DefaultKey comme valeur par défaut. Gardez les deux, ou passez la commande à false et laissez la touche aux joueurs.

  3. Régler la langue

    Config.Locale accepte n'importe lequel des quinze codes livrés dans locales/. Les fichiers sont hors escrow, vous pouvez donc réécrire chaque ligne pour coller au ton de votre serveur.

  4. Diriger les notifications vers votre stack

    Config.Notif est sur auto et détecte ox_lib, okokNotify, QBCore ou ESX dans cet ordre. Forcez une cible si vous en faites tourner plusieurs, ou utilisez la branche custom de bridges/notif.lua pour votre propre système.

  5. Il n'y a pas d'étape cinq

    Aucun SQL à passer, aucun framework à déclarer, aucune permission à accorder. Redémarrez et tapez la commande.

02

Configuration

Comment les joueurs lancent la danse

Une commande, une touche, ou les deux. La touche s'enregistre dans les paramètres FiveM sous Key Bindings, chaque joueur peut donc la remapper sans toucher à votre config.

lua
-- config/config.lua
Config.Command    = 'dance'   -- chat command, false to disable
Config.Keybind    = true      -- rebindable key in FiveM settings
Config.DefaultKey = 'F7'

-- The GTA:O help panel with styles, actions and controls.
-- Off, style and move changes are announced by notification instead.
Config.ShowHints = true
03

Exports

Session

  • StartDance
    exports.avenida_dance:StartDance(styleIndex?) --> boolean

    Démarre une session pour le joueur local, en forçant éventuellement un index de style de 1 à 10. Renvoie false quand le joueur ne peut pas danser sur le moment, en véhicule, dans l'eau, en l'air ou déjà en train de danser, votre script peut donc décider quoi en faire.

  • StopDance
    exports.avenida_dance:StopDance()

    Termine la session en cours et joue la vraie animation de fin plutôt que de couper net. Sans effet si personne ne danse.

  • IsDancing
    exports.avenida_dance:IsDancing() --> boolean

    Vrai tant que le joueur local est en session. Utile pour bloquer vos propres interactions, votre inventaire ou une action de job pendant que le minijeu tient les contrôles.

Music

  • SetDanceBeat
    exports.avenida_dance:SetDanceBeat(bpm, msToNextBeat?)

    Alimente le tempo simulé avec celui du morceau que votre ressource musicale joue. Le second argument cale la phase, l'icône pulse donc sur le vrai temps fort et pas à peu près à côté. Ignoré si la valeur n'est pas un nombre positif.

04

Recettes

Caler le minijeu sur vos propres musiques

Le tempo natif n'existe que là où Rockstar a posé un émetteur audio. Si votre boîte diffuse ses propres morceaux, coupez le tempo natif et poussez-lui le vôtre. Appelez-le une fois au lancement d'un morceau, puis à chaque changement.

lua
-- config/config.lua
Config.UseNativeBeat = false
Config.FallbackBpm   = 122.0

-- in your music resource, when a track starts
exports.avenida_dance:SetDanceBeat(128.0, 180)

Lancer une danse depuis un job ou un prop

Une scène, un podium, une barre, un job de danseur : donnez la danse au joueur sans commande. Forcez un index de style pour que le podium ait toujours la même allure, et lisez la valeur de retour pour savoir si ça a réellement démarré.

lua
local started = exports.avenida_dance:StartDance(7) -- shuffle

if not started then
    -- the player is in a vehicle, in water, or already dancing
    return
end

Donner votre propre disposition au minijeu

Une manette n'a besoin de rien ici, les valeurs par défaut sont des inputs FiveM et le jeu les associe déjà au pad. Ceci sert à un serveur qui veut ses propres touches. Gardez l'appui et le maintien sur deux entrées différentes, le minijeu les lit séparément.

lua
-- config/config.lua
Config.Controls = {
    beat        = 201, -- INPUT_FRONTEND_ACCEPT
    hold        = 202, -- INPUT_FRONTEND_CANCEL
    boost       = 22,  -- INPUT_JUMP
    drop        = 23,  -- INPUT_ENTER
    flourish    = 45,  -- INPUT_RELOAD
    stop        = 73,
    -- the rest keeps its default
}

Rendre le minijeu indulgent, ou impitoyable

La difficulté tient en quatre nombres. Baissez BeatsHit et un public occasionnel atteint le niveau quatre ; montez BeatsFail et marteler les touches cesse d'être puni. Ce sont les valeurs qu'un patron de boîte voudra toucher en premier.

lua
-- config/config.lua
Config.BeatsHit  = 8    -- clean beats to cross a level
Config.BeatsMiss = 16   -- missed beats to drop one
Config.BeatsFail = 8    -- bad inputs to drop one

Config.Level3Min = 0.25
Config.Level4Min = 0.75
05

Questions

Faut-il un framework ?

Non, et pas non plus en repli : il n'y a rien dans cette ressource qu'un framework pourrait fournir. Elle ne lit jamais l'argent, les items, les jobs ni l'identité. C'est pour ça que le même fichier tourne sur ESX, QBCore, Qbox, vRP, ox_core ou un serveur nu sans un seul bridge à configurer. La seule chose qu'un framework peut faire ici, c'est afficher une notification, et c'est un fichier ouvert.

Ai-je besoin d'ox_lib ?

Non. Config.UseOxLib est livré désactivé, et dans cet état la ressource passe par les APIs natives de FiveM pour tout : le ped, la vérification du véhicule, l'identifiant du joueur. Activez-le et elle utilise les caches d'ox_lib à la place, ce qui vaut le coup sur un serveur qui fait déjà tourner la stack ox. Le seul autre endroit où il apparaît est une branche du bridge de notifications, sur six.

Y a-t-il un script serveur ou une base de données ?

Ni l'un ni l'autre. Il n'y a aucun fichier serveur dans la ressource, aucun SQL, aucune table, aucun event qui remonte d'un client. Tout ce que voient les joueurs proches vient de quatre statebags poussés par le danseur. C'est un choix d'architecture avec une conséquence qu'il vaut mieux dire : rien n'est stocké côté serveur, la préférence de style d'un joueur vit donc dans ses propres réglages de jeu, pas dans votre base.

Pourquoi les danseurs distants sont-ils moins fluides que moi ?

Le réseau d'animation que GTA utilise pour ce minijeu ne se clone pas en OneSync, les danseurs distants sont donc resimulés en local à partir des statebags. La plupart du temps ça reproduit le rendu d'origine. Quand un clone reste coincé sur son intro, la ressource retente deux fois, puis boucle le clip dominant de la grille de 27 à la place. Le style, l'intensité et la direction restent justes, le fondu entre les poses est simplement moins riche. Les mouvements complets se répliquent toujours nativement.

Ma boîte diffuse ses propres musiques, le tempo suit-il ?

Oui, via SetDanceBeat. Le tempo natif se lit sur les émetteurs audio de Rockstar, qui n'existent que là où Rockstar les a posés. Pour un morceau maison, coupez Config.UseNativeBeat et donnez à la ressource votre BPM plus le délai jusqu'au temps suivant. L'icône pulse alors sur votre morceau, pas sur une estimation.

Que se passe-t-il sur un morceau très rapide ?

Au-delà de Config.MaxBpm, 140 par défaut, les animations de danse commencent à décrocher de la musique. Plutôt que de laisser ça se voir, la vitesse d'animation est réduite d'un quart au-dessus de ce seuil et la lecture reste bornée entre 0,8 et 1,2 fois la vitesse normale. Les deux valeurs sont dans le config ouvert si vous voulez les pousser.

Un joueur peut-il danser partout, ou seulement en boîte ?

Partout, à pied et sur un sol ferme. Il n'y a aucune zone à déclarer et aucune liste de lieux à maintenir. La session s'arrête d'elle-même si le joueur entre dans l'eau, se retrouve en l'air, prend feu ou part en ragdoll, personne ne finit donc en train de danser dans le vide au bord d'un toit.

Que coûte le script quand personne ne danse ?

0.00ms. La ressource n'a aucune boucle d'ambiance : elle enregistre une commande, une touche et un handler de statebag, puis ne fait plus rien tant que personne ne lance de session. Chaque thread créé par une session meurt avec elle.

Panier
Spirit RP
Discord