Lo que falla con más frecuencia, lo que significa en realidad y qué hacer al respecto. Cuando algo no funciona y no sabes por qué, establece Config.Debug = true, reinicia y lee la consola del servidor y la consola del cliente (F8): el trabajo explica cada paso que da y muestra hasta dónde llegó. Vuelve a desactivarlo en un servidor en producción: imprime mucho.
Instalación y acceso#
La consola se congela tras "You have renamed the script!"
La carpeta del recurso no se llama qs-lifeguard. El bloqueo es intencionado. Detén el servidor, devuélvele su nombre a la carpeta, actualiza server.cfg a ensure qs-lifeguard y vuelve a iniciar.
No hay capitanes, blips ni aviso en las estaciones
Las estaciones solo aparecen para los jugadores que pueden trabajar en ellas. De más a menos probable:
El trabajo del jugador no está en
Config.LifeguardJobmientrasConfig.RequireJobestá activado.El framework se inicia después de Lifeguard Job, así que no se detectó ninguno. Muévelo encima de
ensure qs-lifeguard.Config.Target = truesin ox_target en ejecución: los capitanes están ahí, pero no tienen ninguna opción. Inicia ox_target primero o desactiva el ajuste.El jugador acaba de cambiar de personaje: las estaciones se reconstruyen unos dos segundos después.
"You are not a lifeguard."
El trabajo que tiene el jugador no figura en Config.LifeguardJob. En QBCore y Qbox, comprueba también que el trabajo existe en shared/jobs.lua exactamente con ese nombre. El mismo mensaje aparece cuando termina una llamada alguien que ha cambiado de trabajo desde que empezó: no se le paga.
"You are not allowed to do that" en /lifeguardadmin
Al jugador le falta el ACE command.lifeguard. Concédelo a su grupo y asegúrate de que está en ese grupo:
add_ace group.admin command.lifeguard allow
add_principal identifier.fivem:1234567 group.adminComprueba también que Config.AdminPanel.Enabled no sea false y que el ACE de ahí no se haya renombrado.
El trabajo de socorrista no existe en ESX
El trabajo se escribe en la base de datos en el primer inicio, pero ESX lee sus trabajos al iniciarse: reinicia el servidor una vez después. Si la consola imprimió Could not register the ESX job rows, tu base de datos no tiene ninguna tabla jobs en la que el trabajo pudiera escribir: importa qs-Lifeguard.sql a mano.
Edité config.lua y no cambió nada
Hay dos motivos posibles. O el recurso no se ha reiniciado desde entonces —los archivos de configuración se leen al iniciar— o ese ajuste se guardó desde el panel de ajustes, que tiene prioridad sobre el archivo. Abre /lifeguardadmin, busca el ajuste (aparece marcado como cambiado desde el panel), pulsa la flecha para devolvérselo al archivo y reinicia.
El uniforme no se pone o es incorrecto
El uniforme necesita Config.Clothing = true y, en ESX, esx_skin y skinchanger; en QBCore, qb-clothing. Con otro recurso de ropa, apunta ApplyJobClothes y RemoveJobClothes en config/clothing.lua a él, o desactiva el uniforme. Las piezas en sí son los números de ese mismo archivo.
Patrullas y llamadas#
Los puntos de control nunca generan una llamada
Algunos puntos de control están pensados para ser tranquilos: en el nivel 1 solo el 40% genera algo. Si ninguno lo hace nunca:
En el agua, en los niveles bajos hay poco que encontrar: todas las llamadas simples ocurren en la arena.
El turno debe haberse iniciado desde una estación. Un jugador que simplemente conduce hasta los puntos de control no está de servicio.
Volver a llegar al mismo tramo de playa en menos de un minuto no cuenta: sigue hasta el siguiente punto de control.
Después de que una llamada se quede sin tiempo o se abandone, la siguiente puede tardar hasta un minuto en aparecer.
Las llamadas en solitario se pausan mientras hay un rescate cooperativo en curso.
"Incident abandoned."
La llamada se quedó sin tiempo. Cada una tiene su propio límite —el campo timeout en config/incidents.lua, en segundos—, que puedes aumentar desde la página Call-outs del panel de ajustes.
Se terminó una llamada, pero no se pagó nada
El servidor solo paga cuando se cumplen todas estas condiciones:
el jugador sigue teniendo el trabajo de socorrista;
se terminó dentro de su límite de tiempo;
el jugador sigue en la playa o cerca de ella;
era una llamada que el servidor asignó a ese jugador: una que no se abandonó ni se pagó ya.
Si moviste estaciones o rutas lejos de la playa, mantenlas juntas: el pago solo se da a unos pocos cientos de metros de los puntos de control y las estaciones configurados.
"Cannot change vehicle during an active incident."
Los vehículos no se pueden cambiar ni guardar mientras hay una llamada abierta. Termínala primero o usa End Shift, que la abandona.
"You have not unlocked this vehicle yet."
El minLevel del vehículo está por encima del nivel del jugador. Las motos de agua empiezan en el nivel 2 por defecto, así que un socorrista recién llegado solo tiene la patrulla terrestre.
"You must be on a vehicle to rescue them."
El Exhausted Swimmer, y los surfistas del rescate Missing Surfer, se suben detrás de ti: acércate en tu moto de agua antes de usar la opción. Los pasajeros del Sinking Vessel son lo contrario: los rescatas en el agua, fuera de la moto de agua.
El vehículo no aparece
Busca en F8 could not load vehicle model: el nombre de spawn en Config.VehicleTypes es incorrecto, o un vehículo addon no se está transmitiendo. Para un vehículo terrestre, comprueba también que el punto de spawn land de la estación sea terreno despejado a unos metros del capitán.
El socorrista no recibe llaves
No se detectó el script de cerraduras: se inicia después de Lifeguard Job o no es uno de los once compatibles. Súbelo en server.cfg, o añade un puente como se muestra en Integraciones.
Añadí una llamada a la configuración y nunca ocurre
Cada id de llamada lo reproduce una escena integrada en el trabajo, así que un id nuevo no tiene nada que reproducir. En su lugar, ajusta, mueve o desactiva las dieciséis que vienen incluidas; consulta IDs de llamadas.
Rescates cooperativos#
Un rescate cooperativo nunca ocurre
Necesita Config.CoopIncidents.enabled, al menos dos socorristas que hayan iniciado su turno en una estación y, después, una tirada del 30% al llegar alguien a un punto de control, con un descanso de 10 minutos tras cada uno (5 tras un fallo). La página Shared calls del panel de ajustes muestra cuántos hay de turno y puede iniciar uno al momento para probar.
Un socorrista del rescate no cobró
Un rescate cooperativo paga por el trabajo que hizo cada socorrista: quien no encontró ninguna tabla, no entregó ningún surfista, no rescató a ningún pasajero ni ahuyentó nunca a un tiburón no tiene nada por lo que cobrar. Un socorrista que cambió de trabajo durante el rescate no cobra, y un Shark Alert que pierde a todos los nadadores no paga a nadie.
Estadísticas y niveles#
El tablero de estadísticas sigue vacío
Se va llenando a medida que se pagan las llamadas en solitario; los rescates cooperativos no se cuentan en él. Se guarda en data/stats.json, así que el servidor necesita acceso de escritura a la carpeta del recurso; en los hosts que montan los recursos en solo lectura no se puede conservar.
El nivel de un jugador volvió a 1
Los niveles se guardan por personaje —el identifier de ESX, o el citizen id en QBCore y Qbox—, así que un personaje distinto empieza desde 1. Su fila está en qs_lifeguard.
La clasificación muestra el nombre equivocado
Sigue Config.PlayerNameSource —el nombre del personaje, el nombre de FiveM o ambos—. El nombre se guarda cuando se paga una llamada, así que un cambio se ve después de la siguiente de ese jugador.
Cuando el panel de ajustes rechaza un cambio#
Cada cambio se comprueba en el servidor antes de guardarse. Uno rechazado no se pierde: el panel marca brevemente el guardado como fallido y la edición queda pendiente, para que puedas verla y corregirla. Las causas habituales:
Lo que ves | Por qué y qué hacer |
|---|---|
"You are not allowed to do that" | Al jugador le falta el ACE del panel. Se comprueba en cada botón, no solo al abrir el panel. |
Un valor no se guarda | No es del mismo tipo que el del archivo —texto donde va un número, o una lista convertida en otra cosa— o no es una de las respuestas que acepta el ajuste. Usa el mismo tipo de valor que tiene el archivo ahí. |
No se guarda nada | La base de datos rechazó la escritura. La consola del servidor imprime |
No se ofrece el framework o el script de cerraduras | Ambos se detectan en cada inicio y no se pueden guardar. Cambia el orden de carga en su lugar. |
Start no hace nada en Shared calls | Las Shared calls están desactivadas, hay menos socorristas de turno de los que necesita una (el contador de la página dice cuántos) o ya hay una en curso. |
Guardado, pero el juego sigue usando el valor anterior | Es lo esperado: los ajustes guardados esperan a |
Consola: saved setting(s) no longer fit this config | Tras una actualización, un ajuste guardado antes ya no coincide con el nuevo archivo de configuración y se ignora. Se conserva en la base de datos; reviértelo desde el panel para eliminarlo. |
¿Sigues atascado? Abre un ticket e incluye tu framework, el orden de tus
server.cfg, y la salida de la consola del servidor y de F8 conConfig.Debugactivado mientras reproduces el problema.



