Project Zomboid

Project Zomboid

Immersive Shops [Next-Gen Update]
 This topic has been pinned, so it's probably important
Dismellion  [developer] 26 Sep, 2023 @ 9:37pm
Shop Configurations
A shop structure guide and collection of community shops posted by players. You can checkout all of my server shops here[bitbucket.org]for reference or you can use a direct shop configuration example below. You can also order me to make you a shop for you right here[www.patreon.com]


To post shop use [code][/code] formatting tag, and some short description if needed.
Please do not post plain text, links or anything like that.

FAQ
  • Categories names are NOT HARDCODED you can name them in any way you want
  • Entries order / placement / category is not relevant as item can be part of any category you add it to.
  • Entries do not have any strict relations between each other. You can have 10 duplicates of the same item within 5 categories that have the same name without breaking anything.
File Structure
    base -- Base configuration section entry
  • name -- Shop name displayed to players
  • range -- Shop activation range
  • sprite -- In-game name of the sprite to represent the trader, you can use existing mod trader sprites listed on mod page
  • generator -- true/false to create generator or { ['x'] = number, ['y'] = number, ['z'] = number } to create generator on specific coordinate.
  • x -- coordinates of shop itself
  • y -- coordinates of shop itself
  • z -- coordinates of shop itself
    data -- Shop categories and items entry
  • Category 1,
  • Category 2,
  • ...
  • Category N -- Any amount of categories you need
  • Item 1,
  • Item 2,
  • ...
  • Item N, -- Any items you need
    item -- Entry of any category
  • type -- Item the shop is selling to a player or buying from him. Has to be a full modname item aka "Base.Nails"
  • stack -- How many items to sell at once, price will not multpily by the amount
  • currency -- Item the shop is selling or buying for, aka "Base.Money"
  • buy -- Price shop is selling item to player for (N currency). If this number is 0, players will not be able to buy item.
  • sell -- Price shop is buying item from player for (N currency). If this number is 0, players will not be able to sell item.
  • skill -- Trading skill required for players to be able to buy this item.




