diff --git a/README.md b/README.md index c6dc3063..c64de0de 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The bot is live: it pairs with Rust+ over FCM, holds a socket per server, and auto-provisions its own Discord channels. Pairing/connection, the chat bridge, in-game `!commands` and slash surfaces, live map events, map rendering, smart devices (switches, alarms, storage monitors), and an offline item database with -recycle/craft/research calculators are all shipped. Cameras are next. +recycle/craft/research/decay/upkeep calculators are all shipped. Cameras are next. ## Features @@ -48,14 +48,14 @@ configurable per-server prefix (default `!`) and per-command cooldowns: - **Server** — `!pop`, `!time`, `!wipe` - **Team** — `!online`, `!offline`, `!team`, `!alive`, `!steamid [name]`, `!prox [name]` - **Live events** — `!cargo`, `!heli`, `!chinook`, `!small`, `!large`, `!events` -- **Items** — `!item`, `!recycle`, `!craft`, `!research` (name or id) +- **Items** — `!item`, `!recycle`, `!craft`, `!research`, `!decay`, `!upkeep` (name or id) - **Control** — `!mute` / `!unmute` (gate all bot→game output) ### Slash commands - **Server data** (ephemeral, with a `server` selector when several are paired) — `/pop`, `/time`, `/wipe`, `/online`, `/offline`, `/team`, `/alive`, `/small`, `/large` -- **Items** (ephemeral) — `/item`, `/recycle`, `/craft`, `/research` (name or id) +- **Items** (ephemeral) — `/item`, `/recycle`, `/craft`, `/research`, `/decay`, `/upkeep` (name or id) - **Utility** — `/help`, `/uptime`, `/leader` (Manage Server — transfer in-game team leadership) - **Admin** — `/setup`, `/workspace reset`, `/workspace simulate-server` @@ -75,8 +75,9 @@ configurable per-server prefix (default `!`) and per-command cooldowns: ### Item database & calculators - An **offline, versioned item dataset** (bundled, ~1200 items) behind one - lookup seam, exposing four calculators both in-game and as ephemeral slash - commands: item info, recycler yields, craft recipes, and research scrap cost. + lookup seam, exposing six calculators both in-game and as ephemeral slash + commands: item info, recycler yields, craft recipes, research scrap cost, + decay time, and building-block upkeep cost. - **Name-or-id lookup** — type a name (case-insensitive, partial), an exact name, or a numeric id; multiple matches return a short "did you mean" list. - **Provenance-aware** — each result footers the date its data was sourced, and a @@ -127,7 +128,7 @@ See [docs/development/running-locally.md](docs/development/running-locally.md). | `RustPlusBot.Features.Commands` | In-game `!commands`, slash surfaces, `/help`/`/leader` | | `RustPlusBot.Features.Events` | Live map-event classification + `#events` feed | | `RustPlusBot.Features.Map` | Map image rendering with toggleable layers | -| `RustPlusBot.Features.ItemData` | Bundled item dataset, lookup seam, recycle/craft/research data | +| `RustPlusBot.Features.ItemData` | Bundled item dataset, lookup seam, recycle/craft/research/decay/upkeep data | | `RustPlusBot.Host` | Generic Host entry point, DI wiring, startup validation | The `tools/` folder holds maintainer utilities that are not part of the running @@ -147,7 +148,7 @@ Subsystems are built in order; each has its own spec → plan → build cycle. | 3 | Chat bridge + `!commands` + slash surfaces | Done | | 4 | Smart devices (switches, alarms, storage monitors) | Done | | 5 | Cameras | Planned | -| 6 | Item database & calculators (recycle/craft/research) | In progress | +| 6 | Item database & calculators (recycle/craft/research/decay/upkeep) | In progress | ## License diff --git a/src/RustPlusBot.Features.Commands/CommandServiceCollectionExtensions.cs b/src/RustPlusBot.Features.Commands/CommandServiceCollectionExtensions.cs index c38507c6..d7c50ade 100644 --- a/src/RustPlusBot.Features.Commands/CommandServiceCollectionExtensions.cs +++ b/src/RustPlusBot.Features.Commands/CommandServiceCollectionExtensions.cs @@ -49,6 +49,8 @@ public static IServiceCollection AddCommands(this IServiceCollection services) services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddHostedService(); diff --git a/src/RustPlusBot.Features.Commands/Formatting/DecayLine.cs b/src/RustPlusBot.Features.Commands/Formatting/DecayLine.cs new file mode 100644 index 00000000..62162844 --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Formatting/DecayLine.cs @@ -0,0 +1,42 @@ +using System.Globalization; +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.Features.Commands.Formatting; + +/// Formats the one-line decay reply. +internal static class DecayLine +{ + /// Formats base decay, any present environment variant, and HP for an item. + /// The item (must have non-null ). + public static string Format(ItemRecord item) + { + ArgumentNullException.ThrowIfNull(item); + ArgumentNullException.ThrowIfNull(item.Decay); + var decay = item.Decay; + + var parts = new List(); + Add(parts, null, decay.Seconds); + Add(parts, "outside", decay.OutsideSeconds); + Add(parts, "inside", decay.InsideSeconds); + Add(parts, "underwater", decay.UnderwaterSeconds); + + var decayPart = parts.Count > 0 ? string.Join(", ", parts) : "—"; + var hp = decay.Hp is { } h + ? string.Create(CultureInfo.InvariantCulture, $" · {h} HP") + : string.Empty; + return string.Create(CultureInfo.InvariantCulture, $"{item.Name} decays in {decayPart}{hp}"); + + static void Add(List into, string? label, int? seconds) + { + if (seconds is not { } s) + { + return; + } + + var compact = DurationFormat.Compact(TimeSpan.FromSeconds(s)); + into.Add(label is null + ? compact + : string.Create(CultureInfo.InvariantCulture, $"{label} {compact}")); + } + } +} diff --git a/src/RustPlusBot.Features.Commands/Formatting/UpkeepLine.cs b/src/RustPlusBot.Features.Commands/Formatting/UpkeepLine.cs new file mode 100644 index 00000000..0ce0a01f --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Formatting/UpkeepLine.cs @@ -0,0 +1,28 @@ +using System.Globalization; +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.Features.ItemData.Naming; + +namespace RustPlusBot.Features.Commands.Formatting; + +/// Formats the one-line upkeep-cost reply. +internal static class UpkeepLine +{ + /// Formats the per-resource upkeep cost for a building block. + /// The item (must have non-null ). + /// Resolves resource item ids to names. + public static string Format(ItemRecord item, IItemNameResolver names) + { + ArgumentNullException.ThrowIfNull(item); + ArgumentNullException.ThrowIfNull(names); + ArgumentNullException.ThrowIfNull(item.Upkeep); + + var parts = item.Upkeep.Entries.Select(e => + { + var quantity = e.QuantityMin == e.QuantityMax + ? e.QuantityMin.ToString(CultureInfo.InvariantCulture) + : string.Create(CultureInfo.InvariantCulture, $"{e.QuantityMin}–{e.QuantityMax}"); + return string.Create(CultureInfo.InvariantCulture, $"{quantity} {names.Resolve(e.ItemId)}"); + }); + return string.Create(CultureInfo.InvariantCulture, $"{item.Name} upkeep: {string.Join(", ", parts)}"); + } +} diff --git a/src/RustPlusBot.Features.Commands/Handlers/DecayCommandHandler.cs b/src/RustPlusBot.Features.Commands/Handlers/DecayCommandHandler.cs new file mode 100644 index 00000000..1082d409 --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Handlers/DecayCommandHandler.cs @@ -0,0 +1,34 @@ +using RustPlusBot.Features.Commands.Dispatching; +using RustPlusBot.Features.Commands.Formatting; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Lookup; +using RustPlusBot.Localization; + +namespace RustPlusBot.Features.Commands.Handlers; + +/// !decay — shows an item's decay time and HP. +/// The item database. +/// The reply localizer. +internal sealed class DecayCommandHandler(IItemDatabase database, ILocalizer localizer) + : ICommandHandler +{ + /// + public string Name => "decay"; + + /// + public Task ExecuteAsync(CommandContext context, CancellationToken cancellationToken) + { + ArgumentNullException.ThrowIfNull(context); + var query = string.Join(' ', context.Args); + var reply = database.Resolve(query) switch + { + ItemMatch.Found { Item.Decay: not null } f => + localizer.Get("command.decay.ok", context.Culture, DecayLine.Format(f.Item)), + ItemMatch.Found f => localizer.Get("command.decay.none", context.Culture, f.Item.Name), + ItemMatch.Ambiguous a => localizer.Get("command.item.ambiguous", context.Culture, + string.Join(", ", a.Candidates.Select(c => c.Name))), + _ => localizer.Get("command.item.notfound", context.Culture, query), + }; + return Task.FromResult(reply); + } +} diff --git a/src/RustPlusBot.Features.Commands/Handlers/UpkeepCommandHandler.cs b/src/RustPlusBot.Features.Commands/Handlers/UpkeepCommandHandler.cs new file mode 100644 index 00000000..c72ba918 --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Handlers/UpkeepCommandHandler.cs @@ -0,0 +1,36 @@ +using RustPlusBot.Features.Commands.Dispatching; +using RustPlusBot.Features.Commands.Formatting; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Lookup; +using RustPlusBot.Features.ItemData.Naming; +using RustPlusBot.Localization; + +namespace RustPlusBot.Features.Commands.Handlers; + +/// !upkeep — shows a building block's upkeep cost. +/// The item database. +/// Resolves resource ids to names. +/// The reply localizer. +internal sealed class UpkeepCommandHandler(IItemDatabase database, IItemNameResolver names, ILocalizer localizer) + : ICommandHandler +{ + /// + public string Name => "upkeep"; + + /// + public Task ExecuteAsync(CommandContext context, CancellationToken cancellationToken) + { + ArgumentNullException.ThrowIfNull(context); + var query = string.Join(' ', context.Args); + var reply = database.Resolve(query) switch + { + ItemMatch.Found { Item.Upkeep: not null } f => + localizer.Get("command.upkeep.ok", context.Culture, UpkeepLine.Format(f.Item, names)), + ItemMatch.Found f => localizer.Get("command.upkeep.none", context.Culture, f.Item.Name), + ItemMatch.Ambiguous a => localizer.Get("command.item.ambiguous", context.Culture, + string.Join(", ", a.Candidates.Select(c => c.Name))), + _ => localizer.Get("command.item.notfound", context.Culture, query), + }; + return Task.FromResult(reply); + } +} diff --git a/src/RustPlusBot.Features.Commands/Help/CommandHelpCatalog.cs b/src/RustPlusBot.Features.Commands/Help/CommandHelpCatalog.cs index 7f2b0a2a..433b974f 100644 --- a/src/RustPlusBot.Features.Commands/Help/CommandHelpCatalog.cs +++ b/src/RustPlusBot.Features.Commands/Help/CommandHelpCatalog.cs @@ -29,6 +29,8 @@ internal static class CommandHelpCatalog new("recycle", CommandGroup.ItemDb, "help.recycle"), new("craft", CommandGroup.ItemDb, "help.craft"), new("research", CommandGroup.ItemDb, "help.research"), + new("decay", CommandGroup.ItemDb, "help.decay"), + new("upkeep", CommandGroup.ItemDb, "help.upkeep"), ]; /// The Discord slash commands, in display order. @@ -41,5 +43,7 @@ internal static class CommandHelpCatalog new("recycle", CommandGroup.ItemDb, "help.slash.recycle"), new("craft", CommandGroup.ItemDb, "help.slash.craft"), new("research", CommandGroup.ItemDb, "help.slash.research"), + new("decay", CommandGroup.ItemDb, "help.slash.decay"), + new("upkeep", CommandGroup.ItemDb, "help.slash.upkeep"), ]; } diff --git a/src/RustPlusBot.Features.Commands/Modules/ItemCommandModule.cs b/src/RustPlusBot.Features.Commands/Modules/ItemCommandModule.cs index ae2c3f0a..7aa5541b 100644 --- a/src/RustPlusBot.Features.Commands/Modules/ItemCommandModule.cs +++ b/src/RustPlusBot.Features.Commands/Modules/ItemCommandModule.cs @@ -11,7 +11,7 @@ namespace RustPlusBot.Features.Commands.Modules; -/// The /item, /recycle, /craft, and /research slash commands. +/// The /item, /recycle, /craft, /research, /decay, and /upkeep slash commands. /// Creates a short-lived DI scope per interaction. public sealed class ItemCommandModule(IServiceScopeFactory scopeFactory) : InteractionModuleBase @@ -20,14 +20,14 @@ public sealed class ItemCommandModule(IServiceScopeFactory scopeFactory) /// The item name or id. [SlashCommand("item", "Look up an item")] public Task ItemAsync([Summary("item", "Item name or id")] string item) => - RespondForAsync(item, (_, _, rec, loc, culture) => + RespondForAsync(item, db => db.Sources.NamesAsOf, (_, _, rec, loc, culture) => loc.Get("command.item.ok", culture, ItemLine.Format(rec))); /// Shows recycler output for an item. /// The item name or id. [SlashCommand("recycle", "Show recycler output for an item")] public Task RecycleAsync([Summary("item", "Item name or id")] string item) => - RespondForAsync(item, (_, names, rec, loc, culture) => rec.Recycle is not null + RespondForAsync(item, db => db.Sources.RecycleAsOf, (_, names, rec, loc, culture) => rec.Recycle is not null ? loc.Get("command.recycle.ok", culture, RecycleLine.Format(rec, names)) : loc.Get("command.recycle.none", culture, rec.Name)); @@ -35,7 +35,7 @@ public Task RecycleAsync([Summary("item", "Item name or id")] string item) => /// The item name or id. [SlashCommand("craft", "Show an item's craft recipe")] public Task CraftAsync([Summary("item", "Item name or id")] string item) => - RespondForAsync(item, (_, names, rec, loc, culture) => rec.Craft is not null + RespondForAsync(item, db => db.Sources.CraftAsOf, (_, names, rec, loc, culture) => rec.Craft is not null ? loc.Get("command.craft.ok", culture, CraftLine.Format(rec, names)) : loc.Get("command.craft.none", culture, rec.Name)); @@ -43,12 +43,29 @@ public Task CraftAsync([Summary("item", "Item name or id")] string item) => /// The item name or id. [SlashCommand("research", "Show an item's research scrap cost")] public Task ResearchAsync([Summary("item", "Item name or id")] string item) => - RespondForAsync(item, (_, _, rec, loc, culture) => rec.Research is not null + RespondForAsync(item, db => db.Sources.ResearchAsOf, (_, _, rec, loc, culture) => rec.Research is not null ? loc.Get("command.research.ok", culture, ResearchLine.Format(rec)) : loc.Get("command.research.none", culture, rec.Name)); + /// Shows an item's decay time. + /// The item name or id. + [SlashCommand("decay", "Show an item's decay time")] + public Task DecayAsync([Summary("item", "Item name or id")] string item) => + RespondForAsync(item, db => db.Sources.DecayAsOf, (_, _, rec, loc, culture) => rec.Decay is not null + ? loc.Get("command.decay.ok", culture, DecayLine.Format(rec)) + : loc.Get("command.decay.none", culture, rec.Name)); + + /// Shows a building block's upkeep cost. + /// The item name or id. + [SlashCommand("upkeep", "Show a building block's upkeep cost")] + public Task UpkeepAsync([Summary("item", "Item name or id")] string item) => + RespondForAsync(item, db => db.Sources.UpkeepAsOf, (_, names, rec, loc, culture) => rec.Upkeep is not null + ? loc.Get("command.upkeep.ok", culture, UpkeepLine.Format(rec, names)) + : loc.Get("command.upkeep.none", culture, rec.Name)); + private async Task RespondForAsync( string query, + Func dateSelector, Func onFound) { if (Context.Guild is null) @@ -76,7 +93,7 @@ private async Task RespondForAsync( var embed = new EmbedBuilder() .WithDescription(text) - .WithFooter($"data as of {db.Sources.NamesAsOf:yyyy-MM-dd}") + .WithFooter($"data as of {dateSelector(db):yyyy-MM-dd}") .Build(); await RespondAsync(ephemeral: true, embed: embed).ConfigureAwait(false); } diff --git a/src/RustPlusBot.Features.ItemData/Data/ItemDataset.cs b/src/RustPlusBot.Features.ItemData/Data/ItemDataset.cs index 553d3a7d..75a8307f 100644 --- a/src/RustPlusBot.Features.ItemData/Data/ItemDataset.cs +++ b/src/RustPlusBot.Features.ItemData/Data/ItemDataset.cs @@ -11,13 +11,17 @@ public sealed record ItemDataset(int SchemaVersion, DatasetSources Sources, IRea /// Recycle data source date. /// Craft data source date. /// Research data source date. +/// Decay data source date. +/// Upkeep data source date. public sealed record DatasetSources( DateOnly NamesAsOf, DateOnly RecycleAsOf, DateOnly CraftAsOf, - DateOnly ResearchAsOf); + DateOnly ResearchAsOf, + DateOnly DecayAsOf, + DateOnly UpkeepAsOf); -/// One item, with all 6a calculator data inlined (null where not applicable). +/// One item, with all calculator data inlined (null where not applicable). /// The Rust item id. /// The display name. /// Max stack size. @@ -25,6 +29,8 @@ public sealed record DatasetSources( /// Recycler yield, or null if not recyclable. /// Craft recipe, or null if not craftable. /// Research cost, or null if not researchable. +/// Decay timing, or null if the item does not decay / unknown. +/// Upkeep cost, or null if the item has no upkeep. public sealed record ItemRecord( int Id, string Name, @@ -32,7 +38,9 @@ public sealed record ItemRecord( int? DespawnSeconds, RecycleYield? Recycle, CraftRecipe? Craft, - ResearchCost? Research); + ResearchCost? Research, + DecayInfo? Decay, + UpkeepCost? Upkeep); /// Recycler output for an item (6a covers the standard recycler only). /// The yield entries produced by the standard recycler. @@ -58,3 +66,28 @@ public sealed record Ingredient(int ItemId, int Quantity); /// The research cost for an item. /// The scrap cost to research. public sealed record ResearchCost(int Scrap); + +/// Decay timing for an item/deployable/building block. All fields nullable — a field is +/// populated only when RustLabs provides it. is the base/default decay. +/// Base decay time in seconds. +/// Decay time when placed outside, if distinct. +/// Decay time when placed inside, if distinct. +/// Decay time when underwater, if distinct. +/// The item's hit points. +public sealed record DecayInfo( + int? Seconds, + int? OutsideSeconds, + int? InsideSeconds, + int? UnderwaterSeconds, + int? Hp); + +/// The upkeep cost to maintain a building block. +/// The per-resource upkeep cost entries. +public sealed record UpkeepCost(IReadOnlyList Entries); + +/// One upkeep resource cost. equals +/// for a single (non-range) quantity. +/// The resource item id. +/// The lower bound of the cost. +/// The upper bound of the cost. +public sealed record UpkeepEntry(int ItemId, int QuantityMin, int QuantityMax); diff --git a/src/RustPlusBot.Features.ItemData/Data/item-data.json b/src/RustPlusBot.Features.ItemData/Data/item-data.json index bcde8f0d..c4a53894 100644 --- a/src/RustPlusBot.Features.ItemData/Data/item-data.json +++ b/src/RustPlusBot.Features.ItemData/Data/item-data.json @@ -1,10 +1,12 @@ { - "schemaVersion": 1, + "schemaVersion": 2, "sources": { "namesAsOf": "2026-04-08", "recycleAsOf": "2024-09-07", "craftAsOf": "2024-09-07", - "researchAsOf": "2024-09-07" + "researchAsOf": "2024-09-07", + "decayAsOf": "2024-09-07", + "upkeepAsOf": "2024-09-07" }, "items": [ { @@ -33,7 +35,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 3380160, @@ -50,7 +54,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 4384538, @@ -59,7 +65,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 14241751, @@ -105,7 +113,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 15388698, @@ -133,7 +143,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 900, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 20489901, @@ -159,7 +177,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 21402876, @@ -187,7 +207,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 22947882, @@ -196,7 +218,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 23352662, @@ -231,7 +255,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 23391694, @@ -257,7 +283,9 @@ "timeSeconds": 3.125, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 28201841, @@ -284,7 +312,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 37122747, @@ -293,7 +323,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 39600618, @@ -319,7 +351,9 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 42535890, @@ -354,7 +388,9 @@ "timeSeconds": 11.25, "workbenchLevel": 2 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 51984655, @@ -400,7 +436,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 54265286, @@ -409,7 +447,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 54436981, @@ -418,7 +458,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 60528587, @@ -455,7 +497,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 62577426, @@ -464,7 +508,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 69511070, @@ -473,7 +519,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 70102328, @@ -482,7 +530,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 73681876, @@ -504,7 +554,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 81423963, @@ -513,7 +565,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 82772055, @@ -522,7 +576,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 86840834, @@ -549,7 +605,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 94971664, @@ -558,7 +616,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 95950017, @@ -595,7 +655,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 97903330, @@ -604,7 +666,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 98508942, @@ -639,7 +703,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 99588025, @@ -667,7 +733,15 @@ }, "research": { "scrap": 125 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": 104856514, @@ -676,7 +750,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 106959911, @@ -703,7 +779,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 110116923, @@ -712,7 +790,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 120820987, @@ -721,7 +801,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 121049755, @@ -756,7 +838,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 122783240, @@ -765,7 +849,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 140006625, @@ -802,7 +888,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 150 + }, + "upkeep": null }, { "id": 143803535, @@ -839,7 +933,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 146221721, @@ -848,7 +944,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 158303804, @@ -857,7 +955,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 162882477, @@ -866,7 +966,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 170758448, @@ -912,7 +1014,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 171931394, @@ -949,7 +1053,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 174866732, @@ -966,7 +1072,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 176787552, @@ -988,7 +1096,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 177226991, @@ -1023,7 +1133,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": 180752235, @@ -1032,7 +1150,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 184516676, @@ -1041,7 +1161,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 185586769, @@ -1050,7 +1172,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 190184021, @@ -1096,7 +1220,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 192249897, @@ -1105,7 +1231,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 196700171, @@ -1133,7 +1261,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 196784377, @@ -1142,7 +1272,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 198438816, @@ -1179,7 +1311,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 200773292, @@ -1207,7 +1341,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 204391461, @@ -1229,7 +1365,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 204970153, @@ -1238,7 +1376,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 209218760, @@ -1247,7 +1387,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 210787554, @@ -1256,7 +1398,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 215754713, @@ -1291,7 +1435,9 @@ "timeSeconds": 1.875, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 223891266, @@ -1319,7 +1465,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 236677901, @@ -1328,7 +1476,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 237239288, @@ -1365,7 +1515,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 240752557, @@ -1400,7 +1552,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 242421166, @@ -1409,7 +1563,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 242933621, @@ -1418,7 +1574,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 248643189, @@ -1427,7 +1585,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 254522515, @@ -1464,7 +1624,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 255305250, @@ -1473,7 +1635,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 261913429, @@ -1508,7 +1672,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 263834859, @@ -1517,7 +1683,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 268565518, @@ -1554,7 +1722,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 271048478, @@ -1589,7 +1759,9 @@ "timeSeconds": 3.125, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 273172220, @@ -1615,7 +1787,9 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 273951840, @@ -1624,7 +1798,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 277730763, @@ -1633,7 +1809,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 281099360, @@ -1642,7 +1820,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 282103175, @@ -1668,7 +1848,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 150 + }, + "upkeep": null }, { "id": 286193827, @@ -1677,7 +1865,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 286648290, @@ -1703,7 +1893,15 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 296519935, @@ -1720,7 +1918,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 301063058, @@ -1729,7 +1929,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 304481038, @@ -1766,7 +1968,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 309017792, @@ -1775,7 +1979,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 317398316, @@ -1784,7 +1990,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 320438357, @@ -1793,7 +2001,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 340210699, @@ -1802,7 +2012,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 342438846, @@ -1811,7 +2023,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 343045591, @@ -1833,7 +2047,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 349762871, @@ -1860,7 +2076,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 352130972, @@ -1869,7 +2087,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 352321488, @@ -1895,7 +2115,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 352499047, @@ -1950,7 +2172,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 355877490, @@ -1959,7 +2183,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 359723196, @@ -1994,7 +2220,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 362863314, @@ -2003,7 +2231,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 363163265, @@ -2029,7 +2259,9 @@ "timeSeconds": 0.625, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 368008432, @@ -2038,7 +2270,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 375473148, @@ -2047,7 +2281,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 377750553, @@ -2056,7 +2292,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 381595627, @@ -2065,7 +2303,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 385099196, @@ -2074,7 +2314,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 385645417, @@ -2083,7 +2325,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 390728933, @@ -2092,7 +2336,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 392828520, @@ -2101,7 +2347,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 405904531, @@ -2110,7 +2358,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 405905095, @@ -2119,7 +2369,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 418081930, @@ -2156,7 +2408,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 442289265, @@ -2193,7 +2447,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 442886268, @@ -2230,7 +2486,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": 443432036, @@ -2249,7 +2507,9 @@ "craft": null, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 445662288, @@ -2258,7 +2518,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 446206234, @@ -2293,7 +2555,15 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 450531685, @@ -2302,7 +2572,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 468313189, @@ -2311,7 +2583,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 472505338, @@ -2320,7 +2594,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 476066818, @@ -2346,7 +2622,9 @@ "timeSeconds": 3.125, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 479143914, @@ -2383,7 +2661,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 479292118, @@ -2392,7 +2672,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 486661382, @@ -2414,7 +2696,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 491263800, @@ -2423,7 +2707,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 492357192, @@ -2451,7 +2737,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 494161326, @@ -2460,7 +2748,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 504109620, @@ -2469,7 +2759,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 507284030, @@ -2478,7 +2770,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 524678627, @@ -2487,7 +2781,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 528668503, @@ -2533,7 +2829,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 533993281, @@ -2542,7 +2840,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 537946062, @@ -2551,7 +2851,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 547862680, @@ -2560,7 +2862,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 550753330, @@ -2569,7 +2873,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 553270375, @@ -2606,7 +2912,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 553887414, @@ -2641,7 +2949,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 553967074, @@ -2650,7 +2966,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 559147458, @@ -2687,7 +3005,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 567235583, @@ -2715,7 +3041,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 567871954, @@ -2750,7 +3078,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 571949408, @@ -2759,7 +3089,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 573676040, @@ -2776,7 +3108,15 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 300 + }, + "upkeep": null }, { "id": 573926264, @@ -2803,7 +3143,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 574701440, @@ -2812,7 +3154,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 576509618, @@ -2838,7 +3182,9 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 588596902, @@ -2875,7 +3221,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 593465182, @@ -2903,7 +3251,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 594041190, @@ -2912,7 +3262,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 596469572, @@ -2940,7 +3292,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 602628465, @@ -2986,7 +3340,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 602741290, @@ -3014,7 +3370,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 603811464, @@ -3023,7 +3381,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 605467368, @@ -3069,7 +3429,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 607400343, @@ -3095,7 +3457,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 607785075, @@ -3104,7 +3468,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 609049394, @@ -3113,7 +3479,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 610102428, @@ -3141,7 +3509,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 613961768, @@ -3169,7 +3539,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 615112838, @@ -3204,7 +3576,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": 621915341, @@ -3213,7 +3593,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 625599716, @@ -3222,7 +3604,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 634478325, @@ -3244,7 +3628,15 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 150 + }, + "upkeep": null }, { "id": 640470230, @@ -3253,7 +3645,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 642482233, @@ -3270,7 +3664,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 647240052, @@ -3279,7 +3675,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 649912614, @@ -3325,7 +3723,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 652793345, @@ -3334,7 +3734,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 656371026, @@ -3362,7 +3764,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 656371027, @@ -3390,7 +3794,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 656371028, @@ -3418,7 +3824,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 656829501, @@ -3427,7 +3835,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 657352755, @@ -3453,7 +3863,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": 665332906, @@ -3481,7 +3899,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 671063303, @@ -3518,7 +3938,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 671706427, @@ -3546,6 +3968,22 @@ }, "research": { "scrap": 125 + }, + "decay": { + "seconds": 43200, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": { + "entries": [ + { + "itemId": 317398316, + "quantityMin": 1, + "quantityMax": 1 + } + ] } }, { @@ -3572,7 +4010,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 678698219, @@ -3599,7 +4039,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 679690962, @@ -3608,7 +4050,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 680234026, @@ -3617,7 +4061,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 695450239, @@ -3626,7 +4072,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 696029452, @@ -3643,7 +4091,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 696029539, @@ -3652,7 +4102,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 699075597, @@ -3669,7 +4121,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 703057617, @@ -3701,7 +4155,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 709206314, @@ -3736,7 +4192,9 @@ "timeSeconds": 3.125, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 721798950, @@ -3745,7 +4203,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 722955039, @@ -3771,7 +4231,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 723407026, @@ -3780,7 +4242,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 734320711, @@ -3789,7 +4253,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 738611016, @@ -3798,7 +4264,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 742745918, @@ -3826,7 +4294,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 755224797, @@ -3835,7 +4305,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 756125481, @@ -3844,7 +4316,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 756517185, @@ -3853,7 +4327,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 756890702, @@ -3862,7 +4338,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 762289806, @@ -3890,7 +4368,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 782422285, @@ -3925,7 +4405,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 785728077, @@ -3962,7 +4444,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 789333045, @@ -3971,7 +4455,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 794356786, @@ -3999,7 +4485,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 794443127, @@ -4021,7 +4509,15 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 1000 + }, + "upkeep": null }, { "id": 795236088, @@ -4067,7 +4563,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 795371088, @@ -4113,7 +4611,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 803222026, @@ -4141,7 +4641,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": 803954639, @@ -4150,7 +4658,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 809199956, @@ -4167,7 +4677,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 809689733, @@ -4176,7 +4688,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 809942731, @@ -4193,7 +4707,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 813023040, @@ -4202,7 +4718,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 814297925, @@ -4211,7 +4729,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 818733919, @@ -4220,7 +4740,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 818877484, @@ -4266,7 +4788,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 821588319, @@ -4275,7 +4799,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 826309791, @@ -4310,7 +4836,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 829641693, @@ -4319,7 +4847,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 830839496, @@ -4328,7 +4858,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 831955134, @@ -4337,7 +4869,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 832133926, @@ -4374,7 +4908,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 833533164, @@ -4411,7 +4947,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 300 + }, + "upkeep": null }, { "id": 835042040, @@ -4438,7 +4982,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 838308300, @@ -4455,7 +5001,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 838831151, @@ -4464,7 +5012,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 839738457, @@ -4473,7 +5023,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 844440409, @@ -4482,7 +5034,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 850280505, @@ -4510,7 +5064,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 853471967, @@ -4536,7 +5092,15 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 854447607, @@ -4545,7 +5109,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 858486327, @@ -4554,7 +5120,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 861513346, @@ -4563,7 +5131,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 866332017, @@ -4589,7 +5159,9 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 866889860, @@ -4626,7 +5198,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": 878301596, @@ -4635,7 +5215,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 882559853, @@ -4644,7 +5226,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 884424049, @@ -4690,7 +5274,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 888415708, @@ -4718,7 +5304,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 895374329, @@ -4755,7 +5349,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 912235912, @@ -4764,7 +5360,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 915408809, @@ -4786,7 +5384,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 920930831, @@ -4795,7 +5395,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 924598634, @@ -4804,7 +5406,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 926800282, @@ -4832,7 +5436,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 935606207, @@ -4864,7 +5470,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 935692442, @@ -4892,7 +5500,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 936496778, @@ -4920,6 +5530,22 @@ }, "research": { "scrap": 75 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 8, + "quantityMax": 25 + } + ] } }, { @@ -4948,7 +5574,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 960673498, @@ -4974,7 +5602,15 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 962186730, @@ -5020,7 +5656,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 7200, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 963400638, @@ -5029,7 +5673,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 963906841, @@ -5057,7 +5703,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 968019378, @@ -5083,7 +5731,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 968421290, @@ -5109,7 +5759,15 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 969768382, @@ -5118,7 +5776,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 971362526, @@ -5127,7 +5787,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 972302244, @@ -5136,7 +5798,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 975983052, @@ -5162,7 +5826,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 980333378, @@ -5190,7 +5856,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 988652725, @@ -5227,7 +5895,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 989925924, @@ -5236,7 +5906,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 992944937, @@ -5245,7 +5917,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 996293980, @@ -5254,7 +5928,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 996757362, @@ -5263,7 +5939,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 998894949, @@ -5272,7 +5950,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 999690781, @@ -5289,7 +5969,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1004843240, @@ -5298,7 +5980,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1015352446, @@ -5307,7 +5991,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1023919015, @@ -5316,7 +6002,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1028889957, @@ -5325,7 +6013,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1036321299, @@ -5334,7 +6024,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1044081720, @@ -5343,7 +6035,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1046904719, @@ -5352,7 +6046,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1052926200, @@ -5361,7 +6057,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1055319033, @@ -5383,7 +6081,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1058261682, @@ -5418,7 +6118,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1065594600, @@ -5427,7 +6129,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1072924620, @@ -5455,7 +6159,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1079279582, @@ -5501,7 +6207,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1081315464, @@ -5536,7 +6244,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1081921512, @@ -5545,7 +6255,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1090916276, @@ -5567,7 +6279,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1094293920, @@ -5576,7 +6290,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1099314009, @@ -5613,7 +6329,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": 1099611828, @@ -5622,7 +6346,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1103488722, @@ -5644,7 +6370,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1104520648, @@ -5690,7 +6418,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1107575710, @@ -5717,7 +6447,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1110385766, @@ -5763,7 +6495,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": 1112162468, @@ -5772,7 +6506,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1113514903, @@ -5781,7 +6517,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1115193056, @@ -5790,7 +6528,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1121416193, @@ -5799,7 +6539,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1121925526, @@ -5808,7 +6550,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1127417055, @@ -5817,7 +6561,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1130729138, @@ -5826,7 +6572,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1132603396, @@ -5861,7 +6609,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1142993169, @@ -5889,7 +6639,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1145722690, @@ -5898,7 +6650,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1149964039, @@ -5935,7 +6689,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1153652756, @@ -5963,7 +6719,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1158340331, @@ -5991,7 +6749,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1158340332, @@ -6019,7 +6779,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1158340334, @@ -6047,7 +6809,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1159991980, @@ -6075,7 +6839,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1160881421, @@ -6103,7 +6869,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": 1168856825, @@ -6149,7 +6923,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1168916338, @@ -6158,7 +6934,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1171735914, @@ -6186,7 +6964,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1174484438, @@ -6195,7 +6975,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1174957864, @@ -6204,7 +6986,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1176355476, @@ -6213,7 +6997,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1177596584, @@ -6259,6 +7045,27 @@ }, "research": { "scrap": 125 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 600 + }, + "upkeep": { + "entries": [ + { + "itemId": 317398316, + "quantityMin": 1, + "quantityMax": 1 + }, + { + "itemId": 69511070, + "quantityMin": 20, + "quantityMax": 67 + } + ] } }, { @@ -6268,7 +7075,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1181207482, @@ -6305,7 +7114,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1184215560, @@ -6314,7 +7125,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1186655046, @@ -6351,7 +7164,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1189981699, @@ -6360,7 +7175,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1199391518, @@ -6397,7 +7214,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1205084994, @@ -6423,7 +7242,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1205607945, @@ -6449,7 +7270,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1221063409, @@ -6486,6 +7309,22 @@ }, "research": { "scrap": 500 + }, + "decay": { + "seconds": 43200, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 1000 + }, + "upkeep": { + "entries": [ + { + "itemId": 317398316, + "quantityMin": 3, + "quantityMax": 8 + } + ] } }, { @@ -6495,7 +7334,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1223900335, @@ -6504,7 +7345,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1230323789, @@ -6526,7 +7369,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1230691307, @@ -6535,7 +7380,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1234878710, @@ -6581,7 +7428,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 150 + }, + "upkeep": null }, { "id": 1234880403, @@ -6618,7 +7473,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1242482355, @@ -6644,7 +7501,15 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 1242522330, @@ -6670,7 +7535,15 @@ "timeSeconds": 15.625, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 1248356124, @@ -6716,7 +7589,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": 1248383659, @@ -6725,7 +7600,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1254295946, @@ -6734,7 +7611,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1258768145, @@ -6743,7 +7622,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1259919256, @@ -6780,7 +7661,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": 1263920163, @@ -6817,7 +7706,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1266491000, @@ -6863,7 +7754,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1268178466, @@ -6889,7 +7782,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1272194103, @@ -6898,7 +7793,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1272430949, @@ -6933,7 +7830,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1272768630, @@ -6942,7 +7841,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1277159544, @@ -6951,7 +7852,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1285226495, @@ -6960,7 +7863,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1293102274, @@ -6988,7 +7893,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1295301598, @@ -6997,7 +7904,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1296788329, @@ -7043,7 +7952,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1305578813, @@ -7069,7 +7980,9 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1305765685, @@ -7078,7 +7991,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1307626005, @@ -7113,7 +8028,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 300 + }, + "upkeep": null }, { "id": 1312679249, @@ -7122,7 +8045,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1312843609, @@ -7131,7 +8056,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1315082560, @@ -7166,7 +8093,9 @@ "timeSeconds": 3.125, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1318558775, @@ -7212,7 +8141,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": 1319617282, @@ -7221,7 +8152,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1324203999, @@ -7265,7 +8198,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1326180354, @@ -7302,7 +8237,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1327005675, @@ -7319,7 +8256,15 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": 1330084809, @@ -7347,7 +8292,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1346158228, @@ -7369,7 +8316,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1348294923, @@ -7378,7 +8327,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1350707894, @@ -7387,7 +8338,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1353298668, @@ -7424,11 +8377,27 @@ }, "research": { "scrap": 500 - } - }, - { - "id": 1358643074, - "name": "Snow Machine", + }, + "decay": { + "seconds": 43200, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 1000 + }, + "upkeep": { + "entries": [ + { + "itemId": 317398316, + "quantityMin": 2, + "quantityMax": 7 + } + ] + } + }, + { + "id": 1358643074, + "name": "Snow Machine", "stackSize": 1, "despawnSeconds": 300, "recycle": { @@ -7468,7 +8437,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1361520181, @@ -7494,7 +8465,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 1364514421, @@ -7503,7 +8482,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1365234594, @@ -7512,7 +8493,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1366282552, @@ -7549,7 +8532,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1367190888, @@ -7558,7 +8543,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1371909803, @@ -7595,7 +8582,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": 1373240771, @@ -7623,7 +8618,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 900, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 120 + }, + "upkeep": null }, { "id": 1373971859, @@ -7669,7 +8672,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1376065505, @@ -7706,7 +8711,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1381010055, @@ -7715,7 +8722,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1382263453, @@ -7761,7 +8770,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 400 + }, + "upkeep": null }, { "id": 1390353317, @@ -7787,7 +8804,23 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 20, + "quantityMax": 67 + } + ] + } }, { "id": 1391703481, @@ -7796,7 +8829,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1394042569, @@ -7805,7 +8840,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1397052267, @@ -7814,7 +8851,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1400460850, @@ -7840,7 +8879,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1401987718, @@ -7864,7 +8905,9 @@ "craft": null, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1409529282, @@ -7886,7 +8929,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1412103380, @@ -7895,7 +8940,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1413014235, @@ -7923,7 +8970,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": 1414245162, @@ -7951,7 +9006,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1414245519, @@ -7960,7 +9017,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1414245522, @@ -7977,7 +9036,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1420547167, @@ -7986,7 +9047,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1422530437, @@ -7995,7 +9058,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1424075905, @@ -8023,7 +9088,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1426097945, @@ -8032,7 +9099,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1426574435, @@ -8041,7 +9110,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1428574144, @@ -8050,7 +9121,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1430085198, @@ -8087,7 +9160,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1443579727, @@ -8124,7 +9199,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1447138977, @@ -8133,7 +9210,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1451568081, @@ -8161,6 +9240,22 @@ }, "research": { "scrap": 20 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 75 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 8, + "quantityMax": 25 + } + ] } }, { @@ -8170,7 +9265,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1463862472, @@ -8179,7 +9276,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1465782238, @@ -8188,7 +9287,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1467878256, @@ -8197,7 +9298,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1478091698, @@ -8225,7 +9328,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1480022580, @@ -8234,7 +9339,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1482871705, @@ -8243,7 +9350,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1488606552, @@ -8252,7 +9361,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1488979457, @@ -8279,7 +9390,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1491189398, @@ -8325,7 +9438,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1491753484, @@ -8352,7 +9467,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1494014226, @@ -8361,7 +9478,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1512054436, @@ -8370,7 +9489,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1516531815, @@ -8379,7 +9500,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1516985844, @@ -8407,7 +9530,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 10800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 1521286012, @@ -8433,7 +9564,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1523195708, @@ -8460,7 +9593,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1523403414, @@ -8486,7 +9621,9 @@ "timeSeconds": 3.125, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1524187186, @@ -8525,7 +9662,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": 1524980732, @@ -8551,7 +9696,9 @@ "timeSeconds": 0.625, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1525520776, @@ -8579,7 +9726,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1533551194, @@ -8588,7 +9737,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1534542921, @@ -8625,7 +9776,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1536610005, @@ -8634,7 +9787,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1538126328, @@ -8662,7 +9817,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1540934679, @@ -8690,7 +9847,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1542290441, @@ -8716,7 +9875,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1545779598, @@ -8771,7 +9932,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": 1548091822, @@ -8780,7 +9943,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1553078977, @@ -8789,7 +9954,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1556365900, @@ -8826,7 +9993,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1557173737, @@ -8835,7 +10004,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1559779253, @@ -8872,7 +10043,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1559915778, @@ -8894,7 +10067,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1561022037, @@ -8903,7 +10078,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1562867678, @@ -8912,7 +10089,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1568388703, @@ -8921,7 +10100,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1569882109, @@ -8958,7 +10139,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1572152877, @@ -8967,7 +10150,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1575635062, @@ -8984,7 +10169,15 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": 1578317134, @@ -8993,7 +10186,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1581210395, @@ -9030,7 +10225,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": 1586884551, @@ -9039,7 +10242,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1588298435, @@ -9094,7 +10299,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": 1588492232, @@ -9131,7 +10338,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1601468620, @@ -9148,7 +10357,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1601800933, @@ -9157,7 +10368,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1602646136, @@ -9194,7 +10407,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1603174987, @@ -9216,7 +10431,15 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 1604092540, @@ -9225,7 +10448,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1604837581, @@ -9234,7 +10459,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1608640313, @@ -9262,7 +10489,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1609921845, @@ -9271,7 +10500,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1614528785, @@ -9298,7 +10529,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1619039771, @@ -9326,7 +10559,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 1621942085, @@ -9335,7 +10576,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1623701499, @@ -9361,7 +10604,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1629293099, @@ -9405,7 +10650,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": 1629564540, @@ -9414,7 +10667,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1633553557, @@ -9423,7 +10678,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1638322904, @@ -9469,7 +10726,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1643667218, @@ -9504,7 +10763,9 @@ "timeSeconds": 11.25, "workbenchLevel": 2 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1655650836, @@ -9541,7 +10802,15 @@ }, "research": { "scrap": 125 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 600 + }, + "upkeep": null }, { "id": 1655979682, @@ -9558,7 +10827,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1658229558, @@ -9595,7 +10866,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 1659114910, @@ -9612,7 +10891,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1659447559, @@ -9649,7 +10930,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1660145984, @@ -9658,7 +10941,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1668129151, @@ -9667,7 +10952,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1668858301, @@ -9676,7 +10963,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1673224590, @@ -9685,7 +10974,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1675639563, @@ -9713,7 +11004,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1680793490, @@ -9722,7 +11015,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1686524871, @@ -9739,7 +11034,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1691223771, @@ -9748,7 +11045,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1696050067, @@ -9794,7 +11093,15 @@ }, "research": { "scrap": 125 - } + }, + "decay": { + "seconds": 57600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": 1697996440, @@ -9820,7 +11127,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1711033574, @@ -9848,7 +11157,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1712070256, @@ -9885,7 +11196,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1712261904, @@ -9894,7 +11207,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1714496074, @@ -9931,7 +11246,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1714509152, @@ -9940,7 +11257,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1717250161, @@ -9949,7 +11268,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1719587208, @@ -9958,7 +11279,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1719978075, @@ -9967,7 +11290,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1722154847, @@ -9995,7 +11320,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1723747470, @@ -10017,7 +11344,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1729120840, @@ -10043,7 +11372,23 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 10800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": { + "entries": [ + { + "itemId": -151838493, + "quantityMin": 30, + "quantityMax": 100 + } + ] + } }, { "id": 1729374708, @@ -10052,7 +11397,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1729712564, @@ -10078,7 +11425,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1730664641, @@ -10087,7 +11436,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1732236518, @@ -10096,7 +11447,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1735402444, @@ -10105,7 +11458,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1736620421, @@ -10114,7 +11469,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1744298439, @@ -10158,7 +11515,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1746956556, @@ -10195,7 +11554,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1751045826, @@ -10232,7 +11593,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1757265204, @@ -10241,7 +11604,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1758333838, @@ -10250,7 +11615,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1762167092, @@ -10259,7 +11626,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1768112091, @@ -10268,7 +11637,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1769475390, @@ -10277,7 +11648,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1770475779, @@ -10286,7 +11659,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1770744540, @@ -10295,7 +11670,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1771755747, @@ -10304,7 +11681,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1776460938, @@ -10313,7 +11692,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1783512007, @@ -10322,7 +11703,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1784005657, @@ -10331,7 +11714,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1784406797, @@ -10357,7 +11742,9 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1787198294, @@ -10366,7 +11753,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1789825282, @@ -10375,7 +11764,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1796682209, @@ -10421,7 +11812,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1801656689, @@ -10430,7 +11823,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1803831286, @@ -10465,7 +11860,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1811780502, @@ -10474,7 +11871,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1814288539, @@ -10502,7 +11901,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1819863051, @@ -10537,7 +11938,15 @@ "timeSeconds": 1.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 1827479659, @@ -10546,7 +11955,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1831249347, @@ -10555,7 +11966,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1835946060, @@ -10572,7 +11985,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1840570710, @@ -10616,7 +12031,15 @@ "timeSeconds": 37.5, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 600 + }, + "upkeep": null }, { "id": 1840822026, @@ -10653,7 +12076,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1846605708, @@ -10662,7 +12087,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1849409072, @@ -10671,7 +12098,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1849887541, @@ -10708,7 +12137,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1850456855, @@ -10754,7 +12185,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1856217390, @@ -10776,7 +12209,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1858828593, @@ -10785,7 +12220,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1865253052, @@ -10811,7 +12248,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1869224826, @@ -10820,7 +12259,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1873004466, @@ -10829,7 +12270,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1873897110, @@ -10838,7 +12281,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1874610722, @@ -10875,7 +12320,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 1877339384, @@ -10903,7 +12350,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1878053256, @@ -10912,7 +12361,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1882709339, @@ -10949,7 +12400,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1883981798, @@ -10977,7 +12430,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1883981800, @@ -11005,7 +12460,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1883981801, @@ -11033,7 +12490,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1884461210, @@ -11042,7 +12501,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1885488976, @@ -11086,7 +12547,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 1892536031, @@ -11095,7 +12564,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1895235349, @@ -11121,7 +12592,9 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1898094925, @@ -11130,7 +12603,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1899610628, @@ -11139,7 +12614,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1903654061, @@ -11174,7 +12651,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 1905387657, @@ -11183,7 +12668,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1911552868, @@ -11192,7 +12679,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1914691295, @@ -11224,7 +12713,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1916016738, @@ -11233,7 +12724,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1917703890, @@ -11242,7 +12735,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1925646349, @@ -11251,7 +12746,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1931713481, @@ -11260,7 +12757,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1933140008, @@ -11269,7 +12768,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1937380239, @@ -11278,7 +12779,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1946219319, @@ -11306,7 +12809,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": 1948067030, @@ -11352,6 +12863,22 @@ }, "research": { "scrap": 125 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 30, + "quantityMax": 100 + } + ] } }, { @@ -11361,7 +12888,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1950721418, @@ -11389,7 +12918,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1951603367, @@ -11417,7 +12948,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": 1953903201, @@ -11452,7 +12985,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1954597876, @@ -11461,7 +12996,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1965232394, @@ -11507,7 +13044,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1973165031, @@ -11516,7 +13055,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1973684065, @@ -11525,7 +13066,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1973949960, @@ -11560,7 +13103,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1975934948, @@ -11615,7 +13160,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": 1983621560, @@ -11643,6 +13190,22 @@ }, "research": { "scrap": 75 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 8, + "quantityMax": 25 + } + ] } }, { @@ -11671,7 +13234,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 1991794121, @@ -11680,7 +13245,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 1992974553, @@ -11708,7 +13275,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 1993693904, @@ -11717,7 +13286,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2005491391, @@ -11745,7 +13316,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": 2009734114, @@ -11771,7 +13344,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2019042823, @@ -11788,7 +13363,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2021351233, @@ -11797,7 +13374,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2023888403, @@ -11834,7 +13413,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 2024467711, @@ -11843,7 +13424,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2036395619, @@ -11852,7 +13435,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2039177180, @@ -11861,7 +13446,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2040726127, @@ -11898,7 +13485,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": 2041899972, @@ -11944,6 +13533,22 @@ }, "research": { "scrap": 125 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 30, + "quantityMax": 100 + } + ] } }, { @@ -11953,7 +13558,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2048317869, @@ -11962,7 +13569,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2052270186, @@ -11971,7 +13580,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2054391128, @@ -11980,7 +13591,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2054929933, @@ -11989,7 +13602,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2055695285, @@ -11998,7 +13613,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2063916636, @@ -12007,7 +13624,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2068884361, @@ -12042,7 +13661,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2070189026, @@ -12086,7 +13707,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 300 + }, + "upkeep": null }, { "id": 2083256995, @@ -12095,7 +13724,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2087678962, @@ -12132,7 +13763,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 150 + }, + "upkeep": null }, { "id": 2090395347, @@ -12169,7 +13808,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 2100007442, @@ -12197,7 +13844,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 2104517339, @@ -12232,7 +13887,15 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": 2106561762, @@ -12254,7 +13917,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2114754781, @@ -12300,7 +13965,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": 2120241887, @@ -12309,7 +13976,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2126889441, @@ -12335,7 +14004,9 @@ "timeSeconds": 0.625, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2130820932, @@ -12344,7 +14015,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2130820933, @@ -12353,7 +14026,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": 2133269020, @@ -12362,7 +14037,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -226151558, @@ -12371,7 +14048,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -866121090, @@ -12380,7 +14059,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -831725027, @@ -12389,7 +14070,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -935322684, @@ -12398,7 +14081,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1467876094, @@ -12407,7 +14092,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -880494890, @@ -12416,7 +14103,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -919882824, @@ -12425,7 +14114,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1896395719, @@ -12434,7 +14125,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1498613415, @@ -12443,7 +14136,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -652889722, @@ -12452,7 +14147,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -334418777, @@ -12461,7 +14158,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1385721419, @@ -12470,7 +14169,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2097376851, @@ -12498,7 +14199,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -1691396643, @@ -12535,7 +14238,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1321651331, @@ -12581,7 +14286,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1211166256, @@ -12618,7 +14325,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -742865266, @@ -12664,7 +14373,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1841918730, @@ -12701,7 +14412,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1843426638, @@ -12723,7 +14436,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -384243979, @@ -12760,7 +14475,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -17123659, @@ -12787,7 +14504,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1036635990, @@ -12833,7 +14552,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1685290200, @@ -12870,7 +14591,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -727717969, @@ -12907,7 +14630,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1432674913, @@ -12916,7 +14641,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -601133933, @@ -12925,7 +14652,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1023065463, @@ -12962,7 +14691,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -1234735557, @@ -12999,7 +14730,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -1622110948, @@ -13026,7 +14759,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1266045928, @@ -13043,7 +14778,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1004426654, @@ -13060,7 +14797,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -747743875, @@ -13095,7 +14834,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1773144852, @@ -13123,7 +14864,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -1506417026, @@ -13158,7 +14901,9 @@ "timeSeconds": 0.625, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -324675402, @@ -13175,7 +14920,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -842267147, @@ -13201,7 +14948,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2139580305, @@ -13247,7 +14996,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": -262590403, @@ -13284,7 +15035,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -19318653, @@ -13293,7 +15046,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1987565603, @@ -13302,7 +15057,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1127003365, @@ -13311,7 +15068,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -357442017, @@ -13320,7 +15079,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -759279626, @@ -13329,7 +15090,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1652561344, @@ -13338,7 +15101,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2072273936, @@ -13366,7 +15131,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -1215166612, @@ -13375,7 +15142,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1950721390, @@ -13403,7 +15172,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 900, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -424687710, @@ -13412,7 +15189,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -559599960, @@ -13449,7 +15228,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 900, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": -143481979, @@ -13458,7 +15245,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1274093662, @@ -13484,7 +15273,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": -479314201, @@ -13493,7 +15290,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -187304968, @@ -13502,7 +15301,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -321431890, @@ -13537,7 +15338,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1621539785, @@ -13572,7 +15375,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 14400, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": -8312704, @@ -13598,7 +15409,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 43200, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": -576866254, @@ -13607,7 +15426,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1220928936, @@ -13616,7 +15437,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -989755543, @@ -13625,7 +15448,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1520560807, @@ -13634,7 +15459,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1273339005, @@ -13680,7 +15507,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1318837358, @@ -13689,7 +15518,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2095813057, @@ -13698,7 +15529,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -851288382, @@ -13707,7 +15540,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -586342290, @@ -13716,7 +15551,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -996920608, @@ -13725,7 +15562,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -880412831, @@ -13734,7 +15573,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -321247698, @@ -13743,7 +15584,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1478094705, @@ -13778,7 +15621,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1113501606, @@ -13822,7 +15667,15 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": -1000573653, @@ -13848,7 +15701,9 @@ "timeSeconds": 0.625, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -180129657, @@ -13876,7 +15731,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 150 + }, + "upkeep": null }, { "id": -761829530, @@ -13904,7 +15767,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -700591459, @@ -13913,7 +15778,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1557377697, @@ -13930,7 +15797,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1941646328, @@ -13939,7 +15808,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -34498533, @@ -13948,7 +15819,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -411735114, @@ -13957,7 +15830,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -912398867, @@ -13983,7 +15858,9 @@ "timeSeconds": 3.125, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1827561369, @@ -13992,7 +15869,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -484006286, @@ -14001,7 +15880,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -463012608, @@ -14010,7 +15891,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1944704288, @@ -14019,7 +15902,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1938052175, @@ -14028,7 +15913,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1848736516, @@ -14037,7 +15924,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -152332823, @@ -14072,7 +15961,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1440987069, @@ -14081,7 +15972,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -751151717, @@ -14090,7 +15983,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2018158920, @@ -14099,7 +15994,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1916473915, @@ -14134,7 +16031,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": -770304148, @@ -14169,7 +16074,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": -965336208, @@ -14178,7 +16091,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -105343718, @@ -14187,7 +16102,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -778875547, @@ -14196,7 +16113,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1305326964, @@ -14205,7 +16124,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -886280491, @@ -14214,7 +16135,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -798662404, @@ -14223,7 +16146,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -19360132, @@ -14232,7 +16157,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -858312878, @@ -14241,7 +16168,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -606898372, @@ -14250,7 +16179,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -903796529, @@ -14259,7 +16190,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -593892112, @@ -14268,7 +16201,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -582467439, @@ -14277,7 +16212,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -24571537, @@ -14286,7 +16223,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -803263829, @@ -14332,7 +16271,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1247485104, @@ -14341,7 +16282,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1593678393, @@ -14350,7 +16293,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -413663149, @@ -14359,7 +16304,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1998423571, @@ -14368,7 +16315,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -544295594, @@ -14377,7 +16326,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -800824218, @@ -14386,7 +16337,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -10594280, @@ -14395,7 +16348,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1488398114, @@ -14432,7 +16387,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -1588628467, @@ -14487,7 +16450,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1360171080, @@ -14496,7 +16461,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1260229965, @@ -14505,7 +16472,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1081599445, @@ -14514,7 +16483,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1796837031, @@ -14523,7 +16494,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -321733511, @@ -14532,7 +16505,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -97956382, @@ -14560,7 +16535,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": -963819285, @@ -14569,7 +16552,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -594596146, @@ -14578,7 +16563,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -274709858, @@ -14587,7 +16574,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1903165497, @@ -14624,7 +16613,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -78533081, @@ -14633,7 +16624,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1509851560, @@ -14642,7 +16635,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2035449523, @@ -14651,7 +16646,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -113413047, @@ -14668,7 +16665,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1559420426, @@ -14677,7 +16676,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2022172587, @@ -14699,7 +16700,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1101924344, @@ -14716,7 +16719,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -451310088, @@ -14725,7 +16730,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1151332840, @@ -14751,7 +16758,23 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 10800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": { + "entries": [ + { + "itemId": -151838493, + "quantityMin": 20, + "quantityMax": 67 + } + ] + } }, { "id": -1336109173, @@ -14779,6 +16802,22 @@ }, "research": { "scrap": 10 + }, + "decay": { + "seconds": 10800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": { + "entries": [ + { + "itemId": -151838493, + "quantityMin": 35, + "quantityMax": 117 + } + ] } }, { @@ -14788,7 +16827,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2067472972, @@ -14816,6 +16857,22 @@ }, "research": { "scrap": 10 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 15, + "quantityMax": 50 + } + ] } }, { @@ -14833,7 +16890,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -258574361, @@ -14855,7 +16914,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -854270928, @@ -14881,7 +16942,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1519126340, @@ -14909,7 +16972,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1330640246, @@ -14944,7 +17009,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1779203452, @@ -14953,7 +17020,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1002156085, @@ -14962,7 +17031,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -126305173, @@ -14971,7 +17042,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -979302481, @@ -14997,7 +17070,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -692338819, @@ -15025,7 +17100,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -690968985, @@ -15053,7 +17130,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1778897469, @@ -15081,7 +17160,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1510616686, @@ -15090,7 +17171,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -216999575, @@ -15118,7 +17201,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": -502177121, @@ -15146,7 +17237,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -939424778, @@ -15174,7 +17267,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1196547867, @@ -15211,7 +17306,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -295829489, @@ -15243,7 +17346,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1507239837, @@ -15271,7 +17376,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -784870360, @@ -15299,7 +17406,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -44876289, @@ -15327,7 +17436,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": -798293154, @@ -15355,7 +17472,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1286302544, @@ -15383,7 +17502,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -2049214035, @@ -15429,7 +17550,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1044468317, @@ -15457,7 +17580,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": -948291630, @@ -15494,7 +17625,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": -282113991, @@ -15516,7 +17655,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -563624462, @@ -15544,7 +17685,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1258821205, @@ -15553,7 +17696,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2134097299, @@ -15562,7 +17707,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -781014061, @@ -15590,7 +17737,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": -1448252298, @@ -15618,7 +17773,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -458565393, @@ -15646,7 +17803,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -746647361, @@ -15674,7 +17833,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1878475007, @@ -15720,7 +17881,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -592016202, @@ -15775,7 +17938,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": -1018587433, @@ -15784,7 +17949,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -930193596, @@ -15793,7 +17960,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1535621066, @@ -15830,7 +17999,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -656349006, @@ -15874,7 +18051,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -7270019, @@ -15918,7 +18097,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -379734527, @@ -15962,7 +18143,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1553999294, @@ -16006,7 +18189,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -280223496, @@ -16050,7 +18235,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -515830359, @@ -16085,7 +18272,9 @@ "timeSeconds": 37.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1306288356, @@ -16120,7 +18309,9 @@ "timeSeconds": 37.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1486461488, @@ -16155,7 +18346,9 @@ "timeSeconds": 37.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -99886070, @@ -16190,7 +18383,9 @@ "timeSeconds": 37.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -454370658, @@ -16225,7 +18420,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1538109120, @@ -16260,7 +18457,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -587989372, @@ -16269,7 +18468,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1698937385, @@ -16278,7 +18479,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -542577259, @@ -16287,7 +18490,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1904821376, @@ -16296,7 +18501,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -851988960, @@ -16305,7 +18512,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1654233406, @@ -16314,7 +18523,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1768880890, @@ -16323,7 +18534,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1878764039, @@ -16332,7 +18545,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1707425764, @@ -16341,7 +18556,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1913996738, @@ -16367,7 +18584,15 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 75 + }, + "upkeep": null }, { "id": -1215753368, @@ -16422,7 +18647,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -196667575, @@ -16450,7 +18677,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -478923685, @@ -16459,7 +18688,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -265292885, @@ -16487,7 +18718,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1166712463, @@ -16515,7 +18748,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1973785141, @@ -16559,7 +18794,15 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": -1647389398, @@ -16568,7 +18811,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -134959124, @@ -16595,7 +18840,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1624770297, @@ -16622,7 +18869,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1732475823, @@ -16649,7 +18898,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -297099594, @@ -16676,7 +18927,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2024549027, @@ -16703,7 +18956,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2107018088, @@ -16738,7 +18993,9 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1530414568, @@ -16764,7 +19021,9 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1049881973, @@ -16790,7 +19049,9 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2040817543, @@ -16825,7 +19086,9 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2124352573, @@ -16862,7 +19125,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -979951147, @@ -16897,7 +19162,9 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1379036069, @@ -16923,7 +19190,9 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1999722522, @@ -16969,7 +19238,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -1992717673, @@ -17015,7 +19292,15 @@ }, "research": { "scrap": 125 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 1500 + }, + "upkeep": null }, { "id": -629028935, @@ -17032,7 +19317,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -401905610, @@ -17041,7 +19328,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1442339204, @@ -17050,7 +19339,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -691113464, @@ -17087,7 +19378,15 @@ }, "research": { "scrap": 500 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -335089230, @@ -17124,7 +19423,15 @@ }, "research": { "scrap": 125 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -379403794, @@ -17133,7 +19440,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1819763926, @@ -17188,7 +19497,15 @@ }, "research": { "scrap": 125 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": -1043618880, @@ -17210,7 +19527,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -695124222, @@ -17236,7 +19555,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": -558880549, @@ -17245,7 +19572,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -690276911, @@ -17254,7 +19583,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1899491405, @@ -17263,7 +19594,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -996235148, @@ -17272,7 +19605,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1901993050, @@ -17281,7 +19616,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1836526520, @@ -17290,7 +19627,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1528767189, @@ -17299,7 +19638,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1430299277, @@ -17308,7 +19649,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1322332389, @@ -17317,7 +19660,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1804515496, @@ -17326,7 +19671,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1444650226, @@ -17335,7 +19682,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -746030907, @@ -17344,7 +19693,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -455286320, @@ -17353,7 +19704,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -936921910, @@ -17390,7 +19743,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -568419968, @@ -17399,7 +19754,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -265876753, @@ -17436,7 +19793,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -246672609, @@ -17471,7 +19830,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -849373693, @@ -17497,7 +19858,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -52398594, @@ -17523,7 +19886,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -96256997, @@ -17558,7 +19923,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1989600732, @@ -17586,7 +19953,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1923843855, @@ -17595,7 +19964,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -888153050, @@ -17604,7 +19975,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1785231475, @@ -17639,7 +20012,9 @@ "timeSeconds": 0.625, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1506397857, @@ -17676,7 +20051,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -839576748, @@ -17704,7 +20081,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -23994173, @@ -17730,7 +20109,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1022661119, @@ -17756,7 +20137,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -22883916, @@ -17791,7 +20174,9 @@ "timeSeconds": 3.125, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -418359052, @@ -17800,7 +20185,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1539025626, @@ -17846,7 +20233,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -986782031, @@ -17881,7 +20270,9 @@ "timeSeconds": 3.125, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1314079879, @@ -17890,7 +20281,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -507248640, @@ -17899,7 +20292,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1478212975, @@ -17936,7 +20331,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -1252059217, @@ -17973,7 +20370,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -902423513, @@ -17982,7 +20381,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -470439097, @@ -17991,7 +20392,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -797592358, @@ -18000,7 +20403,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -105415879, @@ -18009,7 +20414,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -560304835, @@ -18018,7 +20425,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -253079493, @@ -18027,7 +20436,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1937799374, @@ -18036,7 +20447,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1958316066, @@ -18063,7 +20476,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1696379844, @@ -18089,7 +20504,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2123125470, @@ -18098,7 +20515,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -929092070, @@ -18107,7 +20526,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1677315902, @@ -18116,7 +20537,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1102429027, @@ -18153,7 +20576,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1778159885, @@ -18190,7 +20615,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -722629980, @@ -18216,7 +20643,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1214542497, @@ -18271,7 +20700,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": -1442559428, @@ -18297,7 +20728,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": -218009552, @@ -18352,7 +20791,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1513203236, @@ -18361,7 +20802,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2068194497, @@ -18370,7 +20813,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1323101799, @@ -18392,7 +20837,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1997543660, @@ -18409,7 +20856,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1211268013, @@ -18435,7 +20884,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1579932985, @@ -18444,7 +20895,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1162759543, @@ -18453,7 +20906,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1130350864, @@ -18462,7 +20917,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -724146494, @@ -18471,7 +20928,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1982036270, @@ -18480,7 +20939,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -682687162, @@ -18489,7 +20950,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1709878924, @@ -18498,7 +20961,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -869598982, @@ -18524,7 +20989,15 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 75 + }, + "upkeep": null }, { "id": -1780802565, @@ -18561,7 +21034,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1160621614, @@ -18587,7 +21062,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -697981032, @@ -18622,7 +21099,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1163532624, @@ -18659,7 +21138,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -48090175, @@ -18696,7 +21177,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1824943010, @@ -18722,7 +21205,15 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 86400, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": -97459906, @@ -18739,7 +21230,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -874908751, @@ -18748,7 +21241,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -484206264, @@ -18757,7 +21252,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1880870149, @@ -18766,7 +21263,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -194509282, @@ -18783,7 +21282,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2073432256, @@ -18809,7 +21310,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -427072335, @@ -18818,7 +21321,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -945708533, @@ -18827,7 +21332,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1770281406, @@ -18836,7 +21343,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -420889602, @@ -18845,7 +21354,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -874650016, @@ -18854,7 +21365,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -316250604, @@ -18891,7 +21404,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -907422733, @@ -18918,7 +21433,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -489848205, @@ -18953,7 +21470,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1440443161, @@ -18962,7 +21481,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -73195037, @@ -18971,7 +21492,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1310391395, @@ -18980,7 +21503,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1294739579, @@ -18989,7 +21514,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -389796733, @@ -18998,7 +21525,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2069578888, @@ -19030,7 +21559,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -850982208, @@ -19058,7 +21589,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -110921842, @@ -19095,7 +21628,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -2027988285, @@ -19104,7 +21645,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1469578201, @@ -19141,7 +21684,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -946369541, @@ -19178,7 +21723,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -763071910, @@ -19200,7 +21747,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -399173933, @@ -19209,7 +21758,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1961560162, @@ -19231,7 +21782,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2026042603, @@ -19240,7 +21793,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1966748496, @@ -19277,7 +21832,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1137865085, @@ -19314,7 +21871,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -586784898, @@ -19351,7 +21910,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 300 + }, + "upkeep": null }, { "id": -1035206446, @@ -19360,7 +21927,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2012470695, @@ -19388,7 +21957,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -702051347, @@ -19414,7 +21985,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1184406448, @@ -19423,7 +21996,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -242084766, @@ -19432,7 +22007,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -380502678, @@ -19441,7 +22018,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1654401345, @@ -19450,7 +22029,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -583379016, @@ -19485,7 +22066,9 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1334569149, @@ -19494,7 +22077,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -194953424, @@ -19540,7 +22125,9 @@ }, "research": { "scrap": 500 - } + }, + "decay": null, + "upkeep": null }, { "id": -4031221, @@ -19549,7 +22136,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1478855279, @@ -19558,7 +22147,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1021495308, @@ -19595,7 +22186,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1334255764, @@ -19604,7 +22197,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -482348853, @@ -19613,7 +22208,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1130709577, @@ -19622,7 +22219,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1449152644, @@ -19631,7 +22230,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -20045316, @@ -19657,7 +22258,9 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1417478274, @@ -19666,7 +22269,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2047081330, @@ -19692,7 +22297,9 @@ "timeSeconds": 0.625, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -648077743, @@ -19701,7 +22308,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1123473824, @@ -19723,7 +22332,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1962971928, @@ -19732,7 +22343,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -961457160, @@ -19767,7 +22380,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1518883088, @@ -19804,7 +22419,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1811234677, @@ -19813,7 +22430,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -282193997, @@ -19822,7 +22441,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2133781216, @@ -19831,7 +22452,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -733625651, @@ -19866,7 +22489,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": -1039234836, @@ -19875,7 +22506,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -707792719, @@ -19884,7 +22517,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1014934560, @@ -19893,7 +22528,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1695367501, @@ -19921,7 +22558,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1779183908, @@ -19938,7 +22577,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -575744869, @@ -19947,7 +22588,9 @@ "despawnSeconds": 30, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1302129395, @@ -19984,7 +22627,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1785248332, @@ -19993,7 +22638,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1488408786, @@ -20002,7 +22649,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -963820355, @@ -20011,7 +22660,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1442496789, @@ -20028,7 +22679,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -144513264, @@ -20054,7 +22707,9 @@ "timeSeconds": 0.625, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -75944661, @@ -20091,7 +22746,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -852563019, @@ -20123,7 +22780,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1815301988, @@ -20149,7 +22808,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -952411326, @@ -20158,7 +22819,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -280812482, @@ -20167,7 +22830,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -804769727, @@ -20176,7 +22841,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -430416124, @@ -20185,7 +22852,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1651220691, @@ -20194,7 +22863,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2086926071, @@ -20203,7 +22874,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -365097295, @@ -20249,7 +22922,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -892718768, @@ -20277,7 +22952,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1673693549, @@ -20314,7 +22991,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -567909622, @@ -20323,7 +23002,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1476814093, @@ -20332,7 +23013,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1386082991, @@ -20341,7 +23024,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -496584751, @@ -20350,7 +23035,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1729415579, @@ -20359,7 +23046,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -487356515, @@ -20368,7 +23057,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -33009419, @@ -20377,7 +23068,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -602717596, @@ -20386,7 +23079,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1861522751, @@ -20416,7 +23111,15 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": -544317637, @@ -20425,7 +23128,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -92315244, @@ -20434,7 +23139,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -566907190, @@ -20462,7 +23169,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -139037392, @@ -20471,7 +23180,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1335497659, @@ -20480,7 +23191,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -778367295, @@ -20512,7 +23225,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1812555177, @@ -20544,7 +23259,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -904863145, @@ -20599,7 +23316,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -348232115, @@ -20608,7 +23327,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -699558439, @@ -20654,7 +23375,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -2002277461, @@ -20700,7 +23423,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1315992997, @@ -20709,7 +23434,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1863063690, @@ -20735,7 +23462,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1104881824, @@ -20763,7 +23492,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1985799200, @@ -20791,7 +23522,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -173268129, @@ -20817,7 +23550,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -173268132, @@ -20843,7 +23578,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -173268131, @@ -20869,7 +23606,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -173268126, @@ -20895,7 +23634,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -173268125, @@ -20921,7 +23662,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -173268128, @@ -20947,7 +23690,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -173268127, @@ -20956,7 +23701,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -173268138, @@ -20965,7 +23712,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2110553371, @@ -20974,7 +23723,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1978999529, @@ -21011,7 +23762,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1009359066, @@ -21028,7 +23781,15 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": { + "seconds": 43200, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 1000 + }, + "upkeep": null }, { "id": -575483084, @@ -21037,7 +23798,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1772746857, @@ -21064,7 +23827,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -932201673, @@ -21073,7 +23838,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1094453063, @@ -21082,7 +23849,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1060567807, @@ -21091,7 +23860,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -498301781, @@ -21100,7 +23871,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1774190142, @@ -21109,7 +23882,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1244287686, @@ -21118,7 +23893,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1211801774, @@ -21127,7 +23904,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -82758111, @@ -21136,7 +23915,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1050697733, @@ -21145,7 +23926,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1380144986, @@ -21154,7 +23937,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -374457631, @@ -21163,7 +23948,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1776128552, @@ -21172,7 +23959,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -237809779, @@ -21181,7 +23970,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2084071424, @@ -21190,7 +23981,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1511285251, @@ -21199,7 +23992,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1037472336, @@ -21208,7 +24003,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1790885730, @@ -21217,7 +24014,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -992286106, @@ -21226,7 +24025,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -520133715, @@ -21235,7 +24036,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1994909036, @@ -21262,7 +24065,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2025184684, @@ -21290,7 +24095,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1549739227, @@ -21336,7 +24143,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -765183617, @@ -21373,7 +24182,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -41440462, @@ -21400,7 +24211,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1367281941, @@ -21437,7 +24250,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1536855921, @@ -21454,7 +24269,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1199897169, @@ -21482,6 +24299,22 @@ }, "research": { "scrap": 20 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 10, + "quantityMax": 33 + } + ] } }, { @@ -21510,6 +24343,22 @@ }, "research": { "scrap": 20 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 10, + "quantityMax": 33 + } + ] } }, { @@ -21538,6 +24387,22 @@ }, "research": { "scrap": 20 + }, + "decay": { + "seconds": 10800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": { + "entries": [ + { + "itemId": -151838493, + "quantityMin": 20, + "quantityMax": 67 + } + ] } }, { @@ -21555,7 +24420,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1290278434, @@ -21564,7 +24431,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -946599114, @@ -21573,7 +24442,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -946599113, @@ -21582,7 +24453,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -946599131, @@ -21591,7 +24464,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -816769770, @@ -21600,7 +24475,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1647846966, @@ -21626,7 +24503,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1423304443, @@ -21652,7 +24531,9 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -845557339, @@ -21687,7 +24568,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1370759135, @@ -21722,7 +24605,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -996185386, @@ -21757,7 +24642,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1832422579, @@ -21783,7 +24670,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -143132326, @@ -21811,7 +24700,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1819233322, @@ -21839,7 +24730,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -1138208076, @@ -21867,7 +24760,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -193519904, @@ -21876,7 +24771,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1056824343, @@ -21885,7 +24782,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -924959988, @@ -21894,7 +24793,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -769647921, @@ -21929,7 +24830,15 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 150 + }, + "upkeep": null }, { "id": -156748077, @@ -21938,7 +24847,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -216116642, @@ -21964,7 +24875,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -25740268, @@ -21973,7 +24886,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1073015016, @@ -22008,7 +24923,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1078639462, @@ -22017,7 +24934,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1770889433, @@ -22026,7 +24945,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1824770114, @@ -22035,7 +24956,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1433390281, @@ -22044,7 +24967,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -333406828, @@ -22061,7 +24986,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -135252633, @@ -22070,7 +24997,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1754948969, @@ -22098,7 +25027,15 @@ }, "research": { "scrap": 10 - } + }, + "decay": { + "seconds": 43200, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": -1293296287, @@ -22144,7 +25081,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 1500 + }, + "upkeep": null }, { "id": -2058362263, @@ -22179,7 +25124,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2115299615, @@ -22188,7 +25135,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1039528932, @@ -22197,7 +25146,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -158718378, @@ -22206,7 +25157,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -695978112, @@ -22243,7 +25196,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": -1758372725, @@ -22298,7 +25259,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -170436364, @@ -22307,7 +25270,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2100458529, @@ -22316,7 +25281,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1616704051, @@ -22325,7 +25292,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -363689972, @@ -22334,7 +25303,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1364246987, @@ -22343,7 +25314,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -555122905, @@ -22378,7 +25351,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -343857907, @@ -22404,7 +25379,15 @@ "timeSeconds": 9.375, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": -89874794, @@ -22432,7 +25415,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -493159321, @@ -22460,7 +25445,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1517740219, @@ -22497,7 +25484,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -1800345240, @@ -22525,7 +25514,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -92759291, @@ -22553,7 +25544,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 86400, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": -1850297170, @@ -22562,7 +25561,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1100422738, @@ -22590,7 +25591,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -596876839, @@ -22616,7 +25619,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1366326648, @@ -22625,7 +25630,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1782127806, @@ -22634,7 +25641,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -369760990, @@ -22660,7 +25669,9 @@ "timeSeconds": 9.375, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1866909924, @@ -22669,7 +25680,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -465682601, @@ -22678,7 +25691,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1583967946, @@ -22715,7 +25730,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -2099697608, @@ -22724,7 +25741,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1049172752, @@ -22752,7 +25771,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -258457936, @@ -22761,7 +25782,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1421257350, @@ -22796,7 +25819,15 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 300 + }, + "upkeep": null }, { "id": -1671551935, @@ -22833,7 +25864,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -187031121, @@ -22842,7 +25875,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1581843485, @@ -22851,7 +25886,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1157596551, @@ -22860,7 +25897,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -611118083, @@ -22869,7 +25908,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2103694546, @@ -22878,7 +25919,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -176608084, @@ -22887,7 +25930,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1997698639, @@ -22896,7 +25941,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1408336705, @@ -22905,7 +25952,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1003665711, @@ -22914,7 +25963,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1108136649, @@ -22936,7 +25987,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1736356576, @@ -22982,7 +26035,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": -1262185308, @@ -23019,7 +26080,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -1316706473, @@ -23028,7 +26091,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2001260025, @@ -23063,7 +26128,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1175656359, @@ -23072,7 +26139,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -582782051, @@ -23109,7 +26178,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": -1663759755, @@ -23146,7 +26223,15 @@ }, "research": { "scrap": 125 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": -901370585, @@ -23172,7 +26257,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -561148628, @@ -23181,7 +26268,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1478445584, @@ -23227,7 +26316,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 50 + }, + "upkeep": null }, { "id": -1569700847, @@ -23253,7 +26350,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -243540612, @@ -23262,7 +26361,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -739993590, @@ -23271,7 +26372,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1802083073, @@ -23299,7 +26402,9 @@ }, "research": { "scrap": 20 - } + }, + "decay": null, + "upkeep": null }, { "id": -885833256, @@ -23316,7 +26421,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1501451746, @@ -23353,7 +26460,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1880231361, @@ -23390,7 +26499,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1615281216, @@ -23427,7 +26538,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -626174997, @@ -23473,7 +26586,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1040518150, @@ -23510,7 +26625,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1693832478, @@ -23547,7 +26664,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -44066600, @@ -23556,7 +26675,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -44066823, @@ -23565,7 +26686,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -44066790, @@ -23574,7 +26697,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -870140677, @@ -23583,7 +26708,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1416322465, @@ -23592,7 +26719,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -985781766, @@ -23609,7 +26738,15 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -1993883724, @@ -23618,7 +26755,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -967648160, @@ -23646,7 +26785,15 @@ }, "research": { "scrap": 500 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -956706906, @@ -23674,6 +26821,22 @@ }, "research": { "scrap": 75 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 300 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 15, + "quantityMax": 50 + } + ] } }, { @@ -23702,6 +26865,22 @@ }, "research": { "scrap": 75 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 300 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 15, + "quantityMax": 50 + } + ] } }, { @@ -23730,6 +26909,22 @@ }, "research": { "scrap": 20 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 8, + "quantityMax": 25 + } + ] } }, { @@ -23767,6 +26962,22 @@ }, "research": { "scrap": 75 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 600 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 30, + "quantityMax": 100 + } + ] } }, { @@ -23776,7 +26987,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2016974826, @@ -23785,7 +26998,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -796583652, @@ -23811,7 +27026,23 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 10800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": { + "entries": [ + { + "itemId": -151838493, + "quantityMin": 15, + "quantityMax": 50 + } + ] + } }, { "id": -148229307, @@ -23839,6 +27070,22 @@ }, "research": { "scrap": 10 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 750 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 25, + "quantityMax": 83 + } + ] } }, { @@ -23861,7 +27108,15 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": -819720157, @@ -23889,6 +27144,22 @@ }, "research": { "scrap": 75 + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 3, + "quantityMax": 8 + } + ] } }, { @@ -23917,6 +27188,22 @@ }, "research": { "scrap": 10 + }, + "decay": { + "seconds": 10800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": { + "entries": [ + { + "itemId": -151838493, + "quantityMin": 5, + "quantityMax": 17 + } + ] } }, { @@ -23945,6 +27232,22 @@ }, "research": { "scrap": 75 + }, + "decay": { + "seconds": 43200, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 350 + }, + "upkeep": { + "entries": [ + { + "itemId": 69511070, + "quantityMin": 5, + "quantityMax": 17 + } + ] } }, { @@ -23954,7 +27257,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1344017968, @@ -23980,7 +27285,15 @@ "timeSeconds": 12.5, "workbenchLevel": null }, - "research": null + "research": null, + "decay": { + "seconds": 172800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 100 + }, + "upkeep": null }, { "id": -1265020883, @@ -23989,7 +27302,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1142222427, @@ -23998,7 +27313,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -463122489, @@ -24026,7 +27343,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 7200, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": -1863559151, @@ -24063,7 +27388,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": -1100168350, @@ -24109,7 +27442,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 300 + }, + "upkeep": null }, { "id": -132247350, @@ -24155,7 +27496,15 @@ }, "research": { "scrap": 20 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 200 + }, + "upkeep": null }, { "id": -1779180711, @@ -24164,7 +27513,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -277057363, @@ -24173,7 +27524,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -119235651, @@ -24190,7 +27543,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1284169891, @@ -24236,7 +27591,15 @@ }, "research": { "scrap": 75 - } + }, + "decay": { + "seconds": 28800, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 250 + }, + "upkeep": null }, { "id": -1767794021, @@ -24264,7 +27627,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -132516482, @@ -24301,7 +27666,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -1405508498, @@ -24329,7 +27696,9 @@ }, "research": { "scrap": 125 - } + }, + "decay": null, + "upkeep": null }, { "id": -781866273, @@ -24338,7 +27707,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1850571427, @@ -24366,7 +27737,9 @@ }, "research": { "scrap": 75 - } + }, + "decay": null, + "upkeep": null }, { "id": -855748505, @@ -24394,7 +27767,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -1659598760, @@ -24403,7 +27778,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1163943815, @@ -24412,7 +27789,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -526026171, @@ -24421,7 +27800,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -144417939, @@ -24447,7 +27828,9 @@ "timeSeconds": 0.625, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -395377963, @@ -24456,7 +27839,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1167031859, @@ -24465,7 +27850,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2094954543, @@ -24502,7 +27889,9 @@ }, "research": { "scrap": 10 - } + }, + "decay": null, + "upkeep": null }, { "id": -151838493, @@ -24511,7 +27900,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -459159118, @@ -24520,7 +27911,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -635951327, @@ -24529,7 +27922,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1541706279, @@ -24538,7 +27933,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1476278729, @@ -24547,7 +27944,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1497205569, @@ -24556,7 +27955,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -541206665, @@ -24565,7 +27966,9 @@ "despawnSeconds": 2400, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -649128577, @@ -24574,7 +27977,9 @@ "despawnSeconds": 1200, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -557539629, @@ -24583,7 +27988,9 @@ "despawnSeconds": 3600, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -41896755, @@ -24622,7 +28029,15 @@ "timeSeconds": 28.125, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 500 + }, + "upkeep": null }, { "id": -1607980696, @@ -24661,7 +28076,15 @@ "timeSeconds": 45, "workbenchLevel": 2 }, - "research": null + "research": null, + "decay": { + "seconds": 345600, + "outsideSeconds": null, + "insideSeconds": null, + "underwaterSeconds": null, + "hp": 750 + }, + "upkeep": null }, { "id": -810326667, @@ -24670,7 +28093,9 @@ "despawnSeconds": null, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -2027793839, @@ -24692,7 +28117,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1667224349, @@ -24714,7 +28141,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -209869746, @@ -24731,7 +28160,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -129230242, @@ -24748,7 +28179,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1331212963, @@ -24770,7 +28203,9 @@ ] }, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1230433643, @@ -24796,7 +28231,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -151387974, @@ -24822,7 +28259,9 @@ "timeSeconds": 6.25, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1622660759, @@ -24831,7 +28270,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -722241321, @@ -24840,7 +28281,9 @@ "despawnSeconds": 300, "recycle": null, "craft": null, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -1379835144, @@ -24866,7 +28309,9 @@ "timeSeconds": 18.75, "workbenchLevel": null }, - "research": null + "research": null, + "decay": null, + "upkeep": null }, { "id": -211235948, @@ -24892,7 +28337,9 @@ "timeSeconds": 18.75, "workbenchLevel": 1 }, - "research": null + "research": null, + "decay": null, + "upkeep": null } ] } \ No newline at end of file diff --git a/src/RustPlusBot.Features.ItemData/EmbeddedItemDatabase.cs b/src/RustPlusBot.Features.ItemData/EmbeddedItemDatabase.cs index db693a98..ed1310b9 100644 --- a/src/RustPlusBot.Features.ItemData/EmbeddedItemDatabase.cs +++ b/src/RustPlusBot.Features.ItemData/EmbeddedItemDatabase.cs @@ -9,7 +9,7 @@ namespace RustPlusBot.Features.ItemData; /// Loads the embedded item-data.json once and serves lookups. Singleton. public sealed class EmbeddedItemDatabase : IItemDatabase { - private const int ExpectedSchemaVersion = 1; + private const int ExpectedSchemaVersion = 2; private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web) { diff --git a/src/RustPlusBot.Localization/Strings.fr.resx b/src/RustPlusBot.Localization/Strings.fr.resx index 63461ff7..4493beb2 100644 --- a/src/RustPlusBot.Localization/Strings.fr.resx +++ b/src/RustPlusBot.Localization/Strings.fr.resx @@ -255,6 +255,12 @@ {0} + + {0} ne se dégrade pas. + + + {0} + Vouliez-vous dire : {0} ? @@ -276,6 +282,12 @@ {0} + + {0} n'a pas de coût d'entretien. + + + {0} + 🚢 Cargo Ship arrivé en {0} @@ -372,6 +384,9 @@ Équipe + + Temps de dégradation d'un objet + Afficher le nom, l'id, la pile et la disparition d'un objet @@ -399,6 +414,9 @@ Afficher le coût de recherche (ferraille) d'un objet + + Affiche le temps de dégradation d'un objet. + Afficher ce message d'aide. @@ -417,6 +435,9 @@ Afficher le coût de recherche (ferraille) d'un objet. + + Affiche le coût d'entretien d'un bloc de construction. + Afficher la disponibilité du bot. @@ -435,6 +456,9 @@ Réactiver la sortie du bot vers le jeu. + + Coût d'entretien d'un bloc de construction + Afficher depuis combien de temps le bot fonctionne. diff --git a/src/RustPlusBot.Localization/Strings.resx b/src/RustPlusBot.Localization/Strings.resx index 7aa5e0b8..4ff25275 100644 --- a/src/RustPlusBot.Localization/Strings.resx +++ b/src/RustPlusBot.Localization/Strings.resx @@ -255,6 +255,12 @@ {0} + + {0} does not decay. + + + {0} + Did you mean: {0}? @@ -276,6 +282,12 @@ {0} + + {0} has no upkeep cost. + + + {0} + 🚢 Cargo Ship entered at {0} @@ -372,6 +384,9 @@ Team + + Decay time for an item + Look up an item's name, id, stack, and despawn @@ -399,6 +414,9 @@ Show an item's research scrap cost + + Show an item's decay time. + Show this help message. @@ -417,6 +435,9 @@ Show an item's research scrap cost. + + Show a building block's upkeep cost. + Show the bot's uptime. @@ -435,6 +456,9 @@ Resume bot output to the game. + + Upkeep cost for a building block + Show how long the bot has been running. diff --git a/tests/RustPlusBot.Features.Commands.Tests/CommandRegistrationTests.cs b/tests/RustPlusBot.Features.Commands.Tests/CommandRegistrationTests.cs index 9e3011c7..a18dcd17 100644 --- a/tests/RustPlusBot.Features.Commands.Tests/CommandRegistrationTests.cs +++ b/tests/RustPlusBot.Features.Commands.Tests/CommandRegistrationTests.cs @@ -51,7 +51,7 @@ public void Dispatcher_and_handlers_resolve() using var scope = provider.CreateScope(); Assert.NotNull(scope.ServiceProvider.GetRequiredService()); var handlers = scope.ServiceProvider.GetServices().ToList(); - Assert.Equal(23, handlers.Count); + Assert.Equal(25, handlers.Count); Assert.Contains(handlers, h => h.Name == "mute"); Assert.Contains(handlers, h => h.Name == "pop"); Assert.Contains(handlers, h => h.Name == "time"); @@ -69,6 +69,8 @@ public void Dispatcher_and_handlers_resolve() Assert.Contains(handlers, h => h.Name == "small"); Assert.Contains(handlers, h => h.Name == "large"); Assert.Contains(handlers, h => h.Name == "afk"); + Assert.Contains(handlers, h => h.Name == "decay"); + Assert.Contains(handlers, h => h.Name == "upkeep"); Assert.NotNull(scope.ServiceProvider.GetRequiredService()); Assert.NotNull(scope.ServiceProvider.GetRequiredService()); } diff --git a/tests/RustPlusBot.Features.Commands.Tests/Formatting/DecayFormatterTests.cs b/tests/RustPlusBot.Features.Commands.Tests/Formatting/DecayFormatterTests.cs new file mode 100644 index 00000000..bed85dfd --- /dev/null +++ b/tests/RustPlusBot.Features.Commands.Tests/Formatting/DecayFormatterTests.cs @@ -0,0 +1,39 @@ +using RustPlusBot.Features.Commands.Formatting; +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.Features.Commands.Tests.Formatting; + +public sealed class DecayFormatterTests +{ + [Fact] + public void DecayLine_ShowsBaseDecayAndHp() + { + var item = new ItemRecord(1, "Stone Barricade", 1, null, null, null, null, + new DecayInfo(900, null, null, null, 100), null); + var line = DecayLine.Format(item); + Assert.Contains("Stone Barricade", line, StringComparison.Ordinal); + Assert.Contains("15m", line, StringComparison.Ordinal); + Assert.Contains("100", line, StringComparison.Ordinal); + } + + [Fact] + public void DecayLine_ShowsVariantsWhenPresent() + { + var item = new ItemRecord(1, "Wall", 1, null, null, null, null, + new DecayInfo(null, 3600, 7200, null, 250), null); + var line = DecayLine.Format(item); + Assert.Contains("outside", line, StringComparison.Ordinal); + Assert.Contains("inside", line, StringComparison.Ordinal); + Assert.Contains("250", line, StringComparison.Ordinal); + } + + [Fact] + public void DecayLine_ShowsDashAndHpWhenNoDecaySeconds() + { + var item = new ItemRecord(1, "Thing", 1, null, null, null, null, + new DecayInfo(null, null, null, null, 100), null); + var line = DecayLine.Format(item); + Assert.Contains("—", line, StringComparison.Ordinal); + Assert.Contains("100", line, StringComparison.Ordinal); + } +} diff --git a/tests/RustPlusBot.Features.Commands.Tests/Formatting/ItemFormatterTests.cs b/tests/RustPlusBot.Features.Commands.Tests/Formatting/ItemFormatterTests.cs index 475af99c..0d9032d0 100644 --- a/tests/RustPlusBot.Features.Commands.Tests/Formatting/ItemFormatterTests.cs +++ b/tests/RustPlusBot.Features.Commands.Tests/Formatting/ItemFormatterTests.cs @@ -12,7 +12,7 @@ public sealed class ItemFormatterTests [Fact] public void ItemLine_IncludesNameAndStack() { - var item = new ItemRecord(1, "AK-47", 1, 3600, null, null, null); + var item = new ItemRecord(1, "AK-47", 1, 3600, null, null, null, null, null); var line = ItemLine.Format(item); Assert.Contains("AK-47", line, StringComparison.Ordinal); Assert.Contains("1", line, StringComparison.Ordinal); @@ -22,7 +22,7 @@ public void ItemLine_IncludesNameAndStack() public void RecycleLine_ListsYields() { var item = new ItemRecord(1, "AK-47", 1, null, - new RecycleYield([new YieldEntry(-1059362949, 4, 1.0)]), null, null); + new RecycleYield([new YieldEntry(-1059362949, 4, 1.0)]), null, null, null, null); var line = RecycleLine.Format(item, _names); Assert.Contains("AK-47", line, StringComparison.Ordinal); Assert.Contains("4", line, StringComparison.Ordinal); @@ -32,7 +32,7 @@ public void RecycleLine_ListsYields() public void CraftLine_ListsIngredients() { var item = new ItemRecord(1, "AK-47", 1, null, null, - new CraftRecipe([new Ingredient(-1059362949, 200)], 30.0, 3), null); + new CraftRecipe([new Ingredient(-1059362949, 200)], 30.0, 3), null, null, null); var line = CraftLine.Format(item, _names); Assert.Contains("200", line, StringComparison.Ordinal); } @@ -40,7 +40,7 @@ public void CraftLine_ListsIngredients() [Fact] public void ResearchLine_ShowsScrap() { - var item = new ItemRecord(1, "AK-47", 1, null, null, null, new ResearchCost(500)); + var item = new ItemRecord(1, "AK-47", 1, null, null, null, new ResearchCost(500), null, null); var line = ResearchLine.Format(item); Assert.Contains("500", line, StringComparison.Ordinal); } diff --git a/tests/RustPlusBot.Features.Commands.Tests/Formatting/UpkeepFormatterTests.cs b/tests/RustPlusBot.Features.Commands.Tests/Formatting/UpkeepFormatterTests.cs new file mode 100644 index 00000000..edcda072 --- /dev/null +++ b/tests/RustPlusBot.Features.Commands.Tests/Formatting/UpkeepFormatterTests.cs @@ -0,0 +1,32 @@ +using RustPlusBot.Features.Commands.Formatting; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.Features.ItemData.Naming; + +namespace RustPlusBot.Features.Commands.Tests.Formatting; + +public sealed class UpkeepFormatterTests +{ + private readonly IItemNameResolver _names = new ItemDatabaseNameResolver(new EmbeddedItemDatabase()); + + [Fact] + public void UpkeepLine_RendersRange() + { + var item = new ItemRecord(1, "Wooden Door", 1, null, null, null, null, null, + new UpkeepCost([new UpkeepEntry(-151838493, 8, 25)])); + var line = UpkeepLine.Format(item, _names); + Assert.Contains("Wooden Door", line, StringComparison.Ordinal); + Assert.Contains("8–25", line, StringComparison.Ordinal); // 8–25 + Assert.Contains("Wood", line, StringComparison.Ordinal); + } + + [Fact] + public void UpkeepLine_RendersSingleQuantityWithoutRange() + { + var item = new ItemRecord(1, "Reinforced Glass Window", 1, null, null, null, null, null, + new UpkeepCost([new UpkeepEntry(317398316, 1, 1)])); + var line = UpkeepLine.Format(item, _names); + Assert.DoesNotContain("–", line, StringComparison.Ordinal); // no en-dash for a single value + Assert.Contains("1", line, StringComparison.Ordinal); + } +} diff --git a/tests/RustPlusBot.Features.Commands.Tests/Handlers/DecayUpkeepHandlersTests.cs b/tests/RustPlusBot.Features.Commands.Tests/Handlers/DecayUpkeepHandlersTests.cs new file mode 100644 index 00000000..1f852973 --- /dev/null +++ b/tests/RustPlusBot.Features.Commands.Tests/Handlers/DecayUpkeepHandlersTests.cs @@ -0,0 +1,83 @@ +using RustPlusBot.Features.Commands.Dispatching; +using RustPlusBot.Features.Commands.Handlers; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Naming; +using RustPlusBot.Localization; + +namespace RustPlusBot.Features.Commands.Tests.Handlers; + +public sealed class DecayUpkeepHandlersTests +{ + private readonly IItemDatabase _db = new EmbeddedItemDatabase(); + private readonly ILocalizer _loc = new ResxLocalizer(); + private readonly IItemNameResolver _names = new ItemDatabaseNameResolver(new EmbeddedItemDatabase()); + + private static CommandContext Ctx(params string[] args) => new(1, Guid.NewGuid(), "en", 99, "Caller", args); + + [Fact] + public void Decay_name_is_decay() + => Assert.Equal("decay", new DecayCommandHandler(_db, _loc).Name); + + [Fact] + public async Task Decay_Found_returnsDecayLine() + { + var reply = await new DecayCommandHandler(_db, _loc) + .ExecuteAsync(Ctx("Stone Barricade"), CancellationToken.None); + Assert.Contains("Stone Barricade", reply, StringComparison.Ordinal); + Assert.Contains("15m", reply, StringComparison.Ordinal); + } + + [Fact] + public async Task Decay_NoDecayData_returnsNone() + { + // "Assault Rifle" (id 1545779598) is in the bundle with null decay. + var reply = await new DecayCommandHandler(_db, _loc) + .ExecuteAsync(Ctx("Assault Rifle"), CancellationToken.None); + Assert.Contains("Assault Rifle", reply, StringComparison.Ordinal); + } + + [Fact] + public async Task Decay_NotFound_returnsMessage() + { + var reply = await new DecayCommandHandler(_db, _loc) + .ExecuteAsync(Ctx("zzzzz"), CancellationToken.None); + Assert.Contains("zzzzz", reply, StringComparison.Ordinal); + } + + [Fact] + public async Task Decay_French_returnsFrenchNone() + { + var fr = new CommandContext(1, Guid.NewGuid(), "fr", 99, "Caller", ["Assault Rifle"]); + var reply = await new DecayCommandHandler(_db, _loc).ExecuteAsync(fr, CancellationToken.None); + Assert.Contains("dégrade", reply, StringComparison.Ordinal); + } + + [Fact] + public void Upkeep_name_is_upkeep() + => Assert.Equal("upkeep", new UpkeepCommandHandler(_db, _names, _loc).Name); + + [Fact] + public async Task Upkeep_Found_returnsUpkeepLine() + { + var reply = await new UpkeepCommandHandler(_db, _names, _loc) + .ExecuteAsync(Ctx("Wooden Door"), CancellationToken.None); + Assert.Contains("Wooden Door", reply, StringComparison.Ordinal); + Assert.Contains("upkeep", reply, StringComparison.OrdinalIgnoreCase); + } + + [Fact] + public async Task Upkeep_NoUpkeepData_returnsNone() + { + var reply = await new UpkeepCommandHandler(_db, _names, _loc) + .ExecuteAsync(Ctx("Assault Rifle"), CancellationToken.None); + Assert.Contains("Assault Rifle", reply, StringComparison.Ordinal); + } + + [Fact] + public async Task Upkeep_French_returnsFrenchNone() + { + var fr = new CommandContext(1, Guid.NewGuid(), "fr", 99, "Caller", ["Assault Rifle"]); + var reply = await new UpkeepCommandHandler(_db, _names, _loc).ExecuteAsync(fr, CancellationToken.None); + Assert.Contains("entretien", reply, StringComparison.Ordinal); + } +} diff --git a/tests/RustPlusBot.Features.Commands.Tests/Help/CommandHelpCatalogTests.cs b/tests/RustPlusBot.Features.Commands.Tests/Help/CommandHelpCatalogTests.cs index ff298d07..8df690c0 100644 --- a/tests/RustPlusBot.Features.Commands.Tests/Help/CommandHelpCatalogTests.cs +++ b/tests/RustPlusBot.Features.Commands.Tests/Help/CommandHelpCatalogTests.cs @@ -5,12 +5,12 @@ namespace RustPlusBot.Features.Commands.Tests.Help; public sealed class CommandHelpCatalogTests { - /// The 17 registered in-game handler names (see AddCommands / CommandRegistrationTests). + /// The 19 registered in-game handler names (see AddCommands / CommandRegistrationTests). private static readonly string[] HandlerNames = [ "mute", "unmute", "uptime", "pop", "wipe", "time", "online", "offline", "team", "steamid", "alive", "afk", "prox", - "item", "recycle", "craft", "research", + "item", "recycle", "craft", "research", "decay", "upkeep", ]; [Fact] diff --git a/tests/RustPlusBot.Features.ItemData.Tests/EmbeddedItemDatabaseTests.cs b/tests/RustPlusBot.Features.ItemData.Tests/EmbeddedItemDatabaseTests.cs index 15f8c0e8..5ce888d8 100644 --- a/tests/RustPlusBot.Features.ItemData.Tests/EmbeddedItemDatabaseTests.cs +++ b/tests/RustPlusBot.Features.ItemData.Tests/EmbeddedItemDatabaseTests.cs @@ -50,9 +50,38 @@ public void Parse_SucceedsOnMatchingSchemaVersion() [Fact] public void IndexById_DuplicateId_LastWins() { - var first = new ItemRecord(42, "First", 1, null, null, null, null); - var last = new ItemRecord(42, "Last", 1, null, null, null, null); + var first = new ItemRecord(42, "First", 1, null, null, null, null, null, null); + var last = new ItemRecord(42, "Last", 1, null, null, null, null, null, null); var index = EmbeddedItemDatabase.IndexById([first, last]); Assert.Equal("Last", index[42].Name); } + + [Fact] + public void GetById_StoneBarricade_HasDecay() + { + var rec = _db.GetById(15388698); + Assert.NotNull(rec); + Assert.NotNull(rec!.Decay); + Assert.Equal(900, rec.Decay!.Seconds); + Assert.Equal(100, rec.Decay.Hp); + } + + [Fact] + public void GetById_WoodenDoor_HasUpkeep() + { + var rec = _db.GetById(1729120840); + Assert.NotNull(rec); + Assert.NotNull(rec!.Upkeep); + var entry = Assert.Single(rec.Upkeep!.Entries); + Assert.Equal(-151838493, entry.ItemId); + Assert.Equal(30, entry.QuantityMin); + Assert.Equal(100, entry.QuantityMax); + } + + [Fact] + public void Sources_DecayAndUpkeep_ArePopulated() + { + Assert.Equal(new DateOnly(2024, 9, 7), _db.Sources.DecayAsOf); + Assert.Equal(new DateOnly(2024, 9, 7), _db.Sources.UpkeepAsOf); + } } diff --git a/tests/RustPlusBot.Features.ItemData.Tests/ItemDatasetTests.cs b/tests/RustPlusBot.Features.ItemData.Tests/ItemDatasetTests.cs index 8c9e15c4..6485a9e1 100644 --- a/tests/RustPlusBot.Features.ItemData.Tests/ItemDatasetTests.cs +++ b/tests/RustPlusBot.Features.ItemData.Tests/ItemDatasetTests.cs @@ -7,8 +7,25 @@ public sealed class ItemDatasetTests [Fact] public void ItemRecord_AllowsNullCalculatorData() { - var record = new ItemRecord(1, "Wood", 1000, null, null, null, null); + var record = new ItemRecord(1, "Wood", 1000, null, null, null, null, null, null); Assert.Equal("Wood", record.Name); Assert.Null(record.Recycle); + Assert.Null(record.Decay); + Assert.Null(record.Upkeep); + } + + [Fact] + public void ItemRecord_CarriesDecayAndUpkeep() + { + var record = new ItemRecord( + 2, "Wooden Door", 1, null, null, null, null, + new DecayInfo(900, null, null, null, 100), + new UpkeepCost([new UpkeepEntry(-151838493, 8, 25)])); + + Assert.Equal(900, record.Decay!.Seconds); + Assert.Equal(100, record.Decay.Hp); + Assert.Equal(-151838493, record.Upkeep!.Entries[0].ItemId); + Assert.Equal(8, record.Upkeep.Entries[0].QuantityMin); + Assert.Equal(25, record.Upkeep.Entries[0].QuantityMax); } } diff --git a/tests/RustPlusBot.Features.ItemData.Tests/ItemLookupTests.cs b/tests/RustPlusBot.Features.ItemData.Tests/ItemLookupTests.cs index 9e1e181c..2d928b67 100644 --- a/tests/RustPlusBot.Features.ItemData.Tests/ItemLookupTests.cs +++ b/tests/RustPlusBot.Features.ItemData.Tests/ItemLookupTests.cs @@ -5,10 +5,10 @@ namespace RustPlusBot.Features.ItemData.Tests; public sealed class ItemLookupTests { - private static readonly ItemRecord Ak = new(1, "AK-47", 1, null, null, null, null); - private static readonly ItemRecord Semi = new(2, "Semi-Automatic Rifle", 1, null, null, null, null); - private static readonly ItemRecord Wood = new(3, "Wood", 1000, null, null, null, null); - private static readonly ItemRecord Bag = new(4, "Sleeping Bag", 1, null, null, null, null); + private static readonly ItemRecord Ak = new(1, "AK-47", 1, null, null, null, null, null, null); + private static readonly ItemRecord Semi = new(2, "Semi-Automatic Rifle", 1, null, null, null, null, null, null); + private static readonly ItemRecord Wood = new(3, "Wood", 1000, null, null, null, null, null, null); + private static readonly ItemRecord Bag = new(4, "Sleeping Bag", 1, null, null, null, null, null, null); private static readonly IReadOnlyList All = [Ak, Semi, Wood, Bag]; private static ItemMatch Resolve(string q) => @@ -64,8 +64,8 @@ public void MultipleSubstring_AmbiguousPrefixFirst() public void ExactNameCollision_ReturnsAmbiguousOrderedById() { // Two items share the same case-insensitive name; the one with the lower id should be first. - var recyclable = new ItemRecord(10, "Sunglasses", 1, null, new RecycleYield([]), null, null); - var notRecyclable = new ItemRecord(5, "Sunglasses", 1, null, null, null, null); + var recyclable = new ItemRecord(10, "Sunglasses", 1, null, new RecycleYield([]), null, null, null, null); + var notRecyclable = new ItemRecord(5, "Sunglasses", 1, null, null, null, null, null, null); IReadOnlyList items = [recyclable, notRecyclable]; var match = ItemLookup.Resolve("sunglasses", id => items.FirstOrDefault(i => i.Id == id), items); var amb = Assert.IsType(match); @@ -79,9 +79,9 @@ public void ExactNameCollision_ReturnsAmbiguousOrderedById() public void ExactNameCollision_DoesNotFallThroughToSubstring() { // Even though there are 2 exact matches, the result must be Ambiguous (not a substring-ranked list). - var a = new ItemRecord(1, "Sunglasses", 1, null, null, null, null); - var b = new ItemRecord(2, "Sunglasses", 1, null, null, null, null); - var extra = new ItemRecord(3, "Cool Sunglasses", 1, null, null, null, null); + var a = new ItemRecord(1, "Sunglasses", 1, null, null, null, null, null, null); + var b = new ItemRecord(2, "Sunglasses", 1, null, null, null, null, null, null); + var extra = new ItemRecord(3, "Cool Sunglasses", 1, null, null, null, null, null, null); IReadOnlyList items = [a, b, extra]; var match = ItemLookup.Resolve("Sunglasses", id => items.FirstOrDefault(i => i.Id == id), items); var amb = Assert.IsType(match); @@ -114,7 +114,8 @@ public void EmptyOrWhitespace_NotFound(string q) [Fact] public void Ambiguous_RespectsCap() { - var many = Enumerable.Range(1, 50).Select(i => new ItemRecord(i, $"Gun {i}", 1, null, null, null, null)) + var many = Enumerable.Range(1, 50) + .Select(i => new ItemRecord(i, $"Gun {i}", 1, null, null, null, null, null, null)) .ToList(); var match = ItemLookup.Resolve("gun", id => many.FirstOrDefault(x => x.Id == id), many, cap: 10); var amb = Assert.IsType(match); diff --git a/tests/RustPlusBot.ItemData.Generator.Tests/DatasetValidatorTests.cs b/tests/RustPlusBot.ItemData.Generator.Tests/DatasetValidatorTests.cs index e1b1685c..d668d6d7 100644 --- a/tests/RustPlusBot.ItemData.Generator.Tests/DatasetValidatorTests.cs +++ b/tests/RustPlusBot.ItemData.Generator.Tests/DatasetValidatorTests.cs @@ -7,11 +7,12 @@ namespace RustPlusBot.ItemData.Generator.Tests; public sealed class DatasetValidatorTests { private static ItemDataset Good() => new(1, - new DatasetSources(new(2026, 4, 8), new(2024, 9, 7), new(2024, 9, 7), new(2024, 9, 7)), + new DatasetSources(new(2026, 4, 8), new(2024, 9, 7), new(2024, 9, 7), new(2024, 9, 7), new(2024, 9, 7), + new(2024, 9, 7)), [ new ItemRecord(1, "AK-47", 1, 3600, - new RecycleYield([new YieldEntry(2, 4, 1.0)]), null, null), - new ItemRecord(2, "Metal Fragments", 1000, null, null, null, null), + new RecycleYield([new YieldEntry(2, 4, 1.0)]), null, null, null, null), + new ItemRecord(2, "Metal Fragments", 1000, null, null, null, null, null, null), ]); /// A dataset with all referential constraints satisfied should produce no errors. @@ -37,7 +38,7 @@ public void UnresolvableYieldId_isError() var bad = new ItemDataset(1, Good().Sources, [ new ItemRecord(1, "AK-47", 1, null, - new RecycleYield([new YieldEntry(99999, 4, 1.0)]), null, null), + new RecycleYield([new YieldEntry(99999, 4, 1.0)]), null, null, null, null), ]); var errors = DatasetValidator.Validate(bad, new ValidationOptions(MinItemCount: 1)); Assert.Contains(errors, e => e.Contains("99999", StringComparison.Ordinal)); @@ -50,9 +51,48 @@ public void UnresolvableCraftIngredientId_isError() var bad = new ItemDataset(1, Good().Sources, [ new ItemRecord(1, "AK-47", 1, null, null, - new CraftRecipe([new Ingredient(88888, 100)], 30.0, 3), null), + new CraftRecipe([new Ingredient(88888, 100)], 30.0, 3), null, null, null), ]); var errors = DatasetValidator.Validate(bad, new ValidationOptions(MinItemCount: 1)); Assert.Contains(errors, e => e.Contains("88888", StringComparison.Ordinal)); } + + /// An upkeep entry that references an unknown item id should produce an error. + [Fact] + public void UnresolvableUpkeepId_isError() + { + var bad = new ItemDataset(2, Good().Sources, + [ + new ItemRecord(1, "Wooden Door", 1, null, null, null, null, null, + new UpkeepCost([new UpkeepEntry(77777, 8, 25)])), + ]); + var errors = DatasetValidator.Validate(bad, new ValidationOptions(MinItemCount: 1)); + Assert.Contains(errors, e => e.Contains("77777", StringComparison.Ordinal)); + } + + /// An upkeep entry with min greater than max should produce an error. + [Fact] + public void UpkeepMinGreaterThanMax_isError() + { + var bad = new ItemDataset(2, Good().Sources, + [ + new ItemRecord(1, "Wooden Door", 1, null, null, null, null, null, + new UpkeepCost([new UpkeepEntry(1, 25, 8)])), + ]); + var errors = DatasetValidator.Validate(bad, new ValidationOptions(MinItemCount: 1)); + Assert.Contains(errors, e => e.Contains("upkeep", StringComparison.OrdinalIgnoreCase)); + } + + /// Negative decay seconds should produce an error. + [Fact] + public void NegativeDecay_isError() + { + var bad = new ItemDataset(2, Good().Sources, + [ + new ItemRecord(1, "Stone Barricade", 1, null, null, null, null, + new DecayInfo(-900, null, null, null, 100), null), + ]); + var errors = DatasetValidator.Validate(bad, new ValidationOptions(MinItemCount: 1)); + Assert.Contains(errors, e => e.Contains("decay", StringComparison.OrdinalIgnoreCase)); + } } diff --git a/tests/RustPlusBot.ItemData.Generator.Tests/OfflineRustLabsSourceTests.cs b/tests/RustPlusBot.ItemData.Generator.Tests/OfflineRustLabsSourceTests.cs new file mode 100644 index 00000000..416fa667 --- /dev/null +++ b/tests/RustPlusBot.ItemData.Generator.Tests/OfflineRustLabsSourceTests.cs @@ -0,0 +1,52 @@ +using RustPlusBot.ItemData.Generator.Sources; + +namespace RustPlusBot.ItemData.Generator.Tests; + +public sealed class OfflineRustLabsSourceTests +{ + private static OfflineRustLabsSource SourceWith(string decayJson, string upkeepJson) + { + var decayPath = Path.GetTempFileName(); + var upkeepPath = Path.GetTempFileName(); + File.WriteAllText(decayPath, decayJson); + File.WriteAllText(upkeepPath, upkeepJson); + // Recycle/craft/research paths are unused by these two loaders; point them at the upkeep temp file. + return new OfflineRustLabsSource(upkeepPath, upkeepPath, upkeepPath, decayPath, upkeepPath); + } + + [Fact] + public void LoadDecay_readsItemsWrapper_andSecondsAndHp() + { + const string decay = + """{"items":{"15388698":{"decay":900,"decayString":"15 min","decayOutside":null,"decayInside":null,"decayUnderwater":null,"hp":100,"hpString":"100"}}}"""; + var result = SourceWith(decay, """{"items":{}}""").LoadDecay(); + + Assert.True(result.ContainsKey(15388698)); + Assert.Equal(900, result[15388698].Seconds); + Assert.Equal(100, result[15388698].Hp); + Assert.Null(result[15388698].OutsideSeconds); + } + + [Fact] + public void LoadUpkeep_readsItemsWrapper_andParsesRange() + { + const string upkeep = + """{"items":{"1729120840":[{"id":"-151838493","quantity":"8–25"}]}}"""; + var result = SourceWith("""{"items":{}}""", upkeep).LoadUpkeep(); + + Assert.True(result.ContainsKey(1729120840)); + var entry = Assert.Single(result[1729120840].Entries); + Assert.Equal(-151838493, entry.ItemId); + Assert.Equal(8, entry.QuantityMin); + Assert.Equal(25, entry.QuantityMax); + } + + [Fact] + public void LoadUpkeep_singleQuantity_hasEqualMinMax() + { + const string upkeep = """{"items":{"671706427":[{"id":"317398316","quantity":"1"}]}}"""; + var entry = Assert.Single(SourceWith("""{"items":{}}""", upkeep).LoadUpkeep()[671706427].Entries); + Assert.Equal(1, entry.QuantityMin); + Assert.Equal(1, entry.QuantityMax); + } +} diff --git a/tests/RustPlusBot.ItemData.Generator.Tests/UpkeepQuantityTests.cs b/tests/RustPlusBot.ItemData.Generator.Tests/UpkeepQuantityTests.cs new file mode 100644 index 00000000..08a61864 --- /dev/null +++ b/tests/RustPlusBot.ItemData.Generator.Tests/UpkeepQuantityTests.cs @@ -0,0 +1,48 @@ +using RustPlusBot.ItemData.Generator.Sources; + +namespace RustPlusBot.ItemData.Generator.Tests; + +public sealed class UpkeepQuantityTests +{ + [Fact] + public void Single_value_parses_to_equal_min_max() + { + var (min, max) = UpkeepQuantity.Parse("1"); + Assert.Equal(1, min); + Assert.Equal(1, max); + } + + [Fact] + public void EnDash_range_parses_min_and_max() + { + var (min, max) = UpkeepQuantity.Parse("8–25"); // 8–25 + Assert.Equal(8, min); + Assert.Equal(25, max); + } + + [Fact] + public void Hyphen_range_parses_min_and_max() + { + var (min, max) = UpkeepQuantity.Parse("20-67"); + Assert.Equal(20, min); + Assert.Equal(67, max); + } + + [Fact] + public void Whitespace_is_trimmed() + { + var (min, max) = UpkeepQuantity.Parse(" 5–17 "); + Assert.Equal(5, min); + Assert.Equal(17, max); + } + + [Theory] + [InlineData("")] + [InlineData("lots")] + [InlineData("8–")] + [InlineData("a–b")] + public void Unparseable_throws(string raw) + { + Assert.Throws(() => UpkeepQuantity.Parse(raw)); + } +} diff --git a/tests/RustPlusBot.Localization.Tests/StringsResourceParityTests.cs b/tests/RustPlusBot.Localization.Tests/StringsResourceParityTests.cs index 18f44407..75905741 100644 --- a/tests/RustPlusBot.Localization.Tests/StringsResourceParityTests.cs +++ b/tests/RustPlusBot.Localization.Tests/StringsResourceParityTests.cs @@ -42,6 +42,6 @@ public void English_covers_every_french_key() [Fact] public void Catalog_has_expected_key_count() { - Assert.Equal(230, EnglishKeys().Count); + Assert.Equal(238, EnglishKeys().Count); } } diff --git a/tools/RustPlusBot.ItemData.Generator/Program.cs b/tools/RustPlusBot.ItemData.Generator/Program.cs index bc5ba72c..a749fad9 100644 --- a/tools/RustPlusBot.ItemData.Generator/Program.cs +++ b/tools/RustPlusBot.ItemData.Generator/Program.cs @@ -12,6 +12,8 @@ internal static class Program private static readonly DateOnly RecycleAsOf = new(2024, 9, 7); private static readonly DateOnly CraftAsOf = new(2024, 9, 7); private static readonly DateOnly ResearchAsOf = new(2024, 9, 7); + private static readonly DateOnly DecayAsOf = new(2024, 9, 7); + private static readonly DateOnly UpkeepAsOf = new(2024, 9, 7); private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web) { @@ -60,7 +62,9 @@ internal static int Main(string[] args) var rustLabsSource = new OfflineRustLabsSource( Path.Combine(rustplusDir, "rustlabsRecycleData.json"), Path.Combine(rustplusDir, "rustlabsCraftData.json"), - Path.Combine(rustplusDir, "rustlabsResearchData.json")); + Path.Combine(rustplusDir, "rustlabsResearchData.json"), + Path.Combine(rustplusDir, "rustlabsDecayData.json"), + Path.Combine(rustplusDir, "rustlabsUpkeepData.json")); var names = namesSource.LoadNames(); Console.WriteLine($"Loaded {names.Count} names from items.json"); @@ -70,6 +74,8 @@ internal static int Main(string[] args) var recycleYields = rustLabsSource.LoadRecycleYields(); var craftRecipes = rustLabsSource.LoadCraftRecipes(); var researchCosts = rustLabsSource.LoadResearchCosts(); + var decayInfos = rustLabsSource.LoadDecay(); + var upkeepCosts = rustLabsSource.LoadUpkeep(); var nameIds = new HashSet(names.Keys); @@ -81,6 +87,11 @@ internal static int Main(string[] args) Console.WriteLine($"dropped {orphanCraft} orphan craft entries with no item name"); Console.WriteLine($"dropped {orphanResearch} orphan research entries with no item name"); + var orphanDecay = decayInfos.Keys.Count(k => !nameIds.Contains(k)); + var orphanUpkeep = upkeepCosts.Keys.Count(k => !nameIds.Contains(k)); + Console.WriteLine($"dropped {orphanDecay} orphan decay entries with no item name"); + Console.WriteLine($"dropped {orphanUpkeep} orphan upkeep entries with no item name"); + var items = names .Select(kv => { @@ -91,13 +102,15 @@ internal static int Main(string[] args) var recycle = recycleYields.TryGetValue(id, out var ry) ? ry : null; var craft = craftRecipes.TryGetValue(id, out var cr) ? cr : null; var research = researchCosts.TryGetValue(id, out var rc) ? rc : null; - return new ItemRecord(id, name, stackSize, despawn, recycle, craft, research); + var decay = decayInfos.TryGetValue(id, out var di) ? di : null; + var upkeep = upkeepCosts.TryGetValue(id, out var uc) ? uc : null; + return new ItemRecord(id, name, stackSize, despawn, recycle, craft, research, decay, upkeep); }) .ToList(); var dataset = new ItemDataset( - 1, - new DatasetSources(NamesAsOf, RecycleAsOf, CraftAsOf, ResearchAsOf), + 2, + new DatasetSources(NamesAsOf, RecycleAsOf, CraftAsOf, ResearchAsOf, DecayAsOf, UpkeepAsOf), items); var validationOptions = new ValidationOptions(MinItemCount: minItems); diff --git a/tools/RustPlusBot.ItemData.Generator/README.md b/tools/RustPlusBot.ItemData.Generator/README.md index 39d8af1d..89ee00a6 100644 --- a/tools/RustPlusBot.ItemData.Generator/README.md +++ b/tools/RustPlusBot.ItemData.Generator/README.md @@ -2,7 +2,7 @@ A maintainer CLI that regenerates the embedded Rust item dataset (`src/RustPlusBot.Features.ItemData/Data/item-data.json`) consumed by the bot's -`/item`, `/recycle`, `/craft`, and `/research` calculators. +`/item`, `/recycle`, `/craft`, `/research`, `/decay`, and `/upkeep` calculators. This tool is **not** part of the running bot — it is referenced by nothing in the application graph. It exists so the bundled item data can be refreshed when @@ -13,11 +13,11 @@ Rust updates, rather than shipping a frozen copy that silently rots. The reference data has two very different freshness profiles: - **Item names / ids** are well maintained and current. -- **Calculator data** (recycle yields, craft recipes, research costs) is sourced - from rustlabs and tends to lag game updates. +- **Calculator data** (recycle yields, craft recipes, research costs, decay + times, upkeep costs) is sourced from rustlabs and tends to lag game updates. So the dataset carries per-section provenance dates (`Sources.NamesAsOf`, -`RecycleAsOf`, `CraftAsOf`, `ResearchAsOf`), surfaced to users as a +`RecycleAsOf`, `CraftAsOf`, `ResearchAsOf`, `DecayAsOf`, `UpkeepAsOf`), surfaced to users as a "data as of ``" footer, and this tool can re-emit a fresh snapshot on demand. It **validates loudly and refuses to overwrite a good bundle with garbage** if the upstream shape drifts. @@ -35,12 +35,16 @@ garbage** if the upstream shape drifts. | `rustlabsRecycleData.json` | recycler yields | | `rustlabsCraftData.json` | craft ingredients + time | | `rustlabsResearchData.json` | research scrap cost | + | `rustlabsDecayData.json` | decay time + HP | + | `rustlabsUpkeepData.json` | upkeep cost (resource + quantity range) | 2. Projects them into our own typed schema (`ItemDataset` / `ItemRecord` / …, defined in `RustPlusBot.Features.ItemData`), keyed by item id, with calculator data inlined per item (null where an item has none). -3. **Validates** the result (`DatasetValidator`): a minimum item-count floor and - that every recycle-yield / craft-ingredient id resolves to a known item. +3. **Validates** the result (`DatasetValidator`): a minimum item-count floor, + that every recycle-yield / craft-ingredient / upkeep-cost id resolves to a + known item, that upkeep quantity ranges are well-formed (`min <= max`), and + that decay values are non-negative. 4. On any validation error, prints the errors to stderr and exits non-zero **without writing** — the existing good bundle is never clobbered. 5. On success, writes the dataset as indented JSON and exits 0. diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/IRustLabsSource.cs b/tools/RustPlusBot.ItemData.Generator/Sources/IRustLabsSource.cs index 3a0b89b5..b96b7a8c 100644 --- a/tools/RustPlusBot.ItemData.Generator/Sources/IRustLabsSource.cs +++ b/tools/RustPlusBot.ItemData.Generator/Sources/IRustLabsSource.cs @@ -13,4 +13,10 @@ internal interface IRustLabsSource /// Loads research costs keyed by item id. IReadOnlyDictionary LoadResearchCosts(); + + /// Loads decay info keyed by item id. + IReadOnlyDictionary LoadDecay(); + + /// Loads upkeep costs keyed by item id. + IReadOnlyDictionary LoadUpkeep(); } diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/OfflineRustLabsSource.cs b/tools/RustPlusBot.ItemData.Generator/Sources/OfflineRustLabsSource.cs index 667a8452..651d50a6 100644 --- a/tools/RustPlusBot.ItemData.Generator/Sources/OfflineRustLabsSource.cs +++ b/tools/RustPlusBot.ItemData.Generator/Sources/OfflineRustLabsSource.cs @@ -4,14 +4,18 @@ namespace RustPlusBot.ItemData.Generator.Sources; -/// Reads recycle, craft, and research data from the offline RustLabs JSON files. +/// Reads recycle, craft, research, decay, and upkeep data from the offline RustLabs JSON files. /// Path to the rustlabsRecycleData.json file. /// Path to the rustlabsCraftData.json file. /// Path to the rustlabsResearchData.json file. +/// Path to the rustlabsDecayData.json file. +/// Path to the rustlabsUpkeepData.json file. internal sealed class OfflineRustLabsSource( string RecycleFilePath, string CraftFilePath, - string ResearchFilePath) : IRustLabsSource + string ResearchFilePath, + string DecayFilePath, + string UpkeepFilePath) : IRustLabsSource { private static readonly Dictionary WorkbenchLevels = new() { @@ -160,4 +164,83 @@ public IReadOnlyDictionary LoadResearchCosts() return result; } + + /// + public IReadOnlyDictionary LoadDecay() + { + using var stream = File.OpenRead(DecayFilePath); + using var doc = JsonDocument.Parse(stream); + + var result = new Dictionary(); + if (!doc.RootElement.TryGetProperty("items", out var itemsEl)) + { + return result; + } + + foreach (var prop in itemsEl.EnumerateObject()) + { + if (!int.TryParse(prop.Name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id)) + { + continue; + } + + result[id] = new DecayInfo( + ReadInt(prop.Value, "decay"), + ReadInt(prop.Value, "decayOutside"), + ReadInt(prop.Value, "decayInside"), + ReadInt(prop.Value, "decayUnderwater"), + ReadInt(prop.Value, "hp")); + } + + return result; + + static int? ReadInt(JsonElement element, string name) => + element.TryGetProperty(name, out var p) && p.ValueKind == JsonValueKind.Number + ? p.GetInt32() + : null; + } + + /// + public IReadOnlyDictionary LoadUpkeep() + { + using var stream = File.OpenRead(UpkeepFilePath); + using var doc = JsonDocument.Parse(stream); + + var result = new Dictionary(); + if (!doc.RootElement.TryGetProperty("items", out var itemsEl)) + { + return result; + } + + foreach (var prop in itemsEl.EnumerateObject()) + { + if (!int.TryParse(prop.Name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id)) + { + continue; + } + + var entries = new List(); + foreach (var entry in prop.Value.EnumerateArray()) + { + var entryIdStr = entry.GetProperty("id").GetString(); + if (entryIdStr is null || + !int.TryParse(entryIdStr, NumberStyles.Integer, CultureInfo.InvariantCulture, out var entryId)) + { + continue; + } + + var quantity = entry.GetProperty("quantity").GetString() + ?? throw new InvalidOperationException($"upkeep {id}: null quantity"); + var (min, max) = UpkeepQuantity.Parse(quantity); + entries.Add(new UpkeepEntry(entryId, min, max)); + } + + if (entries.Count > 0) + { + result[id] = new UpkeepCost(entries); + } + } + + return result; + } } diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/UpkeepQuantity.cs b/tools/RustPlusBot.ItemData.Generator/Sources/UpkeepQuantity.cs new file mode 100644 index 00000000..ca7dddbe --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Sources/UpkeepQuantity.cs @@ -0,0 +1,27 @@ +using System.Globalization; + +namespace RustPlusBot.ItemData.Generator.Sources; + +/// Parses a RustLabs upkeep quantity string (e.g. "1" or "8–25"). +internal static class UpkeepQuantity +{ + /// Parses into a (min, max) pair. A single value yields min == max. + /// The quantity string: a number or an en-dash/hyphen range. + /// The parsed lower and upper bounds. + /// The string is neither a number nor a number range. + public static (int Min, int Max) Parse(string raw) + { + ArgumentNullException.ThrowIfNull(raw); + var trimmed = raw.Trim(); + var dash = trimmed.IndexOfAny(['–', '-']); + if (dash < 0) + { + var single = int.Parse(trimmed, CultureInfo.InvariantCulture); + return (single, single); + } + + var min = int.Parse(trimmed[..dash], CultureInfo.InvariantCulture); + var max = int.Parse(trimmed[(dash + 1)..], CultureInfo.InvariantCulture); + return (min, max); + } +} diff --git a/tools/RustPlusBot.ItemData.Generator/Validation/DatasetValidator.cs b/tools/RustPlusBot.ItemData.Generator/Validation/DatasetValidator.cs index e4b2192a..2475cd61 100644 --- a/tools/RustPlusBot.ItemData.Generator/Validation/DatasetValidator.cs +++ b/tools/RustPlusBot.ItemData.Generator/Validation/DatasetValidator.cs @@ -46,6 +46,34 @@ public static IReadOnlyList Validate(ItemDataset dataset, ValidationOpti } } + foreach (var item in dataset.Items.Where(i => i.Upkeep is not null)) + { + foreach (var entry in item.Upkeep!.Entries) + { + if (!ids.Contains(entry.ItemId)) + { + errors.Add( + $"item {item.Id} ({item.Name}): upkeep references unknown id {entry.ItemId}"); + } + + if (entry.QuantityMin > entry.QuantityMax) + { + errors.Add( + $"item {item.Id} ({item.Name}): upkeep quantity min {entry.QuantityMin} > max {entry.QuantityMax}"); + } + } + } + + foreach (var item in dataset.Items.Where(i => i.Decay is not null)) + { + var decay = item.Decay!; + if (decay.Seconds is < 0 || decay.OutsideSeconds is < 0 || decay.InsideSeconds is < 0 || + decay.UnderwaterSeconds is < 0 || decay.Hp is < 0) + { + errors.Add($"item {item.Id} ({item.Name}): decay has a negative value"); + } + } + return errors; } }