Clothing store
Una tienda de ropa con conjuntos guardados, vestuarios de empresa y un editor que pone precio al catálogo desde el propio juego. Todos los componentes y todos los props, comprados prenda a prenda o como conjunto entero, con un registro en el servidor que impide que nadie lleve puesto lo que no ha pagado.
Lo que hace
Pon precio al catálogo sin tocar un archivo
Un panel de admin dentro de la tienda. Haz clic en una prenda y fija su precio, ocúltala, resérvala para un trabajo, dale almacenamiento real a una mochila, declara un vínculo entre componentes u oculta una sola variante de color. Todo se escribe en `config/clothes_overrides.lua` y sigue ahí tras un reinicio. Sin editar archivos, sin cortes de servicio y sin reiniciar el servidor para cambiar un precio.
Especificaciones
técnicas
Todo lo que
recibes
-
Quince archivos de idioma, ya rellenados
Tus jugadores leen el script en su idioma desde el primer arranque, y los archivos están fuera del escrow, así que puedes corregir cualquier línea en producción. Nota honesta: están traducidos y revisados por nosotros, pero no los ha corregido un hablante nativo de cada uno de los quince. Dinos qué suena mal en el tuyo y lo arreglamos.
-
Ocho bridges, un archivo cada uno
Framework, notificaciones, interacción, ropa, inventario, decoraciones, capturas de pantalla y compat. Cada archivo documenta sus targets, qué detecta y qué te cuesta cada uno. La detección sondea el export real en vez del estado del recurso, así que un export renombrado se degrada en silencio en lugar de reventar al arrancar.
-
Todo el catálogo queda abierto
Tiendas, secciones, precios, impuesto y descuento, drawables bloqueados, listas VIP y los overrides que escribe el editor dentro del juego. `config/*.lua`, `locales/*.lua` y `bridges/*.lua` están fuera del escrow y son editables en producción.
-
Un informe de instalación para pegar en soporte
`/avenida_clotheshops_check` imprime qué bridge se eligió para cada categoría, si las tablas y columnas existen, y qué build del juego trae realmente tu servidor. Responde a la mayoría de las dudas de integración antes de que tengas que preguntarlas.
Guía de integración
Instalación
-
Coloca el recurso
Descarga el script desde tu cuenta Tebex, copia la carpeta
avenida_clotheshops/en tu directorio de recursos y añadeensure avenida_clotheshopsa la config del servidor, después deensure oxmysql. -
Ejecuta el SQL
Ejecuta la sección [A] de
INSTALL.sqlen tu base de datos. La sección [B] es condicional, la cabecera del archivo dice cuándo la necesitas. -
Concede los permisos de admin
Añade
add_ace group.admin avenida_clotheshops.admin allowyadd_ace group.admin avenida_clotheshops.vip allowa la config del servidor. El primero abre el editor de catálogo dentro del juego, el segundo desbloquea lo que hayas reservado a la lista VIP. -
Pon precio al catálogo desde el juego
Pon
Config.DevMode.Enabled = true, entra en una tienda y abre el editor. Fija precios, oculta lo que no vendes, reserva lo que pertenece a un trabajo. Todo acaba enconfig/clothes_overrides.lua. Vuelve a apagar DevMode cuando termines, se comprueba otra vez en el servidor en cada guardado. -
Verifica las integraciones
Pon
Config.Debug = true, reinicia y lee la consola: una línea por categoría de bridge nombra el target elegido.Config.Debugsolo controla los logs, no es el interruptor del editor.
Inicio rápido
Poner precio a una sección de tres formas distintas
Cada tienda declara sus secciones, y cada sección su modo de precio. Una tarifa única para toda una sección, un multiplicador que encarece los drawables siguientes, o una tabla cuando solo un puñado de prendas merece su propio precio.
-- config/clothes_shops.lua
categories = {
tops = {
enabled = true,
price = { mode = 'fixed', base = 300 },
},
pants = {
enabled = true,
-- price = base + index * mult
price = { mode = 'multiplier', base = 100, mult = 2 },
},
mask = {
enabled = true,
price = { mode = 'table', map = { [12] = 900, [45] = 1500 } },
-- only these drawables are offered
whitelist = { 12, 45, 51 },
},
}Referencia de la API
Exports públicos agrupados por dominio. Cada fila muestra la firma de la llamada y qué hace, no cómo lo hace.
Client
GetSkinData
exports['avenida_clotheshops']:GetSkinData()El conjunto que lleva puesto el jugador, componente a componente, props incluidos. Es lo que la tienda escribe al comprar, así que siempre coincide con lo que muestra el armario.
ApplySkin
exports['avenida_clotheshops']:ApplySkin(data, ped)Aplica una apariencia completa a un ped. Poner un conjunto vacía la ranura de decoraciones, así que esta llamada vuelve a poner después el trabajo de barbería y de tatuaje en vez de dejar la piel desnuda.
ApplyClothing
exports['avenida_clotheshops']:ApplyClothing(data, ped, temporary)Cambia la ropa y nada más. Con
temporaryen true el conjunto vive solo durante la sesión, que es como debe comportarse un uniforme que entrega un trabajo.
Server
GetBagStorage
exports['avenida_clotheshops']:GetBagStorage(sex, drawable) --> { weight, slots } | nilLa capacidad que da un drawable de mochila, peso y ranuras, o nil cuando ese drawable no lleva nada. Llámalo desde tu recurso de inventario para que una mochila comprada guarde algo de verdad.
Recetas
Ejemplos para copiar y pegar en los casos más habituales. Los metes en tu recurso, ajustas los valores y a producción.
Una tienda es una sola entrada de config. Lleva su nombre visible, su método de pago, su símbolo de moneda, un impuesto y un descuento opcionales sobre el total del carrito, y las secciones que ofrece. Mantén la clave estable: es el id de tienda que se guarda dentro de los conjuntos, y cambiarle el nombre después de que la gente haya comprado allí les rompe los datos.
-- config/clothes_shops.lua
Config.Clothes.Shops[22] = {
name = 'Ponsonbys - Rockford Hills',
payment = 'bank',
currency = '$',
tax = 0.20, -- +20% on the cart
discount = 0.00,
outfitMode = true,
blip = { sprite = 73, color = 4, scale = 0.7, coords = vec3(-708.2, -152.2, 37.4) },
categories = {
tops = { enabled = true, price = { mode = 'fixed', base = 900 } },
shoes = { enabled = true, price = { mode = 'fixed', base = 450 } },
},
}Una pieza restringida se le oculta a quien no pasa la comprobación, así que un civil nunca ve la chaqueta de policía en la cuadrícula. Los vestuarios de empresa van más lejos: el jefe edita una lista compartida y cada miembro la lleva sin pagar, que es lo que necesitas para un recluta en su primer turno.
-- config/clothes_overrides.lua, or write it from the in-game editor
Overrides['tops'] = {
[56] = { job = 'police', label = 'LSPD jacket' },
[12] = { hidden = true },
[31] = { restricted = true }, -- ACE permission
}Está activo por defecto y es lo que impide que un cliente manipulado lleve el catálogo gratis. Apágalo solo si otro recurso tuyo viste a los jugadores con prendas que nunca compraron y prefieres no registrarles esas compras. Los personajes que ya existen se inicializan con lo que llevan puesto, así que activarlo más tarde no le quita nada a nadie.
-- config/clothes.lua
Config.Clothes.RequireOwnership = false
-- how far from a store the server still accepts a purchase
Config.Clothes.PurchaseRange = 30.0
-- saved outfits per character, enforced server side
Config.Clothes.MaxOutfits = 30
Config.Clothes.MaxOutfitsRestricted = 50Aplicar un conjunto completo vacía la ranura de decoraciones del ped, que comparte todo el servidor. Si tu script viste a un jugador, lee antes lo que es de este recurso y devuélvelo después, o los tatuajes y la hair base se van con el cambio.
local hairbase = exports['avenida_clotheshops']:GetHairbase()
local tattoos = exports['avenida_clotheshops']:GetTattoos()
-- your own clothing work here
if hairbase then
AddPedDecorationFromHashes(PlayerPedId(), hairbase.c, hairbase.t)
end
for _, dec in ipairs(tattoos) do
AddPedDecorationFromHashes(PlayerPedId(), dec.c, dec.t)
endPreguntas frecuentes
- Mira `Config.Clothes.RequireOwnership`. El registro da por pagado lo que un personaje ya lleva puesto la primera vez que lo ve, así que activarlo no le quita el vestuario a nadie. Lo que sí rechaza es una escritura de una prenda que no tenga una compra detrás, que es justo lo que manda un cliente manipulado. Si un recurso tuyo viste a los jugadores con prendas que nunca compraron, registra esas compras o pon el flag a false.
- Necesita dos cosas a la vez: el permiso ACE `avenida_clotheshops.admin` y `Config.DevMode.Enabled = true`. `Config.Debug` es otro interruptor distinto y solo controla los logs. Cada guardado se vuelve a comprobar en el servidor, así que darte el permiso en el juego no basta por sí solo.
- Es GTA. El juego repite un drawable en varios índices, y la mayoría de las tiendas los listan todos. Aquí los drawables fantasma se filtran, así que si aún ves un duplicado suele ser un pack de ropa que trae dos veces el mismo asset. Oculta el que sobra desde el editor dentro del juego: acaba en `config/clothes_overrides.lua`.
- El corte se declara por item, así que un casco o una máscara que hayas añadido tú aún no tiene regla. Configura desde el editor de catálogo cómo trata el pelo, y recuerda que existe la preferencia del jugador: quien quiera conservar su peinado puede decirlo, y su elección gana al corte automático.
- Necesitan screenshot-basic, y solo para eso. Es la única integración opcional de la tabla de requisitos cuya ausencia nota el jugador: sin ella los conjuntos guardados funcionan exactamente igual, pero la lista muestra nombres en vez de vistas previas.
- QBCore, ESX y vRP, más un modo standalone que no necesita framework alguno y una rama `custom` en `bridges/framework.lua` para cualquier otra cosa. La detección se hace al arrancar y sondea el export real. Qbox y ox_core no tienen rama dedicada: pasan por la vía standalone o custom, no por un target probado.
- Sí, están hechos para eso. Este es el más invasivo de los tres, ya que aplicar un conjunto vacía la ranura de decoraciones, así que vuelve a poner lo que es de los otros dos tras cada cambio. Lo que no debes hacer es usar los recursos sueltos y el pack `avenida_skin` a la vez. El recurso detecta el solape y lo dice en consola al arrancar.
- 0.00ms. Los puntos de interacción comparten un hilo que baja a un segundo cuando no hay nadie cerca, los blips se crean una vez, y cada hilo de sesión muere al salir. El debounce de vista previa solo existe mientras hay un menú abierto, y se puede ajustar para máquinas más flojas.
Lo que dicen los compradores
4.8 5 opiniones verificadas
Haldor brilliant scripts and great support 10 /10
BigOppGrimeyy GangWrld NYC 10/10 was having a problem and these guys ain't stop till it was fix customer service is great definitely buying again
00hugi Super scripts and even better and fast support. Thanks a lot!!
reapersrow Amazing support from the developers and a smooth script!
Necro Huston RP Best service Ive ever received! He even helped me fix problems not associated with his script!
DESTACADO Avenida TeamCore Skin (3 in 1)
Barbería, estudio de tatuajes y tienda de ropa en un solo recurso FiveM. 1615 tatuajes, todos los componentes y props de ropa, la cabeza y la piel al completo, repartido todo por 36 tiendas. Una interfaz, una cámara, un flujo de compra, y una sola cosa que instalar en ESX, QBCore, vRP o standalone.
DESTACADO Avenida TeamBarber shop
Una barbería puesta en escena, con una cámara que el jugador controla de verdad. El personaje entra, se sienta y el barbero se pone a trabajar mientras una cámara orbital encuadra la cabeza. Pelo, barba, overlays y todos los detalles de piel, con vista previa en directo antes de gastar un solo dólar.
DESTACADO Avenida TeamTattoo shop
Todo el catálogo de tatuajes del juego, con un carrito y una silla en la que de verdad te sientas. 1615 diseños en 26 colecciones DLC, con vista previa en directo en tu personaje a medida que los vas añadiendo, y un solo pago al final. Borrado láser incluido, y un tatuador que entra y hace el trabajo.