Jump to content


The Indie Stone
  • Posts

  • Joined

  • Last visited


About RingoD123

  • Rank

Profile Information

  • Gender
    Not Telling

Recent Profile Visitors

5098 profile views
  1. Depends on the road you're wanting to make, the best way to know is to check: https://map.projectzomboid.com/ You can then see and count how wide every type of road is in the vanilla map.
  2. Yes, all bookshelves, shelves, magazine racks etc get populated with their "world filler" items in game when there is stuff on the shelves to be looted.
  3. Yes, you would want to make "lots" like this in BuildingEd and then place them in your world using WorldEd.
  4. Remove the wall trims using the window on the right hand side of BuildingEd before placing rooms/walls. They will be under: Trim - Interior Walls and Trim - Exterior Walls set both to none. Once you have placed your walls/rooms you can then add wall trim separately afterwards.
  5. Your images should either be BMP or PNG. You need both and they should be in the same folder as each other. they should be MyMap.bmp and MyMap_veg.bmp or MyMap.png and MyMap_veg.png.
  6. So you have a "media/lua/server/items" folder in your mod structure yes? and you have both a "mydistributions.lua" file and a "myproceduraldistributions.lua file in there? The code in your "mydistributions.lua" works but you cant find the items you're adding through your "myproceduraldistributions.lua" file in bedroom wardrobes? Have you tried adding an edited version of the "bedroom" "Wardrobe" definition in your "mydistributions.lua" file to increase the "min" values to 1 or more on the proclist entries?
  7. In what way does it not work? Are you getting any errors from it in your console log? Some of your entries don't have rolls in them, some only have a small amount of rolls (meaning they will only spawn 1-2 items at max). 100 does not mean a 100% chance, it is a weight, meaning it will be more likely to be rolled than items with a smaller weight. All of these values are also changed by your games loot settings, for example if using sandbox mode and you set all loot to rare, you will get less loot spawning than the values in your distribution entries.
  8. Your procedural Distribution specifies that only 1 item total will be rolled per container, not one of each. Your distribution specifies that it only has to roll for a single container of that type within a pharmacystorage roomdef, and up to a max of 6 containers. So the way you currently have it means that it would only spawn a single CustomItem each on anywhere between 1 to 6 metal shelves.
  9. The above guide does. First create and save a custom procedural distributions lua file such as MyMapModNameProceduralDistributions.lua in your mods "media/lua/server/items" folder, then use the following code: local function preDistributionMerge() ProceduralDistributions.list.MagazineRackMapsRingo = { rolls = 6, items = { "MuldraughMap", 5, "WestpointMap", 5, "MarchRidgeMap", 5, "RosewoodMap", 5, "RiversideMap", 5, "BedfordMap", 5, "BedfordMap", 5, }, } end Events.OnPreDistributionMerge.Add(preDistributionMerge); That is an example of a new Procedural Distributions entry. Then you want to add that new entry to existing definitions: Like above, create and save a custom distributions lua file, such as MyMapModNameDistributions.lua in your "media/lua/server/items" folder, the use the following code, wherever you see "bedford", use your map mod name or something unique instead: local bedforddistributionTable = { all = { shelvesmag = { procedural = true, procList = { {name="MagazineRackNewspaper", min=1, max=5}, {name="MagazineRackMixed", min=2, max=99}, {name="MagazineRackMapsRingo", min=2, max=5}, } }, } } table.insert(Distributions, 2, bedforddistributionTable); In this example these two files will add a new Procedural Distribution definition and then add that new ProcDis to the existing shelvesmag container in the all room definition.
  10. This guide will teach you how to create Stash Map mods. If you have not already then it is worth checking out this guide on how to add lootable maps to the game world using the new procedural distributions system: Once your lootable map is in game (or if you are wanting to add more using the ones already in game) you can then go ahead with this tutorial for creating your Stash maps. The first thing that you need to do is create a new folder named "StashDescriptions" in your mods "media\lua\shared" folder, if none of these folders already exist then create them. Then you will need to create a StashDesc.lua file in the StashDescriptions folder, name it something unique for your mod (e.g bedfordStashDesc.lua). Once you have created the new file, open it and paste the following line in as the first line: Spoiler require "StashDescriptions/StashUtil"; Now you can start adding your stash maps, just leave a blank line after the first line you added above. Below are 2 examples each of the different stash types that can be made: Spoiler -- guns local stashMap1 = StashUtil.newStash("BedfordStashMap1", "Map", "Base.BedfordMap", "Stash_AnnotedMap"); stashMap1.spawnOnlyOnZed = true; stashMap1.daysToSpawn = "10"; stashMap1.zombies = 5 stashMap1.traps = "5"; stashMap1.barricades = 50; stashMap1.buildingX = 13782; stashMap1.buildingY = 10524; stashMap1.spawnTable = "GunCache2"; stashMap1:addContainer("GunBox","floors_interior_tilesandwood_01_62",nil,"bedroom",nil,nil,nil); stashMap1:addStamp("media/ui/LootableMaps/map_x.png",nil,343,281,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/BedfordText1.png",nil,366,278,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_x.png",nil,705,474,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/BedfordText2.png",nil,650,496,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_arrowwest.png",nil,552,282,1,0,0); stashMap1:addStamp("media/ui/LootableMaps/BedfordText3.png",nil,575,279,1,0,0); local stashMap1 = StashUtil.newStash("BedfordStashMap2", "Map", "Base.BedfordMap", "Stash_AnnotedMap"); stashMap1.daysToSpawn = "0"; stashMap1.buildingX = 13751; stashMap1.buildingY = 10531; stashMap1.zombies = 2; stashMap1.barricades = 50; stashMap1.spawnTable = "GunCache2"; stashMap1:addContainer("GunBox","floors_interior_tilesandwood_01_62",nil,"bedroom",nil,nil,nil); stashMap1:addContainer("GunBox","carpentry_01_16",nil,nil,nil,nil,nil); stashMap1:addStamp("media/ui/LootableMaps/map_x.png",nil,343,281,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_x.png",nil,705,474,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_x.png",nil,552,282,1,0,0); -- shotgun local stashMap1 = StashUtil.newStash("BedfordStashMap3", "Map", "Base.BedfordMap", "Stash_AnnotedMap"); stashMap1.daysToSpawn = "0"; stashMap1.buildingX = 13620; stashMap1.buildingY = 10515; stashMap1.zombies = 2; stashMap1.barricades = 50; stashMap1.spawnTable = "ShotgunCache2"; stashMap1:addStamp("media/ui/LootableMaps/map_target.png",nil,480,374,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_x.png",nil,620,507,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_question.png",nil,973,335,1,0,0); local stashMap1 = StashUtil.newStash("BedfordStashMap4", "Map", "Base.BedfordMap", "Stash_AnnotedMap"); stashMap1.daysToSpawn = "0"; stashMap1.buildingX = 13596; stashMap1.buildingY = 10516; stashMap1.zombies = 2; stashMap1.barricades = 50; stashMap1.spawnTable = "ShotgunCache2"; stashMap1:addContainer("ShotgunBox",nil,"Base.Bag_DuffelBag",nil,nil,nil,nil); stashMap1:addContainer("ShotgunBox","carpentry_01_16",nil,nil,nil,nil,nil); stashMap1:addStamp("media/ui/LootableMaps/map_target.png",nil,480,374,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_target.png",nil,620,507,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_target.png",nil,973,335,1,0,0); -- tools local stashMap1 = StashUtil.newStash("BedfordStashMap5", "Map", "Base.BedfordMap", "Stash_AnnotedMap"); stashMap1.daysToSpawn = "0"; stashMap1.buildingX = 13090; stashMap1.buildingY = 10897; stashMap1.zombies = 2; stashMap1.barricades = 50; stashMap1.spawnTable = "ToolsCache1"; stashMap1:addStamp("media/ui/LootableMaps/map_o.png",nil,472,466,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_exclamation.png",nil,750,425,0,0,0); local stashMap1 = StashUtil.newStash("BedfordStashMap6", "Map", "Base.BedfordMap", "Stash_AnnotedMap"); stashMap1.daysToSpawn = "0"; stashMap1.buildingX = 13112; stashMap1.buildingY = 10899; stashMap1.zombies = 2; stashMap1.barricades = 50; stashMap1.spawnTable = "ToolsCache1"; stashMap1:addContainer("ToolsBox",nil,"Base.Bag_DuffelBag",nil,nil,nil,nil); stashMap1:addContainer("ToolsBox","carpentry_01_16",nil,nil,nil,nil,nil); stashMap1:addStamp("media/ui/LootableMaps/map_exclamation.png",nil,472,466,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_exclamation.png",nil,750,425,0,0,0); -- survivor houses local stashMap1 = StashUtil.newStash("BedfordStashMap7", "Map", "Base.BedfordMap", "Stash_AnnotedMap"); stashMap1.daysToSpawn = "0"; stashMap1.buildingX = 13248; stashMap1.buildingY = 11313; stashMap1.zombies = 2; stashMap1.barricades = 50; stashMap1.spawnTable = "SurvivorCache1"; stashMap1:addContainer("GunBox","carpentry_01_16",nil,nil,nil,nil,nil); stashMap1:addContainer("ShotgunBox",nil,"Base.Bag_DuffelBag",nil,nil,nil,nil); stashMap1:addStamp("media/ui/LootableMaps/map_house.png",nil,348,518,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_arrowsouth.png",nil,318,459,0,0,0); local stashMap1 = StashUtil.newStash("BedfordStashMap8", "Map", "Base.BedfordMap", "Stash_AnnotedMap"); stashMap1.daysToSpawn = "0"; stashMap1.buildingX = 13242; stashMap1.buildingY = 11288; stashMap1.zombies = 2; stashMap1.barricades = 50; stashMap1.spawnTable = "SurvivorCache1"; stashMap1:addContainer("ToolsBox",nil,"Base.Bag_DuffelBag",nil,nil,nil,nil); stashMap1:addContainer("ToolsBox","carpentry_01_16",nil,nil,nil,nil,nil); stashMap1:addContainer("GunBox","carpentry_01_16",nil,nil,nil,nil,nil); stashMap1:addContainer("ShotgunBox",nil,"Base.Bag_DuffelBag",nil,nil,nil,nil); stashMap1:addStamp("media/ui/LootableMaps/map_house.png",nil,348,518,0,0,0); stashMap1:addStamp("media/ui/LootableMaps/map_house.png",nil,318,459,0,0,0); As you can see with the examples above each map has its own unique name given as the first parameter in the brackets. Next up is it's item type, which is obviously Map, then the in game item it actually uses, in this case the map we added to the base game from the lootable map tutorial listed above. The last parameter is the "Stash_AnnotedMap" custom name which is needed, and yes it is spelled incorrectly. We can govern how many in game days it takes before the stash maps become findable, how many barricades are put up around the building, how many traps are inside and how many zombies should spawn inside, these are maximum values, not guaranteed values. We can also choose if the stash maps can only be found on zombies or not. The buildingX and buildingY co-ordinates are the co-ordinates of the building you want the stash to appear in, in world co-ordinates, you can always use the https://map.projectzomboid.com/ website to help with your co-ordinates if need be. Next we have to choose what loot table the stash will pull from, in the above examples we are using SurvivorCache1, ToolsCache1, ShotgunCache2 and Guncache2, these act like regular room definitions but for the whole building. As you can see in some of the example above we are also spawning in some new containers, some examples are spawning in duffel bags, some wooden crates (carpentry_01_16) and some even as "hidden" floor stashes. Lets take a quick look at each: Spoiler stashMap1:addContainer("ToolsBox",nil,"Base.Bag_DuffelBag",nil,nil,nil,nil); - Here we are adding a duffelbag and populating it from the "ToolsBox" definition. It will spawn in a random position in the building. stashMap1:addContainer("GunBox","carpentry_01_16",nil,nil,nil,nil,nil); - Here we are adding a wooden crate and populating it from the "GunBox" definition. It will spawn in a random position in the building. stashMap1:addContainer("GunBox","floors_interior_tilesandwood_01_62",nil,"bedroom",nil,nil,nil); - Here we are adding a floor stash to a bedroom and populating it using the "GunBox" definition. Notice how if a container is using an item (duffelbag) it does not need a tile (carpentry_01_16 or floors_interior_tilesandwood_01_62) and vice-versa. Also notice how a room is specified with the floor stash. The last 3 parameters are for an X,Y and Z postion within the buildings lot, but are not used in the above examples. These Stash definitions can be found in distributions.lua and as with other distributions can be modded or completely new ones added. As well as the lootable map guide posted earlier in this guide, there is also this guide on customizing loot that can be helpful: The last thing that we need to do is make some actual annotated maps so the player knows where to actually go to find the stashes. In the above examples you can see the "addStamp" lines, these will add stamps to your base lootable maps such as arrows, exclamation marks etc, these icons can be found in your zomboid install folder in "media/ui/LootableMaps/". You can also create some text to add by using photoshop etc to save some transparent png's with text on them, you then give the X and Y co-ordinates of where on your map you want to place the stamp, you can then also specify a custom colour for your stamp using the last 3 parameters for R,G and B. A good tip is to have your map open in Photoshop and create a new layer over the top, you can then add the games icons on this new layer and note their x and y to use in your "addStamp" line. And that's it, you now have custom Annotated Stash Maps!
  11. Any time this happens to me I just have to restart my PC and it starts working again fine.
  12. All of the new zones have now been added to the tutorial as well as the lootable map guide being updated, current room definitions updated and a new guide on customizing loot:
  13. Here is an example of a simple map mod using custom room definitions, custom loot zones and custom procedural distribution lists using the new loot distribution system (41.51+). 3 gas stations have been placed in a cell intended to be added to the vanilla map via a map mod, the Northern most station has a custom loot zone placed over it as shown below: It's best to use lootZone names that will be unique to your map mod to stop any possible conflict with other map mods which could cause unintended loot to spawn. The Southern most station has a pre-existing roomDef that is already defined in the Distributions.lua file, the top 2 both have a custom roomDef as shown below: Again it's best to use roomdefinitions that will be unique to your map mod, otherwise other map mods might use the same as you and may cause conflicts, causing one or more maps to start spawning unintended loot. We have also added a new item into the game, a lootable map of this new area as per this guide: , but instead of adding the item to an existing procedural distribution entry or room def, we are instead going to add a custom procedural distribution entry along with a custom room definition to take advantage of the custom roomDef we used in the top 2 gas stations and the custom loot zone we placed on the Northern most station. First create and save a custom procedural distributions lua file such as MyMapModNameProceduralDistributions.lua in your mods "media/lua/server/items" folder, then use the following code: Spoiler local function preDistributionMerge() ProceduralDistributions.list.MagazineRackMapsRingo = { rolls = 6, items = { "MuldraughMap", 5, "WestpointMap", 5, "MarchRidgeMap", 5, "RosewoodMap", 5, "RiversideMap", 5, "BedfordMap", 5, "BedfordMap", 5, }, } end Events.OnPreDistributionMerge.Add(preDistributionMerge); In the above example we have added a new procedural distributions entry named "MagazineRackMapsRingo", we have specified how many rolls it gets and the items it rolls from, in this case the new lootable map we added as well as the base game maps, as well as the "weight" of each item, with a higher number being more likely to be rolled. Adding an item in multiple times is another good way of getting it to roll more than others. The next thing we need to do is create the new room Definition in a custom distributions lua file, like above, create and save a custom distributions lua file, such as MyMapModNameDistributions.lua in your "media/lua/server/items" folder, the use the following code, wherever you see "bedford", use your map mod name or something unique instead: Spoiler local bedforddistributionTable = { bedfordgasstation = { shelvesmag = { procedural = true, procList = { {name="MagazineRackMapsRingo", min=5, max=10, forceForZones="Unique"}, {name="MagazineRackMixed", min=2, max=5, forceForZones="Unique"}, {name="MagazineRackMapsRingo", min=1, max=5}, {name="MagazineRackNewspaper", min=1, max=1}, {name="MagazineRackMixed", min=0, max=99}, } }, }, all = { shelvesmag = { procedural = true, procList = { {name="MagazineRackNewspaper", min=1, max=5}, {name="MagazineRackMixed", min=2, max=99}, {name="MagazineRackMapsRingo", min=2, max=5}, } }, } } table.insert(Distributions, 2, bedforddistributionTable); In the above example we have added a new entry for the "bedfordgasstation" roomDef we used in buildingEd and then defined what containers we would like it have rules for, in this case "shelvesmag" (any other containers in this room will take thier loot pulls from the "all" definition as we have not specified rules for them in this custom definition). We have then set it to procedural and defined it's procList. You can see that the first two lines of the procList use the forceForZones option which in this case is set to use the custom zone (Unique) we placed over the Northern most gas station, meaning that particular gas station has a different set of loot than the middle one, which has the exact same roomDef. The next 4 lines will govern the loot for the middle gas station as it has the same custom roomDef but not the custom lootZone. In this example the changes are small but you can imagine how you could make them wildly different and include rules for many more containers. Lastly we have also added an updated proclist for the existing shelvesmag containers in the "all" room definition to also pull from our new Procedural Distributions entry, this will apply to the Southern most gas station as it still uses the fossoil room def which does not have any rules for the shelvesmag container so therefore pulls it shelvesmag loot from the "all" definition. This is just a basic example, but hopefully with a bit of imagination you can see how you can now define your map mod and loot as much as you like. There is also a brilliant visual guide by @TheCommanderwhich can be found here:
  14. There is a new beta in the list on Steam - build 41.50 Previous Build To Complete Saves.
  15. Listed below are all of the current new room definitions, which should be used for internal room names in buildingEd. Under each roomdef is a list of the containers that definition has rules for. Any container you place that does not have an entry in the roomdef you have used will instead pull it's loot from the "all" definition for that container: aesthetic counter metal_shelves crate aestheticstorage metal_shelves crate all displaycasebakery restaurantdisplay plankstash cashregister campfire clothingdryer clothingwasher clothingrack freezer dishescabinet dresser postbox corn logs locker fruitbusha fruitbushb fruitbushc fruitbushd fruitbushe inventorymale inventoryfemale shelvesmag desk filingcabinet stove microwave medicine wardrobe crate counter sidetable freezer fridge vendingsnack vendingpop bin officedrawers metal_shelves shelves other armyhanger metal_shelves counter locker armystorage locker metal_shelves armysurplus shelves metal_shelves clothingrack bakery displaycase displaycasebakery counter grocerstand bar shelves counter bin barkitchen fridge freezer shelves counter bin barstorage crate bin bathroom counter medicine bedroom wardrobe plankstash sidetable locker bookstore shelves counter breakroom counter fridge overhead shelves burgerstorage metal_shelves crate burgerkitchen freezer fridge counter butcher displaycasebutcher fridge freezer shelves counter cafe counter displaycase cafekitchen fridge freezer counter shelves camping clothingrack fridge freezer counter shelves campingstorage crate candystorage metal_shelves crate candystore displaycase counter changeroom locker counter classroom counter desk metal_shelves shelves clothingstorage clothingrack metal_shelves crate clothingstore displaycase shelves clothingrack counter conveniencestore fridge freezer counter shelves cornerstore fridge freezer counter shelves dentiststorage metal_shelves departmentstore counter displaycase shelves wardrobe sidetable dining counter shelves dinerkitchen freezer fridge counter electronicsstorage crate shelves metal_shelves electronicsstore displaycase counter shelves empty crate freezer fridge counter shelves metal_shelves wardrobe farmstorage all fishingstorage counter crate fossoil fridge freezer counter shelves furniturestorage freezer fridge wardrobe sidetable crate furniturestore freezer fridge wardrobe counter garage metal_shelves crate garagestorage other bin crate gardenstore counter clothingrack metal_shelves shelves crate gasstorage crate metal_shelves gasstore fridge freezer counter shelves generalstore fridge freezer counter shelves metal_shelves generalstorestorage other giftstorage crate giftstore shelves displaycase counter gigamart grocerstand displaycasebutcher displaycasebakery freezer fridge counter shelves crate gigamartkitchen counter grocery grocerstand displaycasebakery displaycasebutcher freezer fridge counter shelves smallcrate crate grocerystorage metal_shelves fridge freezer crate gunstore counter displaycase locker metal_shelves gunstorestorage all hall counter housewarestore shelves hunting locker metal_shelves other icecreamkitchen counter freezer fridge displaycasebakery restaurantdisplay janitor metal_shelves counter crate jayschicken_kitchen restaurantdisplay freezer fridge counter jewelrystore displaycase kitchen counter overhead shelves kitchen_crepe fridge freezer counter laundry counter laumdromat -- typo in room name, keep it like this for now counter library counter liquorstore counter shelves fridge freezer livingroom shelves counter overhead lobby counter loggingfactory crate mechanic wardrobe metal_shelves medclinic counter metal_shelves medical counter metal_shelves medicaloffice counter metal_shelves medicalstorage counter metal_shelves motelroom fridge freezer bin dresser wardrobe sidetable metal_shelves motelroomoccupied freezer fridge bin dresser wardrobe sidetable musicstore shelves optometrist counter pharmacy counter fridge freezer shelves pharmacystorage metal_shelves fridge freezer counter pizzakitchen fridge freezer counter metal_shelves displaycase restaurantdisplay pizzawhirled wardrobe displaycase plazastore1 counter policestorage locker metal_shelves post counter poststorage all restaurant counter shelves restaurantkitchen freezer fridge counter security locker sewingstorage metal_shelves crate sewingstore counter shelves shed other logs shoestore shelves counter spiffoskitchen freezer fridge counter spiffosstorage metal_shelves crate sportstorage metal_shelves shelves crate clothingrack counter sportstore shelves clothingrack counter storageunit all theatre counter theatrekitchen freezer fridge counter theatrestorage crate toolstore shelves counter toystore shelves warehouse crate zippeestorage crate metal_shelves zippeestore fridge freezer counter shelves
  • Create New...