Merchant System
Pricing System
Controls whether items sold by players are added back to merchant stock.
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
Controls whether items sold by players are added back to merchant stock.
UnitPrice = StockItem.UnitPriceOverride >= 0
? StockItem.UnitPriceOverride
: ItemData.ItemValue.BaseBuyValue.Value
Subtotal = UnitPrice * Quantity
Fee = ceil(Subtotal * (Config.MarketFeePercent / 100))
Total = Subtotal + Fee
Iron Sword:
Base Price: 100 gold
Merchant Override: 150 gold
Quantity: 2
Market Fee: 10%
Calculation:
Unit Price = 150 (override)
Subtotal = 150 * 2 = 300
Fee = ceil(300 * 0.10) = 30
Total = 330 gold
BaseValue = ItemData.ItemValue.BaseBuyValue.Value
BuyPercent = StockItem.BuyPriceOverridePercent >= 0
? StockItem.BuyPriceOverridePercent
: Config.BuybackPercent
UnitBuyPrice = ceil(BaseValue * (BuyPercent / 100))
Total = UnitBuyPrice * Quantity
Iron Ore:
Base Value: 50 gold
Vendor Buyback: 30%
Quantity: 10
Calculation:
Unit Buy Price = ceil(50 * 0.30) = 15 gold
Total = 15 * 10 = 150 gold
Config.bReplenishOnBuyback = true; // Sold items restock merchant
StockItem.ReplenishMode = EReplenishMode::NeverReplenish; // This item never restocks
bool ShouldReplenish(StockItem)
{
switch (StockItem.ReplenishMode)
{
case AlwaysReplenish:
return true;
case NeverReplenish:
return false;
case UseVendorDefault:
default:
return Config.bReplenishOnBuyback;
}
}
// On player sell:
if (ShouldReplenish && Config.bHasStock)
{
StockItem.CurrentStock = min(
StockItem.CurrentStock + QtySold,
StockItem.MaxStock
);
}
Config.bReplenishOnBuyback = true
// All items: ReplenishMode = UseVendorDefault
// Result: Players can sell items, other players can buy them
Config.bReplenishOnBuyback = false
// Iron Sword: ReplenishMode = NeverReplenish
// Health Potion: ReplenishMode = AlwaysReplenish
// Result:
// - Swords sold by players disappear (economic sink)
// - Potions sold by players get resold (convenience)
Config.bReplenishOnBuyback = false
Config.bHasBuyList = true
BuyList = [Scrap_Metal, Broken_Gear, Ore_Impure]
// All items: ReplenishMode = NeverReplenish
// Result: Acts as item sink for cleanup/economy balance