{ ['base'] = { ['name'] = "Immersive Trader", ['range'] = 10, ['icon'] = "media/textures/Shop.png", ['sprite'] = "location_shop_mall_01_66", ['generator'] = true, ['x'] = 13270, ['y'] = 4345, ['z'] = 0 }, ['data'] = { ['Weapons'] = { {"Base.Katana", 1, "Base.Money", 4000, 1250}, {"Base.AssaultRifle2", 1, "Base.Money", 2000, 1000}, {"Base.AssaultRifle", 1, "Base.Money", 1500, 750}, {"Base.HuntingRifle", 1, "Base.Money", 1000, 500}, {"Base.VarmintRifle", 1, "Base.Money", 1000, 500}, {"Base.DoubleBarrelShotgun", 1, "Base.Money", 750, 400}, {"Base.DoubleBarrelShotgunSawnoff", 1, "Base.Money", 750, 300}, {"Base.Shotgun", 1, "Base.Money", 600, 300}, {"Base.ShotgunSawnoff", 1, "Base.Money", 600, 200}, {"Base.Revolver_Long", 1, "Base.Money", 500, 250}, {"Base.Revolver", 1, "Base.Money", 300, 150}, {"Base.Revolver_Short", 1, "Base.Money", 300, 150}, {"Base.Pistol2", 1, "Base.Money", 300, 150}, {"Base.Pistol", 1, "Base.Money", 300, 150} }, ['Weapon Parts'] = { {"Base.x8Scope", 1, "ICurrency.GemScrap", 100, 25}, {"Base.x4Scope", 1, "ICurrency.GemScrap", 50, 15}, {"Base.x2Scope", 1, "ICurrency.GemScrap", 25, 10} }, ['Ammo'] = { {"Base.Bullets45", 30, "Base.Money", 150, 3}, {"Base.Bullets44", 30, "Base.Money", 125, 3}, {"Base.308Bullets", 30, "Base.Money", 100, 2}, {"Base.556Bullets", 30, "Base.Money", 100, 2}, {"Base.ShotgunShells", 24, "Base.Money", 100, 3}, {"Base.Bullets9mm", 30, "Base.Money", 50, 1} }, ['Currency'] = { {"ICurrency.GoldScrap", 1, "Base.Money", 0, 10}, {"ICurrency.SilverScrap", 1, "Base.Money", 0, 5}, {"ICurrency.GemScrap", 1, "Base.Money", 0, 25}, {"ICurrency.GemScrap", 1, "ICurrency.GoldScrap", 5, 0}, {"ICurrency.GemScrap", 1, "ICurrency.SilverScrap", 10, 0} }, ['Miscellaneous'] = { {"Base.PetrolCan", 1, "Base.Money", 250, 100}, {"Base.Bag_ALICEpack_Army", 1, "Base.Money", 1000, 500} } } }
Last edited by Dismellion; 24 May, 2024 @ 5:01pm
< >
Showing 1-10 of 10 comments
Dismellion  [developer] 26 Sep, 2023 @ 9:37pm 
reserved
Last edited by Dismellion; 28 Sep, 2023 @ 12:18am
LilSyrupShawty! 22 Nov, 2023 @ 4:39am 
Contraband Trader, south of Fallas Lake, selling and buying items from Jigga's Greenfire, More Cigarettes, and Skylar's Drug Mod.
{ ['base'] = { ['name'] = "Black Market", ['range'] = 5, ['icon'] = "media/textures/Shop.png", ['sprite'] = "traders_1", ['generator'] = { ["x"] = 7658, ["y"] = 8706, ["z"] = 0 }, ['x'] = 7653, ['y'] = 8709, ['z'] = 0 }, ['data'] = { ['Cannabis'] = { {"Greenfire.KgCannabis", 1, "ICurrency.MoneyStack", 0, 100}, {"Greenfire.KgCannabis", 1, "ICurrency.MoneyStack", 0, 100}, {"Greenfire.CannabisShake", 1, "Base.Money", 20, 0}, {"Greenfire.Cannabis", 1, "Base.Money", 0, 15}, {"Greenfire.OzCannabis", 1, "ICurrency.MoneyStack", 5, 3}, {"Greenfire.Kief", 1, "ICurrency.MoneyStack", 2, 1}, {"Greenfire.Hashish", 1, "ICurrency.MoneyStack", 3, 1}, {"Greenfire.Joint", 6, "ICurrency.MoneyStack", 1, 0}, {"Greenfire.Blunt", 3, "ICurrency.MoneyStack", 1, 0}, {"Greenfire.SilkScreen", 1, "ICurrency.MoneyStack", 1, 0}, {"Greenfire.SmokingPipe", 1, "Base.Money", 50, 25}, {"Greenfire.RollingPapers", 1, "Base.Money", 50, 20}, {"Greenfire.GFGrinder", 1, "Base.Money", 100, 50}, {"Greenfire.CannabisBagSeed", 1, "ICurrency.MoneyStack", 5, 0}, {"Greenfire.RollNylon", 1, "Base.Money", 50, 0}, }, ['Tobacco'] = { {"Greenfire.PipeTobaccoBag", 1, "Base.Money", 500, 350}, {"Greenfire.TobaccoBagSeed", 1, "ICurrency.MoneyStack", 2, 0}, {"Cigs.CigsSealedPackReg", 1, "Base.Money", 0, 20}, {"Cigs.CigsSealedCartonReg", 1, "Base.Money", 0, 250}, {"Cigs.CigsSealedCaseReg", 1, "ICurrency.MoneyStack", 0, 18}, {"Cigs.CigsCartonReg", 1, "Base.Money", 200, 150}, {"Cigs.CigsClosedPackReg", 1, "Base.Money", 20, 15}, {"Cigs.CigsCaseReg", 1, "ICurrency.MoneyStack", 18, 15}, {"Cigs.CigsSealedPackLite", 1, "Base.Money", 0, 7}, {"Cigs.CigsSealedCartonLite", 1, "Base.Money", 0, 75}, {"Cigs.CigsSealedCaseLite", 1, "ICurrency.MoneyStack", 0, 8}, {"Cigs.CigsClosedPackLite", 1, "Base.Money", 4, 3}, {"Cigs.CigsCartonLite", 1, "Base.Money", 40, 35}, {"Cigs.CigsCaseLite", 1, "ICurrency.MoneyStack", 4, 2}, {"Cigs.CigsSealedPackMent", 1, "Base.Money", 0, 30}, {"Cigs.CigsSealedCartonMent", 1, "Base.Money", 0, 350}, {"Cigs.CigsSealedCaseMent", 1, "ICurrency.MoneyStack", 0, 36}, {"Cigs.CigsClosedPackMent", 1, "Base.Money", 40, 25}, {"Cigs.CigsCartonMent", 1, "ICurrency.MoneyStack", 4, 3}, {"Cigs.CigsCaseMent", 1, "ICurrency.MoneyStack", 40, 40}, {"Cigs.CigsSealedPackGold", 1, "Base.Money", 0, 70}, {"Cigs.CigsSealedCartonGold", 1, "ICurrency.MoneyStack", 0, 8}, {"Cigs.CigsSealedCaseGold", 1, "ICurrency.MoneyStack", 0, 90}, {"Cigs.CigsClosedPackGold", 1, "Base.Money", 60, 50}, {"Cigs.CigsCartonGold", 1, "ICurrency.MoneyStack", 6, 6}, {"Cigs.CigsCaseGold", 1, "ICurrency.MoneyStack", 60, 70}, }, ['Drugs'] = { {"DrugMod.Cocaine", 1, "Base.Money", 500, 350}, {"DrugMod.CrackPipe", 1, "Base.Money", 150, 75}, {"DrugMod.Meth", 1, "Base.Money", 400, 250}, {"DrugMod.MediocreMeth", 1, "Base.Money", 250, 175}, {"DrugMod.LowQualityMeth", 1, "Base.Money", 100, 60}, {"DrugMod.Crack", 1, "Base.Money", 150, 75}, {"DrugMod.DrugPipe", 1, "Base.Money", 100, 50}, {"DrugMod.Blockcocaine", 1, "Base.Money", 50000, 37500}, }, ['Miscellaneous'] = { {"Base.PetrolCan", 1, "Base.Money", 500, 300}, {"Cigs.CigsEmptyPackReg", 1, "Base.Money", 5, 0}, {"Cigs.CigsCartonRegEmpty", 1, "Base.Money", 15, 0}, {"Cigs.CigsCartonLiteEmpty", 1, "Base.Money", 15, 0}, {"Cigs.CigsEmptyPackLite", 1, "Base.Money", 5, 0}, {"Cigs.CigsCartonMentEmpty", 1, "Base.Money", 15, 0}, {"Cigs.CigsEmptyPackMent", 1, "Base.Money", 5, 0}, {"Cigs.CigsEmptyPackGold", 1, "Base.Money", 5, 0}, {"Cigs.CigsCartonGoldEmpty", 1, "Base.Money", 15, 0}, {"Base.RubberBand", 10, "Base.Money", 5, 0}, } } }

