Cómo está organizado el archivo#
Todo se configura en qs-treasure-hunter/config/config.lua, dividido en secciones numeradas. El texto que leen los jugadores está a su lado, en config/translations.lua.
Sección | Qué contiene |
|---|---|
1. General | Detección, quién puede buscar tesoros, interacción, nombres, botones del panel, notificaciones y dinero. |
2. World | El blip, el NPC del trabajo y el alquiler de barcos. |
3. Hunts | Las tres misiones y dónde tiene lugar cada una. |
4. Loot | Lo que puede contener cada cofre y lo que paga la tienda por ello. |
5. Levels | La curva de experiencia, las ventajas, el tamaño del grupo y la distancia de invitación. |
6. Shop | El catálogo de compra, las herramientas gratuitas, las llaves y los mapas. |
7. Equipment | El detector de metales, el equipo de buceo y el puzle del cofre antiguo. |
8. Legendary | El evento del cofre legendario para todo el servidor. |
9. Leaderboard | Frecuencia de actualización, tamaño de la lista y recompensas. |
10–11. Marker, Debug | El marcador flotante sobre el NPC y el registro en consola. |
Webhooks, payout | Los logs de Discord y cómo se paga a un grupo, al final del archivo. |
Las secciones 1, 5, 6 y 9 son las que más cambian los servidores. Las secciones 2 a 4, 7 y 8 son tablas de contenido: edita los valores y mantén la estructura.
Este archivo es la única fuente de verdad. Las ubicaciones, el botín, la experiencia, los precios y los pagos se leen en el servidor y ningún cliente los reenvía, así que lo que configures aquí es exactamente lo que vale cada cosa. Reinicia el recurso después de editarlo.
General#
Opción | Por defecto | Qué hace |
|---|---|---|
| auto | Se detectan a partir de los recursos en ejecución. Deja las líneas como están. |
|
|
|
|
| Trabajos que pueden buscar tesoros. Añade tantos como necesites. |
|
| Targeting de third eye con |
|
| Avisos flotantes "[E]". Desactivado muestra una línea de ayuda en su lugar; ambos funcionan igual. |
|
| IDs de control para interactuar (38) y para el ancla del barco (47), además de la etiqueta del ancla que muestra el HUD. |
|
|
|
| Old Hank | El nombre y la frase de la tarjeta junto al NPC. |
|
| Los botones del pie del panel. El alquiler de barcos es una pestaña de la tienda, así que necesita la tienda activada. |
|
|
|
|
|
|
|
| Bloquea qs-inventory durante el cambio al traje de buceo. |
|
| Pone al jugador el traje de buceo mientras lleva el equipo. |
|
| Crea las misiones de buscador de tesoros en qs-inventory e informa del progreso. |
|
| Registra los ítems usables a través del framework, para inventarios sin |
Mundo#
Config.EnableBlip y Config.Blip configuran el blip del trabajo. Config.StartJob.ped es el único NPC que lo abre todo — muévelo cambiando su coords (con orientación) y model. Config.AreaBlipColor colorea el círculo de búsqueda y Config.AncientTreasureBlip marca un lugar antiguo.
El alquiler de barcos#
Config.BoatRental = {
Enabled = true,
Spawn = vec4(2102.45, 3921.49, 29.65, 0.0), -- Z at water level, used as given
ReturnRadius = 45.0, -- metres from Spawn to hand a boat back
Refund = 40, -- % of the price paid back on return
ReturnTo = vector3(2104.51, 3902.32, 31.52), -- nil leaves the player where they are
WarnBefore = 120, -- seconds of warning before a rental runs out
Tiers = {
{ model = 'dinghy', label = 'Dinghy', requiredLevel = 1, price = 60,
minutes = 20, seats = 4, image = 'https://docs.fivem.net/vehicles/dinghy.webp' },
-- ...
},
}Cada categoría es un modelo, el nivel que lo desbloquea, su precio, cuántos minutos dura (0 nunca caduca), sus asientos y la imagen que dibujan la tienda y el HUD. Config.BoatFadeTime es el fundido en milisegundos, y Config.Fuel con Config.FuelExport llena el depósito al aparecer.
Búsquedas#
Config.Tasks contiene las tres misiones que ofrece el panel:
{
taskOrder = 1, -- do not touch
key = "detector", -- do not touch: detector, underwater or ancient
name = "Metal Detector Hunt",
img = "metal_detector_task.png",
description = "Sweep the marked area and dig up what the detector finds.",
recommendedPlayers = { 1, 4 }, -- shown on the panel, not enforced
levelRequired = 1, -- every crew member needs it
chestAmount = { 2, 3 }, -- { min, max } chests per run
chestExperience = 50, -- to whoever opens each chest
experience = 1000, -- for completing the hunt
money = 2000, -- for completing the hunt
},Dónde ocurren las búsquedas son otras tres tablas. Para las búsquedas con detector y submarinas se elige una zona al azar, luego un círculo de búsqueda centrado en algún punto dentro de su rectángulo, y luego los cofres dentro de ese círculo:
Config.MetalDetectorTreasureLocations = {
{ minX = 2060.0, maxX = 2226.0, minY = 3786.0, maxY = 3891.0, z = 32.0, areaRange = 50.0 },
}
Config.UnderwaterTreasureChestLocations = { -- keep these over water
{ minX = 167.0, maxX = 430.0, minY = 3989.0, maxY = 4064.0, z = 28.0, areaRange = 70.0 },
}
Config.AncientTreasureChestLocations = { -- exact positions, one picked per run
vector3(-3033.83, 3439.12, 4.94),
}z es solo un valor de reserva: cada cliente encuentra el suelo o el fondo marino real bajo cada cofre. areaRange es el radio del círculo en el mapa. Config.TreasureModels enumera los props que puede ser una caja hundida.
Botín#
Config.TreasureDrop (detector), Config.TreasureUnderwaterDrop y Config.AncientTreasureDrop indican lo que puede contener cada cofre:
Config.AncientTreasureDrop = {
{ name = "gold_ring", chance = 25, price = 300, maxAmount = 5 },
{ name = "gold_bracelet", chance = 25, price = 400, maxAmount = 5 },
{ name = "gold_necklace", chance = 20, price = 500, maxAmount = 5 },
{ name = "gold_nugget", chance = 15, price = 800, maxAmount = 5 },
{ name = "painting", chance = 15, price = 1000, maxAmount = 5 },
}Una tirada de 1 a 100 recorre la lista en orden y gana la primera entrada que alcanza, así que ordénalas de la más común a la menos común: la ventaja de hallazgo raro mejora un hallazgo a la siguiente entrada de la lista. Las probabilidades no tienen que sumar 100; una tirada que pasa del final vuelve a la primera entrada. La cantidad va de 1 a maxAmount, duplicada por la ventaja de botín extra.
price es lo que paga la tienda por unidad, así que estas tablas son también el catálogo de venta. Un ítem que está en dos tablas se vende al precio más alto.
Niveles#
Config.LevelExperience = {
BaseExperience = 3500, -- experience for level 1
GrowthFactor = 1.1, -- each level needs this much more
DetectorRange = 1.0, -- % per level
OxygenBonus = 1.0,
DigSpeed = 0.8,
ExtraLoot = 0.5,
RareFind = 0.4,
}
Config.MaxBonusLevel = 60 -- perks stop growing here; levels do not
Config.MaxPartyMembers = 4 -- crew size, leader included
Config.InviteDistance = 20.0 -- metres, 0 = invite from anywhereUn nivel necesita BaseExperience × GrowthFactor^(level − 1). Pon una ventaja a 0 para desactivarla. Subir InviteDistance muy por encima del rango de streaming funciona, pero los miembros invitados desde lejos muestran sus iniciales en lugar de su cara.
Tienda#
Cada fila de Config.Shop es un ítem a la venta:
Campo | Significado |
|---|---|
| El ítem que se entrega, el nombre en la fila y el coste por unidad. |
| Nivel necesario para comprarlo. |
|
|
| Una línea bajo el nombre y una etiqueta "one use". |
|
|
Opción | Por defecto | Qué hace |
|---|---|---|
| 100 | Cantidad máxima de un ítem comprada de una vez. |
|
| Entrega un detector o equipo de buceo a un buscador que empieza sin ellos, una vez cada 15 minutos. |
|
| Cada caja hundida necesita una |
|
| El cofre antiguo necesita una |
| 20 m / 25 m | A qué búsqueda pertenece cada mapa ( |
| 4000 ms | La animación de lectura, su prop de papel, el hueso y la duración. |
Equipo#
Opción | Por defecto | Qué hace |
|---|---|---|
|
| Una animación breve al sacar o guardar el detector. |
|
|
|
| 15 / 5 | Metros a los que un cofre empieza a detectarse ( |
| 8000 | Milisegundos que tarda una excavación en el nivel 1. Nunca menos de 1.5 s. |
|
| El equipo de buceo y el aire integrados. Desactívalo cuando otro recurso gestione el buceo. |
| 180 / 5 | Segundos de aire en una botella llena en el nivel 1, y segundos recuperados por cada segundo fuera del agua. |
| 3 frases | Las frases que puede pedir un cofre antiguo. Se elige una por cofre. |
| a–z, A–Z, 0–9, signos | El alfabeto que baraja el cifrado. Los caracteres fuera de él pasan sin cambios. |
| 3000 / 12000 / 25 / 5 |
|
| gold | Color, alcance e intensidad del brillo en las cajas y en un cofre abierto. |
Cofre legendario#
Config.LegendaryChestEvent = {
enabled = true,
chance = 20, -- % chance a cracked ancient chest wakes it
coords = vec4(487.06, 5586.50, 793.95, 300.0),
shakeScreen = true,
notifyAllPlayers = true, -- false: only players who can hunt are told
duration = 900, -- seconds before it sinks (0 = never)
blip = { name = "Legendary Chest", sprite = 587, size = 1.4, color = 1, display = 4 },
rewards = {
{ name = "gold_nugget", chance = 60, price = 800, minAmount = 20, maxAmount = 30 },
{ name = "painting", chance = 40, price = 1000, minAmount = 20, maxAmount = 30 },
},
puzzleTexts = { "Only the brave may open what time itself has sealed", --[[ ... ]] },
}Clasificación#
Config.UpdateLeaderboard = 1 -- minutes between refreshes
Config.MaxLeaderboardPlayers = 100 -- rows per tab
Config.LeaderBoardRewards = {
Daily = { [1] = 550, [2] = 350, [3] = 200 }, -- every day at 00:00
Season = { [1] = 5000, [2] = 3500, [3] = 2000 }, -- 00:00 on the 1st of the month
}MaxLeaderboardPlayers es también el límite de la consulta a la base de datos, así que un número mayor cuesta tiempo de consulta en cada actualización. Con Config.EnableLeaderboard desactivado, no se lee, reinicia ni paga ninguna clasificación.
Marcador y depuración#
Config.PedMarker es el marcador flotante sobre el NPC: enabled, su type (un id de marcador de FiveM), height sobre la cabeza, vista distance, bob, size y RGBA color.
Config.Debug = true hace que el script narre lo que hace en la consola del servidor y en la consola F8. Déjalo desactivado en un servidor en producción — imprime mucho.
Cómo se paga a un grupo#
Config.MissionPayout = 'members' -- or 'split''members' paga a cada miembro el dinero y la experiencia completos de la búsqueda, así que un grupo de cuatro en una búsqueda de $2,000 cuesta $8,000. 'split' divide ambos entre los miembros presentes al final, redondeando hacia abajo y nunca por debajo de 1. Una búsqueda no pide más cofres a un grupo más grande, así que 'members' es la opción generosa; viene por defecto para que una economía existente no cambie.
Traducciones#
Configura Config.Language en config/translations.lua como en, es, fr, de, it, pt, ru o tr, y edita el texto entre comillas. El inglés es la referencia: cualquier clave que un idioma omita se rellena desde él, así que nunca aparece un nombre de clave sin traducir en el juego. Los pasos de la guía también son claves de traducción, así que se pueden reformular sin tocar el código.
Los webhooks están al final del mismo archivo; Integraciones los explica junto con el traje de buceo y las notificaciones.



