Comandos#
Downtown Mechanic registra un solo comando. En el chat necesita el permiso ACE command.mechanicmap (consulta Conceder el comando); en la consola del servidor y en txAdmin siempre funciona, escrito sin la barra.
Comando | Dónde | Descripción |
|---|---|---|
| Chat · consola | Solo el taller. Descarga las capas de evento y de comida para todos. |
| Chat · consola | El taller con la capa de evento: carpa, barbacoa, mesas y sillas. |
| Chat · consola | El taller con la capa de evento y, encima, la capa de comida. |
Cada llamada válida guarda la capa en map_state.json, la envía a todos los jugadores conectados e imprime [MECHANIC MAP] State updated: <n> en la consola del servidor. Cualquier otra cosa — sin número, una palabra, 3, -1 — no cambia nada e imprime la línea de uso.
Exports#
Downtown Mechanic no tiene exports, a propósito. El comando ya valida el valor, lo guarda y sincroniza a todos los jugadores en una sola llamada, así que es la API — otro recurso controla el mapa ejecutándolo.
Cambiar la capa desde un recurso del servidor
-- server side, in your own resource
ExecuteCommand('mechanicmap 2') -- open the meet, with food
ExecuteCommand('mechanicmap 1') -- clear the food, keep the meet
ExecuteCommand('mechanicmap 0') -- back to a normal working dayUn recurso que ejecuta un comando restringido necesita su propio ACE en server.cfg, o la llamada se rechaza. Usa el nombre de la carpeta de tu recurso:
add_ace resource.my_events command.mechanicmap allowUn evento semanal, con horario
Abre el encuentro con comida cada viernes de 20:00 a 02:00, en la hora local del servidor, y lo cierra después. Solo ejecuta el comando cuando la capa debe cambiar, así que un admin todavía puede cambiarla a mano entre medias.
-- server side, in your own resource
local function wantedLayer()
local t = os.date('*t') -- wday: 1 = Sunday … 6 = Friday, 7 = Saturday
if (t.wday == 6 and t.hour >= 20) or (t.wday == 7 and t.hour < 2) then
return 2
end
return 0
end
CreateThread(function()
local current
while true do
local layer = wantedLayer()
if layer ~= current then
ExecuteCommand(('mechanicmap %d'):format(layer))
current = layer
end
Wait(60000)
end
end)Inícialo después de ensure qs_downtown_mechanic para que el comando exista cuando se ejecute por primera vez, y dale la misma línea add_ace resource.<name> command.mechanicmap allow. Al iniciar aplica la capa que corresponde según la hora, sustituyendo la guardada en map_state.json.
Eventos#
Dos eventos de red llevan la capa entre el servidor y cada jugador. Se enumeran para que puedas escucharlos, no para que los dispares.
Evento | Dirección | Descripción |
|---|---|---|
| Cliente → servidor | Sin argumentos. Cada cliente lo envía una vez, medio segundo después de que el mapa se inicie en su lado. El servidor responde solo a ese cliente, con |
| Servidor → cliente | Un argumento, |
Reaccionar cuando se abre el encuentro
Cualquier script de cliente puede registrar el mismo evento y ejecutarse junto al handler propio del mapa — para mostrar un blip, poner música, abrir un puesto de comida o publicar una notificación en el teléfono:
-- client side, in your own resource
RegisterNetEvent('mechanicmap:setState', function(mapId)
local layer = mapId or 0 -- nil means the workshop alone
if layer >= 1 then
-- the meet is open (2 = with food)
else
-- back to a normal working day
end
end)Se dispara para todos los jugadores cuando se ejecuta el comando, y una vez más para cada jugador al entrar.



