WENOPAL

Itens e receitas em mods de Project Zomboid B42

Comidas, bebidas, armas, modelos 3D, receitas de criação e de conserto, com exemplos tirados de mods publicados.

Nível intermediário · Atualizado em

Tudo o que é "declarativo" em um mod (o que não é código) fica em arquivos .txt dentro de media/scripts/. Sempre com o mesmo formato:

text
module MiModulo
{
    imports { Base, }

    item ...        { ... }
    model ...       { ... }
    craftRecipe ... { ... }
    fixing ...      { ... }
}

Você pode dividir isso em vários arquivos (items/, models/, recipes/), desde que todos usem o mesmo module.

Comida

Exemplo real: a salsicha (vienesa) do Completos Chilenos (o completo é o cachorro-quente chileno).

text
item Vienesa
{
    DisplayCategory = Food,
    ItemType = base:food,
    Icon = Vienesa,
    FoodType = Meat,
    Weight = 0.1,
    DaysFresh = 5,
    DaysTotallyRotten = 9,
    HungerChange = -8,
    Calories = 150,
    Carbohydrates = 2,
    Lipids = 13,
    Proteins = 6,
    IsCookable = true,
    GoodHot = true,
    MinutesToCook = 10,
    MinutesToBurn = 30,
    CookingSound = FryingFood,
    EvolvedRecipe = Pizza:8;Stew:8;Pie:8;Stir fry:8;Pasta:8;Rice:8,
}
  • IsCookable, MinutesToCook e MinutesToBurn fazem ela ser cozinhável, e ela queima se você deixar tempo demais.
  • GoodHot = true: melhora mais o humor se for comida quente.
  • EvolvedRecipe permite usá-la como ingrediente nas receitas "evolutivas" do jogo (pizza, ensopado...). O número é quanto ela contribui.

Bebidas e "o que sobra depois"

Melón con Vino é um drinque que, quando termina, deixa a casca:

text
item MelonConVino
{
    ItemType = base:food,
    Tags = base:alcoholicbeverage,
    ThirstChange = -40,
    Alcoholic = TRUE,
    AlcoholPower = 0.3,
    EatType = Candrink,
    CustomContextMenu = Drink,
    CustomEatSound = DrinkingFromCan,
    ReplaceOnUse = Melvin42.MelonCascara,
    ...
}
  • CustomContextMenu = Drink troca "Comer" por "Beber" no menu.
  • ReplaceOnUse entrega outro item quando ele acaba: a casca.

Armas corpo a corpo

Um resumo do Sable de Luz. Os campos mais importantes:

text
item SableLuz
{
    ItemType = base:weapon,
    DisplayCategory = Weapon,
    Categories = LongBlade,
    SubCategory = Swinging,
    TwoHandWeapon = true,
    MinDamage = 8,
    MaxDamage = 14,
    MaxRange = 2.0,
    MaxHitCount = 10,
    CriticalChance = 35.0,
    ConditionMax = 30,
    ConditionLowerChanceOneIn = 30,
    SwingAnim = Bat,
    SwingSound = SableLuzSwing,
    HitSound = SableLuzHit,
    ...
}

Modelos 3D (no chão e na mão)

Um item pode ter um modelo para quando está na mão (StaticModel) e outro para quando está no chão (WorldStaticModel). Eles são declarados com blocos model:

text
model MelonConVinoGround
{
    mesh = WorldItems/MelonConVino,     <- models_X/WorldItems/MelonConVino.x
    texture = MelonConVino,             <- textures/MelonConVino.png
    scale = 1.0,
}

E no item, com o módulo na frente:

text
StaticModel = Melvin42.MelonConVino,
WorldStaticModel = Melvin42.MelonConVinoGround,

Receitas (craftRecipe)

Exemplo real: montar um completo italiano (cachorro-quente chileno com abacate, tomate e maionese).

text
craftRecipe MakeCompletoItaliano
{
    timedAction = Making,
    time = 60,
    Tags = InHandCraft;Cooking,
    category = Cooking,
    xpAward = Cooking:3,
    inputs
    {
        item 1 [CompleteItaliano.PanCompleto;Base.BunsHotdog_single] flags[InheritFoodAge;ItemCount],
        item 1 [CompleteItaliano.Vienesa;Base.Hotdog_single] flags[InheritFoodAge;ItemCount],
        item 1 [CompleteItaliano.Palta;Base.Avocado] flags[InheritFoodAge;ItemCount],
        item 1 [Base.Tomato] flags[InheritFoodAge;ItemCount],
        item 2 [Base.MayonnaiseFull],
    }
    outputs
    {
        item 1 CompleteItaliano.CompletoItaliano,
    }
}
  • [A;B] aceita qualquer um dos dois: o pão do mod ou o pão de cachorro-quente do jogo. Assim o jogador não fica preso procurando um item exato.
  • flags[InheritFoodAge]: o completo sai tão fresco (ou tão velho) quanto os ingredientes.
  • Tags = InHandCraft permite fazer com os itens na mão, sem mesa.

E uma receita com ferramenta que não se gasta:

text
craftRecipe SLEnsamblarSable
{
    timedAction = MakingElectrical,
    time = 400,
    Tags = AnySurfaceCraft,
    category = Electrical,
    SkillRequired = Electricity:3,
    xpAward = Electricity:30,
    inputs
    {
        item 1 tags[base:screwdriver] mode:keep,
        item 1 [SL.EmpunaduraSable],
        item 1 [SL.CristalKyber],
        item 2 [Base.Battery] mode:destroy,
    }
    outputs
    {
        item 1 SL.SableLuz,
    }
}
  • tags[base:screwdriver] aceita qualquer chave de fenda. Todas as tags estão na referência de tags, e os IDs dos itens vanilla (Base.X) na referência de itens.
  • mode:keep devolve a ferramenta; mode:destroy consome o item.
  • SkillRequired exige um nível de habilidade e xpAward dá experiência.

O nome visível da receita fica em Translate/<IDIOMA>/Recipes.json, com a chave igual ao nome da receita ("SLEnsamblarSable": "Ensamblar sable de luz"). Para português, use a pasta PTBR (por exemplo, "SLEnsamblarSable": "Montar sabre de luz").

Conserto (fixing)

text
fixing Fix Sable de Luz
{
    Require : SableLuz,
    Fixer : Battery; Electricity=2,
    Fixer : ElectronicsScrap=2; Electricity=3,
}

Cada Fixer é uma forma alternativa de consertar: qual material, quanto e qual habilidade exige.

Onde procurar mais

A fonte mais confiável são os scripts do próprio jogo: na pasta de instalação, media/scripts/. Se quiser saber como algo é feito, procure um item vanilla parecido. Os guias antigos da internet costumam ser do Build 41, e muitos já não funcionam.