Broker, located near muldraugh. Converting gems, gold, and silver into money giving better deals for bulk sales. Buys cigarettes for a lower rate than the contraband trader. Also has some books, including the makeshift radio magazines.
{ ['base'] = { ['name'] = "Broker", ['range'] = 10, ['icon'] = "media/textures/Shop.png", ['sprite'] = "traders_8", ['generator'] = { ["x"] = 9644, ["y"] = 10158, ["z"] = 0 }, ['x'] = 9637, ['y'] = 10154, ['z'] = 0 }, ['data'] = { ['Currency'] = { {"ICurrency.GoldScrap", 1, "Base.Money", 12, 10}, {"ICurrency.GoldScrap", 50, "Base.Money", 0, 600}, {"ICurrency.SilverScrap", 1, "Base.Money", 6, 5}, {"ICurrency.SilverScrap", 50, "Base.Money", 0, 280}, {"ICurrency.GemScrap", 1, "Base.Money", 60, 25}, {"ICurrency.GemScrap", 100, "Base.Money", 0, 4000}, {"ICurrency.GemScrap", 1, "ICurrency.GoldScrap", 4, 0}, {"ICurrency.GemScrap", 1, "ICurrency.SilverScrap", 8, 0}, {"Base.RubberBand", 10, "Base.Money", 5, 0} }, ['Miscellaneous'] = { {"Base.PetrolCan", 1, "Base.Money", 250, 100}, {"Base.MagazineCrossword1", 1, "Base.Money", 25, 10} {"Base.Newspaper", 1, "Base.Money", 25, 10} {"Base.Magazine", 1, "Base.Money", 25, 10} {"Base.TVMagazine", 1, "Base.Money", 25, 10} {"Base.HottieZ", 1, "Base.Money", 250, 100} {"Base.Book", 1, "Base.Money", 75, 50} {"Base.ComicBook", 1, "Base.Money", 100, 50} {"Radio.RadioMag1", 1, "Base.Money", 250, 100} {"Radio.RadioMag2", 1, "Base.Money", 250, 100} {"Radio.RadioMag3", 1, "Base.Money", 250, 100} {"Cigs.CigsEmptyPackReg", 1, "Base.Money", 5, 0} {"Cigs.CigsCartonRegEmpty", 1, "Base.Money", 15, 0} {"Cigs.CigsCartonLiteEmpty", 1, "Base.Money", 15, 0} {"Cigs.CigsEmptyPackLite", 1, "Base.Money", 5, 0} {"Cigs.CigsCartonMentEmpty", 1, "Base.Money", 15, 0} {"Cigs.CigsEmptyPackMent", 1, "Base.Money", 5, 0} {"Cigs.CigsEmptyPackGold", 1, "Base.Money", 5, 0} {"Cigs.CigsCartonGoldEmpty", 1, "Base.Money", 15, 0} }, ['Cigarettes'] = { {"Cigs.CigsSealedPackReg", 1, "Base.Money", 0, 15} {"Cigs.CigsSealedCartonReg", 1, "Base.Money", 0, 150} {"Cigs.CigsSealedCaseReg", 1, "ICurrency.MoneyStack", 0, 15} {"Cigs.CigsCartonReg", 1, "ICurrency.MoneyStack", 2, 1} {"Cigs.CigsClosedPackReg", 1, "Base.Money", 20, 10} {"Cigs.CigsCaseReg", 1, "ICurrency.MoneyStack", 20, 10} {"Cigs.CigsSealedPackLite", 1, "Base.Money", 0, 5} {"Cigs.CigsSealedCartonLite", 1, "Base.Money", 0, 50} {"Cigs.CigsSealedCaseLite", 1, "ICurrency.MoneyStack", 0, 5} {"Cigs.CigsClosedPackLite", 1, "Base.Money", 5, 2} {"Cigs.CigsCartonLite", 1, "Base.Money", 50, 25} {"Cigs.CigsCaseLite", 1, "ICurrency.MoneyStack", 5, 1} {"Cigs.CigsSealedPackMent", 1, "Base.Money", 0, 25} {"Cigs.CigsSealedCartonMent", 1, "Base.Money", 0, 250} {"Cigs.CigsSealedCaseMent", 1, "ICurrency.MoneyStack", 0, 25} {"Cigs.CigsClosedPackMent", 1, "Base.Money", 40, 20} {"Cigs.CigsCartonMent", 1, "ICurrency.MoneyStack", 4, 2} {"Cigs.CigsCaseMent", 1, "ICurrency.MoneyStack", 40, 20} {"Cigs.CigsSealedPackGold", 1, "Base.Money", 0, 50} {"Cigs.CigsSealedCartonGold", 1, "ICurrency.MoneyStack", 0, 5} {"Cigs.CigsSealedCaseGold", 1, "ICurrency.MoneyStack", 0, 50} {"Cigs.CigsClosedPackGold", 1, "Base.Money", 60, 40} {"Cigs.CigsCartonGold", 1, "ICurrency.MoneyStack", 6, 4} {"Cigs.CigsCaseGold", 1, "ICurrency.MoneyStack", 60, 40} } } }
(I did actually realize that money stacks don't need to be unstacked, and multiples of 100 come pre-stacked afterwards)
Dismellion  [developer] 17 Feb, 2024 @ 3:12pm 
Originally posted by Ret:
If anyone is having difficulty getting the provided shops to work first make sure you have the mods that are listed, remove any you don't want to add, and then go through and fix all the script errors. There's random(incorrect) commas, tab keys and missing commas.

Easiest for those who dont know JSON is to follow rule of thumb - every } should be trailed by , even if its the last entry.
ttr 20 Jul, 2024 @ 9:30am 
Hey,
Broker definition is broken - invalid Json on Misc and Cigs categories (missing comma after each item definition).
This applies to above post and Your git repo :)
Syn 27 Oct, 2024 @ 9:10pm 
got tired of making these manually so i force fed chatgpt some info and slapped it around to keep it on track to make this for me.

