SCRIPT

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.

Requisitos

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.

  1. Descarga el recurso desde el Portal de Cfx.re y copia la carpeta ov_doorlock en resources/.
  2. Retira ox_doorlock y qb-doorlock si los tenias.
  3. Base de datos: no hay archivo .sql. Las tablas ov_doors, ov_door_log, ov_elevators y ov_elevator_floors se crean solas al arrancar.
  4. 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 ``
  5. Permisos: es administrador quien tenga el ACE ov_doorlock.admin, el permiso command o un permiso de qb-core de Config.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 tipo doorlock.NOMBRE_DE_LA_PUERTA`.
  6. Opcional: envia la auditoria a Discord con la convar ov_doorlock_webhook (o ov_admin_log_webhook como respaldo): `` set ov_doorlock_webhook "URL-del-webhook" ``
  7. Reinicia el servidor y registra tus puertas con /doorlock o /escanerpuertas.

Configuracion

Todo en shared/config.lua.

ClaveValor por defectoPara 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.AdminAbreTodotrueLos administradores abren cualquier puerta.
Config.Interaccion.targettrueZonas de interaccion con ox_target / ov_target.
Config.Interaccion.teclafalseActiva ademas una tecla (teclaUsar = 'E') de uso.
Config.Interaccion.teclaAlterna'L'Tecla para bloquear o desbloquear la puerta registrada mas cercana.
Config.Puertas.distanciaPorDefecto2.0Distancia de uso (metros) de una puerta nueva.
Config.Puertas.radioCarga25.0Radio en el que el cliente carga las puertas cercanas.
Config.Puertas.autobloqueoMax3600Segundos maximos de autobloqueo.
Config.Puertas.maxPuertas2000Tope de puertas registradas.
Config.CodigolongitudMin = 4, longitudMax = 8, intentos = 5, bloqueoSeg = 60Reglas del codigo de acceso.
Config.Ganzuas.itemslockpick, advancedlockpickDificultad del minijuego y probabilidad de consumo por item.
Config.Ganzuas.tiempoMinimoMs900Tiempo minimo; resultados mas rapidos se rechazan.
Config.Alertaactiva = 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.minutosMax240Duracion maxima de una llave temporal.
Config.Auditoria.retencionDias90Dias que se conserva el registro.
Config.Auditoria.discordactivo = true, convar = 'ov_doorlock_webhook'Acciones que se envian a Discord.
Config.Escaneralcance = 12.0, radioZona = 10.0, maxSeleccion = 40Parametros del escaner.
Config.Elevadores.distanciaUso2.0Distancia a la botonera para usar el elevador.
Config.Elevadores.msPorPiso / msMin / msMax1500 / 1800 / 6000Duracion del viaje.
Config.Elevadores.maxPisos / maxElevadores40 / 400Limites.
Config.Compatibilidadqb = true, ox = trueComandos y eventos de compatibilidad con los sistemas anteriores.
Config.Animacion / Config.Sonidosactiva = true / activo = trueAnimacion y sonidos al abrir o cerrar.

Comandos y permisos

Comando / teclaQuienEfecto
/doorlockAdministradoresMenu de administracion (pestana de puertas).
/elevadores, /elevadorAdministradoresMenu en la pestana de elevadores.
/escanerpuertasAdministradoresInicia el escaner de puertas.
/newdoor, /doordebugAdministradoresComandos de compatibilidad (el primero inicia el escaner).
Tecla L (toggledoorlock)JugadoresBloquea 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

  1. Apunta a una puerta registrada con el ojo de ox_target / ov_target y elige "Desbloquear puerta" o "Bloquear puerta", o pulsa L cerca de ella.
  2. Si la puerta pide codigo, aparece un teclado de 4 a 8 digitos. Cinco errores bloquean el teclado 60 segundos en esa puerta.
  3. Si la puerta permite forzarla y llevas una ganzua, se juega un minijuego; puede avisar a la policia y se anota en el registro.
  4. Si tienes una llave temporal, la puerta se abre sin mas requisitos mientras dure.

Elevadores

  1. Acercate a la botonera de tu planta (a 2 m o menos) y elige "Usar elevador".
  2. 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).
  3. Elige un piso y, si lo pide, escribe el codigo. Un viaje dura segun la distancia (msPorPiso, entre msMin y msMax).
  4. Si el piso admite vehiculos y vas en uno, viaja contigo.

Para administradores

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.