Saltar al contenido
Documentación: Secret Hideout
En esta página

Secret Hideout

Versión 1.3.1Recurso secret_mlo Ver el producto

Secret Hideout es un mapa: una tienda de reparación de móviles y, bajo una trampilla de su cuarto técnico, un nivel de abajo de tres salas que viene en cinco variantes. Las variantes son decorado, no gameplay. Lo que lleva el script es la trampilla y sus dos palancas, el cambio de variante y la gente que trabaja abajo.

Requisitos#

  • Build del juego 3717 o superior. Algunos props vienen de DLCs recientes.
  • OneSync, recomendado. El servidor lo usa para dos comprobaciones: que quien tira de una palanca está a su lado y que no hay nadie en el pozo cuando la trampilla se cierra. Sin OneSync el recurso funciona igual, avisa al arrancar y se salta las dos.
  • Ni framework ni otros recursos. Es standalone.
  • Hecho y probado en FiveM (GTA V Legacy).

Instalación#

  1. Consigue los archivos. Owner: en Granted Assets de tu Cfx.re Portal. Developer: el enlace de descarga del correo de Tebex.
  2. Pon la carpeta secret_mlo en los recursos de tu servidor. No le cambies el nombre: el export lo usa.
  3. Añade estas líneas a tu server.cfg y reinicia, o ejecuta refresh y ensure secret_mlo en la consola del servidor:
server.cfg
sv_enforceGameBuild 3717
ensure secret_mlo

Dónde está#

El interior es smlo_hackshop. Su puerta es la del sótano del edificio del callejón, en 2.4, -1215.1, 25.9 más o menos. En el juego esa puerta está pintada en la pared; este recurso la recorta del edificio para que se pueda entrar (mira Conflictos con otros mapas).

El nivel de arriba queda justo por debajo de la calle, bajando una escalera corta desde la puerta del callejón: la tienda con su mostrador y su trastienda, un aseo, un taller, un almacén y el cuarto técnico. Se baja por la trampilla del cuarto técnico: da a un pozo con una escalera y abajo están las tres salas del nivel de abajo.

El recurso también trae el plano del interior para el radar y el mapa de pausa.

Variantes#

El nivel de abajo viene en cinco variantes. Solo se ve una a la vez, la misma para todos los jugadores.

Variante Qué tiene
blackhat La de por defecto. Escritorios, una mesa con un mapa y una mesa de operaciones
meth Un laboratorio de meta
coke Mesas para cortar, embolsar y pesar coca
weed Una plantación de marihuana
empty Hormigón pelado: las puertas, la escalera y la trampilla con sus palancas, la jaula y la reja de la sala del medio, los conductos y los fluorescentes, con luz blanca. Para servidores que quieran amueblarlo con sus propios props

Míralas en el vídeo de la ficha.

Cada variante es un entity set del interior (smlo_meth, smlo_coke, etc.). Ninguna trae un trabajo, un sistema de drogas ni un hackeo: eso lo ponen tus scripts.

Elige con cuál arranca#

Al arrancar, el recurso usa la primera de estas que esté puesta:

  1. La convar smlo_variant, en server.cfg antes de ensure secret_mlo.
  2. Config.Variant en config.lua, que de serie es blackhat.
server.cfg
set smlo_variant meth
ensure secret_mlo

Si la convar nombra una variante que no existe, el servidor lo dice en su consola y usa Config.Variant.

Cámbiala en caliente#

Con el comando:

Consola del servidor
smlo_variant coke

Desde la consola del servidor funciona siempre. Los jugadores necesitan el ace command.smlo_variant:

server.cfg
add_ace group.admin command.smlo_variant allow

Sin nombre, el comando dice qué variante está puesta.

Desde otro script de servidor, con el export:

server.lua
local ok = exports.secret_mlo:setVariant('weed')
Export Lado Devuelve
setVariant(name) Servidor true, o false si name no es una de las cinco variantes

