Documentación

Documentación de Dance minigame

El minijuego de baile de la discoteca de GTA Online, rehecho para FiveM y jugable en cualquier parte de tu mapa. Pulsa al ritmo para subir los cuatro niveles de intensidad, mantén pulsado para conservarlos, súbelos o bájalos cuando quieras, encadena diez estilos y lanza 27 movimientos especiales sin salir de la pista. Todos los que están alrededor lo ven entero, y tu servidor no ejecuta ni una línea.

  • ESX
  • QBCore
  • Qbox
  • vRP
  • Standalone
01

Instalación

  1. Coloca el recurso

    Descarga el script desde tu cuenta Tebex, copia la carpeta avenida_dance/ en tu directorio de recursos y añade ensure avenida_dance a la config del servidor. No hace falta que arranque nada antes.

  2. Elige cómo se lanza

    Abre config/config.lua. Config.Command es el comando de chat, Config.Keybind registra una tecla remapeable con Config.DefaultKey como valor por defecto. Deja las dos cosas, o pon el comando en false y déjales la tecla a tus jugadores.

  3. Elige el idioma

    Config.Locale acepta cualquiera de los quince códigos que vienen en locales/. Los archivos están fuera del escrow, así que puedes reescribir cada línea para que suene como tu servidor.

  4. Apunta las notificaciones a tu stack

    Config.Notif está en auto y detecta ox_lib, okokNotify, QBCore o ESX en ese orden. Fuerza un target si tienes varios, o usa la rama custom de bridges/notif.lua para tu propio sistema.

  5. No hay paso cinco

    Ningún SQL que ejecutar, ningún framework que declarar, ningún permiso que dar. Reinicia y escribe el comando.

02

Configuración

Cómo empiezan a bailar tus jugadores

Un comando, una tecla, o las dos cosas. La tecla se registra en los ajustes de FiveM bajo Key Bindings, así que cada jugador puede remapearla sin tocar tu 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

    Arranca una sesión para el jugador local, forzando si quieres un índice de estilo del 1 al 10. Devuelve false cuando el jugador no puede bailar en ese momento, porque está en un vehículo, en el agua, en el aire o ya bailando, así que tu script puede decidir qué hacer.

  • StopDance
    exports.avenida_dance:StopDance()

    Termina la sesión en curso y reproduce la animación final de verdad en lugar de cortarla. Puedes llamarlo sin riesgo aunque no esté bailando nadie.

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

    Verdadero mientras el jugador local está en sesión. Útil para bloquear tus propias interacciones, tu inventario o una acción de trabajo mientras el minijuego se queda con el control.

Music

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

    Alimenta el ritmo simulado con el tempo del tema que está poniendo tu propio recurso de música. El segundo argumento ajusta la fase, así que el icono late en el tiempo fuerte de verdad y no un poco antes o un poco después. Se ignora si el valor no es un número positivo.

04

Recetas

Fijar el minijuego a tu propia música

El ritmo nativo solo existe donde Rockstar puso un emisor de audio. Si tu discoteca pone sus propios temas, apaga el ritmo nativo y mándale el tuyo. Llámalo una vez cuando arranca un tema y otra vez en cada cambio.

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)

Lanzar un baile desde un trabajo o un prop

Un escenario, un podio, una barra americana, un trabajo de bailarín: dale el baile a tu jugador sin comando. Fuerza un índice de estilo para que el podio tenga siempre el mismo aspecto y lee el valor devuelto para saber si arrancó de verdad.

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

Darle al minijuego tu propia distribución

Un mando no necesita nada aquí, los valores por defecto son inputs de FiveM y el juego ya los asigna al mando solo. Esto es para un servidor que quiere sus propias teclas. Deja pulsar y mantener en dos inputs distintos, el minijuego los lee por separado.

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
}

Hacer el minijuego indulgente o brutal

La dificultad son cuatro números. Baja BeatsHit y un público casual llega al nivel cuatro; sube BeatsFail y machacar teclas deja de tener castigo. Son los valores que el dueño de una discoteca va a querer tocar primero.

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

Preguntas

¿Hace falta un framework?

No, y tampoco como fallback: no hay nada en este recurso que un framework pudiera aportar. Nunca lee dinero, items, trabajos ni identidad. Por eso el mismo archivo funciona en ESX, QBCore, Qbox, vRP, ox_core o un servidor standalone sin configurar un solo bridge. Lo único que puede hacer aquí un framework es mostrar una notificación, y eso es un archivo abierto.

¿Necesito ox_lib?

No. Config.UseOxLib viene apagado, y con él apagado el recurso tira de las APIs nativas de FiveM para todo: el ped, la comprobación de vehículo, el identificador del jugador. Enciéndelo y pasa a usar las cachés de ox_lib, algo que compensa en un servidor que ya lleva el stack ox. El único otro sitio donde aparece es una de las seis ramas del bridge de notificaciones.

¿Hay script de servidor o base de datos?

Ni lo uno ni lo otro. No hay ningún archivo de servidor, ni SQL, ni tabla, ni event que vuelva desde un cliente. Todo lo que ven los jugadores cercanos sale de cuatro statebags que empuja quien baila. Es una decisión de arquitectura con una consecuencia que conviene decir en voz alta: no se guarda nada del lado del servidor, así que la preferencia de estilo de tu jugador vive en sus propios ajustes de juego, no en tu base de datos.

¿Por qué los bailarines remotos se ven menos fluidos que el mío?

La red de animación que GTA usa para este minijuego no se clona por OneSync, así que los bailarines remotos se resimulan en local a partir de las statebags. Casi siempre el resultado es idéntico al original. Cuando un clon se queda pegado en su intro, el recurso reintenta dos veces y luego repite en bucle el clip dominante de la rejilla de 27. El estilo, la intensidad y la dirección siguen bien, solo que el fundido entre poses es menos rico. Los movimientos de cuerpo entero se replican siempre de forma nativa.

Mi discoteca pone su propia música, ¿el ritmo sigue funcionando?

Sí, con SetDanceBeat. El ritmo nativo se lee de los emisores de audio de Rockstar, que solo existen donde Rockstar los puso. Para un tema propio, apaga Config.UseNativeBeat y dale al recurso tus BPM más el retardo hasta el siguiente tiempo. El icono late entonces al ritmo de tu tema y no al de una estimación.

¿Qué pasa en un tema muy rápido?

Pasado Config.MaxBpm, 140 por defecto, las animaciones de baile empiezan a irse de la música. Para que no se note, la velocidad de animación se reduce un cuarto por encima de ese umbral y la reproducción se queda entre 0,8 y 1,2 veces la velocidad normal. Los dos valores están en la config abierta si quieres forzarlos.

¿Se puede bailar en cualquier sitio o solo en discoteca?

En cualquier sitio, a pie y sobre suelo firme. No hay zona que declarar ni lista de lugares que mantener. La sesión se para sola si tu jugador entra en el agua, se queda en el aire, se prende fuego o entra en ragdoll, así que nadie acaba bailando en el aire tras caerse de un tejado.

¿Cuánto cuesta cuando no baila nadie?

0.00ms. El recurso no tiene ningún bucle de ambiente: registra un comando, una tecla y un handler de statebag, y después no hace nada hasta que alguien arranca una sesión. Los hilos que abre una sesión mueren con ella.

Carrito
Spirit RP
Discord