Resumen:Esta guía le ofrece ajustes preestablecidos de peso/ranura listos para producción, tablas de presupuesto de artículos y archivos copiables y pegables.
items.luaDefiniciones (ESX/QBCore/ox_inventory) y guías de migración segura entre inventarios populares. Úselo para eliminar el problema de la sobrecarga, detener la sobrecarga de artículos y mantener la coherencia de su economía.
Por qué es importante ajustar el inventario
Una economía de rol estable depende de la escasez, la fricción y las decisiones significativas. Las reglas de inventario (espacios, peso, límites de acumulación, metadatos como durabilidad/números de serie) son los factores que hacen que esas decisiones sean reales. Si todos pueden llevar todo, los precios se desploman y los bucles se rompen. Ajusta primero el inventario y luego itera tus precios, pagos y sumideros. Para una economía más amplia, consulta nuestro pilar: Diseño de una economía equilibrada para GTA RP: precios, pérdidas y progresión.
Modelos: Ranuras vs. Peso vs. Híbrido
Solo tragamonedas
- Modelo cognitivo simple; cada ítem = 1 ranura o definido por clases de tamaño.
- Débil para diferenciar acumulaciones pesadas de ligeras; se aprovecha de muchos objetos diminutos de alto valor.
Sólo peso
- Cada artículo tiene un peso (normalmente en gramos). Los jugadores tienen
maxWeightPor contenedor. Gran realismo; requiere valores predeterminados bien pensados.
Híbrido (recomendado)
- Límite de peso global y Límite de ranuras. Previene exploits de micro y megaobjetos. Funciona mejor para RP.
ConsejoMantenga los números legibles para humanos. Si modela en gramos, use números enteros (p. ej.,
water = 500g) y gorras de jugadores redondos (por ejemplo,maxWeight = 120,000).
Ajustes preestablecidos predeterminados (copiar y adaptar)
A continuación se muestran puntos de partida probados en batalla. Ajuste ±10–20% después de una semana de telemetría en la ciudad.
Inventario de jugadores (en persona)
| Escala de servidor | Modelo | Peso máximo (g) | Tragamonedas | Notas |
|---|---|---|---|---|
| Nuevo/Pequeño (≤40 pp) | Híbrido | 80,000 | 30 | Incorporación más rápida; menos problemas iniciales. |
| Medianos (40–150) | Híbrido | 120,000 | 35 | Equilibrado para RP general; bueno para diversos trabajos. |
| Pop de alta gama (más de 150) | Híbrido | 150,000 | 32 | Ajusta los slots para evitar el acaparamiento; mantén el peso justo. |
Vehículos (valores predeterminados comunes)
| Recipiente | Peso máximo (g) | Tragamonedas | Razón fundamental |
|---|---|---|---|
| Guantera | 10,000 | 5 | Pequeño alijo que fomenta la planificación. |
| Baúl de los sedanes | 80,000 | 20 | Base. |
| Baúl de SUV/furgoneta | 120,000 | 25 | Los vehículos utilitarios adquieren significado. |
| Camión (utilitario) | 180,000 | 28 | Jugabilidad logística. |
| Almacenamiento de motocicletas | 8,000 | 3 | Bolsillos mínimos. |
Escondites y contenedores especiales
| Tipo | Peso máximo (g) | Tragamonedas | Notas |
|---|---|---|---|
| Alijo de la casa (niveles 1/2/3) | 120k / 180k / 240k | 40 / 60 / 80 | Incentiva la mejora de las viviendas. |
| Casillero de trabajo | 80,000 | 20 | Prevenir exploits de transferencia. |
| Casillero de pruebas | 240,000 | 120 | Conveniencia para administrador/LEO; se requiere registro de auditoría. |
Presupuestos de peso de artículos (por clase)
Utilice esto para asignar pesos consistentes. Piense fricción relativa No realismo.
| Clase | Ejemplos | Peso sugerido (g) |
|---|---|---|
| Muy claro | Cuchilla para cerraduras, USB, SIM | 5–50 |
| Luz | Munición de pistola (10), vendaje, refrigerio | 100–250 |
| Medio | Botella de agua, hamburguesa, kit de reparación. | 400–800 |
| Pesado | Caja de munición para rifle (30), tanque de oxígeno, caja de material | 1.500–4.000 |
| Muy pesado | Caja de armas, bolsa de dinero (marcada) | 6.000–12.000 |
Munición: Presupuesto por unidad para pilas agrupadas (por ejemplo,
9mm = 15gcada uno → 30 rondas ≈ 450 g) o representar como cajas (por ejemplo,9mm box (30) = 500g).
Tamaños de pila y estrategia de ranuras
- Materias primas (comida, medicamentos): apile de 5 a 20 para reducir el tedio.
- Munición: apila de 30 a 60 para pistolas; de 60 a 120 para rifles cuando están en caja.
- Tapetes de artesanía:Apila 100–250; mantén un peso significativo.
- Armas:
stack = 1, metadatos únicos (número de serie, durabilidad).
Patrones de metadatos (durabilidad, números de serie, archivos adjuntos, calidad)
Diseñe los metadatos como un pequeño esquema. Mantenga los campos mínimos, tipificados y validados.
Esquema de metadatos canónicos (recomendación)
{
"serial": "string", // weapon unique id
"owner": "citizenid|identifier",
"durability": 0.0, // 0.0–1.0; decay per use/time
"quality": 100, // 0–100; repairable threshold 25
"ammo": 0, // integer; weapon mags
"tint": 0, // integer (game tint index)
"attachments": ["flashlight", "scope"],
"expiry": 0, // unix timestamp; perishable items
"notes": "" // small text; avoid bloat
}
Durabilidad y deterioro
- Armas: decaimiento 0,5–1,5% por cargador; probabilidad de atasco <5% por debajo de una calidad de 20%.
- Herramientas (ganzúas, taladro): consume % al usarlo; se rompe a los 0.
- Productos perecederos:
expirycomprobar en uso; penalización obsoleta o bloqueo.
Seguridad y rendimiento
- Valide los metadatos del lado del servidor; nunca confíe en las escrituras del cliente.
- Limitar el tamaño de los metadatos (p. ej., <512 bytes). Los blobs grandes afectan negativamente al guardado/carga y las cargas útiles de red.
- Utilice enumeraciones para archivos adjuntos y tintes.
Código: items.lua / definiciones de elementos por marco
Ejemplo de ESX (es_extended)
-- esx items.lua (example) — weight in grams; negative weight means not counted in legacy modes
['water'] = { label = 'Water Bottle', weight = 500, stack = true, close = true, description = 'Stay hydrated.' },
['bandage'] = { label = 'Bandage', weight = 150, stack = true, close = true },
['lockpick'] = { label = 'Lockpick', weight = 50, stack = true, close = true },
['pistol_ammo'] = { label = 'Pistol Ammo (30)', weight = 450, stack = true, close = true, description = '9mm, box of 30.' },
['weapon_pistol'] = { label = 'Pistol', weight = 1500, stack = false, close = true, degrade = 0.01, unique = true },
Para las variantes de ESX que aún utilizan límite en lugar de peso, colocar
limit = -1(ilimitado) y cambia el saldo económico por peso a nivel mundial.
QBCore (shared/items.lua) ejemplo
-- qb-core shared/items.lua
['water'] = { name = 'water', label = 'Water Bottle', weight = 500, type = 'item', image = 'water.png', unique = false, useable = true, shouldClose = true, description = 'Stay hydrated.',
combinable = nil },
['bandage'] = { name = 'bandage', label = 'Bandage', weight = 150, type = 'item', image = 'bandage.png', unique = false, useable = true, shouldClose = true },
['lockpick'] = { name = 'lockpick', label = 'Lockpick', weight = 50, type = 'item', image = 'lockpick.png', unique = false, useable = true, shouldClose = true },
['pistol_ammo'] = { name = 'pistol_ammo', label = 'Pistol Ammo (30)', weight = 450, type = 'item', image = 'pistol_ammo.png', unique = false, useable = true, shouldClose = true },
['weapon_pistol'] = { name = 'weapon_pistol', label = 'Pistol', weight = 1500, type = 'weapon', image = 'weapon_pistol.png', unique = true, useable = false, shouldClose = true,
info = { serial = '', durability = 1.0, ammo = 12, attachments = {} } },
ox_inventory (data/items.lua) ejemplo
return {
water = {
label = 'Water Bottle',
weight = 500,
stack = true,
client = { status = { thirst = 25000 }, anim = { dict = 'mp_player_intdrink', clip = 'loop_bottle' } },
},
bandage = { label = 'Bandage', weight = 150, stack = true },
lockpick = { label = 'Lockpick', weight = 50, stack = true },
pistol_ammo = { label = 'Pistol Ammo (30)', weight = 450, stack = true },
weapon_pistol = {
label = 'Pistol', weight = 1500, stack = false, allowArmed = true,
consume = 0, -- handled by durability system
ammo = { type = 'AMMO_PISTOL', count = 12 },
metadata = { serial = true, durability = true, attachments = true },
},
}
inventario_de_bueyes apoya a los ricos
client/servercomportamientos en las definiciones de elementos: prefiera los elementos integrados en lugar de scripts ad hoc para estandarizar el comportamiento.
Ejemplos de aplicación híbrida
Configuración del contenedor QBCore (ejemplo)
-- qb-inventory/server/config.lua (illustrative)
Config.PlayerMaxWeight = 120000
Config.PlayerMaxSlots = 35
Config.Vehicle = {
glovebox = { weight = 10000, slots = 5 },
trunk = function(class)
if class == 'sedan' then return 80000, 20 end
if class == 'suv' or class == 'van' then return 120000, 25 end
if class == 'truck' then return 180000, 28 end
return 60000, 18
end
}
Configuración del inventario de ox_inventory (ejemplo)
-- ox_inventory/server/custom/stashes.lua
lib.addstash('house_tier1', 40, 120000)
lib.addstash('house_tier2', 60, 180000)
lib.addstash('house_tier3', 80, 240000)
Manuales de migración (seguros y reversibles)
Principios
- Primero, tome una instantánea de la base de datos. 2) Migre elementos/metadatos con scripts idempotentes. 3) Ejecute en paralelo en un servidor de prueba. 4) Proporcione SQL de reversión.
A) qb-inventory → ox_inventory
Campos del mapa
QB items.lua→ox data/items.lua(name,label,weight,stack/unique,client/server behaviors).player inventorytabla: convertirinfoJSON →metadata(serie, durabilidad, munición).
Pseudocódigo (mezcla de Lua y SQL)
-- 1) Export QB items to a Lua table/JSON
-- 2) Generate ox items.lua entries
-- 3) Transform inventories
for item in qb_inventory_rows do
local meta = json.decode(item.info or '{}')
local metadata = {
serial = meta.serial,
durability = meta.durability or 1.0,
ammo = meta.ammo or 0,
attachments = meta.attachments or {},
}
insert_into_ox_inventory(item.name, item.amount, metadata)
end
Ejemplo de SQL (estilo PostgreSQL/MySQL)
-- Backup
CREATE TABLE backup_playeritems AS SELECT * FROM playeritems;
-- Transform example for a single item family
UPDATE playeritems
SET metadata = JSON_OBJECT(
'serial', JSON_EXTRACT(info, '$.serial'),
'durability', COALESCE(JSON_EXTRACT(info, '$.durability'), 1.0),
'ammo', COALESCE(JSON_EXTRACT(info, '$.ammo'), 0),
'attachments', COALESCE(JSON_EXTRACT(info, '$.attachments'), JSON_ARRAY())
)
WHERE name IN ('weapon_pistol','weapon_pistol_mk2');
Trampas
- Artículos únicos: hacer cumplir
stack = false; asegúrese de que los duplicados no se fusionen. - Sistemas de munición: reconciliar las convenciones de munición en caja y suelta.
- Imágenes/iconos: re-direccionar las imágenes de los elementos para que coincidan con el nombre de Ox.
B) ESX (basado en límites) → modelo de peso
- Establecer global
useWeight = trueen configuración (varía según la bifurcación). - Reemplazar por artículo
limitconweight(g). Para artículos anteriormentelimit = -1, asignar pesos realistas. - Migre los límites de almacenamiento/vehículo según corresponda.
Pase con guión
for name, item in pairs(Items) do if item.limit and not item.weight then item.weight = estimateWeightFromClass(name) item.limit = nil end end
DO) qs-inventory / lj-inventory → QBCore/buey
- El mapeo de campo es similar a QB:
info→metadata. - Esté atento a las teclas personalizadas (
quality,image,createdAt). Normalizar al esquema canónico.
Equilibrio del flujo de trabajo (sprint de 1 semana)
- Día 0:Implementar ajustes preestablecidos; migrar elementos a la tabla de presupuesto.
- Día 1–2: Telemetría de captura: peso promedio transportado, espacios utilizados, distribución de elementos por trabajo.
- Día 3:Ajustar los valores atípicos (+5–10% peso en los 5 elementos principales acumulados).
- Día 4–5:Roles del vehículo: mejorar los baúles utilitarios; debilitar el abuso de la guantera.
- Día 6:Perecederos: añadir
expirypara consumibles de alto margen. - Día 7:Publicar notas del parche; establecer una revisión de dos semanas.
Telemetría mínima
% time encumbered,avg slots used, los 20 artículos principales por cantidad y peso total, percentiles de utilización de existencias.
Lista de verificación de control de calidad (lista para enviar)
- Todos los artículos tienen
weight,stacky etiquetas claras. - Las armas son
unique/no apilar e incluirserial,durability. - Los contenedores hacen cumplir ambos peso y ranuras (donde sea compatible).
- Las clases de vehículos se asignan a capacidades sensibles.
- Alijos escalonados según la progresión.
- Migraciones respaldadas y reversiones probadas.
- Tamaño de metadatos limitado; validado del lado del servidor.
Plantillas descargables (en línea)
Presupuesto de peso CSV (copiar a Hojas de cálculo de Google)
name,label,class,weight_g,stack,stack_size water,Water Bottle,consumable,500,true,10 bandage,Bandage,medical,150,true,5 lockpick,Lockpick,tool,50,true,10 pistol_ammo,Pistol Ammo (30),ammo,450,true,5 weapon_pistol,Pistol,weapon,1500,false,1
Tabla de capacidad del vehículo (CSV)
container,weight_g,slots Glovebox,10000,5 Sedan Trunk,80000,20 SUV/Van Trunk,120000,25 Truck Trunk,180000,28 Motorcycle,8000,3
Errores comunes y soluciones
- Los jugadores siempre están sobrecargados → Reducir el peso de los 3 objetos más comunes en 15%; aumentar el límite de jugadores en 10%.
- Acaparamiento infinito de microartículos → Introduzca un límite de ranura; establezca el peso mínimo del artículo (por ejemplo, 25 g).
- Inflación económica por acumulación de existencias → Añadir productos perecederos
expiry, creación de fricción de peso de entrada o tarifas de alijo. - Hinchazón de la base de datos → Podar claves de metadatos; evitar grandes
notescampos.
Próximos pasos
- Implemente los ajustes preestablecidos híbridos anteriores y luego itere con telemetría.
- Alinee la fricción del inventario con los pagos y los precios: consulte nuestra publicación sobre economía para lavabos y modelos de progresión que combinan bien con estas configuraciones.
¿Tienes preguntas sobre una bifurcación específica del framework o un inventario personalizado? Cuéntanos los detalles y adaptaré las configuraciones exactas.
Recursos relacionados con FiveMX
Utilice estas secciones de FiveMX para comparar productos relacionados, categorías y guías de configuración antes de elegir un recurso.
