Documentación de Búnkeres con rocas cósmicas
OV Búnkeres
Búnkeres privados para bandas y dueños individuales, con interior propio, almacén y rocas cósmicas minables. Incluye ov_rocas, el pack de modelos 3D de las rocas.
Que hace
OV Búnkeres añade al mapa 11 búnkeres (en la configuración por defecto) con su icono en el mapa. Cada búnker tiene un interior aislado: al entrar, el jugador pasa a un "mundo" propio (routing bucket), de modo que solo ven lo que ocurre allí dentro quienes están en ese mismo búnker.
Características principales:
- Acceso por propietario, banda, aliados o código. Un búnker nuevo está cerrado; el staff lo asigna a un ciudadano (y opcionalmente a una banda). Pueden entrar el dueño, los miembros de la banda asignada, los aliados añadidos y quien conozca el código de 6 caracteres.
- Entrada a pie o en vehículo. El conductor puede entrar con su vehículo y salir con él.
- Almacén propio por búnker, basado en un stash de
ox_inventory(500 ranuras y 8.000.000 de peso por defecto). - Rocas cósmicas minables en 13 puntos del interior. Cada roca existe en tres formas y tres etapas de rotura; el estado de la roca se guarda en el servidor y lo ven igual todos los jugadores que están dentro del mismo búnker.
- Botín configurable (hierro, chatarra, acero, caucho y plástico por defecto) con probabilidad y cantidad por material.
- Panel de administración con interfaz web para asignar, liberar, regenerar códigos, gestionar aliados, restaurar rocas y teletransportarse a cada entrada.
- Efectos visuales en las rocas: luz propia, chispas, descargas, escombros y polvo (todos ajustables).
- Exports para entregar, asignar o liberar búnkeres desde otros scripts.
ov_rocas es un recurso de modelos: contiene 3 formas de roca en 3 etapas, más el modelo de escombros, en un único archivo de definición de props (ovr_props.ytyp) y su textura. ov_bunkers lo declara como dependencia.
Requisitos
Dependencias declaradas en el fxmanifest.lua de ov_bunkers:
bob74_ipl(carga el interior del búnker de tráfico de armas)ox_liboxmysqlox_inventoryov_rocas(incluido en el producto)
Además, el código usa:
qb-core(jugadores, citizenid, banda).crime-systemes opcional: si está iniciado, el búnker reconoce la organización del jugador a través de su exportGetSourceOrgName; si no, usa la banda deqb-core.
Otros requisitos:
- Lua 5.4 (
lua54 'yes'). - Base de datos MySQL o MariaDB con
oxmysql. - Los ítems del botín deben existir en
ox_inventory(por defecto:iron,metalscrap,steel,rubber,plastic).
Instalacion
- Descarga los recursos desde el Portal de Cfx.re con la cuenta Cfx con la que compraste el producto. Ambos (
ov_bunkersyov_rocas) vienen protegidos con Asset Escrow de Cfx.re y funcionan únicamente en servidores asociados a tu cuenta. - Copia las carpetas
ov_bunkersyov_rocasdentro de la carpetaresourcesde tu servidor. - Comprueba que tienes instalados
bob74_ipl,ox_lib,oxmysql,ox_inventoryyqb-core, y que los ítems del botín existen enox_inventory. - Añade en tu
server.cfg, después de las dependencias:
ensure bob74_ipl
ensure ox_lib
ensure oxmysql
ensure ox_inventory
ensure ov_rocas
ensure ov_bunkers
- Concede el permiso ACE a tus administradores (ver sección "Comandos y permisos"):
add_ace group.admin command.bunkeradmin allow
- Base de datos: no hay archivo
.sql. Al iniciar, el recurso crea la tablaov_bunkerspor sí solo (CREATE TABLE IF NOT EXISTS) y añade una fila por cada búnker definido en la configuración. - Reinicia el servidor y comprueba en la consola el mensaje
[ov_bunkers] N bunkeres cargados.
Protección y edición: el fxmanifest declara como archivos sin cifrar (escrow_ignore) shared/config.lua y toda la carpeta html/ (la interfaz web). El resto del código (cliente y servidor) está cifrado. ov_rocas es solo de modelos y no contiene código. El recurso no lee ninguna convar de server.cfg.
Configuracion
Todo se edita en shared/config.lua.
| Clave | Valor por defecto | Para qué sirve |
|---|---|---|
Config.Bunkers | 11 búnkeres | Lista de búnkeres: id, name, coords (entrada), heading, exitVehicle y exitHeading (donde reaparece el vehículo al salir) y hideBlip opcional. |
Config.Interior | coordenadas del interior | Puntos de aparición a pie y en vehículo dentro y puerta de salida (pedSpawn, vehicleSpawn, exitDoor). |
Config.InteractRadius | 15.0 | Distancia a la que aparece el aviso de entrada. |
Config.BucketBase | 10000 | Número base del routing bucket; el búnker N usa BucketBase + N. |
Config.DefaultSetup | style = "default", tier = "upgrade", security = "upgrade" | Variante del interior que se carga. |
Config.Blip | sprite 556, escala 0.85, color propio 5, color cerrado 3, etiqueta "Búnker" | Aspecto de los iconos del mapa. |
Config.AdminAce | 'command.bunkeradmin' | Permiso ACE que da acceso a comandos y panel de administración. |
Config.Stash | radio 1.5, slots = 500, weight = 8000000 | Punto y capacidad del almacén. |
Config.MiningPoints | 13 posiciones | Lugares del interior donde aparecen las rocas. |
Config.RocaModelos / Config.RocaResto | ovr_roca_a/b/c_0..2 y ovr_roca_resto | Modelos de cada forma y etapa, y de los escombros. |
Config.MiningDrops | iron 28, metalscrap 26, steel 24, rubber 14, plastic 8 | Botín: item, chance (peso de la tirada) y qty = { mín, máx }. |
Config.Mining.hitsToBreak | 5 | Golpes necesarios para romper una roca. |
Config.Mining.respawnTime | 90000 | Milisegundos hasta que la roca vuelve a crecer. |
Config.Mining.hitCooldownMs | 800 | Tiempo mínimo entre golpes de un mismo jugador. |
Config.Mining.interactRadius | 2.6 | Distancia para poder picar una roca. |
Config.Mining.maxDistance | 7.0 | Distancia máxima que valida el servidor al recibir un golpe. |
Config.Luz | color, rango, intensidad y distancia | Brillo de las rocas. |
Config.Particulas | efectos del juego | Partículas de chispas, descarga, escombro, polvo, etc. |
Config.Debug | false | Modo de depuración. |
Nota: las probabilidades de MiningDrops se evalúan como una tirada de 1 a 100 acumulada. Si cambias los valores, procura que sumen 100.
Comandos y permisos
Permiso ACE (configurable en Config.AdminAce): command.bunkeradmin.
| Comando | Quién | Qué hace |
|---|---|---|
/bunkeradmin | Admin | Abre el panel de administración. |
/bunkerlist | Admin o consola | Lista los búnkeres con dueño, banda y código. |
/bunkerassign [id] [citizenid] [banda opcional] | Admin o consola | Entrega un búnker y genera un código nuevo. |
/bunkerrelease [id] | Admin o consola | Libera el búnker: queda cerrado y sin dueño, aliados ni código. |
/bunkerreload | Admin o consola | Recarga los búnkeres desde la base de datos. |
/bunkerrocas [id] | Admin o consola | Restaura todas las rocas (sin id, usa el búnker en el que estás). |
Teclas del jugador (control del juego, no configurables como mapeo de teclas): E para entrar, salir, abrir el almacén o picar; F para introducir el código cuando se tiene.
Exports del servidor, útiles para otros scripts:
exports['ov_bunkers']:AssignBunker(bunkerId, gang, ownerCitizenid, por, regenerarCodigo): asigna un búnker y devuelve el código.exports['ov_bunkers']:DeliverBunker(bunkerId, ownerCitizenid, gang, por): asigna con código nuevo y avisa al dueño (si está desconectado, se le avisa al conectarse).exports['ov_bunkers']:ReleaseBunker(bunkerId): libera un búnker.exports['ov_bunkers']:ReloadBunkers(): recarga la caché desde la base de datos.
Como se usa
Entrar a un búnker
- Acércate a la entrada (hay icono en el mapa; el tuyo se distingue por color).
- Aparece un panel con el nombre y el estado del búnker.
- Si tienes acceso, pulsa E para entrar. Puedes hacerlo a pie o como conductor de un vehículo.
- Si no tienes acceso pero el búnker tiene código, pulsa F, escribe el código y confirma.
Dentro del búnker
- Salir: acércate a la puerta de salida y pulsa E.
- Almacén: acércate al punto del almacén y pulsa E. Cada búnker tiene su propio almacén.
- Picar rocas: acércate a una roca y pulsa E para dar un golpe; mantén E para seguir golpeando. A los 5 golpes (valor por defecto) la roca se rompe, entrega un material al azar y reaparece pasados 90 segundos. Si el inventario no admite el botín, el golpe final no se consume.
Para administradores
Asignar un búnker
- Ejecuta
/bunkeradminpara abrir el panel, o usa/bunkerassign [id] [citizenid] [banda]. - Indica el ciudadano (citizenid) y, si quieres, el nombre de la banda (solo letras minúsculas, números y guion bajo). Al asignar se genera un código de 6 caracteres.
- Si el dueño está conectado, recibe un aviso con el código; si no, se le muestra al conectarse (mientras el servidor no se reinicie).
Desde el panel puedes también regenerar el código (los jugadores que lo habían usado pierden el acceso), liberar el búnker, añadir o quitar aliados por citizenid, restaurar las rocas y teletransportarte a la entrada.
Búnker cerrado: un búnker sin dueño ni banda solo permite el paso a administradores.
Añadir o cambiar posiciones: edita Config.Bunkers y Config.MiningPoints y reinicia el recurso. Las filas nuevas se insertan solas en la base de datos.
Ver errores: revisa la consola del servidor y la del cliente (F8). El recurso imprime en la consola cuando asignas, regeneras o liberas un búnker.
Preguntas frecuentes
¿Funciona con otro inventario distinto de ox_inventory? No. El almacén y el botín usan exports de ox_inventory.
¿Funciona sin qb-core? No, usa qb-core para identificar al jugador, su citizenid y su banda.
¿Necesito importar un archivo SQL? No. La tabla ov_bunkers se crea automáticamente al iniciar el recurso.
¿Cómo cambio cuántos golpes hacen falta o cuánto tardan en reaparecer las rocas? En shared/config.lua: Config.Mining.hitsToBreak y Config.Mining.respawnTime.
¿Cómo cambio el botín? Edita Config.MiningDrops con ítems que existan en tu ox_inventory.
El interior no carga. Comprueba que bob74_ipl está iniciado antes que ov_bunkers. Si no expone el objeto del búnker, la consola lo indica.
¿Puedo mover o añadir búnkeres? Sí, editando Config.Bunkers.
Actualizaciones y soporte
Las versiones nuevas aparecen en el Portal de Cfx.re y en la tienda. Al actualizar, conserva tu shared/config.lua y tus datos: la tabla ov_bunkers no se modifica. Para soporte, usa el Discord de la tienda: [enlace de soporte].
