Configuration
La configuracion principal se encuentra en shared/config.lua. El nombre global se mantiene como ColdMenuConfig por compatibilidad con instalaciones anteriores.
Idioma y framework
setr cold_appearance:locale "es"
setr cold_appearance:framework "auto"
La deteccion automatica prioriza Qbox, QB-Core, ESX y ox_core. En standalone se usa por defecto el identifier license.
Para un core propio selecciona custom e implementa las funciones de ColdMenuConfig.FrameworkBridge.server y ColdMenuConfig.FrameworkBridge.client indicadas en el archivo de configuracion.
Precios y cuentas
ColdMenuConfig.Prices = {
clothing = 100,
barber = 100,
tattoo = 100,
surgeon = 100
}
ColdMenuConfig.PaymentAccounts = { 'cash', 'bank' }
ColdMenuConfig.ChargePerTattoo = true
ColdMenuConfig.TattooPriceOverrides = {
-- ['coleccion:hash_del_tatuaje'] = 250
}
En standalone las tiendas permanecen bloqueadas salvo que configures un bridge de economia o actives expresamente ColdMenuConfig.StandaloneFreeShops.
Seguridad de las sesiones
ColdMenuConfig.CustomizationSessionSeconds = 600
ColdMenuConfig.ShopValidationDistance = 8.0
ColdMenuConfig.UsePrivateCustomizationBucket = true
ColdMenuConfig.AllowExternalFullEditor = false
ColdMenuConfig.AllowExternalUniforms = false
Mantener desactivadas las dos opciones AllowExternal* evita que un cliente abra flujos privilegiados sin autorizacion del servidor.
Interacciones y NPC
ColdMenuConfig.UseTarget = true
ColdMenuConfig.TargetDistance = 2.5
ColdMenuConfig.ZoneRadius = 2.0
ColdMenuConfig.EnableShopPeds = false
Aunque la opcion conserva el nombre UseTarget, utiliza zonas internas y la tecla E; no requiere un target externo.
Tiendas y blips
ColdMenuConfig.Stores = {
{ type = 'clothing', coords = vec3(425.91, -801.03, 29.49) },
{ type = 'barber', coords = vec3(-814.22, -183.70, 37.57) },
{ type = 'tattoo', coords = vec3(1322.60, -1651.90, 52.28) },
{ type = 'surgeon', coords = vec3(338.92, -1394.75, 32.51) }
}
Cada entrada admite showBlip = false, radius, heading, targetModel y targetScenario. La apariencia de los blips se configura en ColdMenuConfig.Blips.
Vestuarios y armarios
ColdMenuConfig.ClothingRooms = {
{
coords = vec3(452.6, -992.8, 30.7),
type = 'job',
group = 'police',
minGrade = 0,
onDuty = true,
radius = 2.5,
label = 'Abrir vestuario policial'
}
}
ColdMenuConfig.PlayerOutfitRooms = {
{
coords = vec3(100.0, 100.0, 100.0),
citizenids = { 'ABC12345' }
}
}
Las salas admiten type, group, minGrade, onDuty, citizenids, radius, distance y label. El servidor vuelve a comprobar identidad, grupo, rango y distancia antes de abrirlas.
Tatuajes
ColdMenuConfig.RCoreTattoosCompatibility = false
ColdMenuConfig.PersistUniforms = true
TattooPreviewClothing.male y TattooPreviewClothing.female definen la ropa temporal usada al pulsar Quitar ropa. Nunca se guarda y se restaura al cerrar.
Al activar RCoreTattoosCompatibility, se ocultan los estudios propios y se reaplican los tatuajes de rcore_tattoos.
Tracker y prendas restringidas
ColdMenuConfig.PreventTrackerRemoval = true
ColdMenuConfig.TrackerComponent = { id = 7, drawable = 13, texture = 0 }
El gestor /gestionarropa permite restringir prendas por trabajo, banda, ACE, empresa de cold_business o citizen ID. Las reglas se validan al guardar una apariencia, crear o actualizar un atuendo e importar un codigo.
Comandos
ColdMenuConfig.Commands = {
wardrobe = 'armario',
reload = 'reloadskin',
admin = 'apariencia',
ped = 'pedmenu',
jobOutfits = 'vestuario',
restrictions = 'gestionarropa'
}
ColdMenuConfig.AdminAce = 'cold_appearance.admin'
Integracion basica
local appearance = exports.cold_appearance:getPedAppearance(PlayerPedId())
exports.cold_appearance:setPedAppearance(PlayerPedId(), appearance)
exports.cold_appearance:OpenOutfitMenu()
Para abrir de forma segura el editor completo de otro jugador, utiliza el export de servidor:
local opened, reason = exports.cold_appearance:OpenCustomization(playerId, 'full', {
title = 'Editor autorizado'
})