Antes de empezar#
Antes de instalar Theme Park, asegúrate de que tu servidor cumple los requisitos mínimos. Dos librerías, OneSync y los dos recursos de assets que vienen en la descarga son obligatorios; todo lo demás es opcional y se detecta automáticamente.
Requisito | Estado | Notas |
|---|---|---|
| Obligatorio | Callbacks, el panel de configuración y las notificaciones. |
| Obligatorio | La configuración, los blancos de dardos, las pistas de canastas, las puntuaciones y los pases de día se guardan en la base de datos. |
OneSync | Obligatorio | Todas las atracciones las controla el servidor. |
| Obligatorio (incluido) | El mapa del parque, el puesto de dardos, los dardos y los peluches. |
| Obligatorio (incluido) | Las atracciones animadas: los autos de choque y su puesto, la torre de caída, el sky drop, las sillas voladoras y sus luces. |
Framework | Opcional | ESX, QBCore o Qbox, detectado automáticamente. Sin ninguno, cada jugador tiene su propio monedero. |
Inventario | Opcional | Tickets de atracciones, artículos de puestos vendidos en el modo Inventory item y premios en ítems. Sin ninguno, se usa el inventario propio del framework. |
| Opcional | Notificaciones y un HUD que se oculta mientras el panel de configuración o un juego está abierto. Sin él, se usan las notificaciones de ox_lib. |
| Opcional | Los avisos del estilo de interfaz clásico y las etiquetas 3D sobre los vendedores. Sin él, textos de ayuda de GTA y un texto 3D simple. |
Cuenta de sociedad | Opcional | Solo para el reparto de ingresos: esx_addonaccount en ESX; qb-banking, Renewed-Banking o qb-management en QBCore y Qbox. |
Cada capa se detecta buscando recursos iniciados en este orden; gana el primero que se encuentre:
Capa | Orden de detección |
|---|---|
Framework | qbx_core → es_extended → qb-core → standalone |
Inventario | ox_inventory → qs-inventory → codem-inventory → core_inventory → tgiann-inventory → qb-inventory → el propio del framework |
Notificaciones | qs-interface → ox_lib → el feed de GTA |
Cuenta de sociedad | ESX: esx_addonaccount · QBCore y Qbox: qb-banking → Renewed-Banking → qb-management |
Descargar Theme Park#
Después de comprar Theme Park, el recurso se vincula automáticamente a tu cuenta de CFX Portal.
Inicia sesión en CFX Portal con la misma cuenta que usaste al finalizar la compra, abre Granted Assets y descarga Theme Park.
Después de extraer la descarga, deberías tener estas tres carpetas:
qs-themepark/ -- the script
├── config/ -- config.lua and webhooks.lua (Discord logs)
├── custom/ -- framework bridges, notifications, society accounts (open)
├── client/custom/ -- the HUD and qs-textui (open)
├── server/custom/ -- inventory items: tickets, stand items, prizes (open)
├── locales/ -- one JSON file per language
├── sql/database.sql -- the tables, the dart targets and the hoops lanes
└── items.md -- the ride ticket item for every inventory
qs_amusement_park/ -- the park map and the darts booth
└── stream/
qs_amusement_park_anim_prop/ -- the animated rides
└── stream/Mantén todos los archivos de los dos recursos de assets directamente dentro de su carpeta
stream/, sin subcarpetas. Sus modelos se registran desdestream/*.ytyp, que no busca en subcarpetas: un.ytypmovido a una deja de cargarse y sus atracciones se vuelven invisibles.
Importar la base de datos#
Antes del primer inicio, importa sql/database.sql en la base de datos de tu servidor con HeidiSQL, phpMyAdmin o la línea de comandos. Hace dos cosas: crea todas las tablas y añade los seis blancos de dardos del parque y las tres pistas de la máquina de baloncesto.
mysql -u root -p your_database < qs-themepark/sql/database.sqlImportarlo de nuevo es seguro. Cada tabla se crea con CREATE TABLE IF NOT EXISTS y los blancos y las pistas se añaden con INSERT IGNORE, así que nada se duplica y no se toca nada de lo que guardaste.
Tabla | Contenido |
|---|---|
| Cada valor guardado desde /themeparkconfig, los niveles de premios, los menús de comida y souvenirs y la lista de puestos. |
| Los seis blancos de dardos del puesto, incluidos en el archivo SQL. |
| Cada partida de dardos terminada, para la clasificación. |
| Las tres pistas de la máquina de baloncesto, incluidas en el archivo SQL. |
| Cada ronda de canastas jugada hasta la bocina, para la clasificación. |
| Los pases de día vendidos y cuándo caduca cada uno. |
| Solo servidores standalone: el monedero de cada jugador, por licencia. |
Instalar el recurso#
Mueve las tres carpetas al directorio resources de tu servidor. Pueden estar en cualquier lugar dentro de él, incluida una carpeta de categoría:
resources/
└── [themepark]/
├── qs-themepark/
├── qs_amusement_park/
└── qs_amusement_park_anim_prop/Una vez copiadas, abre tu server.cfg y asegúrate de que todas las dependencias (y todo lo que deba detectar) se inicien antes que Theme Park:
ensure ox_lib
ensure oxmysql
# Framework
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Inventory (ride tickets, stand items and item prizes)
ensure ox_inventory
# Optional
# ensure qs-interface
# ensure qs-textui
# Theme Park: the two asset resources first
ensure qs_amusement_park
ensure qs_amusement_park_anim_prop
ensure qs-themepark
# Who can open /themeparkconfig
add_ace group.admin command.themeparkconfig allowEl orden de carga importa. La detección solo ve los recursos que ya están iniciados, así que un framework que se inicia después de Theme Park no se encuentra. A propósito, en ese caso el parque no recurre al dinero standalone: los pagos quedan bloqueados y la consola indica qué recurso subir. qs-textui también debe iniciarse antes que Theme Park, porque las etiquetas de los vendedores eligen su estilo cuando se carga el script.
Permisos#
Solo una cosa es para el staff: el panel de configuración. Se abre para los jugadores con el ace command.themeparkconfig, y para nadie más. La consola del servidor siempre puede usarlo.
# A whole group
add_ace group.admin command.themeparkconfig allow
# One player only
add_ace identifier.license:YOUR_LICENSE command.themeparkconfig allowA un jugador sin él que escriba el comando se le avisa, y la consola del servidor muestra su nombre e imprime la línea que hay que añadir. El ace mantiene este nombre aunque cambies el nombre del comando en Settings → Commands. Todo lo demás del parque está abierto a todos los jugadores.
Registrar el ítem de ticket de atracción#
Con la configuración predeterminada, el parque no necesita ningún ítem: la comida se come en el momento, los souvenirs se llevan en la mano y los premios de dardos y canastas son dinero. El único ítem es el ticket de atracción, themepark_ticket, y solo se necesita si activas Ride tickets en /themeparkconfig → Tickets & day pass. Regístralo en tu inventario antes de hacerlo:
ox_inventory/data/items.lua
['themepark_ticket'] = {
label = 'Ride ticket',
weight = 0,
stack = true,
close = true,
description = 'One ride at the Del Perro Pier theme park',
},qb-core/shared/items.lua
themepark_ticket = { name = 'themepark_ticket', label = 'Ride ticket', weight = 0, type = 'item', image = 'themepark_ticket.png', unique = false, useable = false, shouldClose = true, description = 'One ride at the Del Perro Pier theme park' },qs-inventory/shared/items.lua
['themepark_ticket'] = {
['name'] = 'themepark_ticket',
['label'] = 'Ride ticket',
['weight'] = 0,
['type'] = 'item',
['image'] = 'themepark_ticket.png',
['unique'] = false,
['useable'] = false,
['shouldClose'] = true,
['description'] = 'One ride at the Del Perro Pier theme park'
},ESX con su inventario predeterminado: ejecuta esto en tu base de datos.
INSERT IGNORE INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES
('themepark_ticket', 'Ride ticket', 0, 0, 1);codem-inventory, core_inventory y tgiann-inventory necesitan un ítem llamado themepark_ticket registrado como indica cada uno: peso 0, apilable.
items.md, dentro del recurso, tiene los mismos fragmentos más ítems opcionales (Pier Dog, Boardwalk Burger, Pier Plush…) para cuando configures una fila del menú en modo Inventory item o des un ítem como premio de dardos o canastas. Otro nombre también sirve, siempre que sea el mismo en tu inventario y en el campo Ticket item del panel.
Logs de Discord#
Opcional. Pega una URL de webhook (Discord → channel settings → Integrations → Webhooks → Copy Webhook URL) junto a cada tipo de log que quieras en config/webhooks.lua. El archivo solo se ejecuta en el servidor, así que las URL nunca llegan a los jugadores.
Config.Webhooks = {
default = '', -- used by every kind below that is left empty
rides = '', -- who boarded which ride and how they paid
darts = '', -- darts games, scores, prizes and refunds
games = '', -- the basketball machine: rounds, prizes and refunds
economy = '', -- ride payments, tickets, day passes, stand sales, society deposits
admin = '', -- changes made in /themeparkconfig (who, which field, old -> new)
}
Config.LogOptions = {
username = 'Theme Park', -- name of the webhook in Discord
avatar = '', -- picture URL; empty uses the one set in Discord
showIdentifiers = true, -- adds license, Discord and Steam ids to player logs
}Rellena solo default para enviarlo todo a un canal. Un tipo sin URL, y sin valor predeterminado, simplemente no se envía. Reinicia qs-themepark después de editar el archivo. Más información en Integraciones.
Configurar el recurso#
Casi nada se configura en archivos. El idioma, el estilo de interfaz, el blip, los precios, los tickets y el pase de día, los ingresos, la tecla para subir, qué atracciones funcionan y cuánto esperan, las reglas y premios de dardos y canastas, los menús y cada puesto se configuran en el juego con /themeparkconfig: consulta Uso. config/config.lua solo contiene lo que debe conocerse antes de que se inicie el servidor:
-- Extra console output. Leave it false on a live server.
Config.Debug = false
-- Your framework: the first started resource wins. Add a line
-- if you renamed the resource.
local frameworks = {
{ ['qbx_core'] = 'qb' },
{ ['es_extended'] = 'esx' },
{ ['qb-core'] = 'qb' },
}
-- Your inventory. Never run two.
local inventories = {
{ ['ox_inventory'] = 'ox_inventory' },
{ ['qs-inventory'] = 'qs-inventory' },
-- codem-inventory, core_inventory, tgiann-inventory, qb-inventory
}
-- Only if you renamed the asset resources.
Config.AssetResource = 'qs_amusement_park_anim_prop'
Config.DartsAssetResource = 'qs_amusement_park'Los archivos bridge abiertos de custom/, client/custom/ y server/custom/ se explican en Integraciones.
Las posiciones, velocidades, física, luces y cámaras de las atracciones, los blancos de dardos, las pistas de canastas y la dificultad de los dardos son fijos y están ajustados para este mapa. No son opciones de configuración: cambiarlos desalinearía las atracciones respecto a los edificios cargados a su alrededor.
Verificar la instalación#
Tras completar la instalación, reinicia tu servidor y lee la consola del servidor. Un inicio correcto se ve así:
[qs-themepark] framework resolved: esx, inventory: ox_inventory
[qs-themepark] server adapter loaded: esx
[qs-themepark] loaded 0 saved settings, 68 fields in total
[qs-themepark] loaded 6 dart targets
[qs-themepark] loaded 3 hoops lane(s)
[UPDATER] Started | local v1.x.x | remote v1.x.x | status LATESTstandalone en la primera línea significa que no se encontró ningún framework en ejecución. 0 dart targets o 0 hoops lane(s) significa que sql/database.sql no se importó. La línea [UPDATER] compara tu versión con la última versión publicada. Unos diez segundos después del inicio, el script también comprueba los dos recursos de assets e indica cuál no está iniciado. Cualquier otra cosa se explica en Errores comunes.
Primeros pasos#
Después, entra en tu servidor y configura el parque para tu economía:
Abre el panel
Escribe
/themeparkconfig. En General, el parque habla inglés por defecto: elige otro de los 41 idiomas si quieres, define el título de las notificaciones y elige el estilo de interfaz (paneles Interface o Classic, con textos de ayuda de GTA).Define tus precios
En Money, define el precio de las atracciones del parque, la cuenta con la que se paga (efectivo o banco) y un precio para cada atracción:
-1usa el precio del parque,0hace que la atracción sea gratuita. Darts y Hoops tienen su propio precio por partida, y Food stands y Souvenirs un menú con un precio por artículo.Activa los tickets y el pase de día
Opcional. En Tickets & day pass, activa Ride tickets (registra antes el ítem) y Day pass on sale, y define sus precios y la duración del pase. Ambos están desactivados en una instalación nueva; la taquilla los vende una vez activados.
Envía la recaudación a un trabajo
Opcional. En Revenue, activa Send revenue to a society, indica el trabajo y el porcentaje. El trabajo necesita una cuenta de sociedad: consulta Integraciones.
Sube a una atracción
Sigue el blip hasta Del Perro Pier y acércate a la noria. Pulsa E en el aviso: se abre el panel de la atracción con el precio y cómo pagarás. Sube desde ahí y la noria frena en una cabina libre.
Cada campo se aplica al instante, para todos los jugadores, sin reiniciar, excepto el nombre del comando de configuración. El panel marca ese campo con Needs restart.
Actualizar Theme Park#
Todo lo que configuras en /themeparkconfig (precios, tickets, menús, puestos, niveles de premios) se guarda en la base de datos, no en los archivos, así que una actualización nunca lo borra.
Conserva tus archivos editados
Si cambiaste algo en
config/,custom/,client/custom/,server/custom/olocales/(tus URL de webhook, por ejemplo), copia antes esos archivos a otro lugar.Reemplaza las carpetas
Detén el servidor, reemplaza las tres carpetas por la nueva descarga y vuelve a aplicar tus cambios en los archivos nuevos.
Importa de nuevo el SQL
Importa
sql/database.sqlde nuevo: añade cualquier tabla que necesite una versión nueva y nunca duplica los blancos de dardos ni las pistas de canastas.Inicia y comprueba
Inicia el servidor y lee la consola como en Verificar la instalación.



