LHDF Loot Spawner

by Boomstick Barry

1.0.16

## [1.0.16]

### Fixed

- Ending or reloading a session no longer logs a burst of loot system script errors: removing a loot area no longer changes its building list while walking it (AGT-195). Loot behaviour during play is unchanged.
Game Version
1.8.0.13
Created
Sat, 17 Oct 2026 09:42:47 GMT
Last Modified
Sat, 17 Oct 2026 09:42:51 GMT

1.0.15

## [1.0.15]

### Fixed

- Rebuilding a large loot area is faster: the candidate lookup during an area rebuild is now a set lookup instead of a search per building (the cost grew with buildings times candidates), and the ground spots of a rebuilt area now leave the server-wide site list in one pass instead of one search per spot (AGT-130). Loot counts and which area owns which building are unchanged. The rebuild time is the perf scope `LootSpawner.AreaRebuild`.
Game Version
1.8.0.13
Created
Mon, 12 Oct 2026 11:32:34 GMT
Last Modified
Mon, 12 Oct 2026 11:32:39 GMT

1.0.14

## [1.0.14]

### Changed

- A container search that finds nothing no longer leaves a stash behind: only a search that finds something makes one (user, 2026-10-10). The searcher still sees "Nothing useful in the ...", and the container stays searched until its respawn time as before. A stash that exists already (from an earlier search that found something) is unchanged, and stashes are still kept until the server stops or a Game Master clears the area.
- Stashes show the name of their container's type ("kitchen cupboard", "locker") when selected in the inventory's nearby list (the item details) instead of "Container", so neighbouring searched containers can be told apart (user, 2026-10-10). The name comes from the container types the client already has; nothing new is sent. The title above an opened stash still reads "Container": vanilla takes it from the prefab, not per stash.

### Fixed

- Putting an item into a stash (a search filling it, or a player moving items in) threw "NULL pointer to instance" in the script log on the server and on clients, on every item: the stash carried a character inventory manager, which has no character storage there. The stash no longer has an inventory manager, as vanilla's ammo boxes (user, 2026-10-10). Items always arrived; only the log and the code after the throw were affected.
Game Version
1.8.0.13
Created
Sat, 10 Oct 2026 19:34:57 GMT
Last Modified
Sat, 10 Oct 2026 19:35:09 GMT

1.0.13

## [1.0.13]

### Changed

- `bothFloorShare` defaults to 0.5 again (was 0.25): in an area on Both that keeps the server default, floor and ground spots roll at half their chance next to the searchable containers (user, 2026-10-10). A `LootSpawner.json` that sets it, or an area with its own floor share, is unchanged.
Game Version
1.8.0.13
Created
Sat, 10 Oct 2026 12:12:14 GMT
Last Modified
Sat, 10 Oct 2026 12:12:19 GMT

1.0.12

## [1.0.12]

### Changed

- `bothFloorShare` defaults to 0.25 (was 0.5): in an area on Both that keeps the server default, floor and ground spots roll at a quarter of their chance next to the searchable containers (user, 2026-10-09). A `LootSpawner.json` that sets it, or an area with its own floor share, is unchanged.
- Loot spots in buildings come from LHDF Core's building catalog (`docs/tdd/LHDF_Core_WorldMap.md` 6.4) instead of random trace columns. Each building prefab's floors are measured once (cached by Core) with the prefab's furniture marked: loot lies on free floor and on tables, cupboards, shelves and beds, no longer inside wardrobes, beds or cupboards (on a dedicated server a furnished house's props are separate entities, which the old columns did not see). Each building picks its own spots, the same on every start; on Nizla 20 furnished houses got 100 spots, all confirmed, none inside furniture. Needs LHDF Core 1.0.31.

### Removed

- `pointAttempts` (trace columns per building): spots are no longer traced per column. A `LootSpawner.json` that still sets it gets a warning naming Core's `buildingCellSize`; the settings schema is 2. `_cache/LootSpots.json` is no longer read or written and can be deleted.
Game Version
1.8.0.13
Created
Fri, 09 Oct 2026 11:13:43 GMT
Last Modified
Fri, 09 Oct 2026 11:13:53 GMT

1.0.11

## [1.0.11]

### Fixed

- Container search requests (start, finish, cancel) share a budget per player: a burst of 6, then 3 a second (`docs/reports/lhdf-mod-suite-audit.html` L1). It is charged before the container is looked up, so refused requests cost it too; a client sending requests for unknown or distant containers can no longer make the server look them up as fast as it sends. A real search takes at least a second and never reaches the limit. Dropped requests are counted in one warning a minute at most.
Game Version
1.8.0.13
Created
Fri, 09 Oct 2026 09:27:50 GMT
Last Modified
Fri, 09 Oct 2026 09:27:54 GMT

1.0.10

## [1.0.10]

### Fixed

- The loot report no longer freezes the server: it wrote all mode tables in one call (2.6 s on Nizla, lines of up to 190 KB built item by item) and the terrain and page tail in another. The mode tables now go 400 items per step in short lines, the areas 10 and the terrain 32 rows per step; no step of the report reached the 25 ms warning on Nizla. The page and its JSON are unchanged. Each phase is its own perf scope (`LootSpawner.Report.ModeTables`, `.Areas`, ...).
Game Version
1.8.0.13
Created
Thu, 08 Oct 2026 01:01:31 GMT
Last Modified
Thu, 08 Oct 2026 01:01:37 GMT

1.0.9

## [1.0.9]

### Changed

- A floor or ground spot rolls each category once: its items are from different categories, so it no longer holds a pile of three rifles with their magazines (two rifles at one spot happened on about one in eight spots of a military building in a military area). A spot whose table has fewer categories than its roll count gets fewer items. Container searches are unchanged.
- Military mode: military buildings and police stations put 1 to 2 items on a spot (was 1 to 3).
Game Version
1.8.0.13
Created
Wed, 07 Oct 2026 23:34:08 GMT
Last Modified
Wed, 07 Oct 2026 23:34:18 GMT

1.0.8

## [1.0.8]

### Added