Cuando cambia la variante, los jugadores que están cerca del MLO recargan el interior en el momento. Nadie tiene que salir ni reconectarse.

Aviso

Cambiar con jugadores en el nivel de abajo puede dejar a alguien dentro de un mueble de la variante nueva. Mejor cambiar con el nivel de abajo vacío.

Nota

Un cambio en caliente dura hasta que se reinicia el recurso. Entonces vuelve a mandar la convar o, si no está puesta, Config.Variant.

Léela desde tus scripts#

La variante puesta está en GlobalState.smlo_variant, y GlobalState.smlo_hatch vale true mientras la trampilla está abierta. Tus scripts pueden leerlos, por ejemplo para empezar un trabajo solo cuando está el laboratorio:

lua
if GlobalState.smlo_variant == 'meth' then
    -- tu código
end

Solo este recurso debería escribirlos.

La trampilla y las palancas#

Hay dos palancas: una en el cuarto técnico, escondida en el lateral del armario eléctrico grande, y otra en la pared del fondo del pozo. Al acercarse a cualquiera sale el aviso «Pulsa E para tirar de la palanca.». Al tirar, la trampilla se abre o se cierra para todos: el estado lo lleva el servidor, así que todos los jugadores ven la misma. Los demás también ven el tirón. La trampilla tarda unos 6 segundos en moverse y por la escalera se puede bajar cuando ha terminado de abrirse.

Una trampilla abierta se cierra sola Config.AutoCloseSeconds después de terminar de abrirse: 45 de serie, 0 para que no se cierre nunca. Con OneSync no se cierra mientras haya alguien en el pozo; espera a que se vacíe. Si se tira de una palanca mientras la trampilla se mueve, sale «La trampilla ya se está moviendo.».

Ajustes#

Están en config.lua, que va abierto en las dos ediciones:

Ajuste De serie Qué hace
Config.AutoCloseSeconds 45 Segundos hasta que una trampilla abierta se cierra sola. 0 = nunca
Config.Key 51, ~INPUT_CONTEXT~ El control que tira de la palanca (51 = E) y la etiqueta que sale en el aviso
Config.Distance.prompt 0.9 Metros desde el sitio de delante de la palanca a los que sale el aviso
Config.Distance.pull 2.0 Metros desde la palanca a los que el servidor acepta un tirón (necesita OneSync)
Config.Locale 'en' Idioma de los avisos: en o es

Para añadir un idioma, copia locales/en.lua a locales/<código>.lua, cambia Locales.en por Locales.<código>, traduce las cuatro líneas y pon ese código en Config.Locale.

Las posiciones de la trampilla, las palancas, la escalera y el pozo están en shared/mlo.lua. Son del interior: si se mueven, la trampilla deja de funcionar.

Quién puede usar las palancas#

server/permissions.lua tiene canUse(source, lever). source es el id de servidor del jugador y lever es 1 para la del cuarto técnico o 2 para la del fondo del pozo. Devuelve true para dejar pasar el tirón. De serie deja pasar a todos. El archivo va abierto en las dos ediciones y trae ejemplos comentados con un ace, un trabajo de ESX, un trabajo de QBCore y un objeto de ox_inventory.

Con un ace, sin framework:

permissions.lua
function canUse(source, lever)
    return IsPlayerAceAllowed(source, 'secret_mlo.hatch')
end
server.cfg
add_ace group.admin secret_mlo.hatch allow

Con una tarjeta en ox_inventory, solo para bajar (desde abajo la puede abrir cualquiera):

permissions.lua
function canUse(source, lever)
    if lever == 2 then return true end
    return exports.ox_inventory:Search(source, 'count', 'keycard') > 0
end

A quien se rechaza le sale «La palanca no se mueve.». Con OneSync, también a quien está más lejos de la palanca que Config.Distance.pull.

La gente de abajo#

