LHDF Core
by Boomstick Barry
1.0.41
## [1.0.41] ### Added - For mod authors: `LHDF_TerrainGrid.MeasureCoverCell` measures one 20 m cover cell before the terrain map is ready, with the same rules as the map itself. The map and its cache are unchanged.
- Game Version
- 1.8.0.13
- Created
- Sat, 17 Oct 2026 08:59:25 GMT
- Last Modified
- Sat, 17 Oct 2026 08:59:29 GMT
1.0.40
## [1.0.40] ### Changed - AI squads now judge cover the same way whatever terrain cell size the server sets. The terrain map is rebuilt once after this update, which takes a few minutes on large maps; until it is ready, squads use their simpler cover check. - Mod authors: `LHDF_TerrainGrid` has 20 m cover cells (`COVER_CELL`, `GetCoverCellIndex`, `GetCoverTreeCountOf`, `GetCoverBuildingOf`, `GetCoverCellCount`); the main cells are unchanged. Cache version 4.
- Game Version
- 1.8.0.13
- Created
- Fri, 16 Oct 2026 22:56:17 GMT
- Last Modified
- Fri, 16 Oct 2026 22:56:23 GMT
1.0.39
## [1.0.39] ### Fixed - A world index cache with missing data (for example a cut-off file) is now rejected and the map is scanned again, instead of loading as an empty index. Before, AI could then ignore buildings (indoors, roofs, firing positions) until the cache was deleted. The server log names what was missing. - Mod authors: `LHDF_WorldIndex.LoadCache` checks every array read; a damaged cache logs `World index: the cache is damaged or incomplete (<reason>), scanning again`.
- Game Version
- 1.8.0.13
- Created
- Fri, 16 Oct 2026 17:17:52 GMT
- Last Modified
- Fri, 16 Oct 2026 17:17:57 GMT
1.0.38
## [1.0.38] ### Added - Server-owned map markers for other LHDF mods: a mod offers its marker icon, and the markers stay visible to players whose user content is restricted.
- Game Version
- 1.8.0.13
- Created
- Fri, 16 Oct 2026 14:32:49 GMT
- Last Modified
- Fri, 16 Oct 2026 14:32:56 GMT
1.0.37
## [1.0.37] ### Fixed - Game Master: an area's radius, width or length set beyond its slider (in Workbench or a server file) is no longer cut down when another setting of the same object is applied. This applies to encounters, loot areas, safe zones, map hiders, shop vehicle spots and no-build zones. Moving the slider still sets the new size.
- Game Version
- 1.8.0.13
- Created
- Tue, 13 Oct 2026 12:02:18 GMT
- Last Modified
- Tue, 13 Oct 2026 12:02:21 GMT
1.0.36
## [1.0.36] ### Added - Server owners can force terrain measurements to rebuild after map or mod updates that keep the same addon ids: increase `terrainCacheEpoch` in the Core settings, then restart. These updates are not detected automatically.
- Game Version
- 1.8.0.13
- Created
- Tue, 13 Oct 2026 01:31:44 GMT
- Last Modified
- Tue, 13 Oct 2026 01:31:48 GMT
1.0.35
## [1.0.35] ### Fixed - A player who joined before LHDF Core had finished starting (seen in Workbench Play, possible when hosting) caused a script error in the join code of LHDF Persistence. - Mod authors: `LHDF_CoreSystem.GetMod` returns null before Core's `OnInit` instead of reading a mod list that does not exist yet. Check `IsReady()` (or wait for `GetOnReady()`) before relying on a mod's descriptor.
- Game Version
- 1.8.0.13
- Created
- Mon, 12 Oct 2026 11:15:21 GMT
- Last Modified
- Mon, 12 Oct 2026 11:15:25 GMT
1.0.34
## [1.0.34] ### Changed - LHDF Core does no work while no feature needs it, on the server and on clients: its per-frame update turns off after 30 frames (about half a second) with nothing to do and comes back on as soon as a mod queues a job, adds a look-at helper, announces a controller, queues a building catalog save, or a setting changes. Mods that only time their own work no longer keep it running. The performance log keeps it on. - Mod authors: performance summaries (`perfLog`, `-lhdfPerf`) keep it on; `LHDF_CoreSystem.Wake()` is called by `LHDF_WorkQueue.Add`, `LHDF_LookAtService.Add`, `RegisterOwnController`, `LHDF_BuildingCatalog.QueueSave` and every settings change. `LHDF_Perf.Record` and work queue steps do not wake it. With `"debug": ["Core"]` the log shows "Idle: frame update off" and "Frame update on". - The warnings about LHDF work that takes too long in one frame or in one call still work while Core is idle. While idle, a warning about one frame can be logged late: it is logged at the next timed work of any LHDF mod or when Core wakes; with the full suite that is usually within a second, with LHDF Core alone it can take longer. - Mod authors: while idle, `LHDF_Perf.Add` ends the frames itself, keyed by `BaseWorld.GetFrameNumber()` (`EndIdleFrame`), and the interval of the "took N ms in one call" warnings keeps running; going idle starts a new interval (`ResetForIdle`). `LHDF_Perf.SetOwner` (never released) is gone; every other `LHDF_Perf` signature is unchanged.
- Game Version
- 1.8.0.13
- Created
- Sun, 11 Oct 2026 16:53:31 GMT
- Last Modified
- Sun, 11 Oct 2026 16:53:37 GMT
1.0.33
## [1.0.33] ### Added - Settings with a fixed list of options. A Game Master picks one from a dropdown in the "LHDF" tab; in a settings file the option is written as its name, upper or lower case alike. A name that is no option is not applied: the server log names the options and the previous value stays. The reference files list the options. - Mod authors: the reference files in `_defaults` list the options; `LHDF_SettingsSchema.Choice(key, value, options, desc, flags, labels)`, stored as the option id (a `String` key can become a `Choice` key without changing any owner file or config); `LHDF_ESettingType.CHOICE`, `LHDF_SettingKeyInfo.m_aOptions` / `m_aLabels`; the dropdown is `LHDF_SettingChoiceAttribute` for keys flagged `LIVE`. A mod that uses it requires Core 1.0.33. ### Changed - Joining players receive only the client settings the server owner or a Game Master changed from the mods' defaults, instead of every client setting of every mod. A setting put back to its default returns to the default on every client. Lists that a mod writes itself (for example the shop overrides) are still sent in full. Nothing changes in the settings files. - Mod authors: the payload in `LHDF_CoreSystem.m_sClientSettings` keeps one object per mod; `WRITE_CLIENT` leaves out keys equal to layers 1 and 2 (`LHDF_SettingsBaseline`), and clients reset their `CLIENT` keys to layers 1 and 2 before they read it (`Custom` keys are not reset). No settings hash: the payload is sent again only when its text changes. With `"debug": ["Core"]` the server logs "Client settings sent: N characters" and "Client settings unchanged after a change of <mod>". - The debug log lines you switch on in the settings file now also appear in a dedicated server's log. - Mod authors: `LHDF_Log.Debug` prints at `LogLevel.NORMAL` instead of `LogLevel.DEBUG` (a dedicated server does not write debug level); it still prints only for mods listed in `Core.json` `"debug"`.
- Game Version
- 1.8.0.13
- Created
- Sun, 11 Oct 2026 16:34:04 GMT
- Last Modified
- Sun, 11 Oct 2026 16:34:07 GMT
1.0.32
template-claude-armareforger
- Game Version
- 1.8.0.13
- Created
- Sat, 10 Oct 2026 13:46:53 GMT
- Last Modified
- Sat, 10 Oct 2026 13:46:58 GMT
1.0.31
## [1.0.31] ### Added - Building floors (world map layer A, `docs/tdd/LHDF_Core_WorldMap.md` 5.2 and 6.2): `LHDF_BuildingCatalog.RequestFloors(building)` measures a building prefab's floors in the work queue, once, from a placed building: columns on a grid of `buildingCellSize` (0.5 m) traced top down against the building, floor hits clustered by height into floors, each floor a grid of cells flagged walkable, near a wall, near a door or entry, under stairs, outside the interior and under furniture. The props of the prefab's furniture set are boxed in the building's space, and their level tops 0.4 to 1.4 m above a floor become surfaces. `GetOnFloorsMeasured()` fires when done. Cached with the rest of the catalog (cache version 2; other measuring settings measure again). Everon: 20 house prefabs in 4 to 59 ms of queue time each, no step over 1 ms; `House_Town_E_2I01` has its floors at 0.20, 4.30 and 7.60 m. - `LHDF_BuildingCatalog.GetInstance(building)`, `LHDF_BuildingInstance`: one placed building through its archetype: free floor cells, surfaces, and `PickSpots(count, minDistance)`, the same spots for the building on every start (seeded by its index). First consumer: LHDF Loot Spawner. - `Core.json`: `buildingCellSize` (0.5), `buildingMinHeadroom` (1.8), `buildingWallMargin` (0.4). - Building anchors (`docs/tdd/LHDF_Core_WorldMap.md` 5.3): `LHDF_BuildingInstance.GetAnchors(kind)` gives a placed building's exterior doors, entries, windows, footprint corners and sides (at the interior boxes when the prefab has them), free floor cells and furniture tops in world space, each with its outward facing, width and floor (`LHDF_BuildingAnchor`). `GetInstance(building, false)` gives the instance before the floors are measured (openings and footprint). - Building rules (design 5.5, `World/LHDF_BuildingRules.c`): `LHDF_BuildingRuleSet` of `LHDF_BuildingRule` (categories, enterable, path parts, minimum floors, a maximum per building) with `LHDF_BuildingPlacement`s (anchor, offset in the anchor's frame, yaw, mirror, spread along the anchor, tries, maximum, chance, ground, prefabs or a key the consumer resolves). `Apply` returns the spots a consumer's `LHDF_BuildingSpotCheck` accepts. Configs, so a rule set can ship as a resource. First consumer: LHDF Encounters' fortifications. ### Changed - World index version 3 (`_cache/WorldIndex.json` is scanned again once): each building records the furniture set of its prefab (`LHDF_IndexedBuilding.m_iFurniture`, `LHDF_WorldIndex.GetFurniture`, `LHDF_IndexedFurniture`). Spike W3 (2026-10-09): vanilla furnishes a house through a child of its prefab (`House_Town_E_2I01.et` holds `House_Town_E_2I01_furniture_01` at 0 0 0), and a dedicated server keeps no entity for the set: its props become root entities without prefab data. Root sets a map places itself are indexed too and linked to the building at their origin; Everon (1040 sets) and Nizla (853) have none. The cache and LHDF Data's world export gain `furniturePrefabs`, `furnitureBuildings`, `furnitureNested` and `furnitureData`.
- Game Version
- 1.8.0.13
- Created
- Fri, 09 Oct 2026 11:11:37 GMT
- Last Modified
- Fri, 09 Oct 2026 11:11:47 GMT
1.0.30
## [1.0.30] ### Fixed - Saved LHDF data that this version cannot read is no longer loaded as an empty save (`docs/reports/lhdf-mod-suite-audit.html` C1). A save whose envelope has no version, a version newer than this Core reads, or neither world nor player data is refused with one error line, and the data service keeps what it has. A section without a version or data, or an entry without a key, is skipped with a warning instead of loading as a section with nothing stored.
- Game Version
- 1.8.0.13
- Created
- Fri, 09 Oct 2026 09:25:45 GMT
- Last Modified
- Fri, 09 Oct 2026 09:25:56 GMT
1.0.29
## [1.0.29] ### Added - AI group plans (`LHDF_CoreSystem.GetAIPlans()`, `LHDF_AIGroupPlans`): what a mod wants of one AI group's fighting (a doctrine name, an ambush range), set by the mod that spawned the group (LHDF Encounters) and read by LHDF AI. A store rather than a provider, so neither mod depends on the other or on their start order; without LHDF AI nothing reads it.
- Game Version
- 1.8.0.13
- Created
- Fri, 09 Oct 2026 07:34:45 GMT
- Last Modified
- Fri, 09 Oct 2026 07:34:51 GMT
1.0.28
## [1.0.28] ### Added - `LHDF_SettingsService.IsKeySet(modKey, key)`: whether the server owner set a key in `<Mod>.json` or a Game Master set it live (LHDF AI's doctrines replace only the other keys). - Game Master tab sections: `LHDF_EditorRegistry.AddSection(heading)` splits a mod's block under several headings (a heading subclass may set its title at run time through `GetUIInfo`; a heading with nothing under it is dropped), and `AddSettings()` places the mod's live settings in the current section instead of last.
- Game Version
- 1.8.0.13
- Created
- Thu, 08 Oct 2026 23:55:23 GMT
- Last Modified
- Thu, 08 Oct 2026 23:55:32 GMT
1.0.27
## [1.0.27] ### Added - Terrain grid (world map layer C, `docs/tdd/LHDF_Core_WorldMap.md` 5.4): `LHDF_CoreSystem.RequireTerrainGrid()` builds, for the mod that asks, a grid of `terrainCellSize` cells (20 m) over the world with each cell's lowest corner height, slope, surface (water, hard, soft, road), road distance, building cover, tree count and the top of the tallest static object, power line wires included. Built in the work queue (Everon: about 5 s, 1.3 million objects), cached in `_cache/TerrainGrid.json` and `_cache/TerrainGrid.bin` and loaded from there in a few ms; built again when the world, cell size, game version or loaded addons change. Core alone builds nothing. - Setting `terrainCellSize` (20, 5 to 100 m). - Building catalog (world map layer A, `docs/tdd/LHDF_Core_WorldMap.md` 5.2): `LHDF_CoreSystem.RequireBuildingCatalog()` keeps one archetype per building prefab: interior boxes, exterior and interior doors, entries and windows (middle, size, outward direction), a category and whether it can be entered. A prefab is measured the first time a mod asks for it, from its prefab source (interior boxes) and a placed building (the parts, by their mesh), and cached in `_cache/BuildingCatalog.json`. A prefab that changed since it was measured, or a new game version, is logged; the cached archetype stays in use. Floors, floor cells and furniture are not measured yet.
- Game Version
- 1.8.0.13
- Created
- Thu, 08 Oct 2026 22:30:30 GMT
- Last Modified
- Thu, 08 Oct 2026 22:30:35 GMT
1.0.26
## [1.0.26] ### Added - Whole-number settings can set their own Game Master slider step (`s.Int`'s seventh argument, as for decimals); without it the step stays 1.
- Game Version
- 1.8.0.13
- Created
- Thu, 08 Oct 2026 19:37:46 GMT
- Last Modified
- Thu, 08 Oct 2026 19:37:49 GMT
1.0.25
## [1.0.25] ### Changed - Game Master sliders of decimal settings show as many decimals as their step needs, up to 4 (a 0.0005 step showed as 0.00, 0.01, 0.01, ...); 2 as before otherwise.
- Game Version
- 1.8.0.13
- Created
- Thu, 08 Oct 2026 16:47:10 GMT
- Last Modified
- Thu, 08 Oct 2026 16:47:14 GMT
1.0.24
## [1.0.24] ### Changed - LHDF Data sends its heartbeat every 2 minutes by default (`heartbeatSeconds` 120, was 30), from LHDF Data 1.0.3. A server whose `Data.json` sets `heartbeatSeconds` keeps its value.
- Game Version
- 1.8.0.13
- Created
- Thu, 08 Oct 2026 01:00:17 GMT
- Last Modified
- Thu, 08 Oct 2026 01:00:20 GMT
1.0.23
## [1.0.23] ### Added - `LHDF_JsonWriter.Escape`: the inside of a JSON string literal, so a long text can be escaped chunk by chunk (LHDF Data's report upload).
- Game Version
- 1.8.0.13
- Created
- Thu, 08 Oct 2026 00:54:39 GMT
- Last Modified
- Thu, 08 Oct 2026 00:54:43 GMT
1.0.22
## [1.0.22] ### Added - A look-at service on the client (`LHDF_CoreSystem.GetLookAt()`, `LHDF_LookAtService`, `LHDF_LookAtProvider`, `LHDF_LookAtView` with `AimAt`, where the view line meets an entity's bounds): mods that put actions on what the player looks at share one look-at pass, four times a second, with one sphere query, and the target the player looks at most directly wins. Each mod keeps its own interaction helper. LHDF Metabolism's water uses it; LHDF Loot Spawner's containers will. - A noise provider (`LHDF_NoiseProvider.MakeNoise`, `LHDF_Providers.SetNoise`, `HasNoise`, `GetNoise`): noise that zombies hear, set by LHDF Project Outbreak. Without it nothing hears the noise (logged once). ### Fixed - Two doc comments in `LHDF_Providers.c` held a carriage return instead of `\return`; a text-mode edit would have turned them into code.
- Game Version
- 1.8.0.13
- Created
- Wed, 07 Oct 2026 05:10:16 GMT
- Last Modified
- Wed, 07 Oct 2026 05:10:21 GMT
1.0.21
## [1.0.21] ### Added - Two providers for LHDF AI: `LHDF_CreatureProvider` (`IsCreature`: zombies and creatures LHDF AI leaves alone; LHDF Project Outbreak sets it) and `LHDF_SafeZoneProvider` (`IsInSafeZone`: LHDF Game Master Additions sets it). `LHDF_Providers.SetCreatures`, `SetSafeZones`, `GetCreatures`, `GetSafeZones`. Without a provider the neutral answer is false; their neutral providers are kept, not made per call, as AI asks often. - `LHDF_Mod.GetEditorCategory()`: a mod can put its Game Master section (heading, attributes, live settings) on its own tab, an `SCR_EditorAttributeCategory` config; empty keeps the shared "LHDF" tab. LHDF AI uses it.
- Game Version
- 1.8.0.13
- Created
- Tue, 06 Oct 2026 23:39:21 GMT
- Last Modified
- Tue, 06 Oct 2026 23:39:26 GMT
1.0.20
## [1.0.20] ### Added - `LHDF_SettingsSchema.Float(..., step)`: an optional slider step for a decimal setting in the Game Master's LHDF tab. Without it the slider keeps 100 steps over the range. LHDF Shop uses it for its service prices (0.25 for fuel, 0.5 for repairs).
- Game Version
- 1.8.0.13
- Created
- Mon, 05 Oct 2026 14:07:59 GMT
- Last Modified
- Mon, 05 Oct 2026 14:08:08 GMT
1.0.19
## [1.0.19] ### Added (settings schema, minimum versions) - Settings files have a schema: `LHDF_SettingsSection.GetSchema()` (default 1) is written as `"schema"` into `_defaults/<Mod>.json`, and a server file with a higher schema gets a warning. `GetRenamedKeys` reads a renamed key under its old name (with a warning to rename it); `GetMovedKeys` makes the unknown-key warning name where a key went. Core's settings are schema 2: `friendlyFactions` in `Core.json` is reported as moved to `Server.json`. - `LHDF_Mod.GetRequirements(minimums)`: the oldest versions of other LHDF mods a mod works with. Core checks them at start for the loaded mods and logs an error naming both mods and versions (`LHDF_Mods.CompareVersions`). ### Added (vanilla hook points) - Core mods `SCR_CharacterStaminaComponent.OnStaminaDrain` and `SCR_GarbageSystem.OnInsertRequested` once for every LHDF mod. Mods add a part through `LHDF_StaminaModifiers` / `LHDF_GarbageRules` (a modded `Collect`, as `LHDF_Mods`), each with an order. Stamina: the parts are added up in order and applied in one `AddStamina` under one guard, so no mod rescales another's correction. Garbage: highest order first; the first rule that claims the entity sets its lifetime. ### Removed - Player character persistence moved to the new mod LHDF Persistence: the player section that keeps each player's character id and snapshot, the release of offline players' characters after a load, and the recovery of a character whose vanilla record is gone (`LHDF_CharacterSection`, `LHDF_OfflineCharacters`, `LHDF_CharacterSnapshot`, `LHDF_ItemTree`, `LHDF_ItemMarksState`). Without LHDF Persistence, characters are kept by vanilla alone. The save keys stay `Core.Character` and `Core.Marks`, so saved characters carry over when LHDF Persistence is loaded. - `friendlyFactions` moved to LHDF Server Tools (`Server.json`), with `LHDF_FactionPeace`. A `friendlyFactions` key left in `Core.json` is reported as unknown; move it to `Server.json`. - The performance report (`LHDF_PerfReportJob`, its page, "Write performance report" on the LHDF tab, report kind `report.perf`) moved to LHDF Data. Core still collects the figures (`LHDF_Perf`, `perfLog`). - The hardcoded order of mod sections on the LHDF tab: `LHDF_Mod.GetEditorOrder()` (default `GetOrder()`) places them, so Core names no mod. ### Added - `LHDF_DataService.GetOnStoredDataReady()`: raised once per world when the stored data is available, before the first save point (LHDF Persistence keeps offline characters from it). - `LHDF_Mod.GetEditorOrder()`. ### Fixed - Stored data of a section that does not parse is kept, as the log says: it moves to `<section key>#unreadable` in the save. Before, the next save point overwrote or removed it. - A save loaded while the world runs reaches the world sections: they load again. Before, the next save point wrote their live state over the loaded data. Online players keep their live data. - Item marks: a world start with no stored marks clears the marks of the previous world (mission change, Workbench play), which were written into the new world's save.
- Game Version
- 1.8.0.13
- Created
- Mon, 05 Oct 2026 12:07:14 GMT
- Last Modified
- Mon, 05 Oct 2026 12:07:22 GMT
1.0.18
## [1.0.18] ### Added - `LHDF_Mod.CollectResources(kind, resources)` and `LHDF_Mods.CollectResources`: a mod offers configs to another LHDF mod by kind, without depending on it. LHDF Shop reads kind `"ShopPatch"`, LHDF Loot Spawner `"LootPool"`.
- Game Version
- 1.8.0.13
- Created
- Sun, 04 Oct 2026 22:58:02 GMT
- Last Modified
- Sun, 04 Oct 2026 22:58:06 GMT
1.0.17
## [1.0.17]
### Fixed
- LHDF tab labels: a number in a settings key starts a word ("Repair price per 100 health", was "Repair price per100 health").
- The version Core reports is 1.0.17 (it still said 1.0.6).- Game Version
- 1.8.0.13
- Created
- Sun, 04 Oct 2026 19:41:26 GMT
- Last Modified
- Sun, 04 Oct 2026 19:41:29 GMT
1.0.16
## [1.0.16] ### Added - `LHDF_VehicleOwnershipProvider.IsOwnerPlayer(vehicle, playerId)`: whether the player owns the vehicle, on both sides (the provider's other methods are server only). LHDF Shop uses it to leave a player's own fuel and repair trucks free.
- Game Version
- 1.8.0.13
- Created
- Sun, 04 Oct 2026 12:17:14 GMT
- Last Modified
- Sun, 04 Oct 2026 12:17:19 GMT
1.0.15
## [1.0.15] ### Added - `LHDF_Reports.Publish(kind, json)` and `GetOnPublished()`: small live data a mod announces when it changes (no report, no files). LHDF Encounters publishes the active missions with it. - For LHDF Data's world export: `LHDF_WorldIndex.WriteJson` / `WriteJsonStep` (the index as JSON in the cache file's layout, in slices of 150 buildings), `LHDF_CoreSystem.GetPlaceableKinds` and `LHDF_PlaceableGrid.GetAll` (list every placeable), `LHDF_PlaceableComponent.GetMapLabel` (a label for maps), and `LHDF_JsonWriter` with a chunk size and `Values` (one append per record). - Reports for LHDF Data: `LHDF_ReportOutput` sends a report job's data lines to the HTML report, to a `.json` file next to it (e.g. `Core/PerformanceReport.json`) and to chunks in memory. `LHDF_Reports` (`LHDF_CoreSystem.GetReports()`) lets mods register a report source and tells listeners when a report was written, so LHDF Data can request and upload reports without knowing the mods. The performance report is registered as `report.perf`. - `LHDF_JsonWriter`: a streaming JSON builder that writes into 16 KB chunks instead of one growing string (appending to a 1 MB string costs up to 40 ms per frame slice, and `string.Substring` returns at most 8191 characters). Commas are placed automatically. Used by LHDF Data; the report jobs move to it later. - Item marks (`LHDF_ItemMarks`): a mod marks single items with a short key, and the mark stays with the item wherever it goes (dropped, looted, stored, after a restart), without changing vanilla's save records: world section `Core.ItemMarks` by persistence id, item state `Core.Marks` in the character snapshot. `LHDF_FreshCharacters.GetOnFresh()` says when a player's character was created from a prefab rather than loaded or restored. LHDF Shop uses both for the gear a character spawned with.
- Game Version
- 1.8.0.13
- Created
- Sat, 03 Oct 2026 20:55:07 GMT
- Last Modified
- Sat, 03 Oct 2026 20:55:12 GMT
1.0.14
- Game Version
- 1.8.0.13
- Created
- Sat, 03 Oct 2026 14:24:25 GMT
- Last Modified
- Sat, 03 Oct 2026 14:24:28 GMT
1.0.13
## [1.0.13] ### Fixed - A player who logged out with two weapons found the one from the second weapon slot on the ground after logging in again, without its magazine and attachments (those went into the inventory, or also to the ground when it was full). The engine refuses a weapon spawned into the second slot by prefab, even when that slot is empty. Core now puts it in the way vanilla equips a weapon: spawned first, then inserted into the slot. ### Added - `LHDF_SettingsService.SaveLiveKey`: a mod stores a key it changed itself (also a list or map, not only a key flagged live) in `<Mod>.live.json` with the other Game Master changes, and the clients get it as after a live change. Used by the Shop's GM Config tab. - When a restored character's item still cannot be placed, the server log says why: what is in the slot, whether the storage and the inventory accept the item, the reason vanilla records (too big, too heavy), the carried weight, and whether replaced items are still there.
- Game Version
- 1.8.0.13
- Created
- Sat, 03 Oct 2026 12:03:54 GMT
- Last Modified
- Sat, 03 Oct 2026 12:03:57 GMT
1.0.12
## [1.0.12] ### Fixed - Gear a player looted from encounter AI (or from another player who had looted it) was gone after logging out and in again, even a few seconds later, and was gone from a crate or vehicle after a restart. That gear is kept out of the save while it belongs to the AI, and stayed out of it after a player took it. Every item put into a saved inventory (a player, a crate, a vehicle, a base storage) is now saved with it.
- Game Version
- 1.8.0.13
- Created
- Fri, 02 Oct 2026 19:53:46 GMT
- Last Modified
- Fri, 02 Oct 2026 19:53:50 GMT