Comandos#
Shutters Creator registra un único comando en el juego. Todo lo demás — crear, editar, eliminar, teletransportarse — ocurre dentro de la ventana que abre.
Comando | Dónde | Descripción |
|---|---|---|
| En el juego | Abre el creador. Solo administradores — consulta Reclamar el acceso de administrador. A cualquier otra persona se le indica que no tiene permiso. |
No hay comandos de consola. Para seguir lo que hace el script, establece Config.Debug = true y lee la consola del servidor y la consola F8.
Exports de cliente#
Para saber en qué persiana está un jugador — una app de teléfono, un menú radial, un script de robo — y para iniciar el forzado con ganzúa desde tu propio ítem.
getCurrentShutterId
Devuelve el id de la persiana en cuyo punto de interacción está el jugador, y ese punto — o nil cuando no está dentro de la distancia de ningún punto.
local shutterId, point = exports['qs-shutter-creator']:getCurrentShutterId()
if shutterId then
print(('At shutter %d, within %.1f m, lockpick allowed: %s'):format(
shutterId, point.distance, tostring(point.enable_lockpick)
))
endgetCurrentShutter
Devuelve los datos completos de la persiana en la que está el jugador, o nil. La copia del cliente nunca contiene el código PIN.
local shutter = exports['qs-shutter-creator']:getCurrentShutter()
if shutter then
print(shutter.name, shutter.job or 'public', shutter.enable_pin and 'PIN' or 'no PIN')
endlockpick
Ejecuta todo el forzado con ganzúa en el punto de interacción más cercano — comprobaciones, animación, prueba de habilidad y, si tiene éxito, el movimiento de la persiana — exactamente igual que al usar shutter_lockpick. Úsalo cuando otro script ya gestiona el ítem que debe forzar las persianas.
Espera a que termine el intento y luego devuelve 'remove' cuando se hizo un intento — superado o fallido — o false cuando no hay ningún punto forzable al alcance. No consume el ítem por sí mismo:
-- client side, in your own item-use handler
local result = exports['qs-shutter-creator']:lockpick()
if result == 'remove' then
TriggerServerEvent('my-heist:removeLockpick') -- your own event that removes one item
endExports de servidor#
Cómo otro recurso controla Shutters Creator — una tienda que cierra de noche, un atraco que abre la persiana de la cámara acorazada, un script de trabajo que bloquea un garaje cuando el último mecánico sale de servicio.
getShutters
Devuelve todas las persianas del servidor, en el formato descrito en Los datos de la persiana más abajo. Es la lista activa con la que trabaja el script: léela, pero cambia las persianas mediante setLocked o el creador — las ediciones en la propia tabla no se guardan.
local shutters = exports['qs-shutter-creator']:getShutters()
for _, shutter in ipairs(shutters) do
print(shutter.id, shutter.name, shutter.job or 'public')
endsetLocked
Mueve una persiana para todos los jugadores y guarda su nuevo estado en la base de datos, sin comprobación de acceso — tu script decide quién puede. state se escribe en el campo is_closed de la persiana: true coloca la persiana a su altura de apertura, false la baja hasta donde fue colocada. Devuelve true, o false cuando el id no existe o state no es un booleano.
exports['qs-shutter-creator']:setLocked(3, false) -- shutter 3 down, at its placed position
exports['qs-shutter-creator']:setLocked(3, true) -- shutter 3 up, at its open heightBajar todas las persianas de Burger Shot a las tres de la madrugada, con el cron de ox_lib:
lib.cron.new('0 3 * * *', function()
for _, shutter in ipairs(exports['qs-shutter-creator']:getShutters()) do
if shutter.job == 'burgershot' then
exports['qs-shutter-creator']:setLocked(shutter.id, false)
end
end
end)Eventos#
El servidor informa a todos los clientes de cada cambio mediante estos eventos. Tus propios scripts de cliente pueden escucharlos — para reproducir una alarma cuando se fuerza una persiana, o para actualizar un mapa de tiendas abiertas.
Evento de cliente | Recibe | Se dispara cuando |
|---|---|---|
| La nueva persiana | Un administrador crea una persiana. |
| La persiana editada | Un administrador guarda cambios en una persiana. |
|
| Una persiana se mueve — con E, con ganzúa o con |
| El id de la persiana | Un administrador elimina una persiana. |
-- client side, in your own resource
RegisterNetEvent('shutters:updateShutterPartial', function(data)
print(('Shutter %d moved'):format(data.id))
end)Los datos de la persiana#
Todos los exports y eventos anteriores entregan las persianas con esta forma. types.lua incluye la misma descripción como anotaciones de Lua (Shutter, InteractPoint).
Campo | Contiene |
|---|---|
| El id de la base de datos, el nombre que se muestra en el creador y el modelo del prop. |
|
|
| Cuánto se mueve, en metros, para alcanzar su altura de apertura. Positivo es hacia arriba. |
| Una lista de |
| El nombre del ítem requerido, o |
| El trabajo requerido y la lista de rangos permitidos; una lista vacía permite todos los rangos. |
| Lo mismo para las bandas. |
| Si se pide un PIN, y su longitud: 4 o 6. |
| El propio código. Solo servidor — se elimina de todo lo que se envía a los clientes. |
|
|
| El estado guardado: |
| El identificador del administrador que la creó. |



