Lo que falla con más frecuencia, lo que significa realmente y qué hacer al respecto. La mayoría son temas de configuración, no fallos. Cuando la causa no es obvia, activa Config.Debug = true: la consola del servidor y la consola F8 explicarán entonces cada paso, incluido exactamente por qué terminó un paseo.
Instalación y acceso#
“You have renamed the script!” y el servidor se congela
La carpeta debe llamarse exactamente qs-dogwalker. Cada evento que usan la interfaz y el cliente lleva ese nombre, así que una copia renombrada se detiene a propósito: imprime el aviso y luego congela el servidor en lugar de funcionar a medias. Devuelve a la carpeta su nombre, corrige la línea ensure en server.cfg y reinicia.
“You are not a dog walker”
Config.RequireJob está activado y el personaje no tiene un trabajo de los listados en Config.DogWalkerJob.
ESX: el trabajo se crea en el primer arranque. Asígnalo con
/setjob <id> dog_walker 0.QBCore y Qbox: el trabajo tiene que existir primero en
shared/jobs.lua; consulta Instalación.Standalone: no hay trabajos en absoluto, así que establece
Config.RequireJob = false.¿Usas un framework pero se comporta como standalone? Se inició después de
qs-dogwalker. Mueve suensurepor encima.
No aparecen dueños, perros ni blips
Los dueños y los perros aparecen una vez que el framework ha cargado al jugador y su trabajo. Los blips solo se muestran a los jugadores que pueden trabajar, así que un jugador sin el trabajo ve a los dueños pero no los blips.
Si falta un solo dueño o perro, busca en la consola F8 [qs-dogwalker] invalid model: … o model timed out: un nombre de modelo en Config.Locations o Config.EmployerModels está mal escrito o no se ha hecho streaming.
“Could not register the ESX job rows”
La base de datos no tiene una tabla jobs o job_grades en la que escribir el trabajo. El resto del recurso arranca con normalidad. Crea el trabajo a mano (las dos sentencias INSERT al principio de qs-dog-walker.sql) o apunta Config.DogWalkerJob a un trabajo que ya tengas.
Las notificaciones no aparecen
Con Config.DefaultNotifications = false, cada mensaje va a SendTextMessage en config/config.lua, que viene con todas las líneas comentadas. Complétala (y gestiona también el tipo warning) o vuelve a poner la opción en true. Consulta Integraciones.
Paseos y pagos#
El temporizador del paseo no avanza
Con Config.Walk.onlyCountWhileMoving activado (por defecto), el temporizador solo avanza mientras el jugador camina, corre o esprinta; la tarjeta de seguimiento dice Keep moving to advance the walk. También se detiene mientras un perro que se escapó anda suelto. Desactivar la opción deja que el temporizador avance en cualquier caso.
El paseo termina con “<dog> returned home”
Ocurrió una de estas tres cosas:
El perro estuvo a más de
Config.Walk.maxDistance(100 m) del jugador durante tres segundos seguidos, normalmente tras un teletransporte, o con un perro al que se le dijo Sit y se quedó atrás.El temporizador llegó a cero y el
additionalTimese agotó antes de devolver el perro.La entidad del perro se perdió y no se pudo volver a crear.
Con Config.Debug activado, la consola F8 imprime cuál fue, con la distancia y el tiempo transcurrido del paseo.
“You didn't get your money because you didn't finish the time”
El perro se devolvió antes de que su temporizador llegara a cero: eso es abandonar, y nunca se paga.
Había pasado menos tiempo real en el servidor que el
walking_timedel paseo.El servidor observó al jugador durante más de un minuto y nunca lo vio moverse: un paseo AFK. Esto solo aplica mientras
onlyCountWhileMovingestá activado.
“You took too long to bring the dog back”
El servidor da a cada paseo un límite generoso en tiempo real: dos veces y media la duración del paseo, más additionalTime, más diez minutos para paradas y persecuciones. Un paseo entregado después de eso se cierra sin pago. Solo ocurre cuando un paseo se deja abierto durante mucho tiempo.
“You have to be with the dog's owner to do that”
Un paseo se inicia y se entrega en persona: el jugador debe estar a menos de 50 m del dueño de ese perro en ambos extremos. Devuelve cada perro al dueño del que vino.
“This dog needs a rest before going out again”
El Config.Walk.cooldown (1 minuto) del perro no se ha agotado para este jugador. Empieza en cada final, con pago o sin él, y se mantiene tras una reconexión. Otros jugadores sí pueden sacar a ese perro.
Un paseo no paga dinero
En un servidor standalone no hay cartera donde pagar; la experiencia y los niveles sí se conceden. Con qs-job-management en ejecución, el dinero va a él en lugar de al efectivo del jugador: es lo previsto.
Líneas [ANTI-CHEAT] en la consola del servidor
Se imprimen cuando un cliente pide algo que un juego sin modificar no envía: un paseo en una ubicación que no existe, un paseo iniciado o entregado lejos de su dueño, una limpieza antes de que el perro pudiera haberse detenido, o un paseo terminado sin moverse nunca. Cada línea indica el id de servidor y el identificador del jugador. No se paga nada en ninguno de esos casos.
Una sola línea de “lejos del dueño” puede ser un jugador honesto que se alejó en mitad de la entrega. Vale la pena revisar las líneas repetidas del mismo identificador.
Correas y perros de otros jugadores#
No se ven los perros o las correas de otros jugadores
Cada cliente dibuja los perros de otros paseadores dentro de Config.Walk.renderDistance (150 m), hasta maxRemoteLeashes (8) a la vez, primero los más cercanos. Auméntalos si lo necesitas, teniendo en cuenta que cada uno es un ped, una cuerda y física en cada PC cercano. Más allá de unos 400 m no se puede dibujar nada sea cual sea el ajuste: el otro jugador está fuera del rango de red del juego.
El perro de otro jugador se retrasa o la correa se estira
Las copias de los perros de otros jugadores se comprueban cada segundo: se les reasigna la tarea cuando se quedan 6 m atrás, se colocan detrás de su paseador pasados 15 m, y se les vuelve a poner la correa cada vez que el juego pierde una cuerda. Un estiramiento de uno o dos segundos tras un teletransporte o una reaparición se corrige solo.
Queda una cuerda o un prop tras un reinicio
No es posible: cada correa es local al cliente que la dibuja, y detener el recurso elimina cada perro, cuerda, anclaje y caca que creó. Cualquier cosa que parezca olvidada pertenece a otro recurso.
Clasificación#
“Illegal mix of collations” en la consola
La clasificación une qs_dog_walker con la tabla users o players de tu framework, y MySQL se niega a unir columnas con collations distintas: el valor por defecto en MariaDB 11.4 y posteriores difiere del de servidores más antiguos. El trabajo las alinea por sí solo en cada arranque. Si no puede, lo indica e imprime la sentencia exacta para ejecutarla a mano:
[qs-dogwalker] could not align `qs_dog_walker`.`identifier` to utf8mb4_uca1400_ai_ci (users.identifier uses it).
The leaderboard will fail with "Illegal mix of collations" until it matches. Run by hand:
ALTER TABLE `qs_dog_walker` MODIFY `identifier` varchar(46) COLLATE utf8mb4_uca1400_ai_ci NOT NULL;Ejecuta esa sentencia en HeidiSQL o en tu gestor de base de datos y reinicia el recurso.
La clasificación está vacía o falta el botón Statistics
Una clasificación solo lista a los paseadores que tienen algo en ella, así que un servidor nuevo, un día nuevo o un mes nuevo empieza vacío hasta que se paga el primer paseo. Las clasificaciones se actualizan cada updateMinutes. El botón en sí se oculta mientras Config.Leaderboard.enable es false.
Un ganador dice que nunca se le pagó
A los ganadores que están desconectados en el reinicio se les guarda la recompensa en qs_dog_walker_rewards y se les paga, con una notificación, la próxima vez que entren. Si la fila sigue ahí, es que no han cargado un personaje desde entonces.
Claves de mensajes#
Cuando el servidor rechaza un paseo responde con una clave de traducción, así el mismo fallo se lee en el idioma del jugador. El texto de cada clave se puede cambiar en config/translations.lua.
Clave | Significa |
|---|---|
| La ubicación no está en |
| El jugador no tiene un trabajo de |
| A más de 50 m del dueño de ese perro al iniciar o al devolver. |
| Este jugador ya tiene fuera a este perro. |
| Por debajo del |
| Ya pasea tantos perros como |
| El |
| Devuelto antes del tiempo del paseo, sin moverse nunca, o para un paseo que el servidor nunca abrió. |
| Devuelto después del límite del servidor para ese paseo. |
¿Sigues atascado? Abre un ticket e incluye tu framework, la salida de la consola del servidor y de F8 con
Config.Debugactivado, y la parte deconfig/config.luaque cambiaste.



