Comandos#
Gym Creator registra dos comandos en el juego. Todo lo demás (precios, degradación, posiciones) se cambia en el creador, no con comandos.
Comando | Tecla | Quién | Descripción |
|---|---|---|---|
| — | Admins y | Abre el creador. Cualquier otro ve "You do not have permission to use this." El nombre es |
|
| Todos | Muestra u oculta el HUD de fuerza y resistencia. La tecla predeterminada es |
Durante un entrenamiento, SPACE hace una repetición y DELETE detiene la serie. En el modo de colocación, el clic izquierdo coloca, la rueda del ratón gira, las flechas cambian la altura y BACKSPACE cancela.
Leer las estadísticas desde tus propios scripts#
Gym Creator no necesita exports para compartir lo que sabe: las estadísticas viven en las estadísticas nativas de GTA y en una tabla de la base de datos, y cada cambio se anuncia con un evento.
Cliente: la fuerza y la resistencia de un jugador
Con Config.AffectPedStats = true (el valor predeterminado), ambas estadísticas se escriben en las estadísticas propias de GTA, que cualquier script de cliente puede leer:
local _, strength = StatGetInt(`MP0_STRENGTH`, -1)
local _, stamina = StatGetInt(`MP0_STAMINA`, -1)
if strength >= 60 then
-- a heavy-lifting job, a bouncer role, a fight club entry...
endPara preguntárselo directamente al servidor, sin depender de las estadísticas nativas:
local stats = lib.callback.await('gym:getStats', false)
print(stats.strength, stats.stamina) -- 0 to 100Cliente: reaccionar cuando cambian las estadísticas
El servidor envía gym:syncStats a un jugador cada vez que cambian sus estadísticas: tras una serie terminada y tras la degradación nocturna. Cualquier recurso de cliente puede escucharlo:
RegisterNetEvent('gym:syncStats', function(stats)
-- stats = { strength = 42, stamina = 17 }
SendNUIMessage({ action = 'fitness', data = stats }) -- e.g. a phone app
end)Cliente: ¿tiene este jugador una membresía?
local m = lib.callback.await('gym:checkMembership', false, gymId)
-- m.active : true when they may train at gymId
-- m.expiry : unix time the membership ends (0 if none)
-- m.gymId : the gym the membership belongs to
-- m.free : true when that gym needs no membershipOmite gymId para obtener la membresía del jugador sea del gimnasio que sea.
Servidor: estadísticas de cualquier jugador, conectado o no
Todo está en qs_gym_player_data, con el id de personaje del framework como clave: el identifier de ESX o el citizenid de QBCore / Qbox:
local row = MySQL.single.await(
'SELECT strength, stamina, membership_gym_id, membership_expiry FROM qs_gym_player_data WHERE identifier = ?',
{ citizenid }
)Léela en lugar de escribir en ella: Gym Creator guarda en caché las estadísticas de un jugador conectado, así que un valor escrito desde fuera se sobrescribe en su siguiente entrenamiento.
Servidor: enviar una notificación con el estilo del gimnasio
Los avisos del script se pueden usar desde cualquier recurso de servidor:
TriggerClientEvent('gym:notification', source, 'Your trainer is waiting at the gym.', 'info')
-- type: 'info' · 'success' · 'error'Eventos#
Evento | Lado | Cuándo se dispara |
|---|---|---|
| Cliente | Cambiaron las estadísticas de un jugador. Lleva |
| Cliente | Se muestra un aviso. Lleva el mensaje y su tipo. |
| Cliente | Se creó, guardó o eliminó un gimnasio en el creador. Lleva el gimnasio, o su id. |
| Cliente | La lista completa de gimnasios, enviada cuando un jugador entra y cuando el recurso se inicia. |
Estos eventos los envía Gym Creator. Escúchalos; no dispares tú los del lado del servidor. Completar un entrenamiento, comprar una membresía y cambiar un gimnasio se validan en el servidor (membresía, estación, ejercicio, permisos y tiempos), y una llamada falsificada se ignora.
Callbacks#
Disponibles a través de ox_lib desde cualquier recurso de cliente, con lib.callback.await(name, false, ...):
Callback | Devuelve |
|---|---|
|
|
|
|
|
|



