Comandos#
Doorlock Creator registra un solo comando. Todo lo demás ocurre en su ventana o en la puerta.
Comando | Quién | Descripción |
|---|---|---|
| Admins y | Abre el creador: la lista de puertas y el formulario de puerta. A cualquier otro se le indica You do not have permission to do this. |
Teclas#
Tecla | Dónde | Qué hace |
|---|---|---|
E | En una puerta | La bloquea o desbloquea (cuando |
0 – 9 · Backspace · Enter · Esc | Teclado del código | Escribir, borrar, confirmar, cerrar. |
Clic izquierdo | Al seleccionar entidades de puerta | Elige la puerta resaltada. |
Exports de servidor#
Cómo otro recurso controla tus puertas: un golpe que abre la cámara acorazada cuando termina el taladro, un script de prisión que bloquea todas las celdas en un cierre total, un script de housing que añade sus puertas principales. Todos los exports son de servidor.
GetAllDoors
Todas las puertas, ordenadas por id.
local doors = exports['qs-doorlock-creator']:GetAllDoors()
for _, door in ipairs(doors) do
print(door.id, door.name, door.locked, door.coords)
endCampo | Tipo | Significado |
|---|---|---|
| number | El id de la puerta, como en Edit door #id. |
| string | Su nombre único. |
| vector3 | El centro: entre ambas hojas en una puerta doble. |
| number | El modelo de la (primera) puerta. |
| boolean | Su estado actual. |
GetDoor
Una puerta por id, con la misma forma que GetAllDoors, o nil cuando no existe.
local door = exports['qs-doorlock-creator']:GetDoor(12)
if door and door.locked then
print(('%s is locked'):format(door.name))
endSetDoorState
Bloquea (true) o desbloquea (false) una puerta a la fuerza, sin comprobar permisos, distancia, código ni dinero. El estado se guarda y se envía a todos los jugadores a la vez.
-- The drill finished: open the vault
local ok = exports['qs-doorlock-creator']:SetDoorState(12, false)
-- Lockdown: lock every door whose name starts with "cell_"
for _, door in ipairs(exports['qs-doorlock-creator']:GetAllDoors()) do
if door.name:find('^cell_') then
exports['qs-doorlock-creator']:SetDoorState(door.id, true)
end
endDevuelve true cuando la puerta está en el estado pedido (también si ya lo estaba), y false para un id desconocido o un estado que no sea booleano. Cancela un autobloqueo pendiente y no inicia ninguno: vuelve a bloquear la puerta tú mismo cuando termine tu evento.
EnsureDoors
Se asegura de que existe una lista de puertas, crea las que faltan y devuelve sus ids en el mismo orden. Es seguro llamarlo en cada inicio: una puerta que ya existe se vuelve a encontrar, no se duplica. Pensado para scripts de golpes, robos y housing que traen sus propias puertas.
local ids = exports['qs-doorlock-creator']:EnsureDoors({
{
name = 'fleeca_vault', -- optional; auto-named when omitted
model = 'v_ilev_gb_vauldr', -- model name, hash or numeric string (or modelHash = ...)
coords = vector3(254.12, 225.13, 101.87),
heading = 160.0, -- optional
locked = true, -- optional, defaults to locked
hidden = true, -- optional, no prompt: only scripts open it
},
{ modelHash = -1508355822, coords = { x = 1.0, y = 2.0, z = 3.0 } },
})
exports['qs-doorlock-creator']:SetDoorState(ids[1], false)Campo | Obligatorio | Acepta |
|---|---|---|
| Sí |
|
| Sí | Un nombre de modelo, un hash o un hash como string. |
| No | Sin él, la puerta se llama |
| No |
|
Una puerta existente se identifica por su nombre (sin distinguir mayúsculas), luego por su nombre automático y luego por el mismo modelo a menos de 0,25 m, y se devuelve tal cual, nunca se sobrescribe. Una puerta nueva es simple, con una distancia de 2 m y sin reglas de acceso; ábrela en el creador para añadir trabajos, ítems o un código, y esos cambios se mantienen en todas las llamadas posteriores. Una entrada que no se puede crear se omite, así que comprueba cuántos ids recibes.
Eventos#
El servidor los envía a todos los clientes cada vez que cambia una puerta, para que tus propios scripts de cliente puedan reaccionar: una alarma cuando se abre la cámara acorazada, una luz que se pone roja en una celda bloqueada.
Evento de cliente | Argumentos | Se dispara cuando |
|---|---|---|
|
| Cualquier bloqueo o desbloqueo: un jugador, un autobloqueo o un export. |
|
| Se crea una puerta en el creador o mediante |
|
| Se edita y guarda una puerta. |
|
| Se borra una puerta. |
-- client
AddEventHandler('doorlock:doorStateChanged', function(id, state)
if id == 12 and state == 0 then
print('The vault is open')
end
end)La tabla door contiene id, name, state, coords, maxDistance, needsPasscode, hidden, y el modelo y la posición de cada hoja. El código en sí nunca se envía.
Pedir una puerta como jugador#
Un script de cliente —un menú radial, un mando, una app del teléfono— puede pedir abrir o cerrar una puerta exactamente como al pulsar E. Se siguen aplicando todas las comprobaciones normales: distancia, permisos, código, dinero y tiempo de espera.
-- client: doorId, new state (1 lock · 0 unlock · nil toggle), passcode (optional)
TriggerServerEvent('doorlock:requestSetState', 12, nil)
TriggerServerEvent('doorlock:requestSetState', 14, 0, '4821')Los datos de la puerta#
Los ajustes de cada puerta están en la columna data de qs_doorlocks como JSON. Leerlos ayuda a revisar permisos en bloque o a editar un valor que el creador no muestra; reinicia el recurso después de editarlos a mano.
{
"name": "mrpd_armory",
"distance": 2,
"isMultiDoor": false,
"doors": [
{ "model": 749848321, "coords": { "x": 453.08, "y": -982.57, "z": 30.83, "w": 90.0 } }
],
"requirements": {
"jobs": [ { "name": "police", "grades": [2, 3, 4] } ],
"players": [ { "identifier": "ABC12345", "name": "John Doe" } ],
"item": "door_keycard",
"money": 0,
"moneyType": "money",
"passcode": "1234"
},
"interactionAnim": { "enabled": true, "dict": "anim@heists@keycard@", "clip": "exit", "durationMs": 900 },
"doorUiSoundsEnabled": true,
"autolockSeconds": 10,
"doorRate": 10.0,
"hidden": false
}autolockSeconds, doorRate y hidden son opcionales y solo se definen a mano o mediante EnsureDoors — consulta Uso.



