WENOPAL

Loot em Project Zomboid B42: faça seu item aparecer no mundo

Como funcionam as listas de loot do Build 42, como adicionar seus itens sem quebrar nada e como escolher onde e com que frequência eles aparecem.

Nível intermediário · Atualizado em

Um item que não está em nenhuma lista de loot existe no jogo, mas ninguém vai encontrá-lo. Para ele aparecer em geladeiras, prateleiras ou armários, é preciso adicioná-lo às distribuições.

Como funciona

Cada tipo de contêiner do mapa (a geladeira de uma casa, a prateleira de vinhos de uma loja de bebidas, o armário de uma delegacia) usa uma lista com nome dentro da tabela ProceduralDistributions.list. Cada lista tem uma tabela items que alterna item, peso, item, peso...:

lua
ProceduralDistributions.list["FridgeGeneric"].items = {
    "Base.Milk", 4,
    "Base.Cheese", 3,
    ...
}

Quanto maior o peso, mais frequente ele aparece. Por isso se adicionam dois valores: primeiro o item e depois o peso.

O padrão seguro (o que todos os nossos mods usam)

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)

O porquê de cada parte:

  • Conferir se a lista existe (if not dist ...): os nomes mudam entre versões do jogo. Se uma lista não existir mais, seu mod pula ela em vez de quebrar.
  • pcall: se algo der errado, o erro fica no console.txt com o prefixo do seu mod, e o jogo continua carregando.
  • aplicado: evita colocar o item duas vezes se o evento disparar mais de uma vez.
  • O arquivo fica em media/lua/server/Items/.

Encontrar os nomes das listas

Você tem todas elas, com busca e os itens de cada uma, na referência de listas de loot. Também pode abrir o arquivo do jogo media/lua/server/Items/ProceduralDistributions.lua (na pasta de instalação) e procurar palavras-chave: Fridge, Kitchen, Liquor, Gun, Police, Clothing, Shoe... Alguns nomes que usamos em mods publicados:

OndeListas
GeladeirasFridgeGeneric, FridgeTrailerPark, FridgeBreakRoom, FridgeRich, FridgeBeer
Vinho e lojas de bebidasLiquorStoreWine, StoreShelfWine, CrateWine, KitchenBottles
HortifrútisGroceryStandFruits1, GroceryStandFruits2, ProduceStorageWatermelons
Coisas rarasJewelryGems, LaboratoryLockers, ArmyBunkerLockers

Quanto peso colocar

Não existe uma fórmula exata, porque depende de quantos outros itens há nessa lista. Um guia prático:

  • 0,03 a 0,1: muito raro, quase um prêmio (o sabre de luz completo).
  • 0,5 a 1: aparece de vez em quando.
  • 2 a 4: comum nesse tipo de contêiner.

Um truque do Sable de Luz: as peças aparecem com mais frequência (peso 0,3 a 0,6) e o item completo é raríssimo (0,05). Assim o jogador pode montá-lo ou ter sorte.