Antes de empezar#
Antes de instalar Doorlock Creator, asegúrate de que tu servidor cumple los requisitos mínimos. Tres recursos y OneSync son obligatorios; todo lo demás es opcional y se detecta por sí solo.
Requisito | Estado | Notas |
|---|---|---|
| Obligatorio | Guarda cada puerta y su estado de bloqueo. |
| Obligatorio | Callbacks y funciones auxiliares compartidas. |
OneSync | Obligatorio | Activado en tu servidor (lo está por defecto en los artifacts actuales). |
Framework | Obligatorio | ESX, QBCore o Qbox — se detecta automáticamente. No hay modo standalone: los trabajos, los identificadores y el dinero vienen del framework. |
Inventario | Recomendado | Rellena la lista de ítems que usa la regla Item Access. qs-inventory, ox_inventory, qb-inventory, tgiann-inventory o codem-inventory. |
Target | Opcional | ox_target o qb-target, solo si activas |
| Opcional | Un aviso 3D con estilo en lugar del texto simple del juego. |
| Opcional | Su HUD se oculta mientras el creador está abierto. |
Todo lo específico del framework o del inventario está detrás de un pequeño archivo puente editable, y el recurso elige el adecuado según lo que ya está en marcha:
Capa | Recursos detectados |
|---|---|
Framework | es_extended · qb-core · qbx_core |
Inventario | qs-inventory · ox_inventory · qb-inventory · tgiann-inventory · codem-inventory |
Target | ox_target · qb-target |
Ejecuta un solo recurso por capa. Integraciones explica para qué se usa cada uno y cómo fijar uno a mano.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.github.comReleases · overextended/ox_libA FiveM resource and script library for Lua and JS.Descargar Doorlock Creator#
Tras comprar Doorlock Creator, el recurso se vincula automáticamente a tu cuenta de CFX Portal.
Inicia sesión en CFX Portal con la misma cuenta que usaste al finalizar la compra, abre Granted Assets y descarga Doorlock Creator.
Tras descomprimir la descarga, deberías tener la siguiente carpeta:
qs-doorlock-creator/
├── config/main.lua -- the configuration file
├── custom/ -- framework bridges: notifications, admins, money (editable)
├── client/custom/ -- target bridge (editable)
├── server/custom/ -- inventory bridges (editable)
├── database/ -- database.sql
├── locales/ -- 13 languages
├── docs/ -- an offline testing checklist
└── web/ -- the interface, its images and the lock soundsMantén el nombre de la carpeta
qs-doorlock-creator. La interfaz se carga desdenui://qs-doorlock-creator/web/(Config.Path) y otros scripts llaman a sus exports por ese nombre, así que una copia renombrada abre un panel en blanco y rompe todas las integraciones.
Instalar el recurso#
Mueve la carpeta qs-doorlock-creator al directorio de recursos de tu servidor. Puede estar en cualquier lugar dentro de él, incluida una carpeta de categoría:
resources/
└── [qs]/
└── qs-doorlock-creator/Una vez copiada, abre tu server.cfg y asegúrate de que cada dependencia —y todo lo que debe detectar— se inicie antes que Doorlock Creator:
ensure oxmysql
ensure ox_lib
# Framework — one of them
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Inventory, target and text UI
ensure ox_inventory
ensure ox_target # only used with Config.UseTarget = true
ensure qs-textui # optional
ensure qs-doorlock-creatorEl orden de carga importa. La detección solo ve los recursos que ya se han iniciado: un framework que se inicia después detiene el recurso con un error, y un inventario que se inicia después deja la lista de ítems vacía.
La base de datos#
Doorlock Creator guarda todas las puertas en una sola tabla. No se crea automáticamente: importa database/database.sql en la base de datos de tu servidor (HeidiSQL, phpMyAdmin o la línea de comandos) antes del primer inicio:
CREATE TABLE IF NOT EXISTS `qs_doorlocks` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(128) NOT NULL,
`state` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1 = locked, 0 = unlocked',
`data` LONGTEXT NOT NULL COMMENT 'JSON: door slots, distance, requirements, autolock, etc.',
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `idx_state` (`state`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;Columna | Contiene |
|---|---|
| El nombre de la puerta. Único: dos puertas no pueden compartirlo. |
|
|
| Todo lo demás en JSON: los modelos y posiciones de las puertas, la distancia, las reglas de acceso, la animación y los sonidos. |
El script no necesita ítems en tu inventario. Una puerta puede requerir cualquier ítem que ya tengas —una tarjeta, una placa, una llave— y Uso muestra cómo añadir uno si quieres una tarjeta de acceso propia.
Quién puede abrir el creador#
En el creador se crean las puertas y se deciden sus reglas, así que /doorlockcreator solo se abre para el staff del servidor y los trabajos que indiques. Cada guardado, edición y borrado se vuelve a comprobar en el servidor.
Jugadores del grupo admin o superadmin. No hay nada que configurar.
Jugadores con el permiso god o admin, o el ace command, que ya tiene el grupo admin habitual en server.cfg:
add_ace group.admin command allow
add_principal identifier.license:xxxxxxxx group.adminPermite que un trabajo gestione sus propias puertas sin ser staff. Añádelo en config/main.lua; grade = false permite todos los rangos; una lista permite solo esos rangos exactos:
Config.CreatorJobs = {
{ job = 'police', grade = { 1, 2, 3 } }, -- only grades 1, 2 and 3
{ job = 'ambulance', grade = false }, -- every grade
}La comprobación de admin está en custom/esx/server.lua y custom/qb/server.lua (playerIsAdmin), ambos editables si tu servidor define el staff de otra forma.
Configurar el recurso#
Las puertas nunca se configuran en archivos: se crean en el juego y viven en la base de datos. Los archivos solo contienen el comportamiento general del servidor:
Archivo | Contenido |
|---|---|
| Idioma, trabajos del creador, target o texto 3D, comportamiento de las puertas, tipos de dinero, sonidos y depuración. |
| Cómo se comportan las notificaciones, el aviso 3D y el HUD. |
| El puente del framework: admins, trabajos, identificadores, ítems y dinero. |
| El puente del target. |
| Un puente por inventario: lista de ítems e imágenes de los ítems. |
| Todos los textos de la interfaz y de los avisos. |
Los valores que conviene revisar primero:
Config.Locale = 'en' -- cs · da · de · en · es · fr · it · nl · no · pt · ro · sl · sv
Config.UseTarget = false -- true = ox_target / qb-target, false = floating [E] prompt
Config.TargetWidth = 5.0 -- target box size around the door (target mode)
Config.TargetHeight = 5.0
Config.DisableSounds = false -- true mutes the interface and the lock / unlock sounds
Config.MaxSearchResults = 20 -- players returned by the creator's player search
Config.Debug = true -- set to false on a live server
Config.ZoneDebug = false -- draws the target boxes, for testing
Config.MoneyTypes = { -- the accounts a paid door can charge
{ label = 'Money', value = 'money' },
{ label = 'Bank', value = 'bank' },
{ label = 'Black Money', value = 'black_money' },
}Y el bloque de comportamiento de las puertas:
Config.Doorlock = {
ToggleCooldownMs = 750, -- minimum time between two requests by one player on one door
SyncChunkSize = 25, -- doors per packet when a player joins
DefaultAutolockSeconds = 0, -- relock every door after N seconds (0 = off)
MaxInteractDistance = 3.0, -- extra metres the server tolerates over a door's distance
DrawTextZOffset = 0.35, -- height of the [E] prompt above the door
TargetZoneKey = 'qs_doorlock', -- prefix for target zone names (change only on a clash)
DefaultInteractionAnim = { -- animation for new doors
dict = 'anim@heists@keycard@',
clip = 'exit',
durationMs = 900,
},
}
Config.Debugviene comotruepara que el primer inicio sea fácil de diagnosticar. Desactívalo cuando las puertas funcionen: imprime una línea por cada acción.
Verificar la instalación#
Reinicia tu servidor y lee la consola. Un inicio correcto muestra el framework que cargó y ningún error en rojo sobre qs_doorlocks. Después entra y sigue este primer recorrido:
Abre el creador
Escribe
/doorlockcreator. Se abre el panel Door Locks, vacío en una instalación nueva.Bloquea una puerta
Pulsa Create new, ponle un nombre, pulsa Select 1 Door Entity, apunta a una puerta y haz clic izquierdo. Guarda sin ningún requisito.
Úsala
Acércate a la puerta:
[E] Unlock dooraparece. Pulsa E: la puerta se desbloquea para todos, con la animación de la tarjeta y el sonido de desbloqueo.Reinicia y comprueba
Reinicia el recurso. La puerta sigue ahí y en el estado en que la dejaste.
A partir de aquí nada necesita reinicio. Cada puerta que creas, editas o borras se envía a todos los jugadores en el momento en que guardas.
docs/doorlock_smoke.mden la descarga incluye una lista de comprobación más larga que cubre trabajos, dinero, códigos y puertas dobles.



