Documentación

Documentación de Core 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.

  • ESX
  • QBCore
  • vRP
  • Standalone
  • oxmysql
01

Instalación

  1. Coloca el recurso

    Descarga el script desde tu cuenta Tebex, copia la carpeta en tu directorio de recursos y añade ensure avenida_core_skin a la config del servidor, después de ensure oxmysql. No cambies el nombre de la carpeta, es el que declara el manifest.

  2. Ejecuta el SQL, toda la sección [A]

    La sección [A] contiene todas las tablas del recurso, incluido el registro de prendas pagadas. Las secciones [B], [C] y [D] son condicionales, y el archivo dice cuándo hace falta cada una. La [D] son los items de inventario, solo hace falta si activas Config.Clothes.GiveAsItems, y es la que se olvida todo el mundo.

  3. Elige tus módulos

    Abre config/config.lua y ajusta Config.Modules. Un módulo puesto en false no cuesta nada: sin blip, sin punto de interacción, sin hilo, y su config simplemente no se lee nunca. Aprovecha para revisar Config.Locale.

  4. Concede los permisos de admin

    Añade add_ace group.admin avenida_skin.admin allow y add_ace group.admin avenida_skin.vip allow. El primero abre el editor de catálogo dentro del juego, el segundo desbloquea lo que hayas reservado a la lista VIP.

  5. Verifica las integraciones

    Pon Config.Debug = true, reinicia y lee la consola: una línea por categoría de bridge nombra el target elegido. Ponlo de nuevo en false cuando las líneas coincidan con tu servidor, y recuerda que solo controla los logs, el editor tiene su propio interruptor.

02

Configuración

Deja activas solo las tiendas que necesitas

Los tres módulos son independientes. Un servidor que ya tiene una tienda de ropa que le convence se queda con la barbería y el estudio de tatuajes, y del módulo apagado no se ejecuta nada.

lua
-- config/config.lua
Config.Modules = {
    Barber  = true,
    Tattoo  = true,
    Clothes = false,   -- no blip, no point, no thread
}

Config.Locale = 'en'

Config.Framework = 'auto'   -- 'qbcore' | 'esx' | 'vrp' | 'standalone' | 'custom'
Config.Notif     = 'auto'
Config.Interact  = 'auto'
Config.Clothing  = 'auto'
03

Exports

Client

  • GetHairbase
    exports['avenida_skin']:GetHairbase() --> { c = collection, t = nameHash } | nil

    La hair base que lleva el ped. El pack hace funcionar las tres tiendas con una sola ranura de decoraciones, así que es el único sitio del que hay que leerla, sea cual sea la última tienda que haya visitado el jugador.

  • GetTattoos
    exports['avenida_skin']:GetTattoos() --> { { c, t }, ... }

    Los tatuajes que lleva el ped en este momento. Como la barbería, la tinta y el armario comparten aquí un mismo registro, obtienes una sola lista en vez de preguntarle lo mismo a tres recursos.

Server

  • GetBagStorage
    exports['avenida_skin']:GetBagStorage(sex, drawable) --> { weight, slots } | nil

    Lo que vale un drawable de mochila en peso y ranuras, leído de la configuración del armario. Devuelve nil para un drawable que no esté declarado como bolsa.

04

Recetas

Poner precio a una sección de ropa 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.

lua
-- 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 } },
    },
}

Abaratar las colecciones viejas de tatuajes y encarecer las raras

Una tarifa única cubre los 1615 diseños, y un multiplicador por colección DLC hace el resto, así que nunca le pones precio a un catálogo entero a mano. El borrado láser tiene su propia tarifa y nunca se multiplica.

lua
-- config/tattoo.lua
Config.Tattoo.Prices = {
    flat  = 1000,
    reset = 3000,   -- laser removal, per tattoo removed
}

Config.Tattoo.CollectionMultipliers = {
    multiplayer_overlays = 0.80,   -- base game, cheaper
    mpHipster_overlays   = 0.85,
    -- anything not listed stays at 1.0
}

Encuadrar las escenas de barbería y tatuaje

La cámara pivota sobre la cabeza, así que los mismos valores de altura sirven igual de pie que sentado. La iluminación y la profundidad de campo son lo que hace que el personaje se lea como el sujeto del plano y no como un ped en una habitación a oscuras.

lua
-- config/config.lua
Config.Camera = {
    Sensitivity = 1.0,      -- rotation, zoom and height, clamped to 0.1 - 5.0
    InvertY     = false,
}

Config.UI = {
    Tutorial          = true,
    Timecycle         = 'casino_brightroom',
    TimecycleFadeMs   = 400,
    DofStrength       = 0.1,
}

Ocultar tu HUD mientras hay una tienda abierta

El recurso dispara un evento de cliente al abrir y al cerrar un menú, en los tres módulos. Engánchate a él en vez de sondear, es la misma señal que usa la gestión interna del HUD.

lua
AddEventHandler('avenida_skin:client:uiStateChanged', function(hidden)
    if hidden then
        exports['myhud']:hide()
    else
        exports['myhud']:show()
    end
end)
05

Preguntas

¿Compro el pack o los tres recursos sueltos?

El pack si quieres los tres: cuesta menos y es una sola cosa que instalar y actualizar. Los recursos sueltos si solo necesitas uno o dos, o si ya tienes una tienda de ropa que te convence. Lo que nunca debes hacer es tener los dos a la vez: cada uno pondría su blip y escribiría su copia del mismo personaje. El recurso detecta el solape y lo dice en consola al arrancar.

Solo quiero la barbería y el estudio de tatuajes

Pon Config.Clothes = false en Config.Modules. Un módulo apagado no registra nada: sin blip, sin punto de interacción, sin hilo, y su config simplemente no se lee nunca. También puedes comprar los dos recursos sueltos, es una decisión de precio y no de lo que se ejecuta.

¿El pack conserva la apariencia actual de mis jugadores?

Sí. Lee y escribe la misma estructura de personaje que los recursos sueltos y pasa por el mismo bridge de apariencia, así que qb-clothing, illenium-appearance, fivem-appearance, esx_skin o la tabla propia del recurso siguen funcionando igual. Los personajes que ya existen se inicializan con lo que llevan puesto, también para el registro de propiedad de la ropa.

¿Qué frameworks soporta realmente?

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.

¿Funciona con el stack ox?

Sí, en todo lo que importa: ox_lib para las notificaciones, ox_target para el prompt de interacción, ox_inventory para las prendas como items y los contenedores de mochila, y oxmysql como única dependencia dura. Nada de eso es obligatorio salvo oxmysql.

¿Qué me cuesta vRP?

vRP guarda componentes de ropa y props, nada más. No tiene ningún campo para overlays de cabeza, rasgos faciales, color de pelo, color de ojos ni decoraciones de ped, así que en vRP el personaje entero se guarda en la tabla propia de este recurso. La parte de ropa sí sigue llegando a vRP, y se refresca tras cada cambio. vRP 2 y vRP 0.5 no están soportados, y el recurso lo dice en consola en vez de comportarse mal en silencio.

Un jugador dice que ha perdido ropa que tenía

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.

¿Cuánto cuesta cuando no hay nadie en la tienda?

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. Un módulo apagado no cuesta nada, porque no se ejecuta ni una sola de sus líneas.

Carrito
Spirit RP
Discord