Skip to content

๐Ÿช BLN Stores โ€‹

bln stores

๐Ÿ“บ Preview โ€‹

Video Preview

๐Ÿ’ฐ Buy Now โ€‹

Get it now

Bring your towns to life with BLN Stores โ€” a complete buy-and-sell shop system built for immersive RedM roleplay. Players browse a stunning book-style catalog, fill their cart, and sell items back through a clean receipt menu. From general stores and saloons to gunsmiths, trappers, and butchers โ€” every shop type is ready out of the box. Set prices, categories, stock, hours, and locations in simple config files. No coding. Set up in minutes.

โœจ What can you do with it? โ€‹

  • ๐Ÿฌ Unlimited stores โ€” create as many shop locations as you want across the map
  • ๐Ÿ›’ Buy items โ€” food, drinks, weapons, tools, and more
  • ๐Ÿ’ต Sell items back โ€” let players sell pelts, meat, weapons, or anything you allow
  • ๐Ÿ“– Book UI โ€” immersive buy menu with categories and a cart receipt
  • ๐Ÿงพ Sell UI โ€” clean sell list based on what the player actually has in inventory
  • ๐Ÿท๏ธ Categories โ€” reusable item lists (Food, Weapons, Trapper, etc.)
  • ๐Ÿ“ฆ Stock limits โ€” optional per-item stock that runs out and restocks when players sell back
  • ๐Ÿ”ซ Weapons โ€” buy and sell weapons (one per weapon in inventory when selling)
  • ๐Ÿ’ฐ Cash & gold โ€” per-item currency for buy and sell
  • ๐Ÿ• Opening hours โ€” shops can close at night; blip color changes when closed
  • ๐Ÿ‘ฎ Job lock โ€” restrict a shop to certain jobs (doctor, gunsmith, etc.)
  • ๐Ÿ—บ๏ธ Map blips โ€” each shop can have its own blip name and icon
  • ๐Ÿง Shop NPC โ€” spawn a ped with outfit and idle animation (scenario)
  • ๐Ÿช Shop types โ€” general store (buy + sell), buy-only, or sell-only (trapper, butcher, pawn)
  • ๐ŸŒ Translations โ€” change all messages and UI text in one locale file

๐Ÿ’ป Framework compatibility โ€‹

โœ… VORP โœ… RSG โœ…Custom.

๐Ÿ“ฆ Dependencies โ€‹

Make sure these are started before bln_stores:

โš™๏ธ Installation โ€‹

  1. Download and extract bln_stores into your resources folder
  2. Add to your server.cfg (after bln_lib and bln_notify):
cfg
ensure bln_stores
  1. Edit the config files in bln_stores/config/ (see below)
  2. Restart the server

๐Ÿ“ Config files (the important ones) โ€‹

All setup happens in the config folder:

FileWhat it's for
categories.cfg.luaWhat items exist โ€” names, prices, stock, sell prices. Organized into categories like Food, Weapons, Trapper.
main.cfg.luaWhere shops are โ€” locations, NPCs, blips, hours, and which categories each shop uses.
locale.cfg.luaAll text โ€” notifications, errors, button labels, UI strings.

Simple mental model โ€‹

  1. Categories = menus of items (like a catalog)
  2. Stores = shop locations that pick which catalogs they use
  3. You never list every item inside each store โ€” you just assign categories

Example: Valentine General Store uses Categories.food, Categories.drinks, Categories.tools, etc.

๐Ÿ“‹ Categories (categories.cfg.lua) โ€‹

A category is a group of items โ€” like a page in the buy book.

lua
{
    id = "food",                              -- unique name (use as Categories.food)
    title = "Food",                           -- shown in the buy menu
    description = "Cooking food...",          -- short text under the title
    image = "nui://bln_stores/ui/imgs/categories/food.png",  -- category icon (optional)
    items = {
        -- your items go here
    },
},

Item fields โ€‹

Each item inside items can use these properties:

lua
{
    name = "apple",                    -- item name in your inventory (required)
    label = "Apple",                   -- name shown in the UI (optional)
    type = "item",                     -- "item" or "weapon" (optional, default "item")

    price = 15,                        -- buy price โ€” shop SELLS to player (optional)
    currency = "cash",                 -- "cash" or "gold" for buying (optional)
    stock = 40,                        -- how many the shop starts with (optional)
    maxStock = 80,                     -- max stock when players sell back (optional)

    sellPrice = 4,                     -- sell price โ€” shop BUYS from player (optional)
    sellCurrency = "cash",             -- "cash" or "gold" for selling (optional)
},

What each field means โ€‹

FieldWhat it does
nameThe real item name from your inventory/database. Must match exactly.
labelPretty name in the shop UI. If you skip it, the name is shown instead.
typeUse "weapon" for guns, knives, lassos, etc. Everything else is "item".
priceIf set, players can buy this item here. If you leave it out, the item is sell-only.
sellPriceIf set, players can sell this item here. If you leave it out, the item is buy-only.
currencyWhat players pay when buying โ€” cash or gold.
sellCurrencyWhat players receive when selling. Defaults to the buy currency, then cash.
stockStarting amount in the shop (per location). Needs Config.stock.enabled = true in main.cfg.
maxStockMaximum stock when players sell items back. Use with stock.

Three common item setups โ€‹

Buy only (shop sells it to players):

lua
{ name = "banana", label = "Banana", type = "item", price = 7 },

Sell only (trapper, butcher, pawn โ€” shop buys from player):

lua
{ name = "deerskin", label = "Deer Skin", type = "item", sellPrice = 6 },

Buy + sell back (general store staple):

lua
{ name = "apple", label = "Apple", type = "item", price = 15, sellPrice = 4, stock = 40, maxStock = 80 },

๐Ÿฌ Stores (main.cfg.lua) โ€‹

Each shop in Config.stores is one location on the map.

lua
{
    id = "valentine_general_store",     -- unique id (do not duplicate)
    title = "Valentine General Store",  -- shop name in UI
    description = "A store that sells general items.",
    paragraph = {                       -- optional "about" text in buy book
        title = "About Valentine General Store",
        description = "Welcome to our store...",
    },

    ped_model = { "a_m_m_valtownfolk_01", 0 },  -- NPC model + outfit preset, or false for no ped
    ped_scenario = "WORLD_HUMAN_STAND_WAITING", -- idle animation (optional). false = no animation
    coords = vector4(-324.27, 804.22, 117.88, 274.56),  -- x, y, z, heading

    blip = {
        enabled = true,
        name = "General Store",
        sprite = "blip_shop_store",
        color = "BLIP_STYLE_CREATOR_DEFAULT",      -- blip when open
        closedColor = "BLIP_STYLE_DEBUG_RED"         -- blip when closed (if hours enabled)
    },

    openingHours = {
        enabled = true,   -- false = always open
        open = 7,         -- opens at 7:00
        close = 16,       -- closes at 16:00
    },

    requiredJobs = false,  -- false = everyone, or { "doctor", "police" } for job lock

    -- Optional: override global tax for this shop only
    -- tax = { enabled = true, amount = 5 },

    categories = {         -- which category catalogs this shop uses
        Categories.food,
        Categories.drinks,
        Categories.tools,
    },
},

Store fields explained โ€‹

FieldWhat it does
idInternal name for the shop. Must be unique.
titleName players see.
coordsWhere the shop is on the map (vector4 with heading).
ped_modelShop NPC. Format: { "model_name", outfit_preset }. Use false for no NPC.
ped_scenarioWhat the NPC does while standing (e.g. WORLD_HUMAN_STAND_WAITING). Use false to disable.
blipMap marker settings.
openingHoursWhen the shop is open. NPC hides when closed (if hours enabled).
requiredJobsfalse for public, or a list of job names.
categoriesList of categories this shop uses โ€” this controls buy and sell items.