- Searchable containers: where an area's placement has them, players aim at a cupboard, shelf, wardrobe, medical cabinet, crate, box, sack, safe, vehicle wreck, a dead zombie or civilian (24 types) and hold "Search the <name>"; any part of the prop counts. The search takes the type's time, makes noise that Project Outbreak's zombies hear (with LHDF Project Outbreak), and rolls the type's table of the area's mode, partly the building's. What it finds goes into the container and opens in the vanilla inventory. Every player searches a container once; from then on they open it at once ("Open"). The first search rolls the loot; another player's first search takes the same time and opens the same contents; after the respawn time (the area's or server's `respawnMinutes`) a search rolls more into it. Leftovers stay in the container until the server stops; a restart rolls every container anew. A body is searched once. Safes need a wrench or a hammer. The server checks every search (reach, the time it took, the tool, one rolling search at a time). New settings: `containers`, `containerReach`, `containerRespawnMinutes`, `searchCooldownSeconds`, `searchNoiseSeconds`, `bodyFactions` (Z, CIV). Needs the LHDF Core with the look-at service and the noise provider.
- Loot placement per loot area: Floor (on floors and ground spots, as before), Containers (in searchable furniture, wrecks and bodies) or Both. "Server default" uses the new `placement` setting, which also applies to world loot; it is `floor`, so existing servers and saved areas keep their loot. With `containers` off every placement acts as Floor.
- In an area on Both, its floor and ground loot is thinned by a share: the area's "Floor loot with containers", or the new `bothFloorShare` setting (50 %). Changing the placement or the share rolls the area's buildings again.
- A "Search noise" multiplier per area and the `searchNoise` setting.
- Game Master attributes "Loot placement", "Floor loot with containers" and "Search noise"; `Areas.json` fields `placement` (`floor`, `containers`, `both`, `server`), `floorShare` and `searchNoise` (-1: the server's).
- The loot report shows each area's placement and counts the floor share in its odds.
- Searchable container types (24): kitchen cupboard (also stoves), cabinet (wall units, bookshelves), fridge (also freezers), shelf, shop shelf (shop shelves, counters, cashier desks), wardrobe, drawer (also desks and filing cabinets), locker (also military cabinet tables), first aid box, medical cabinet, medical bin, basket (also food carriers), washing machine, fire box, barrel, workbench (also vice workbenches, racks, toolboxes), crate (also plastic pallet crates), box, sack, suitcase, bin, safe (needs a wrench or Project Outbreak's hammer), vehicle wreck and body, with every vanilla variant of their props listed (many variants do not inherit from their base prefab; `_tools/gen_loot_containers.py` writes the list), search time, building share, noise and tools (`LHDF_LootContainers.conf`; `LootSpawner/Containers.json` changes or adds types). Every mode has a table per container type (`containerTypes`, changed in `Modes.json` like `buildingTypes`).
Game Version
1.8.0.13
Created
Wed, 07 Oct 2026 05:12:48 GMT
Last Modified
Wed, 07 Oct 2026 05:12:58 GMT

1.0.7

## [1.0.7]

### Changed

- A prefab that two loot pools hold in the same category is an error in the log, naming both pools with a count and an example, and the first pool's item is used. Before, the later pool replaced it silently. The same prefab in different categories is fine.
Game Version
1.8.0.13
Created
Mon, 05 Oct 2026 12:15:11 GMT
Last Modified
Mon, 05 Oct 2026 12:15:17 GMT

1.0.6

## [1.0.6]

### Added

- Loot pools also come from LHDF mods that do not depend on the Loot Spawner: they offer them through their LHDF mod descriptor (kind `"LootPool"`, LHDF Core 1.0.18). Pools registered the old way are unchanged.
Game Version
1.8.0.13
Created
Sun, 04 Oct 2026 22:59:32 GMT
Last Modified
Sun, 04 Oct 2026 22:59:36 GMT

1.0.5

## [1.0.5]

### Added

- A `construction` loot category that only industrial buildings roll, in every mode. It has no items of its own; another pool fills it (Lost Hope Survival: boxes of nails).
Game Version
1.8.0.13
Created
Sun, 04 Oct 2026 19:42:13 GMT
Last Modified
Sun, 04 Oct 2026 19:42:17 GMT

1.0.4

## [1.0.4]

### Added

- The loot report also writes `LootSpawner/LootReport.json` (the data alone) and is registered with LHDF Core as `report.loot`, so LHDF Data sends it to the website when a Game Master writes it.
Game Version
1.8.0.13
Created
Sat, 03 Oct 2026 20:57:51 GMT
Last Modified
Sat, 03 Oct 2026 20:57:57 GMT

1.0.3

## [1.0.3] - 2026-10-01

### Added

- Performance log scopes (LHDF Core, `-lhdfPerf`): `LootSpawner.AreaRebuild`, `.QueueSites`, `.Activate`, `.ActiveSites`, `.SpotCacheSave`, `.ItemTaken`; counters for active sites, queued sites and items in the world.
- "Write loot report" is also in the scenario settings (LHDF tab, section LHDF Loot Spawner), not only on a Loot Area.

### Changed

- Game Master attributes are in the single "LHDF" tab (section LHDF Loot Spawner), no longer in a tab of their own.
Game Version
1.8.0.13
Created
Fri, 02 Oct 2026 14:54:05 GMT
Last Modified
Fri, 02 Oct 2026 14:54:09 GMT

1.0.2

Game Version
1.8.0.13
Created
Thu, 01 Oct 2026 15:34:24 GMT
Last Modified
Thu, 01 Oct 2026 15:34:28 GMT

1.0.1

Game Version
1.8.0.13
Created
Thu, 01 Oct 2026 04:45:34 GMT
Last Modified
Thu, 01 Oct 2026 04:45:39 GMT

1.0.0

Game Version
1.8.0.13
Created
Thu, 01 Oct 2026 04:24:20 GMT
Last Modified
Thu, 01 Oct 2026 04:24:23 GMT

Showing 1 to 17 of 17 results

Rows per page