Comandos#
Garbage Job se juega en el NPC, no desde el chat. Cada acción es una pulsación de tecla o una opción de target, y el panel del trabajo contiene todo lo demás: los jugadores no tienen nada que asignar ni escribir.
Un comando de práctica para el minijuego de limpieza#
Añadir un command a Config.CleanDumpster registra un comando de chat que abre el minijuego de limpieza en el acto, delante del jugador; es útil para probar el temporizador y el umbral mientras los ajustas. Una partida de práctica nunca hace avanzar una ruta ni da experiencia.
Config.CleanDumpster = {
duration = 45000,
threshold = 0.90,
patches = 5,
bonusExperience = 15,
command = 'clean', -- /clean opens a practice run
}Si omites command — lo predeterminado —, no se registra ningún comando.
Exports de cliente#
Para abrir las vistas del trabajo desde tus propios scripts: un gestor de NPCs, un prop de portátil, un menú radial.
openLeaderboard
Abre la vista Statistics — la misma que abre el botón del panel, con las tres clasificaciones, los premios y los últimos ganadores. No hace nada mientras Config.EnableLeaderboard sea false.
exports['qs-garbagejob']:openLeaderboard()Por ejemplo, un tablón de clasificación en un ped propio:
exports.ox_target:addLocalEntity(myPed, {
{
name = 'garbage_leaderboard',
label = 'Garbage rankings',
icon = 'fa-solid fa-trophy',
onSelect = function()
exports['qs-garbagejob']:openLeaderboard()
end,
},
})Desde el servidor, ábrelo en la pantalla de un jugador con el evento de cliente:
TriggerClientEvent('qs-garbagejob:openLeaderboard', source)Exports de servidor#
Cómo otro recurso consulta el trabajo: una pantalla del ayuntamiento, una central de avisos, un script que no debería ejecutarse mientras alguien está haciendo una ruta.
IsPlayerOnMission
Si el servidor tiene asignada una ruta a ese jugador en este momento. Se lee del propio registro del servidor — se establece cuando empieza una ruta y se borra cuando se paga, se abandona, o el jugador es expulsado o se desconecta —, así que es la respuesta de la que fiarse.
local working = exports['qs-garbagejob']:IsPlayerOnMission(source) -- true / falsePor ejemplo, impedir que un recolector haga otro trabajo hasta que termine su ruta:
RegisterNetEvent('myjobs:start', function()
local src = source
if exports['qs-garbagejob']:IsPlayerOnMission(src) then
return -- finish the garbage route first
end
-- start your job here
end)getOnDutyCount
Cuántos jugadores están haciendo una ruta en este momento.
local collectors = exports['qs-garbagejob']:getOnDutyCount()
-- e.g. a city-hall screen
lib.callback.register('cityhall:jobStats', function()
return { garbage = exports['qs-garbagejob']:getOnDutyCount() }
end)isPlayerOnDuty
Si un jugador está de servicio, según lo informó por última vez su propio cliente. Se mantiene para los scripts que ya lo usan; para cualquier cosa que pague o permita algo, usa IsPlayerOnMission, que decide el servidor por su cuenta.
local onDuty = exports['qs-garbagejob']:isPlayerOnDuty(source) -- true / falseEventos de red#
Aparte de qs-garbagejob:openLeaderboard, todos los eventos de red que registra el recurso son internos. Cada uno se comprueba en el servidor con sus propios registros — la ruta que asignó, la parada en la que se trabaja, la invitación que envió —, así que lanzarlos desde otro recurso no sirve para nada. Controla el trabajo con los exports de arriba.
Sobre los mensajes#
Cada rechazo llega al jugador como una notificación en el idioma del servidor, creada a partir de una clave de config/translations.lua — NOTIFY_NOT_GARBAGE, PARKING_FULL, NOTIFY_ROUTE_NOT_FINISHED y el resto. Reescribe cualquiera de ellos ahí. Errores comunes indica qué significa cada uno.



