Documentación de Puertas y elevadores
ov_doorlock
Puertas con cerradura y elevadores para qb-core: control de acceso por trabajo, banda, personaje, item, llave temporal o codigo, ganzuas con minijuego, escaner para registrar puertas, importacion de otros sistemas y registro de auditoria.
Que hace
ov_doorlock sustituye a ox_doorlock y qb-doorlock (se declara con provide de ambos) y anade un sistema de elevadores. Los administradores registran puertas con un escaner dentro del juego y configuran quien puede abrirlas; los jugadores las abren desde el ojo de la mira (ox_target o ov_target) o con la tecla L.
- Puertas simples, dobles, correderas y garajes, abiertas o bloqueadas, con autobloqueo opcional.
- Acceso por: apertura libre, trabajo con grado minimo, banda con grado minimo, lista de personajes, item (que puede consumirse), llave temporal, codigo de 4 a 8 digitos o ser administrador (
Config.AdminAbreTodo). - Ganzuas (
lockpickyadvancedlockpick) con minijuego deox_lib, validacion en el servidor, aviso opcional a la policia y consumo configurable. - Escaner de puertas de dos modos (rayo y zona) que contornea las puertas, las identifica y abre el formulario ya rellenado. Funciona con puertas del mapa base, de MLO y de objetos.
- Elevadores con varios pisos, nombre, icono y planta por piso, permisos por piso (trabajo, banda, item, personaje, codigo o solo llave), vehiculos opcionales y pantalla de viaje con transicion.
- Menu de administracion (NUI) con pestanas de puertas, elevadores, registro y herramientas (exportar e importar).
- Registro de auditoria en base de datos con retencion configurable y envio opcional a Discord.
- Compatibilidad: responde a los exports y eventos habituales de
ox_doorlockyqb-doorlockpara que otros scripts (como una prision) sigan funcionando. - Sonido y animacion al abrir o cerrar, audibles para jugadores cercanos.
Requisitos
- Servidor FiveM con qb-core, Lua 5.4 y base de datos MySQL o MariaDB con
oxmysql. dependenciesdelfxmanifest.lua:qb-core,ox_lib,oxmysql,ox_inventory.- Recomendado:
ox_targetuov_targetiniciado para interactuar con la mira (Config.Interaccion.target). Sin target, siguen funcionando la teclaLy los elevadores por tecla segun la configuracion. - Si tienes
ox_doorlockoqb-doorlockinstalados, retiralos:ov_doorlockocupa sus nombres conprovide. - Los items de ganzua deben existir en
ox_inventorycon los nombres deConfig.Ganzuas.items(por defectolockpickyadvancedlockpick).
Instalacion
El recurso viene protegido con Asset Escrow de Cfx.re: se descarga desde el Portal de Cfx.re con la cuenta Cfx.re del comprador y solo funciona en servidores de esa cuenta. Segun su fxmanifest.lua, quedan sin cifrar shared/config.lua, shared/locale.lua y la carpeta web/ (la interfaz). Los demas archivos de shared/ van cifrados.
- Descarga el recurso desde el Portal de Cfx.re y copia la carpeta
ov_doorlockenresources/. - Retira
ox_doorlockyqb-doorlocksi los tenias. - Base de datos: no hay archivo
.sql. Las tablasov_doors,ov_door_log,ov_elevatorsyov_elevator_floorsse crean solas al arrancar. - Agrega en
server.cfg, despues de sus dependencias y del target: ``ensure oxmysql ensure ox_lib ensure qb-core ensure ox_inventory ensure ox_target ensure ov_doorlock`` - Permisos: es administrador quien tenga el ACE
ov_doorlock.admin, el permisocommando un permiso de qb-core deConfig.PermisosQB(admin,god). Ejemplo: ``add_ace group.admin ov_doorlock.admin allow`Para dar acceso a una puerta concreta a un grupo se usa un ACE del tipodoorlock.NOMBRE_DE_LA_PUERTA`. - Opcional: envia la auditoria a Discord con la convar
ov_doorlock_webhook(oov_admin_log_webhookcomo respaldo): ``set ov_doorlock_webhook "URL-del-webhook"`` - Reinicia el servidor y registra tus puertas con
/doorlocko/escanerpuertas.
Configuracion
Todo en shared/config.lua.
| Clave | Valor por defecto | Para que sirve |
|---|---|---|
Config.Comando | 'doorlock' | Comando del menu de administracion. |
Config.ComandoElevadores / ComandoElevador | 'elevadores' / 'elevador' | Abren el menu en la pestana de elevadores. |
Config.ComandoEscaner | 'escanerpuertas' | Inicia el escaner de puertas. |
Config.AceAdmin / AceRespaldo | 'ov_doorlock.admin' / 'command' | Permisos ACE de administrador. |
Config.PermisosQB | { 'admin', 'god' } | Permisos de qb-core que dan administracion. |
Config.AdminAbreTodo | true | Los administradores abren cualquier puerta. |
Config.Interaccion.target | true | Zonas de interaccion con ox_target / ov_target. |
Config.Interaccion.tecla | false | Activa ademas una tecla (teclaUsar = 'E') de uso. |
Config.Interaccion.teclaAlterna | 'L' | Tecla para bloquear o desbloquear la puerta registrada mas cercana. |
Config.Puertas.distanciaPorDefecto | 2.0 | Distancia de uso (metros) de una puerta nueva. |
Config.Puertas.radioCarga | 25.0 | Radio en el que el cliente carga las puertas cercanas. |
Config.Puertas.autobloqueoMax | 3600 | Segundos maximos de autobloqueo. |
Config.Puertas.maxPuertas | 2000 | Tope de puertas registradas. |
Config.Codigo | longitudMin = 4, longitudMax = 8, intentos = 5, bloqueoSeg = 60 | Reglas del codigo de acceso. |
Config.Ganzuas.items | lockpick, advancedlockpick | Dificultad del minijuego y probabilidad de consumo por item. |
Config.Ganzuas.tiempoMinimoMs | 900 | Tiempo minimo; resultados mas rapidos se rechazan. |
Config.Alerta | activa = true, probabilidad = 60, trabajos = { 'police' } | Aviso al forzar una puerta. |
Config.Alerta.evento | 'ov_doorlock:alertaPolicia' | Evento de servidor que se lanza con las coordenadas y el nombre de la puerta. |
Config.LlaveTemporal.minutosMax | 240 | Duracion maxima de una llave temporal. |
Config.Auditoria.retencionDias | 90 | Dias que se conserva el registro. |
Config.Auditoria.discord | activo = true, convar = 'ov_doorlock_webhook' | Acciones que se envian a Discord. |
Config.Escaner | alcance = 12.0, radioZona = 10.0, maxSeleccion = 40 | Parametros del escaner. |
Config.Elevadores.distanciaUso | 2.0 | Distancia a la botonera para usar el elevador. |
Config.Elevadores.msPorPiso / msMin / msMax | 1500 / 1800 / 6000 | Duracion del viaje. |
Config.Elevadores.maxPisos / maxElevadores | 40 / 400 | Limites. |
Config.Compatibilidad | qb = true, ox = true | Comandos y eventos de compatibilidad con los sistemas anteriores. |
Config.Animacion / Config.Sonidos | activa = true / activo = true | Animacion y sonidos al abrir o cerrar. |
Comandos y permisos
| Comando / tecla | Quien | Efecto |
|---|---|---|
/doorlock | Administradores | Menu de administracion (pestana de puertas). |
/elevadores, /elevador | Administradores | Menu en la pestana de elevadores. |
/escanerpuertas | Administradores | Inicia el escaner de puertas. |
/newdoor, /doordebug | Administradores | Comandos de compatibilidad (el primero inicia el escaner). |
Tecla L (toggledoorlock) | Jugadores | Bloquea o desbloquea la puerta registrada mas cercana (el jugador la cambia en Ajustes > Teclas > FiveM). |
Teclas del escaner: E selecciona o quita la puerta apuntada, Q quita la ultima, TAB cambia entre modo rayo y modo zona, la rueda del mouse cambia el radio en modo zona, ENTER abre el formulario y BACKSPACE sale.
Exports del servidor: SetState(id, bloqueada), GetState(id), GiveTempKey(id, citizenid, minutos), RemoveTempKey(id, citizenid), GiveTempKeyFloor(idPiso, citizenid, minutos), FindByName(nombre), GetDoors(), SetElevatorEnabled(id, activo) y los de compatibilidad getDoor, getAllDoors, getDoorFromName, editDoor, setDoorState.
Exports del cliente: GetDoorList, GetDoorStates, GetClosestDoor, GetNearbyDoors, useClosestDoor, HayPuertaParaGanzua.
Eventos: ov_doorlock:alertaPolicia (servidor, al forzar una puerta con aviso) y ov_doorlock:client:alerta (cliente, para los trabajos de Config.Alerta.trabajos). La ganzua se activa cuando se dispara el evento de cliente lockpicks:UseLockpick (con true para la avanzada), que debe emitir el uso del item o tu script de llaves.
Como se usa
Puertas
- Apunta a una puerta registrada con el ojo de
ox_target/ov_targety elige "Desbloquear puerta" o "Bloquear puerta", o pulsaLcerca de ella. - Si la puerta pide codigo, aparece un teclado de 4 a 8 digitos. Cinco errores bloquean el teclado 60 segundos en esa puerta.
- Si la puerta permite forzarla y llevas una ganzua, se juega un minijuego; puede avisar a la policia y se anota en el registro.
- Si tienes una llave temporal, la puerta se abre sin mas requisitos mientras dure.
Elevadores
- Acercate a la botonera de tu planta (a 2 m o menos) y elige "Usar elevador".
- Se abre el panel con los pisos, cada uno con su planta, nombre e icono; tu piso aparece como "Estas aqui". Los pisos sin acceso se muestran bloqueados con el motivo (sin permiso, requiere codigo o requiere llave).
- Elige un piso y, si lo pide, escribe el codigo. Un viaje dura segun la distancia (
msPorPiso, entremsMinymsMax). - Si el piso admite vehiculos y vas en uno, viaja contigo.
Para administradores
- Registrar una puerta:
/doorlock> "Escaner rayo" o "Escaner zona" (o/escanerpuertas), selecciona la puerta conE, pulsaENTER, rellena nombre y permisos y guarda. Con una puerta seleccionada se crea una simple; con dos hojas cercanas, una doble; con tres o mas, se crean una a una heredando permisos, codigo y distancia. - Gestionar: el menu permite buscar, filtrar, crear, editar, duplicar y borrar puertas, abrirlas o bloquearlas a distancia, teletransportarse y dar llaves temporales.
- Crear un elevador: pestana "Elevadores": define el edificio, agrega pisos con coordenadas (puedes usar tu posicion actual o pegar
vector4(x, y, z, h)), nombre, planta, icono y permisos por piso. - Importar y exportar: pestana "Herramientas". El recurso exporta e importa en su propio formato JSON y reconoce volcados de
ox_doorlockyqb-doorlock(muestra un informe fila por fila). - Auditoria: pestana "Registro" con filtros y paginacion. Las acciones a enviar a Discord se eligen en
Config.Auditoria.discord.acciones. - Avisar a la policia: la alerta usa el evento de servidor
ov_doorlock:alertaPolicia; conectalo a tu sistema de despacho. - Limitacion: las llaves temporales viven en memoria y se pierden al reiniciar el recurso.
- Ver errores: consola del servidor (mensajes con el prefijo
[ov_doorlock]) y consola F8.
Preguntas frecuentes
Puedo seguir usando mis puertas de ox_doorlock o qb-doorlock? Si: importalas desde "Herramientas" y retira los recursos antiguos. Los eventos y exports habituales siguen respondiendo mientras Config.Compatibilidad este activo.
Pulso L y no pasa nada. Estas demasiado lejos de una puerta registrada o no tienes acceso.
La ganzua no hace nada. Debes tener el item en el inventario, la puerta debe permitir forzarse y tu script de ganzuas o llaves debe lanzar el evento lockpicks:UseLockpick.
No aparece la opcion de la mira. Comprueba que ox_target u ov_target esta iniciado antes que ov_doorlock y que Config.Interaccion.target esta en true.
Un piso del elevador sale bloqueado. El panel indica el motivo: falta permiso, codigo o llave. Revisa los permisos de ese piso en el menu de administracion.
Se pierden las llaves temporales al reiniciar? Si, se guardan en memoria.
Actualizaciones y soporte
Las versiones nuevas aparecen en el Portal de Cfx.re y en la tienda. Antes de actualizar, guarda una copia de shared/config.lua; las puertas y elevadores viven en la base de datos. Para soporte, abre un ticket en el Discord de la tienda: [enlace de soporte]. Indica la version del recurso (1.0.0 en el manifest actual) y el error de la consola.
