Un ítem que no está en ninguna lista de loot existe en el juego, pero nadie lo va a encontrar. Para que aparezca en refrigeradores, estantes o casilleros hay que agregarlo a las distribuciones.
Cómo funciona
Cada tipo de contenedor del mapa (el refrigerador de una casa, el estante de vinos de una botillería, el casillero de una comisaría) usa una lista con nombre dentro de la tabla ProceduralDistributions.list. Cada lista tiene una tabla items que alterna ítem, peso, ítem, peso...:
ProceduralDistributions.list["FridgeGeneric"].items = {
"Base.Milk", 4,
"Base.Cheese", 3,
...
}Mientras más alto el peso, más seguido aparece. Por eso se agregan dos valores: primero el ítem y después el peso.
El patrón seguro (el que usan todos nuestros mods)
require "Items/ProceduralDistributions"
local aplicado = false
local function agregarLoot()
if aplicado then return end
local ok, err = pcall(function()
local function meter(lista, item, peso)
local dist = ProceduralDistributions.list[lista]
if not dist or not dist.items then return end
table.insert(dist.items, item)
table.insert(dist.items, peso)
end
meter("FridgeGeneric", "Melvin42.MelonConVino", 1.5)
meter("LiquorStoreWine", "Melvin42.MelonConVino", 1.0)
meter("GroceryStandFruits1", "Melvin42.MelonConVino", 0.75)
aplicado = true
end)
if not ok then print("[MiMod] error en el loot: " .. tostring(err)) end
end
Events.OnPostDistributionMerge.Add(agregarLoot)Por qué cada parte:
- Revisar que la lista exista (
if not dist ...): los nombres cambian entre versiones del juego. Si una lista ya no existe, tu mod la salta en vez de caerse. pcall: si algo falla, el error queda enconsole.txtcon el prefijo de tu mod, y el juego sigue cargando.aplicado: evita meter el ítem dos veces si el evento se dispara más de una vez.- El archivo va en
media/lua/server/Items/.
Encontrar los nombres de las listas
Las tienes todas, con buscador y los ítems de cada una, en la referencia de listas de loot. También puedes abrir el archivo del juego media/lua/server/Items/ProceduralDistributions.lua (en la carpeta de instalación) y buscar palabras clave: Fridge, Kitchen, Liquor, Gun, Police, Clothing, Shoe... Algunos nombres que usamos en mods publicados:
| Dónde | Listas |
|---|---|
| Refrigeradores | FridgeGeneric, FridgeTrailerPark, FridgeBreakRoom, FridgeRich, FridgeBeer |
| Vino y botillerías | LiquorStoreWine, StoreShelfWine, CrateWine, KitchenBottles |
| Fruterías | GroceryStandFruits1, GroceryStandFruits2, ProduceStorageWatermelons |
| Cosas raras | JewelryGems, LaboratoryLockers, ArmyBunkerLockers |
Cuánto peso poner
No hay una fórmula exacta, porque depende de cuántos ítems más haya en esa lista. Una guía práctica:
- 0,03 a 0,1: muy raro, casi un premio (el sable de luz completo).
- 0,5 a 1: se encuentra de vez en cuando.
- 2 a 4: común en ese tipo de contenedor.
Un truco de Sable de Luz: las piezas aparecen más seguido (peso 0,3 a 0,6) y el ítem completo es rarísimo (0,05). Así el jugador puede armarlo o tener suerte.