WENOPAL

Loot en Project Zomboid B42: que tu ítem aparezca en el mundo

Cómo funcionan las listas de loot de Build 42, cómo agregar tus ítems sin romper nada y cómo elegir dónde y qué tan seguido aparecen.

Nivel intermedio · Actualizada el

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...:

lua
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)

lua
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 en console.txt con 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óndeListas
RefrigeradoresFridgeGeneric, FridgeTrailerPark, FridgeBreakRoom, FridgeRich, FridgeBeer
Vino y botilleríasLiquorStoreWine, StoreShelfWine, CrateWine, KitchenBottles
FruteríasGroceryStandFruits1, GroceryStandFruits2, ProduceStorageWatermelons
Cosas rarasJewelryGems, 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.