Cómo funcionan las integraciones#
Dance Machine mira qué recursos ya están en ejecución cuando se inicia y se adapta a ellos. Todo lo que toca tu framework — dinero, nombres, identificadores — pasa por un pequeño archivo puente sin cifrar, y todo lo demás recurre a una alternativa integrada cuando falta su recurso.
Capa | Compatible | Sin él |
|---|---|---|
Framework |
| Standalone: todas las partidas son gratis, las puntuaciones se guardan por licencia de FiveM y los jugadores aparecen con su nombre de FiveM. |
Interacción |
| Un aviso de proximidad sobre la máquina, que se abre con |
Aviso 3D |
| Texto simple dibujado sobre la máquina. |
Notificaciones |
|
|
HUD |
| El HUD y el minimapa del propio juego siempre se ocultan en la máquina; un HUD de terceros sigue en pantalla hasta que lo añadas (abajo). |
Sincronización de clima y hora |
| Nada que pausar. Con una sincronización no incluida en la lista en ejecución, el cielo del bailarín puede parpadear mientras ambos se disputan el reloj. |
Salones recreativos |
| Las máquinas solo se colocan con el creador. |
Base de datos |
| Obligatorio. |
La detección solo ve recursos que ya se han iniciado. Todo lo que quieras que se detecte debe estar por encima de
ensure qs-dancemachineenserver.cfg, y la línea de consolaStarted - framework: …te indica qué framework se encontró.
Frameworks#
El framework decide tres cosas: quién es un jugador, cómo se llama en las clasificaciones y de dónde se cobra el precio de una partida.
Framework | Jugador identificado por | Nombre mostrado | Precio cobrado de |
|---|---|---|---|
ESX | El identificador del personaje | El nombre del personaje | Efectivo, o la cuenta |
QBCore · Qbox | El citizen id | Nombre y apellido |
|
Standalone | Licencia de FiveM | Nombre de FiveM | Nada — las partidas son gratis |
Como ESX y QBCore identifican al personaje, cada personaje de un servidor multipersonaje tiene sus propios récords e historial. La detección está escrita en config/main.lua, y puedes fijarla a mano:
-- Auto, the default: the first framework found running wins.
Config.Framework = DependencyCheck({
['es_extended'] = 'esx',
['qb-core'] = 'qb',
['qbx_core'] = 'qb',
}) or 'standalone'
-- Manual: skip detection entirely.
Config.Framework = 'esx' -- 'esx' · 'qb' · 'standalone'Añadir tu propio framework#
Cada framework es una carpeta en custom/ con un client.lua y un server.lua, y el script carga la que indica Config.Framework. Nada más hace referencia a tu framework por su nombre.
Copia el bridge más parecido
Copia
custom/esx/(ocustom/qb/) acustom/myframework/.Rellena las funciones
Sustituye las llamadas de dentro por las de tu framework:
lua -- custom/myframework/server.lua local framework = {} function framework:getIdentifier(source) ... end -- the key every score is saved under function framework:getName(source) ... end -- the name on the leaderboards function framework:getMoney(source, method) ... end -- method is 'money' or 'bank' function framework:removeMoney(source, amount, method) ... end function framework:addMoney(source, amount, method) ... end return frameworkEl archivo de cliente devuelve
getPlayerData()ygetIdentifier().Apunta la configuración a él
Configura
Config.Framework = 'myframework', o añade tu recurso a la listaDependencyCheckpara que se detecte, y reinicia.
Target o aviso de proximidad#
El target no se detecta solo — es una opción en config/main.lua:
Config.UseTarget = false, el valor por defecto. A menos de Config.InteractDistance (2.2 m) la máquina muestra [E] - Pump It Up, y Config.Keys.interact (control 38, E) la abre. Con qs-textui en ejecución, el aviso usa su estilo. El texto es la línea menu.title de tu archivo de idioma.
Config.UseTarget = true añade una opción a cada máquina del modelo Config.MachineModel, accesible desde Config.InteractDistance. ox_target debe estar en ejecución. La opción abre la máquina más cercana a la que apuntaste. El código está en client/custom/target.lua, así que otro recurso de target se puede conectar de la misma forma.
Notificaciones y HUD#
Ambos están en client/custom/main.lua, que se puede editar.
Notification(msg, type) muestra cada mensaje que envía el script — info, success o error. Usa qs-interface cuando está en ejecución y ox_lib en caso contrario; apúntalo a cualquier otro recurso de notificaciones cambiando esa única función.
Mientras un jugador está en la máquina, el HUD y el minimapa del juego se ocultan en cada fotograma, y SetCustomHud(visible) se llama una vez al entrar y otra al salir. Oculta el HUD de qs-interface de serie — añade ahí el export de ocultar/mostrar de tu HUD:
function SetCustomHud(visible)
if GetResourceState('qs-interface') == 'started' then
exports['qs-interface']:ToggleHud(visible)
end
-- if GetResourceState('my_hud') == 'started' then
-- exports['my_hud']:SetVisible(visible)
-- end
endSincronización de clima y hora#
Con Config.DanceStage.forceNight activado, la pantalla del propio jugador que baila se pone de día en el menú y de noche mientras suena la canción. Un recurso de sincronización del clima seguiría devolviendo el reloj, así que estos se pausan solo para ese jugador y se reanudan cuando se va:
Renewed-Weathersyncqb-weathersyncvSyncav_weathercd_easytime
Para otro recurso de sincronización, añade sus eventos de pausa y reanudación a applyDanceTime en client/custom/main.lua — o configura forceNight = false para no tocar el reloj. La hora del servidor nunca cambia.
Arcade Creator#
Con Arcade Creator (qs-arcades) en el servidor, la Dance Machine es una de las máquinas que el dueño de un salón recreativo puede comprar y colocar en su salón. Esas máquinas funcionan de forma distinta a las que colocas con /dancecreator:
Aspecto | Colocadas con /dancecreator | Colocadas por un salón recreativo |
|---|---|---|
Se guardan | En | Nunca. Arcade Creator las vuelve a crear en cada inicio. |
Se editan desde | La pestaña Machines del creador | Solo Arcade Creator — no aparecen en la lista del creador. |
Precio | El precio de la propia máquina | Gratis aquí; el salón cobra la entrada si quiere. |
Las ven | Todos | Solo los jugadores dentro de ese salón. |
Modos | Según lo configurado en la máquina | Dos pads, todos los modos. |
Arcade Creator usa un interior compartido para todos los salones, así que dos salones pueden tener una máquina en el mismo lugar; cada jugador solo ve, y solo puede unirse a, la del salón en el que está. Las canciones, puntuaciones y clasificaciones se comparten con todas las demás máquinas del servidor. Reiniciar qs-dancemachine es seguro: Arcade Creator lo detecta y vuelve a colocar sus máquinas unos segundos después.
Idiomas#
Se incluyen cuarenta y una traducciones en locales/ que cubren el menú de canciones, el juego, los resultados, el panel de administración y todas las notificaciones. Configura el código en config/main.lua:
-- ar, bg, bn, ca, cs, da, de, el, en, es, et, fa, fi, fr, he, hi, hr, hu, id, it,
-- ja, ko, lt, lv, ms, nl, no, pl, pt, ro, ru, sk, sl, sv, sw, th, tr, uk, ur, vi, zh
Config.Locale = 'en'Para añadir un idioma, copia en.json con el nuevo código, tradúcelo y configura Config.Locale con ese código. Una línea que falte en una traducción recurre al inglés y se indica en la consola como Missing locale key, así que nunca aparece nada en blanco.