Cada variante amueblada tiene seis personas trabajando en el nivel de abajo: en la nave, en la sala del medio y en la sala de cámaras, y un guardia en la sala del pozo. Arriba, en todas las variantes, alguien detrás del mostrador y alguien en el ordenador del taller. Solo existen en el juego de cada jugador: aparecen cuando se acerca al MLO y se van cuando se aleja, cambian con la variante, no se les puede herir y no reaccionan a nada. empty no tiene a nadie abajo.

Ajuste De serie Qué hace
Config.Ambience.enabled true Todos, encendidos o apagados
Config.Ambience.perVariant las cuatro true La gente de cada variante amueblada, encendida o apagada
Config.Ambience.shopkeeper true Alguien detrás del mostrador de arriba
Config.Ambience.workshop true Alguien en el ordenador del taller de arriba

Sus sitios están en shared/ambience.lua, abierto en las dos ediciones. Cada grupo es una escena colocada por el at de su primer ped: al moverlo se mueven juntos las personas y sus props, así que un grupo movido a mano deja de cuadrar con su silla o su mesa.

Conflictos con otros mapas#

Para que se pueda entrar por la puerta del sótano, stream/ lleva dos archivos del propio juego con esa puerta recortada:

  • sc1_00b_bld2.ydr, el edificio;
  • lr_sc1_00b_0.ybn, su colisión.

Si otro recurso de tu servidor también sustituye alguno de los dos, solo carga una versión. Con la otra, la puerta de este MLO sale pintada en la pared o su colisión no deja pasar.

Para comprobarlo, busca esos dos nombres de archivo en tu carpeta resources. Quédate con una copia: quítalos del otro recurso si no los necesita o pídele a su autor una versión sin ellos. Los dos archivos van sin cifrar para que se puedan cambiar.

stream/int721482162.gfx es el plano del radar y del mapa de pausa. Si lo borras, solo desaparece eso.

Modo depuración#

Añade esto a server.cfg, antes de ensure secret_mlo:

server.cfg
setr smlo_debug 1

El servidor y el cliente escriben entonces en su consola lo que hacen (tirones, rechazos, cambios de variante, props creados) y se activan tres comandos:

Comando Lado Qué hace
smlo_hatch Servidor Abre o cierra la trampilla sin palanca
smlo_ladder Cliente (F8) Crea o quita la escalera del pozo
smlo_crewreport Consola del servidor, o el ace command.smlo_crewreport Cada cliente cerca del MLO cuenta dónde está de verdad cada ped y cada prop de la gente de abajo. Sale con el prefijo [secret_mlo] crew y se guarda en crew_report.txt, en la carpeta del recurso
Aviso

El modo depuración es para montarlo. Déjalo apagado en un servidor abierto: mientras está encendido, cualquiera puede usar smlo_hatch.

Referencia#

Tipo Nombre Lado Qué es
Comando smlo_variant <name> Servidor Cambia la variante. Ace command.smlo_variant
Comando smlo_hatch Servidor Solo en depuración. Abre o cierra la trampilla
Comando smlo_ladder Cliente Solo en depuración. Pone o quita la escalera
Export setVariant(name) Servidor Cambia la variante. Devuelve true o false
Evento secret_mlo:pull (index) Cliente a servidor Un jugador pide tirar de la palanca 1 o 2
Evento secret_mlo:lever (index, source) Servidor a todos Se ha aceptado un tirón: reproducir la animación de la palanca
Evento secret_mlo:refused (label) Servidor a cliente Se ha rechazado un tirón, con la etiqueta del texto que hay que enseñar
State bag GlobalState.smlo_hatch Compartido true mientras la trampilla está abierta
State bag GlobalState.smlo_variant Compartido Nombre de la variante puesta
Convar smlo_variant Servidor Variante al arrancar; manda sobre Config.Variant
Convar smlo_debug Los dos 1 = mensajes y comandos de depuración. Usa setr