Get an Epic Experience with Premium

Reagent Restocker

Bags & Inventory Login to Add Favorites
  • World of Warcraft
  • 477 Monthly Downloads
  • Supports: 6.1.0
  • 273,627 Total Downloads
  • Updated 03/04/2015
  • Created 10/06/2009
  • 382 Favorites
  • Project Site
  • Comments
  • Release Type: Release
  • License: MIT License
  • Newest File: v10.2
Support development! **

About Reagent Restocker

Reagent Restocker is a simple addon for automatically purchasing items, selling unwanted items, and repairing. Unlike many other similar addons, Reagent Restocker supports drag and drop and has a full GUI for editing buy/sell lists.

If you like it, feel free to donate! I highly recommend donating to your favorite addons, it really helps. If every person who downloads this addon donates as little as $1 per month, I could actually work on this addon full time. As it stands, however, it's actually kinda hard to justify putting much time into it at all.

Reagent Restocker now has Google+ and Facebook pages! News, notes, and patch releases will be posted to Google+ and Facebook.

NOTE: I've been seeing copies of Reagent Restocker popping up at other download sites. The only three places I currently upload the addon to are,, and I cannot guarantee the integrity of any other download sites.

What can you do with Reagent Restocker? Well, you can do the following:

  • Automatically buy items from vendors.

  • Automatically sell items you can't use.

  • Automatically fix your gear.

  • Warn you when you're getting low on items you automatically buy.

  • Use LDB to show your current stock of items.

  • Automatically mark items in ArkInventory as trash (Note: This feature is maintained by the authors of ArkInventory).

  • Access it via the minimap (must have LibDBIcon installed).

  • When automatically buying water, it can automatically update the buy list to the latest usable water by your character.

  • Stock excess items in your bank or the guild bank.

  • Control buying/selling/repairing based on vendor discounts.

Devs wanted! It's open source, and I've been busy with other things in real life. I'm willing to add more members to the team. Must have a CurseForge account.


If you have LibDBIcon or a LDB compatible bar installed, you can access Reagent Restocker simply by clicking on the icon. Otherwise, you can access it via slash commands.

To start using Reagent Restocker, type /rr at the command line. /rrstock and /reagentrestocker also work.

Raid Roll users: Reagent Restocker may take over /rr - if that happens, use /rrl for Raid Roll.

/rrbuy and /rrsell add items to the sell and buy lists (thanks g3gg0)


The primary portal for Reagent Restocker is at, even though I also publish the addon to (the old portal) and, and may publish to other places in the future.

The public facing page is here:

The development pages are here:

r130 | cobraa1 | 2015-03-04 16:21:06 +0000 (Wed, 04 Mar 2015) | 3 lines
Changed paths:
   A /tags/v10.2 (from /trunk:129)

-   Updated TOC
-   Sorry, that's all for now.

r129 | cobraa1 | 2015-03-04 16:20:09 +0000 (Wed, 04 Mar 2015) | 1 line
Changed paths:
   M /trunk/
   M /trunk/ReagentRestocker.toc

Commit before release.


First Previous Page 4 of 36 Next Last
  • #494


  • #490

    Hello, just started using this!  

    Question: Under Selling, I have "Keep bind on equip items" and "Keep soulbound items" grayed out and uncheckable.  I can't figure out why?  Fiddling with "Sell unusable armor and weapons" and "Maximum unusable quality to sell" doesn't seem to change the grayed-out "Keep bind on equip items" and "Keep soulbound items". 


  • #491

    Keeping BOE and soulbound items requires reading the tooltip, which I never really got to work reliably. Thus, they are greyed out for now.

    If Blizzard adds an easier way to detect them, or if I decide to take another crack at the tooltip code, I might add those features again in the future.

  • #487

    This addon seems fantastic and I tried it out. Unfortunately it did not work as it is intended. Bugs, I believe.

    I tried various settings for the automatic stocking feature. Set River's Hearts to stock up to "20", and "Overstock" for bank ticked. If I have 40 in inventory, it just keeps stocking up 1 more full stacked River's Heart everytime I enter the Bank. It never overstock anything neither from bank nor to the inventory. Simply, the overstock feature seems to not work at all for me.

    I haven't found any addon that should do like your addon does automatically, so I would love this to work.

    I want to set up all my gems for this, so I will always have 20 of each sort and cutted versions in the bags and all exceeded amounts into the bank.

  • #488

    Thanks for the report. Yeah, there are some known issues with the bank code. Probably due for yet another rewrite, sigh. Don't really know the best way to approach that section of the code.

  • #489

    Thank you for listening. I hope you get it sorted right. Anyways, keep up the good work. It's a really good addon in general. :)

  • #485

    Okay, there was an issue with the database update code.

    I *am* getting it fixed - I've managed to get a WoW capable laptop that I can borrow until I move. However, it's not quite set up as I want it, so working with it is a bit of a pain.

    I'll try to get a bug fix release out soon.

  • #486

    Thanks, your awesome, this is a great addon!

  • #484

    I keep getting this error:

    3x ReagentRestocker-v4.0\DatabaseUpdate.lua:356: bad argument #1 to "pairs" (table expected, got nil)
    <in C code>
    ReagentRestocker-v4.0\DatabaseUpdate.lua:356: in function "checkDB"
    ReagentRestocker-v4.0\DatabaseUpdate.lua:338: in function "?"
    ReagentRestocker-v4.0\Core.lua:51: in function <ReagentRestocker\Core.lua:50>

    self = <table> {
    repair = <func> @ReagentRestocker\Core.lua:1315
    SetDefaultModuleLibraries = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:383
    findOptimalDestinationInBags = <func> @ReagentRestocker\BankBag.lua:491
    EnableModule = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:348
    modules = <table> {}
    baseName = "ReagentRestocker"
    IterateEmbeds = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:458
    MERCHANT_SHOW = <func> @ReagentRestocker\Core.lua:799
    MERCHANT_UPDATE = <func> @ReagentRestocker\Core.lua:680
    showFrame = <func> @ReagentRestocker\UI.lua:1010
    purchaseItems = <func> @ReagentRestocker\Core.lua:935
    lockTransaction = <func> @ReagentRestocker\Core.lua:609
    getSellPrice = <func> @ReagentRestocker\Core.lua:339
    listType = <func> @ReagentRestocker\Core.lua:515
    defaultModuleState = true
    IsEnabled = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:467
    isToBeDestroyed = <func> @ReagentRestocker\Core.lua:1270
    areSlotsUnlocked = <func> @ReagentRestocker\BankBag.lua:254
    DisableModule = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:366
    ADDON_LOADED = <func> @ReagentRestocker\Core.lua:1612
    getMerchantDiscount = <func> @ReagentRestocker\Core.lua:1526
    isReagentVendor = <func> @ReagentRestocker\Core.lua:1300
    safeGetItemInfo = <func> @ReagentRestocker\Core.lua:282
    isSpecialBagType = <func> @ReagentRestocker\BankBag.lua:569
    addToListByID = <func> @ReagentRestocker\Core.lua:573
    SetEnabledState = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:440
    enabledState = true
    isSlotUnlocked = <func> @ReagentRestocker\BankBag.lua:248
    hideFrame = <func> @ReagentRestocker\UI.lua:1006
    IterateModules = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:453
    sell = <func> @ReagentRestocker\Core.lua:1473
    checkDB = <func> @ReagentRestocker\DatabaseUpdate.lua:349
    countItemInBags = <func> @ReagentRestocker\BankBag.lua:281
    ITEM_LOCK_CHANGED = <func> @ReagentRestocker\Core.lua:1705
    Enable = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:315
    NewModule = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:256
    getVersion = <func> @ReagentRestocker\Core.lua:1594
    VARIABLES_LOADED = <func> @ReagentRestocker\DatabaseUpdate.lua:302
    addItemToSellingList = <func> =[C]:-1
    notifyPlayer = <func> @ReagentRestocker\Core.lua:621
    defaultModuleLibraries = <table> {}
    isUseless = <func> @ReagentRestocker\Core.lua:1081
    recursiveMove = <func> @ReagentRestocker\BankBag.lua:347
    GetName = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:300
    discoverItemID = <func> @ReagentRestocker\Core.lua:345
    name = "Reagent Restocker"
    say = <func> @ReagentRestocker\Core.lua:248
    queueAction = <func> @ReagentRestocker\Core.lua:1677
    Disable = <func> @AckisRecipeList\libs\..\AceAddon-3.0.lua:330
    findOptimalDestinationInBag =

  • #483

    Same as poster below, I get same first time after I log in after applying latest update.


    Message: ReagentRestocker-v4.0\DatabaseUpdate.lua:350: bad argument #1 to "pairs" (table expected, got nil)
    Time: 10/25/12 16:24:50
    Count: 1
    Stack: Interface\AddOns\ReagentRestocker\DatabaseUpdate.lua:350: in function `checkDB'
    Interface\AddOns\ReagentRestocker\DatabaseUpdate.lua:338: in function `?'
    Interface\AddOns\ReagentRestocker\Core.lua:51: in function <Interface\AddOns\ReagentRestocker\Core.lua:50>

    Locals: self = <table> {
     repair = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:1315
     SetDefaultModuleLibraries = <function> defined @Interface\AddOns\Archy\Libs\AceAddon-3.0\AceAddon-3.0.lua:383
     findOptimalDestinationInBags = <function> defined @Interface\AddOns\ReagentRestocker\BankBag.lua:491
     EnableModule = <function> defined @Interface\AddOns\Archy\Libs\AceAddon-3.0\AceAddon-3.0.lua:348
     modules = <table> {
     baseName = "ReagentRestocker"
     IterateEmbeds = <function> defined @Interface\AddOns\Archy\Libs\AceAddon-3.0\AceAddon-3.0.lua:458
     MERCHANT_SHOW = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:799
     MERCHANT_UPDATE = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:680
     showFrame = <function> defined @Interface\AddOns\ReagentRestocker\UI.lua:1010
     purchaseItems = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:935
     lockTransaction = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:609
     getSellPrice = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:339
     listType = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:515
     defaultModuleState = true
     IsEnabled = <function> defined @Interface\AddOns\Archy\Libs\AceAddon-3.0\AceAddon-3.0.lua:467
     isToBeDestroyed = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:1270
     areSlotsUnlocked = <function> defined @Interface\AddOns\ReagentRestocker\BankBag.lua:254
     DisableModule = <function> defined @Interface\AddOns\Archy\Libs\AceAddon-3.0\AceAddon-3.0.lua:366
     ADDON_LOADED = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:1612
     getMerchantDiscount = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:1526
     isReagentVendor = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:1300
     safeGetItemInfo = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:282
     isSpecialBagType = <function> defined @Interface\AddOns\ReagentRestocker\BankBag.lua:569
     addToListByID = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:573
     SetEnabledState = <function> defined @Interface\AddOns\Archy\Libs\AceAddon-3.0\AceAddon-3.0.lua:440
     enabledState = true
     isSlotUnlocked = <function> defined @Interface\AddOns\ReagentRestocker\BankBag.lua:248
     hideFrame = <function> defined @Interface\AddOns\ReagentRestocker\UI.lua:1006
     IterateModules = <function> defined @Interface\AddOns\Archy\Libs\AceAddon-3.0\AceAddon-3.0.lua:453
     sell = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:1473
     checkDB = <function> defined @Interface\AddOns\ReagentRestocker\DatabaseUpdate.lua:349
     countItemInBags = <function> defined @Interface\AddOns\ReagentRestocker\BankBag.lua:281
     ITEM_LOCK_CHANGED = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:1705
     Enable = <function> defined @Interface\AddOns\Archy\Libs\AceAddon-3.0\AceAddon-3.0.lua:315
     NewModule = <function> defined @Interface\AddOns\Archy\Libs\AceAddon-3.0\AceAddon-3.0.lua:256
     getVersion = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:1594
     VARIABLES_LOADED = <function> defined @Interface\AddOns\ReagentRestocker\DatabaseUpdate.lua:302
     addItemToSellingList = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:415
     notifyPlayer = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:621
     defaultModuleLibraries = <table> {
     isUseless = <function> defined @Interface\AddOns\ReagentRestocker\Core.lua:1081
     recursiveMove = <function> defined @Interface\AddOns\ReagentRestocker\BankBag.lua:347
     GetName = <function> defined @Interface\Ad

  • #482


    I just started wow an getting this error:


    Date: 2012-10-25 11:55:24

    ID: 1
    Error occured in: Global
    Count: 1
    Message: ..\AddOns\ReagentRestocker\DatabaseUpdate.lua line 350:
    bad argument #1 to 'pairs' (table expected, got nil)
    [C]: ?
    [C]: pairs()
    ReagentRestocker\DatabaseUpdate.lua:350: checkDB()
    ReagentRestocker\DatabaseUpdate.lua:338: ?()

    ReagentRestocker, v4.0



  • #479

    I just started getting this when going to the bank:

    Message: Interface\AddOns\ReagentRestocker\BankBag.lua:66: attempt to index field '?' (a nil value)
    Time: Sun Oct 7 16:35:15 2012
    Count: 3
    Stack: [C]: ?
    Interface\AddOns\ReagentRestocker\BankBag.lua:66: in function `v'
    Interface\AddOns\ReagentRestocker\EventHandler.lua:66: in function <Interface\AddOns\ReagentRestocker\EventHandler.lua:32>
    (tail call): ?


  • #481

    Unable to reproduce :(. Have any more details?

     Appears to be a duplicate of an already reported bug, though. Will keep an eye on it.

    Added a database consistency check that should fix this in 4.0.

    Last edited by CobraA1 on 10/8/2012 8:35:24 AM
  • #478

    @CobraA1, thats not a problem with the savefile, thats a programm issue with battlepets.

    If I have a battlepet in my Inventory I get a:

    Date: 2012-10-07 17:07:47
    ID: 2
    Error occured in: Global
    Count: 2
    Message: ..\AddOns\ReagentRestocker\Core.lua line 317:
    Usage: GetItemInfo(itemID|"name"|"itemlink")
    (tail call): ?
    [C]: ?
    [C]: GetItemInfo()
    ReagentRestocker\Core.lua:317: safeGetItemInfo()
    ReagentRestocker\Core.lua:968: isToBeSold()
    ReagentRestocker\Core.lua:1463: sell()
    ReagentRestocker\Core.lua:828: MERCHANT_SHOW()
    ReagentRestocker\Core.lua:777: v()
    (tail call): ?

  • #480

    "@CobraA1, thats not a problem with the savefile, thats a programm issue with battlepets."

    The save file holds important information that I can usually use to help diagnose the problem.

    In this particular case, I was able to reproduce the problem by caging a pet. I'll get it fixed for the next version.

    EDIT: Fixed in next version.

    Last edited by CobraA1 on 10/8/2012 8:34:53 AM
  • To post a comment, please login or register a new account.
Login to Curse

Don't have an account? Create One.

Get an epic experience with Curse Premium
  • Faster addon downloads
  • Premium-Only Beta Giveaways
  • Ad-Free Curse experience
  • Premium Curse Client
  • and many More Features
  • Learn More »

Star Trek Online Wiki Editing Contest