note: i have zero python experience so don't ask me to change something, if you have a issue, copy the code into chatgpt and ask it to do things for you and test it.

(This is python code, load it into a python loader like "Thonny[thonny.org]" and run it and itll spit out txt files that you can edit.)

def prompt_yes_no(prompt_text): response = input(f"{prompt_text} (y/n): ").strip().lower() return response == 'y' def prompt_shop_info(): shop_info = { 'name': input("Enter the shop name (The name displayed to players): "), 'range': int(input("Enter the shop range (The activation range of the shop): ")), 'icon': "media/textures/Shop.png", # Default icon path 'sprite': input( "Enter the sprite name (The in-game name of the sprite to represent the trader, e.g., 'traders_1'): ") } generator_input = input( "Enter generator option (Type 'true' for a generator, 'false' for none, or specify coordinates in the format ['x'] = number, ['y'] = number, ['z'] = number): ").strip() if generator_input.lower() == 'true': shop_info['generator'] = True elif generator_input.lower() == 'false': shop_info['generator'] = False else: shop_info['generator'] = parse_coordinates(generator_input) shop_info['x'] = int(input("Enter x coordinate of the shop (X-axis location on the map): ")) shop_info['y'] = int(input("Enter y coordinate of the shop (Y-axis location on the map): ")) shop_info['z'] = int(input("Enter z coordinate of the shop (Z-axis location, typically 0): ")) return shop_info def parse_coordinates(generator_input): coordinates = {} for part in generator_input.strip("{} ").split(','): key, value = part.split('=') coordinates[key.strip()] = int(value.strip()) return coordinates def select_categories(): categories = [ "Weapons", "Weapon Parts", "Ammo", "Currency", "Medical Supplies", "Food & Drink", "Survival Gear", "Tools", "Clothing", "Crafting Materials", "Batteries & Fuel", "Traps & Crafting", "Vehicles", "Miscellaneous" ] selected_categories = [] print("Available categories:") for i, category in enumerate(categories, 1): print(f"{i}. {category} - {get_category_description(category)}") print(f"{len(categories) + 1}. Custom Category - Create your own category name") while True: choice = input("Choose a category number (or 'done' to finish selecting categories): ") if choice.lower() == 'done': break elif choice.isdigit(): choice = int(choice) if 1 <= choice <= len(categories): selected_categories.append(categories[choice - 1]) elif choice == len(categories) + 1: custom_category_name = input("Enter the custom category name: ") selected_categories.append(custom_category_name) else: print("Invalid choice, please try again.") else: print("Invalid input, please try again.") return selected_categories def get_category_description(category): descriptions = { "Weapons": "Items for combat, such as guns, melee weapons, and explosives.", "Weapon Parts": "Attachments and parts for weapons, like scopes and silencers.", "Ammo": "Ammunition for various firearms.", "Currency": "Different types of currency that can be used for trading.", "Medical Supplies": "Items for healing, such as bandages and first aid kits.", "Food & Drink": "Consumable items for hunger and thirst.", "Survival Gear": "Essential items for surviving the wilderness, like tents and ropes.", "Tools": "Instruments used for crafting or repairing, such as hammers and saws.", "Clothing": "Wearable items for protection or fashion.", "Crafting Materials": "Resources used to create other items.", "Batteries & Fuel": "Power sources for equipment and vehicles.", "Traps & Crafting": "Components for setting traps or other crafted items.", "Vehicles": "Items related to vehicles, such as car parts or gas cans.", "Miscellaneous": "Any other items that don't fit in the above categories." } return descriptions.get(category, "Custom category for unique items.") def prompt_items_for_category(category): items = [] print(f"Entering items for category: {category}") while True: item_names = input(f"Enter item names separated by commas (or 'done' to finish adding items to this category): ") if item_names.lower() == 'done': break for item_name in item_names.split(','): item_name = item_name.strip() # Clean any leading/trailing spaces item_quantity = int(input(f"Enter quantity for '{item_name}' (The amount of this item available): ")) currency_type = input("Enter currency type (Type '1' to use 'Base.Money', or specify your currency): ") if currency_type == '1': currency_type = 'Base.Money' buy_value = int(input(f"Enter buy value for '{item_name}' (Currency cost to buy this item): ")) sell_value = int(input(f"Enter sell value for '{item_name}' (Currency amount received when selling this item): ")) skill_level = int(input(f"Enter skill level required for '{item_name}' (0-10, enter 0 if no skill is required): ")) item_data = (item_name, item_quantity, currency_type, buy_value, sell_value) if skill_level > 0: # Only include skill level if greater than 0 item_data += (skill_level,) items.append(item_data) return items def format_output(shop_info, category_data): formatted_output = "{\n" # Base shop information formatted_output += f"\t['base'] = {{\n" formatted_output += f"\t\t['name'] = \"{shop_info['name']}\",\n" formatted_output += f"\t\t['range'] = {shop_info['range']},\n" formatted_output += f"\t\t['icon'] = \"{shop_info['icon']}\",\n" formatted_output += f"\t\t['sprite'] = \"{shop_info['sprite']}\",\n" formatted_output += f"\t\t['generator'] = {str(shop_info['generator']).lower()},\n" formatted_output += f"\t\t['x'] = {shop_info['x']},\n" formatted_output += f"\t\t['y'] = {shop_info['y']},\n" formatted_output += f"\t\t['z'] = {shop_info['z']}\n" formatted_output += "\t},\n" # Data section with categories and items formatted_output += "\t['data'] = {\n" for category, items in category_data.items(): formatted_output += f"\t\t['{category}'] = {{\n" for i, item in enumerate(items): formatted_output += f"\t\t\t{{\"{item[0]}\", {item[1]}, \"{item[2]}\", {item[3]}, {item[4]}" if len(item) > 5: # Check if skill level is included formatted_output += f", {item[5]}" formatted_output += "}" if i < len(items) - 1: formatted_output += ",\n" else: formatted_output += "\n" formatted_output += f"\t\t}},\n" formatted_output += "\t}\n" formatted_output += "}" return formatted_output def save_to_file(output, filename="shop_config.txt"): with open(filename, 'w') as file: file.write(output) print(f"Configuration saved to {filename}") def main(): print("Welcome to the Shop Configuration Generator! Made by Syn and ChatGPT!") shop_info = prompt_shop_info() selected_categories = select_categories() category_data = {} for category in selected_categories: category_data[category] = prompt_items_for_category(category) formatted_output = format_output(shop_info, category_data) save_to_file(formatted_output) if __name__ == "__main__": main()

this is version 1 and none will follow, it could be a buggy mess but it works for me for what i need it to do.

Here is an example of me running the code to make a shop.


Welcome to the Shop Configuration Generator! Made by Syn and ChatGPT! Enter the shop name (The name displayed to players): Admin Test Shop Enter the shop range (The activation range of the shop): 2 Enter the sprite name (The in-game name of the sprite to represent the trader, e.g., 'traders_1'): traders_1 Enter generator option (Type 'true' for a generator, 'false' for none, or specify coordinates in the format ['x'] = number, ['y'] = number, ['z'] = number): true Enter x coordinate of the shop (X-axis location on the map): 14192 Enter y coordinate of the shop (Y-axis location on the map): 2639 Enter z coordinate of the shop (Z-axis location, typically 0): 0 Available categories: 1. Weapons - Items for combat, such as guns, melee weapons, and explosives. 2. Weapon Parts - Attachments and parts for weapons, like scopes and silencers. 3. Ammo - Ammunition for various firearms. 4. Currency - Different types of currency that can be used for trading. 5. Medical Supplies - Items for healing, such as bandages and first aid kits. 6. Food & Drink - Consumable items for hunger and thirst. 7. Survival Gear - Essential items for surviving the wilderness, like tents and ropes. 8. Tools - Instruments used for crafting or repairing, such as hammers and saws. 9. Clothing - Wearable items for protection or fashion. 10. Crafting Materials - Resources used to create other items. 11. Batteries & Fuel - Power sources for equipment and vehicles. 12. Traps & Crafting - Components for setting traps or other crafted items. 13. Vehicles - Items related to vehicles, such as car parts or gas cans. 14. Miscellaneous - Any other items that don't fit in the above categories. 15. Custom Category - Create your own category name Choose a category number (or 'done' to finish selecting categories): 1 Choose a category number (or 'done' to finish selecting categories): 8 Choose a category number (or 'done' to finish selecting categories): 15 Enter the custom category name: Things Choose a category number (or 'done' to finish selecting categories): done Entering items for category: Weapons - Items for combat, such as guns, melee weapons, and explosives. Enter item name (or 'done' to finish adding items to this category): Base.Katana Enter item quantity (The amount of this item available): 1 Enter currency type (e.g, 'Base.Money'): Base.Money Enter buy value (Currency cost to buy this item): 200 Enter sell value (Currency amount received when selling this item): 50 Enter trading skill level required (0-10): 2 Enter item name (or 'done' to finish adding items to this category): done Entering items for category: Tools - Instruments used for crafting or repairing, such as hammers and saws. Enter item name (or 'done' to finish adding items to this category): Base.Crowbar Enter item quantity (The amount of this item available): 1 Enter currency type (e.g, 'Base.Money'): Base.Money Enter buy value (Currency cost to buy this item): 80 Enter sell value (Currency amount received when selling this item): 10 Enter trading skill level required (0-10): 0 Enter item name (or 'done' to finish adding items to this category): Base.Screwdriver Enter item quantity (The amount of this item available): 1 Enter currency type (e.g, 'Base.Money'): Base.Money Enter buy value (Currency cost to buy this item): 10 Enter sell value (Currency amount received when selling this item): 2 Enter trading skill level required (0-10): 0 Enter item name (or 'done' to finish adding items to this category): done Entering items for category: Things - Custom category for unique items. Enter item name (or 'done' to finish adding items to this category): Base.Bag_FannyPackBack Enter item quantity (The amount of this item available): 1 Enter currency type (e.g, 'Base.Money'): Base.Money Enter buy value (Currency cost to buy this item): 180 Enter sell value (Currency amount received when selling this item): 18 Enter trading skill level required (0-10): 6 Enter item name (or 'done' to finish adding items to this category): Base.FluffyfootBunny Enter item quantity (The amount of this item available): 1 Enter currency type (e.g, 'Base.Money'): Base.Money Enter buy value (Currency cost to buy this item): 991 Enter sell value (Currency amount received when selling this item): 19 Enter trading skill level required (0-10): 10 Enter item name (or 'done' to finish adding items to this category): done Configuration saved to shop_config.txt

And this is what the script spit out into "shop_config.txt".

{ ['base'] = { ['name'] = "Admin Test Shop", ['range'] = 2, ['icon'] = "media/textures/Shop.png", ['sprite'] = "traders_1", ['generator'] = true, ['x'] = 14192, ['y'] = 2639, ['z'] = 0 }, ['data'] = { ['Weapons'] = { {"Base.Katana", 1, "Base.Money", 200, 50, 2} }, ['Tools'] = { {"Base.Crowbar", 1, "Base.Money", 80, 10, 0}, {"Base.Screwdriver", 1, "Base.Money", 10, 2, 0} }, ['Things'] = { {"Base.Bag_FannyPackBack", 1, "Base.Money", 180, 18, 6}, {"Base.FluffyfootBunny", 1, "Base.Money", 991, 19, 10} } } }

Just rename the txt file to what_evername.json and place it in your shops folder, and add the json file name to the string in server configs like you would normally do.

Image of Vendor in the wild.
https://i.imgur.com/qhDT68H.png

Image of vendor inv.
https://i.imgur.com/k6ZOCFP.png



Hope this helps. If not, well I tried.:dssmile:

-Syn :houseplant:
Zombie Church (PvE/PvP) [US North-East]
Last edited by Syn; 2 Nov, 2024 @ 11:48am
Dismellion  [developer] 27 Oct, 2024 @ 10:49pm 
Originally posted by Syn:

Hope this helps. If not, well I tried.:dssmile:
]