Shop types โ€‹

TypeHow to set it upPrompts
General storeCategories with items that have price and sellPriceBuy + Sell
Buy onlyItems only have priceBuy only
Sell onlyItems only have sellPrice (e.g. Categories.trapper, Categories.butcher)Sell only

๐Ÿ“ฆ Stock system (optional) โ€‹

In main.cfg.lua:

lua
Config.stock = {
    enabled = true,   -- set false to disable stock limits everywhere
},

When enabled:

  • Items with a stock number have limited quantity per shop
  • When a player buys, stock goes down
  • When a player sells back (if the item has sellPrice), stock goes up
  • maxStock caps how much sell-back can restock
  • Stock resets on server restart to the values in your config
  • Items without stock stay unlimited

Players see stock in the buy menu as cart amount / stock (e.g. 2/40).


๐ŸŒ Global settings (main.cfg.lua) โ€‹

lua
Config.defaultCurrency = "cash"   -- default if an item has no currency set

Config.tax = {
    enabled = true,
    amount = 2.5,                 -- flat cash tax added to purchases (not per-item %)
},

Config.closeUIAfterTransaction = false,  -- true = close menu after buy/sell

Config.prompts = {
    distance = 2.5,               -- how close player must be to see prompts
    buy = {
        title = "Buy",
        key = 0xCEFD9220,         -- E
    },
    sell = {
        title = "Sell Items",
        key = 0x760A9C6F,         -- G
    },
},

Custom item images (optional) โ€‹

If your inventory uses custom image paths:

lua
Config.itemImages = {
    customItemURL = function(itemName)
        return "nui://my-inventory/html/images/" .. itemName .. ".webp"
    end,
},

If not set, images come from your framework inventory URL automatically.


๐Ÿ“ Examples included โ€‹

The resource ships with ready-made examples you can copy or edit:

ShopTypeCategories
Valentine General StoreBuy + sellFood, Drinks, Tools, Medicine, etc.
Valentine SaloonBuy (+ sell if items have sellPrice)Food, Drinks, Alcohol, Tobacco
Valentine GunsmithBuy + sell weaponsAmmo, Pistols, Revolvers, Rifles, etc.
TrapperSell onlyCategories.trapper โ€” legendary pelts
Valentine ButcherSell onlyCategories.butcher โ€” hides and meat

โ“ FAQ โ€‹

How do I add a new shop in another town?
Copy an existing store block in main.cfg.lua, change id, title, coords, and blip, pick which categories that shop should use, then restart the resource.

How do I make a shop that only buys pelts (sell shop only, trapper style)?
Create a category with items that only have sellPrice (no price), then create a store that only uses that category. Only the Sell prompt will appear. Sell-only categories can be very simple โ€” you only need id and items. Title, description, and image are optional.

How do I set different sell prices in two towns?
Create two categories with different sellPrice values and assign the right one to each store. Example: Categories.food_valentine and Categories.food_rhodes.

How do I stop a shop from buying items back?
Use a category where items have price but no sellPrice, or remove sellPrice from items you don't want sold there.

Why don't I see the Sell prompt?
None of the shop's categories have items with sellPrice. Add sellPrice to items, or assign a sell category.

Why don't I see the Buy prompt?
None of the items have price. Sell-only shops (trapper, butcher) are meant to work this way.

Do item names need to match my inventory exactly?
Yes. The name field must match the exact item name from your server's inventory/database. If the name is wrong, the item won't show when selling or won't be given when buying.

Can players sell items the shop doesn't list?
No. Only items with sellPrice in that shop's categories can be sold there.

Do weapons stack in the sell menu?
No. Each weapon in inventory appears as its own row (with serial number when available).

Does tax apply to gold purchases?
No. Tax only applies to cash purchases.

Can I mix cash and gold in one cart?
Yes. If your cart has both cash and gold items, you can complete the purchase in one go.

๐Ÿค Support โ€‹

Need help? Join our Discord: