Click outside or press Esc to close
Overview
MeltingShop is a server shop where players buy from you and sell back to you, with prices that can move on their own.
Everything is built from inside the game. Pick an item out of the game's full item list, or hold something and press one button to turn it into a shop entry. Set the price, the currency, the stock, the limits and the cooldowns without ever opening a file.
It takes any economy plugin. Economics and ServerRewards are preconfigured, and anything else is three hook names typed into the editor. You can also price things in a real item such as scrap, and different items can use different currencies in the same shop.
It also runs a player to player market in the same panel, reached by one of two big tabs across the top. Players list items out of their own inventory for other players to buy, with skins, attachments, ammo and condition all preserved, and sellers get paid whether they are online or not.
Every word in the panel is editable in game, in as many languages as you want, from a TEXT tab in the editor. Players can switch language themselves.
Items, categories, listings, mailboxes and translations live in their own data folder, so the config file stays short and readable no matter how big your shop gets.
Features
- Two big tabs across the top: SERVER MARKET and PLAYER MARKET
- Buy from the server and sell to the server, each switchable per item, per category, or globally
- Player to player market in the same panel, with listing fees, sale tax, per-player listing caps and durations
- Listed items keep their skins, attachments, ammo, condition, custom names and blueprint state
- Sellers are paid even while offline, and unsold items go to a mailbox rather than being lost
- Every visible string editable in game, with unlimited languages and a player language switcher
- Scheduled market events that move prices server-wide, plus optional population based pricing
- Price history chart on every item, with high and low marked
- Search, sort by name or price, and a per-player favourites list
- Unlimited categories, each with its own icon, colour, permission and limits
- Add items by picking from the game's full item list with a search box, or straight from the item in your hand
- Custom items: any shortname plus a skin id and a custom name
- Sell commands instead of items, with player tokens
- Three pricing modes: fixed, progressive, and demand based on stock
- Server stock that depletes as players buy and restocks on a timer
- Purchase cooldowns per item and globally
- Buy and sell limits per item, per category and globally, resetting daily, on wipe, or never
- Multi-buy and multi-sell with a quantity selector and quick amount buttons
- Permission based discounts, so VIPs pay less
- Sell tax
- Any economy plugin through three hook names, plus item currencies such as scrap
- Full in-game editor for items, categories, currencies, pricing, theme, text and settings
- Seven themes, seventeen colour slots, blur, text scaling, adjustable stage size
- Native in-game item icons, no ImageLibrary needed
- Live price refresh while the shop is open
- Transaction logging
- Free, MIT, no dependencies
The panel
A shop is a price list, so it is laid out as one. The left side is a scrolling ledger of every item in the category with the price as the biggest thing on each line; the right side is the item you clicked, expanded.
The buy button is the price. It is a full width solid bar with the total in large figures, not a small button with the price hidden somewhere else. When a purchase is blocked the bar tells you why instead of sitting there doing nothing.
Two tabs across the top switch between the server shop and the player market, each showing what is behind it: the player tab counts the live listings and tells you when something is waiting in your mailbox.
Flat solid panels throughout, no gradients and no glass. Every surface reads from a colour slot, so changing theme repaints the entire shop at once.
Permissions
| Permission | What it does |
|---|---|
meltingshop.use |
Lets the player open the shop. Only enforced if you switch on Require permission, which is off by default |
meltingshop.admin |
The in-game editor. Shows the EDIT button and allows every editor action |
meltingshop.nocooldown |
Ignores purchase cooldowns |
meltingshop.nolimit |
Ignores buy and sell limits |
oxide.grant group admin meltingshop.admin
The editor is strictly permission based. Being a server admin does not grant it on its own, because a moderator you trust to ban cheaters is not necessarily somebody you want changing your prices. There is a setting to change that if you want it.
Discount permissions you name starting with meltingshop. are registered automatically, so meltingshop.vip works with no extra step.
Commands
| Command | Who | What it does |
|---|---|---|
/shop |
Everyone | Opens the shop |
/s |
Everyone | Same thing, alias |
/shop edit |
Admin | Opens straight into the editor |
The command list is configurable, so if /s clashes with another plugin you rename it. Everything else is clicking.
Adding items
Three ways, all in game.
Pick from the item list. Type a name, press PICK FROM ITEM LIST, and search the game's entire item catalogue with real icons. Click one and it becomes a shop entry.
From the item in your hand. Hold something, press FROM HELD ITEM. The shortname, skin and custom name all come across, so a skinned item you are holding becomes a skinned shop entry.
A command instead of an item. Press COMMAND and write a server console command that runs when a player buys it, with {player}, {steamid} and {amount} tokens.
Custom items
A custom item is a shortname plus a skin id plus a display name. Set all three on any entry and it sells as that skinned, renamed item.
Selling matches on shortname and skin together. A custom skinned rifle cannot be sold against the plain rifle listing and vice versa, so your custom items keep their own economy.
Dynamic pricing
Three modes, set per item, so you can mix fixed staples with a live market.
| Mode | What it does |
|---|---|
| Fixed | The price is the price. |
| Progressive | Every purchase pushes the price up, by a flat step or a multiplier, and every sale pushes it down. It then drifts back toward the base price at a decay rate you set, so a buying spree spikes the price and it settles overnight. |
| Demand | The price follows stock level. Empty shelves are expensive, full shelves are cheap, and restocking brings the price back down on its own. |
Both moving modes respect a minimum and maximum price so nothing runs away. Price state is saved, so it survives restarts, and can be reset on wipe.
Buying ten at once is priced honestly. Each unit is quoted at the price it would cost after the previous one moved the market, rather than ten at the cheap opening price.
Stock
Switch stock on for an item and the server only has so many. Each purchase takes one off the shelf, and it refills by an amount you choose on an interval you choose. Players see a stock bar on the card that turns amber and then red as it runs low.
Selling to the server puts stock back, which means players restocking the shop is itself a mechanic. Combined with demand pricing, a rare item that everyone buys gets expensive until somebody sells some back.
Limits and cooldowns
Three layers, all checked, most restrictive wins:
| Layer | Controls |
|---|---|
| Per item | Buy limit, sell limit, cooldown between purchases |
| Per category | A shared budget across every item in that category |
| Global | Server-wide buy limit, sell limit and cooldown |
Each limit resets daily, on wipe, or never. Counters are stored per scope, so changing the scope later does not corrupt existing counts.
Any economy plugin
| Currency | Type | Plugin | Hooks |
|---|---|---|---|
| RP | plugin | ServerRewards | CheckPoints, TakePoints, AddPoints |
| Coins | plugin | Economics | Balance, Withdraw, Deposit |
| Scrap | item | — | Takes the real item from the inventory |
Those three ship configured. For anything else you add a currency in the editor, type the plugin name and its three hook names, and it works. Nothing is hardcoded, so an economy plugin released next year needs no update here.
Custom item currencies
An item currency is a shortname, a skin id and a custom name. Set all three and you have your own coin: a scrap skinned and renamed to "Gold Coin" is its own currency, and plain scrap will not pay for anything priced in it. Matching is on all three together, so custom currencies cannot be spoofed with the base item.
Leave the skin at 0 and the name empty and it behaves as the plain item, so scrap-priced items work the way you would expect.
Selling to the server pays out in whichever currency the owner set on that item, custom coins included, complete with their skin and name.
Missing plugin detection
Currencies show a live AVAILABLE or MISSING badge in the editor. On boot the plugin also prints a console warning naming every currency it cannot use, why (plugin not installed, or item shortname does not exist), and flags the ones that shop items are actually priced in. Items priced in a missing currency show as unavailable rather than erroring or silently trading for nothing.
Market events
Off by default. Switch it on and the shop rolls for an event every so often, and while one is running every price in the shop moves with it. The event and its countdown sit in the footer so nobody has to guess why things got expensive.
| Event | Runs for | Buy prices | Sell prices |
|---|---|---|---|
| Extreme demand | 30 minutes | +35% | +25% |
| High demand | 45 minutes | +15% | +10% |
| Surplus | 45 minutes | −12% | −8% |
| Fire sale | 20 minutes | −30% | −15% |
All four are editable and you can add your own: name, how often it comes up, how long it lasts, what it does to buy and sell prices, and optionally a single category it applies to, so an event can hit only weapons. Admins can start or stop one by hand from the editor.
Population pricing is a separate switch that works on its own or alongside events: prices drift up as the server fills and back down as it empties, with a baseline headcount and a cap on how far it can move.
Events multiply whatever pricing mode the item already uses, so they stack correctly with progressive and demand pricing rather than overriding them.
Price history
Every item quietly records its price over time and the detail panel draws it as a chart, with the high and the low labelled and the newest reading highlighted. On a fixed price item it stays flat, which is the honest answer; on a progressive or demand item you can watch a buying spree spike it and then decay back.
A small arrow beside each price in the ledger shows how far it currently sits above or below its base price.
Every word is editable
There is a TEXT tab in the editor listing every string the panel can show, each with a box next to it. Change one, it changes in game.
To add a language you type its code into a box. A fresh table appears in the TEXT tab ready to fill in, and if you allow it, players get a small language button in the header that cycles through what you offer. Their choice is remembered.
Anything you leave blank falls back to your default language, and then to the built in English, so a half finished translation never leaves an empty panel.
Search, sort and favourites
A search box filters by item name or shortname, and searches seller names in the player market. Sort by shop order, by name, or by price in either direction. Players can star items they care about and filter the list down to just those.
Each of the three can be switched off if you want a plainer panel; turn all three off and the toolbar row disappears entirely, giving the item list more room.
Player to player market
The second big tab runs a market where players sell to each other, not just to the server. Inside it: BROWSE, SELL AN ITEM, MY LISTINGS and MAILBOX.
Listing is one screen. A player opens SELL AN ITEM, sees their own inventory as a grid, clicks something, types a price, picks a currency and a duration, and it goes up.
That same screen also offers SELL TO SERVER whenever the shop buys the item they picked, with the live payout shown on the button. So a player deciding what to do with a stack sees both options side by side: take the server's price now, or ask more from other players.
Items keep everything. Skins, weapon attachments, loaded ammo and ammo type, item condition, custom names and blueprints all survive the listing and arrive with the buyer exactly as they left the seller. Listings show at a glance when an item is skinned, how many attachments it carries, and what condition it is in.
Sellers get paid offline. A sale credits the seller's balance through the economy plugin whether they are online or not. If the currency is an item such as scrap, it goes to their mailbox instead.
| Setting | What it controls |
|---|---|
| Listing fee | Flat, a percentage of the asking price, or both, charged when the item goes up |
| Sale tax | Percentage taken out of the seller's payout when it sells |
| Max listings per player | With extra slots grantable by permission for VIPs |
| Durations | The listing lengths players can choose from |
| Min and max price | Stops both one-scrap dumping and silly numbers |
| Allowed currencies | Restrict listings to particular currencies if you want |
Nothing is ever destroyed. Every item is in exactly one of three places at all times: a player's inventory, an active listing, or a mailbox. Listings that expire or get cancelled go to the seller's mailbox rather than being handed to a player who might be offline or full, and they wait there until collected. If a mailbox is full the listing simply extends rather than dropping the item.
Safety
Money is taken before items are given, and refunded automatically if delivery fails. Selling removes the items before paying out, and returns them if the payout fails. Stock cannot be driven negative. Selling only takes from your main inventory and hotbar, never off your back, so nobody accidentally sells the armour they are wearing.
Install
- Drop
MeltingShop.csintooxide/plugins - Grant yourself the editor with
oxide.grant group admin meltingshop.admin - Type
/shopand press EDIT - Name an item, press PICK FROM ITEM LIST, and set your price
Items, categories, listings, mailboxes and translations live in oxide/data/MeltingShop/. Settings, theme and market events live in the config file, and all of it is editable from the panel.
Developer API
[PluginReference] private Plugin MeltingShop;
MeltingShop?.Call("OpenShop", player);
MeltingShop?.Call("OpenShop", player, "weapons");
MeltingShop?.Call("CloseShop", player);
MeltingShop?.Call("GetShopItemIds"); // string[]
MeltingShop?.Call("GetShopBuyPrice", player, "ak47", 10); // double
MeltingShop?.Call("GetShopSellPrice", player, "ak47", 10); // double
MeltingShop?.Call("GetShopStock", "ak47"); // int, -1 if unlimited
Two hooks fire on every completed transaction:
void OnMeltingShopPurchase(BasePlayer player, string itemId, int units, double price) { }
void OnMeltingShopSale(BasePlayer player, string itemId, int units, double payout) { }
Compatibility
Oxide and Carbon. No dependencies. Economics, ServerRewards, ImageLibrary and Notify are all optional and detected automatically.
Every visual effect is a config toggle, so if anything renders oddly on an unusual build you switch it off and get clean flat panels instead. Symbols used in the interface are configurable characters, so if your server's font renders one as a box you can replace it with anything you like.
Requirements & compatibility
Oxide and Carbon. No dependencies. Economics, ServerRewards, ImageLibrary and Notify are all optional and detected automatically.
No updates yet.