Good thing for anyone who doesn't know how to format JSON.
Syn 28 Oct, 2024 @ 5:22am 
Originally posted by Dismellion:
Originally posted by Syn:

Hope this helps. If not, well I tried.:dssmile:
]

Good thing for anyone who doesn't know how to format JSON.

or people who get tired of CTRL+C, CTRL+V and editing lines, this one will fill it out for you so you dont have to lift your hands off your keyboard.

To each their own.

Sorry to cut into your profits, for people who might not know how to "format JSON".
Last edited by Syn; 28 Oct, 2024 @ 5:38am
Dismellion  [developer] 28 Oct, 2024 @ 1:16pm 
Originally posted by Syn:
Originally posted by Dismellion:

Good thing for anyone who doesn't know how to format JSON.

or people who get tired of CTRL+C, CTRL+V and editing lines, this one will fill it out for you so you dont have to lift your hands off your keyboard.

To each their own.

Sorry to cut into your profits, for people who might not know how to "format JSON".


It's okay. I just personally use Sublime Text for editing such stuff and its much faster if you have enough experience with it, especially when you have hundreds of entries, which makes the editing exponentially slower without using mutli-lines or regex.
But again, that being said I have a long-term experience doing that, so anyone that don't might find this extremely useful.
Senzu 11 Jun @ 2:48am 
Hello, to use a modified version of your mod, do I need to publish the shop files here or request permission in order to fix the $69 bug?
Dismellion  [developer] 11 Jun @ 7:45am 
Originally posted by Senzu:
Hello, to use a modified version of your mod, do I need to publish the shop files here or request permission in order to fix the $69 bug?

Just use the mod from a workshop like everyone else.
The update frequency is like once a year at this point, if you are concerned about that. Next update is gonna be on B42 release.
< >
Showing 1-10 of 10 comments
Per page: 1530 50