Project Zomboid

Project Zomboid

The Engineer
FailingWasp 20 Sep, 2024 @ 4:15pm
How to add books to loot tables
This is a great mod, the only snag is the book spawning doesn't work/exist. Here's how to add it:

Locate location of zomboid workshop mods (should be \workshop\content\108600\)

Edit the following file using notepad++ or text editor of choice, notepad if you are feeling brave:
\2906633595\mods\TheEngineer\media\lua\server\Items\SpoonEngineerGiveItems.lua

Add the following underneath

require "Items/SuburbsDistributions";

And before:

function GetEngineerInjury_OnCreate(items, result, player) if ZombRand(300) == 0 then player:getBodyDamage():getBodyPart(BodyPartType.Hand_L):SetScratchedWeapon(true); end if ZombRand(300) == 0 then player:getBodyDamage():getBodyPart(BodyPartType.Hand_R):SetScratchedWeapon(true); end end

require 'Items/ProceduralDistributions' table.insert(ProceduralDistributions["list"]["BookstoreBooks"].items, "Radio.RadioMag1"); table.insert(ProceduralDistributions["list"]["BookstoreBooks"].items, 2); table.insert(ProceduralDistributions["list"]["BookstoreBooks"].items, "Radio.RadioMag2"); table.insert(ProceduralDistributions["list"]["BookstoreBooks"].items, 2); table.insert(ProceduralDistributions["list"]["ClassroomMisc"].items, "Radio.RadioMag1"); table.insert(ProceduralDistributions["list"]["ClassroomMisc"].items, 0.01); table.insert(ProceduralDistributions["list"]["ClassroomMisc"].items, "Radio.RadioMag2"); table.insert(ProceduralDistributions["list"]["ClassroomMisc"].items, 0.01); table.insert(ProceduralDistributions["list"]["ClassroomShelves"].items, "Radio.RadioMag1"); table.insert(ProceduralDistributions["list"]["ClassroomShelves"].items, 0.01); table.insert(ProceduralDistributions["list"]["ClassroomShelves"].items, "Radio.RadioMag2"); table.insert(ProceduralDistributions["list"]["ClassroomShelves"].items, 0.01); table.insert(ProceduralDistributions["list"]["CrateBooks"].items, "Radio.RadioMag1"); table.insert(ProceduralDistributions["list"]["CrateBooks"].items, 0.5); table.insert(ProceduralDistributions["list"]["CrateBooks"].items, "Radio.RadioMag2"); table.insert(ProceduralDistributions["list"]["CrateBooks"].items, 0.5); table.insert(ProceduralDistributions["list"]["LibraryBooks"].items, "Radio.RadioMag1"); table.insert(ProceduralDistributions["list"]["LibraryBooks"].items, 1); table.insert(ProceduralDistributions["list"]["LibraryBooks"].items, "Radio.RadioMag2"); table.insert(ProceduralDistributions["list"]["LibraryBooks"].items, 1); table.insert(ProceduralDistributions["list"]["LivingRoomShelf"].items, "Radio.RadioMag1"); table.insert(ProceduralDistributions["list"]["LivingRoomShelf"].items, 0.01); table.insert(ProceduralDistributions["list"]["LivingRoomShelf"].items, "Radio.RadioMag2"); table.insert(ProceduralDistributions["list"]["LivingRoomShelf"].items, 0.01); table.insert(ProceduralDistributions["list"]["LivingRoomShelfNoTapes"].items, "Radio.RadioMag1"); table.insert(ProceduralDistributions["list"]["LivingRoomShelfNoTapes"].items, 0.01); table.insert(ProceduralDistributions["list"]["LivingRoomShelfNoTapes"].items, "Radio.RadioMag2"); table.insert(ProceduralDistributions["list"]["LivingRoomShelfNoTapes"].items, 0.01); table.insert(ProceduralDistributions["list"]["PostOfficeBooks"].items, "Radio.RadioMag1"); table.insert(ProceduralDistributions["list"]["PostOfficeBooks"].items, 0.5); table.insert(ProceduralDistributions["list"]["PostOfficeBooks"].items, "Radio.RadioMag2"); table.insert(ProceduralDistributions["list"]["PostOfficeBooks"].items, 0.5); table.insert(ProceduralDistributions["list"]["ShelfGeneric"].items, "Radio.RadioMag1"); table.insert(ProceduralDistributions["list"]["ShelfGeneric"].items, 0.01); table.insert(ProceduralDistributions["list"]["ShelfGeneric"].items, "Radio.RadioMag2"); table.insert(ProceduralDistributions["list"]["ShelfGeneric"].items, 0.01); table.insert(ProceduralDistributions["list"]["BookstoreBooks"].items, "Radio.RadioMag3"); table.insert(ProceduralDistributions["list"]["BookstoreBooks"].items, 2); table.insert(ProceduralDistributions["list"]["BookstoreBooks"].items, "Radio.SpoonEngineerDegree"); table.insert(ProceduralDistributions["list"]["BookstoreBooks"].items, 2); table.insert(ProceduralDistributions["list"]["ClassroomMisc"].items, "Radio.RadioMag3"); table.insert(ProceduralDistributions["list"]["ClassroomMisc"].items, 0.01); table.insert(ProceduralDistributions["list"]["ClassroomMisc"].items, "Radio.SpoonEngineerDegree"); table.insert(ProceduralDistributions["list"]["ClassroomMisc"].items, 0.01); table.insert(ProceduralDistributions["list"]["ClassroomShelves"].items, "Radio.RadioMag3"); table.insert(ProceduralDistributions["list"]["ClassroomShelves"].items, 0.01); table.insert(ProceduralDistributions["list"]["ClassroomShelves"].items, "Radio.SpoonEngineerDegree"); table.insert(ProceduralDistributions["list"]["ClassroomShelves"].items, 0.01); table.insert(ProceduralDistributions["list"]["CrateBooks"].items, "Radio.RadioMag3"); table.insert(ProceduralDistributions["list"]["CrateBooks"].items, 0.5); table.insert(ProceduralDistributions["list"]["CrateBooks"].items, "Radio.SpoonEngineerDegree"); table.insert(ProceduralDistributions["list"]["CrateBooks"].items, 0.5); table.insert(ProceduralDistributions["list"]["LibraryBooks"].items, "Radio.RadioMag3"); table.insert(ProceduralDistributions["list"]["LibraryBooks"].items, 1); table.insert(ProceduralDistributions["list"]["LibraryBooks"].items, "Radio.SpoonEngineerDegree"); table.insert(ProceduralDistributions["list"]["LibraryBooks"].items, 1); table.insert(ProceduralDistributions["list"]["LivingRoomShelf"].items, "Radio.RadioMag3"); table.insert(ProceduralDistributions["list"]["LivingRoomShelf"].items, 0.01); table.insert(ProceduralDistributions["list"]["LivingRoomShelf"].items, "Radio.SpoonEngineerDegree"); table.insert(ProceduralDistributions["list"]["LivingRoomShelf"].items, 0.01); table.insert(ProceduralDistributions["list"]["LivingRoomShelfNoTapes"].items, "Radio.RadioMag3"); table.insert(ProceduralDistributions["list"]["LivingRoomShelfNoTapes"].items, 0.01); table.insert(ProceduralDistributions["list"]["LivingRoomShelfNoTapes"].items, "Radio.SpoonEngineerDegree"); table.insert(ProceduralDistributions["list"]["LivingRoomShelfNoTapes"].items, 0.01); table.insert(ProceduralDistributions["list"]["PostOfficeBooks"].items, "Radio.RadioMag3"); table.insert(ProceduralDistributions["list"]["PostOfficeBooks"].items, 0.5); table.insert(ProceduralDistributions["list"]["PostOfficeBooks"].items, "Radio.SpoonEngineerDegree"); table.insert(ProceduralDistributions["list"]["PostOfficeBooks"].items, 0.5); table.insert(ProceduralDistributions["list"]["ShelfGeneric"].items, "Radio.RadioMag3"); table.insert(ProceduralDistributions["list"]["ShelfGeneric"].items, 0.01); table.insert(ProceduralDistributions["list"]["ShelfGeneric"].items, "Radio.SpoonEngineerDegree"); table.insert(ProceduralDistributions["list"]["ShelfGeneric"].items, 0.01);

Enjoy :)

Feel free to adjust the loot values.
Last edited by FailingWasp; 20 Sep, 2024 @ 4:17pm
< >
Showing 1-6 of 6 comments
Purple Nebula 14 Oct, 2024 @ 6:28am 
Thank you!! Didn't see this until now, love Steam notifications not notifying :'3
Sleepman 25 Oct, 2024 @ 6:47am 
Вы забыли добавить в рецепты электрические провода!!! Которые, кстати уже есть в игре. Нужно много проводов и больше электрических компонентов !!!
bobbycorps 3 Dec, 2024 @ 6:10pm 
thx
this is not working, also very confusing.
hate to necro this thread, but does anyone know if this fix can be thrown in an existing save?
@Lost_Seer No idea if this still works as it looks like this mod hasn't been updated in a long time. If you are still on Build 41, it should work on an existing save. But you have to enter areas you have never explored for it to roll the new loot tables.
< >
Showing 1-6 of 6 comments
Per page: 1530 50