Yoga minigame
El minijuego de yoga del modo historia, sacado de su misión y convertido en una actividad de rol que puede empezar cualquiera. Alinea los dos marcadores, mantén la postura mientras el cuerpo entra en ella, y luego inspira y espira con los gatillos. Tres rutinas, catorce posturas, las animaciones originales y los sonidos de respiración del propio juego. Y una puntuación a la que tus propios scripts pueden reaccionar.
Lo que hace
En cada postura pasan cuatro cosas, no una animación
Alinea los dos marcadores sobre sus objetivos, mantenlos ahí mientras el cuerpo entra en la postura, inspira manteniendo pulsados los dos gatillos, espira soltándolos. La ventana de puntería es de 15 grados, la de mantenerla se abre hasta 55 porque el cuerpo se está moviendo. Esa diferencia es lo que hace que sientas que la postura la estás manteniendo tú, no que la estás viendo.
Especificaciones
técnicas
Todo lo que
recibes
-
Quince archivos de idioma, ya rellenados
Tus jugadores leen el script en su idioma desde el primer arranque, y los archivos están fuera del escrow, así que puedes corregir cualquier línea en producción. Nota honesta: están traducidos y revisados por nosotros, pero no los ha corregido un hablante nativo de cada uno de los quince. Dinos qué suena mal en el tuyo y lo arreglamos.
-
Las reglas del minijuego las pones tú
Ciclos de respiración fallados antes de que falle una postura, posturas falladas antes de que pare la sesión, cuánto se puede aguantar el aire, sensibilidad del ratón, vibración, avisos en pantalla, la fuerza del timecycle por postura y su tope. `config/config.lua` está fuera del escrow, así que un servidor de balneario y un patio de prisión pueden usar el mismo recurso con dos dificultades distintas.
-
Los spots del mapa, enteros en la config
Coordenadas, orientación, qué rutina, la esterilla, el sprite y el color del blip, a qué distancia aparece el marcador y a qué distancia se puede usar el aviso. Deja la lista vacía y toda esa parte se apaga, thread incluido.
-
Cuatro exports y un event de integración
Empezar una sesión y saber si un jugador ya está en una, desde el servidor o desde el cliente. Y un único event al final con el resultado, documentado en el archivo con la línea lista para copiar. Es el camino más corto entre esta actividad y tu economía.
Guía de integración
Instalación
-
Coloca el recurso
Descarga el script desde tu cuenta Tebex, copia la carpeta
avenida_yoga/en tu directorio de recursos y añadeensure avenida_yogaa la config del servidor. -
Elige el idioma y las rutinas
Config.Localeacepta cualquiera de los quince códigos que vienen enlocales/.Config.EnabledMovesdecide qué rutinas pueden empezar los jugadores, yConfig.DefaultMovela que se usa cuando no se indica ninguna. -
Pon tus spots en el mapa
Las dos coordenadas de
Config.Spotsson ejemplos, cámbialas por las tuyas. Cada una lleva su orientación, su rutina y un blip que puedes apagar. Una lista vacía desactiva toda esa parte y su thread. -
Apunta las notificaciones a tu stack
Config.Notifestá enautoy detecta ox_lib, okokNotify, QBCore o ESX en ese orden. Fuerza un target si tienes varios, o usa la ramacustomdebridges/notif.luapara tu propio sistema. -
Engancha la recompensa, o no
La actividad funciona tal cual, sin una línea de tu código. Cuando quieras que pague algo, escucha
avenida_yoga:server:sessionCompletedy lee la puntuación. Es el único punto de integración.
Inicio rápido
Convertir una sesión en una recompensa
Un event, lanzado una sola vez al final. La puntuación ya viene calculada: 1 por una rutina terminada, como mucho 0,4 si se abandona, y un 8 por ciento menos por cada postura fallada. Lo que pague lo decides tú.
AddEventHandler('avenida_yoga:server:sessionCompleted', function(src, data)
-- data.move 'warrior' | 'triangle' | 'sunsalutation'
-- data.completed true when the routine went to the end
-- data.posesBest poses held
-- data.poses poses in the routine
-- data.fails poses dropped
-- data.score 0.0 to 1.0
if not data.completed then return end
-- your own reward: stress, stamina, a skill, a payout
local reward = math.floor(250 * data.score)
end)Referencia de la API
Exports públicos agrupados por dominio. Cada fila muestra la firma de la llamada y qué hace, no cómo lo hace.
Server
StartYoga
exports['avenida_yoga']:StartYoga(src, moveKey?) --> booleanEmpieza una sesión para un jugador desde tu código de servidor, con la rutina que le pases o con la de por defecto. Devuelve
falsecuando la rutina no existe o el jugador ya está en una sesión, así que un trabajo o un prop puede reaccionar en lugar de lanzarla a ciegas.IsDoingYoga
exports['avenida_yoga']:IsDoingYoga(src) --> booleanVerdadero mientras el jugador tiene una sesión viva, caducidad incluida. Útil para bloquear una acción de trabajo, un teletransporte o una tienda mientras el minijuego se queda con el control.
Client
StartYoga
exports['avenida_yoga']:StartYoga(moveKey?) --> booleanPide una sesión al servidor desde tu código de cliente. La petición pasa igualmente por el registro del servidor, así que no es una forma de saltarse el control de sesión.
IsDoingYoga
exports['avenida_yoga']:IsDoingYoga() --> booleanVerdadero mientras el jugador local está en una sesión. Es la versión de cliente del export de servidor, para todo lo que tenga que reaccionar en el mismo frame.
Recetas
Ejemplos para copiar y pegar en los casos más habituales. Los metes en tu recurso, ajustas los valores y a producción.
Un spot necesita coordenadas y orientación. Lo demás es opcional: la rutina que arranca, el blip, e incluso si aparece la esterilla. Pon `move` en `random` para variar, o en `menu` para que elija el jugador.
-- config/config.lua
Config.Spots = {
{
coords = vector3(-1204.02, -1566.28, 3.63),
heading = 125.0,
move = 'menu',
blip = { sprite = 311, colour = 2, scale = 0.7 },
},
}Un trabajo de bienestar, un patio de prisión, una actividad de desintoxicación: dale la sesión al jugador sin pasar por el comando. Lee el valor devuelto, te dice si el jugador podía empezar.
local started = exports['avenida_yoga']:StartYoga(src, 'sunsalutation')
if not started then
-- unknown routine, or the player is already in a session
return
endCuatro números controlan toda la dificultad. Sube los intentos y los fallos para un servidor casual, bájalos para algo más cercano al juego base. El tiempo de aguante es lo que impide que alguien se quede clavado en el gatillo.
-- config/config.lua
Config.BreathingAttempts = 3 -- missed cycles before a pose fails
Config.MaxFails = 5 -- failed poses before the session stops
Config.HoldBreathFailMs = 15000 -- holding the breath longer fails the pose
Config.MouseGain = 3.0 -- marker sensitivity on mouse and keyboardSolo se pueden empezar las rutinas listadas en la config, por comando, por export o por spot. Un servidor puede abrir solo con el Guerrero y desbloquear las largas en un evento, sin tocar nada más.
-- config/config.lua
Config.EnabledMoves = { 'warrior' }
Config.DefaultMove = 'warrior'Preguntas frecuentes
- No. La actividad nunca lee dinero, items, trabajos ni identidad, así que no hay nada que un framework pudiera aportar. El mismo archivo funciona en ESX, QBCore, Qbox, vRP, ox_core o un servidor standalone sin configurar un solo bridge. La única parte que sabe de tu framework es la línea de notificaciones, un archivo abierto con seis ramas.
- No, y aquí es fácil ser preciso: ox_lib se usa exactamente para una cosa, el selector de rutina en un spot puesto en `menu`. Sin él, ese spot arranca la rutina por defecto. `Config.UseOxLib` también cambia la carga de assets entre los helpers de ox_lib y las llamadas nativas, y viene apagado, así que el recurso tira de las nativas por defecto.
- Ninguna, ni archivo SQL tampoco. El servidor guarda las sesiones vivas en memoria, una por jugador, con un temporizador que limpia las que se abandonan. No se escribe nada en ningún sitio. Si quieres un historial por jugador, para eso está el event de final de sesión: guardas lo que te interese, en tu propio esquema.
- No. La sesión la abre el servidor y el resultado se acota antes de llegar a tu event: las posturas mantenidas no pueden pasar de las de la rutina, los fallos no pueden pasar de treinta, el indicador de sesión completada se comprueba con una comparación estricta y la puntuación se recalcula en servidor a partir de esos valores acotados. Lo peor que puede hacer un cliente modificado es declarar una sesión que abrió de verdad.
- El cuerpo se levanta. El script lee la animación exacta que está reproduciendo el ped y elige la recuperación que le corresponde entre las doce que trae el juego, y cuatro de ellas tienen una variante propia para cuando la postura se suelta pronto. La postura cuenta como fallada, y tras cinco posturas falladas la sesión se para sola.
- Las dos cosas. El comando funciona en cualquier parte a pie, y los spots son una capa opcional encima, para los sitios que quieras señalizar con una esterilla y un blip. Deja `Config.Spots` vacío y solo quedan el comando y los exports, sin que el thread de spots llegue a arrancar.
- Sí, y de hecho se pensó primero para él, como en el juego base. Dos sticks llevan los marcadores y los gatillos superiores la respiración, con vibración mientras los dos marcadores están sobre el objetivo. Con ratón y teclado la misma sesión se juega con WASD y el ratón, y los avisos en pantalla cambian solos según lo último que haya usado el jugador.
- 0.00ms. El bucle de sesión solo existe mientras hay una sesión, y el thread de los spots se duerme cuando no hay ningún jugador cerca. Sin ningún spot declarado, ese thread ni siquiera arranca.
Lo que dicen los compradores
5.0 1 opinión verificada
Jpmediaaa. Hotstar Production I am very happy that I was given the opportunity to make a script trailer for the yoga minigame, I think the script is very seamless and very easy to use and interactive.
DESTACADO DerassDance 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.
DESTACADO Avenida TeamBarber shop
Una barbería puesta en escena, con una cámara que el jugador controla de verdad. El personaje entra, se sienta y el barbero se pone a trabajar mientras una cámara orbital encuadra la cabeza. Pelo, barba, overlays y todos los detalles de piel, con vista previa en directo antes de gastar un solo dólar.
DESTACADO Avenida TeamClothing store
Una tienda de ropa con conjuntos guardados, vestuarios de empresa y un editor que pone precio al catálogo desde el propio juego. Todos los componentes y todos los props, comprados prenda a prenda o como conjunto entero, con un registro en el servidor que impide que nadie lleve puesto lo que no ha pagado.