Get an Epic Experience with Premium

Reagent Restocker

Bags & Inventory Login to Add Favorites
  • World of Warcraft
  • 4,205 Monthly Downloads
  • Supports: 6.0.3
  • 262,304 Total Downloads
  • Updated 11/25/2014
  • Created 10/06/2009
  • 377 Favorites
  • Project Site
  • Comments
  • Release Type: Release
  • License: MIT License
  • Newest File: v10.0
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:

r126 | cobraa1 | 2014-11-26 04:19:17 +0000 (Wed, 26 Nov 2014) | 6 lines
Changed paths:
   A /tags/v10.0 (from /trunk:125)

-   Fixed bank overstocking

-   Updated icon

-   NEW: You can now instruct Reagent Restocker to automatically move reagents to the reagent bank! The new option is in the "Bank" section, and is off by default.

r125 | cobraa1 | 2014-11-26 04:18:13 +0000 (Wed, 26 Nov 2014) | 1 line
Changed paths:
   M /trunk/ReagentRestocker.toc

Commit before update.
r124 | cobraa1 | 2014-11-26 04:13:59 +0000 (Wed, 26 Nov 2014) | 6 lines
Changed paths:
   M /trunk/BankBag.lua
   M /trunk/
   M /trunk/DatabaseUpdate.lua
   M /trunk/
   A /trunk/RR Icon 2014.svg
   M /trunk/RRIcon128.tga
   M /trunk/ReagentRestocker.toc
   M /trunk/UI.lua

-   Fixed bank overstocking

-   Updated icon

-   NEW: You can now instruct Reagent Restocker to automatically move reagents to the reagent bank! The new option is in the "Bank" section, and is off by default.

r122 | cobraa1 | 2014-10-29 16:56:15 +0000 (Wed, 29 Oct 2014) | 1 line
Changed paths:
   M /trunk/BankBag.lua
   M /trunk/
   M /trunk/ReagentRestocker.toc

Commit before update.
r121 | cobraa1 | 2014-10-17 23:04:38 +0000 (Fri, 17 Oct 2014) | 1 line
Changed paths:
   A /trunk/
   A /trunk/
   D /trunk/NEWS.TXT
   A /trunk/

Converted documentation to markdown, which is easier to work with across all sites I upload to. The editor I am using is called Texts.


First Previous Page 5 of 35 Next Last
  • #458

    I like the old version much better.

    I am hoping the new one will get back all the control that is now missing.

    Can't Drag & Drop items, can't use item numbers, can't set sell threshold (just says gray and the slider is missing).

    I hope it gets back all of the old features as the beta progresses.


  • #459

    Make sure you're using the latest version of the beta for Reagent Restocker. Seems to be working fine for me.

    Also note that the Mists beta itself had bugs that broke things, many of which are fixed now.

    I will of course keep an eye on things and fix anything broken that I encounter.

  • #456

    Many versions ago, Reagent Restocker could restock inks from the ink vendor.  Like trading in Blackfallow Ink for Ink of the Sea.  I can't get it to do it anymore.  Anything I'm doing wrong?  Or did you intend to not have it do this?

  • #457

    I'll take a look when I have the time. Does it use regular gold or an alternative currency? I don't use that particular profession.

  • #454

    Would love to see an option to save settings across characters, and an option to allow auto-populating of blue+ items.  I've figured out how to edit the files to do this, but would be nice to have it officially supported.

  • #455

    Saving settings across characters is in the long term plan, but not the short term, I'm afraid. I'm currently working on another new feature.

    I'd prefer not to do automatic population of the lists. Automatic population grows the list constantly, which can make the addon into a memory hog, which I'm trying to avoid.

    I'd rather just do the automation directly, and use the exceptions list if you want to make exceptions to the rules.

  • #452

    I tried to find more information everywhere on how to set this addon. I'm trying to auto-sell BOP unusable gear, but the option "Keep bind on equip items" -  as well the option "Keep soulbound items" - appears greyed out. I've also tried to auto-sell food and water and it doesn't work. Only if I specify 1 item does the auto-sell feature works. Please, can someone help with these settings? Do I have to specefy every single piece of gear and foods/drinks? Is it possible to use some kind of wildcard like "*"? Should I activate the "Auto-populate Selling List" option?

    Thank you for this great addon, makes life easier on tedious tasks :)

  • #453

    Soulbound and BOE detection were rather broken, and weren't working properly. The issue is that there's no public API for detecting soulbound items, so it has to use tooltip scanning, which I never really managed to get working properly.

    I may try to re-implement soulbound and BOE detection again some other day, but for now I've got a full plate. However, you can limit what you're selling by quality, which works fine.

    "I've also tried to auto-sell food and water and it doesn't work."

    This would be a bug. I'll investigate.

    "Is it possible to use some kind of wildcard like "*"?"

    No, I don't have any type of regular expression parsing in Reagent Restocker. Although you do seem to have hit upon a good idea . . . I'll see what I can do :).

    "Should I activate the "Auto-populate Selling List" option?"

    I'd recommend against it. For the most part, it should be unnecessary, and you'll just end up with an unmanageable list that eats up memory.

    "Thank you for this great addon, makes life easier on tedious tasks :)"

    Thanks :).

  • #451

    First beta of the next version of Reagent Restocker has been released. There's a lot of work to do yet, but I've fixed some of the showstopper bugs in Mists of Pandaria, and I've begun work on the new UI for shopkeepers that will replace the little "+" symbols that are in 2.6.

    Note that Reagent Resocker betas are only available from

  • #450

    Authors have been given their beta keys! I'll be doing my best to get back into coding Reagent Restocker again. Even if there's no major compatibility changes that need to be made, I'm starting to work on a new feature that will really help the overall usability of RR :).

  • #447

    Bug 1:

    9x ReagentRestocker-v2.6.18\DatabaseUpdate.lua:188: attempt to index field "tags" (a nil value)
    ReagentRestocker-v2.6.18\DatabaseUpdate.lua:188: in function "loadDB"
    ReagentRestocker-v2.6.18\DatabaseUpdate.lua:310: in function "?"
    ReagentRestocker-v2.6.18\Core.lua:51: in function <ReagentRestocker\Core.lua:50>

    self = <unnamed> {
    0 = <userdata>
    oldEnv = <table> {
    HealBot_Action_HealUnit2BarCount10 = HealBot_Action_HealUnit2BarCount10 {}
    ContainerFrame5Item7 = ContainerFrame5Item7 {}
    Inst11Quest2_HORDE_QuestID = "27128"
    Inst80Quest2name3 = "Accused Wristguards"
    ArmoryOptionsTooltipPanelShowItemCountColorSwatch = ArmoryOptionsTooltipPanelShowItemCountColorSwatch {}
    GetTrainerServiceTypeFilter = <func> =[C]:-1
    UNIT_NAMES_COMBATLOG_TOOLTIP = "Color unit names."
    SetTrainerServiceTypeFilter = <func> =[C]:-1
    SPELL_FAILED_CUSTOM_ERROR_71 = "This partygoer wants to dance with you."
    Inst12Quest6description1_HORDE = "Two-Hand, Axe"
    CompactUnitFrameProfilesGeneralOptionsFrameHealthTextDropdownButtonNormalTexture = CompactUnitFrameProfilesGeneralOptionsFrameHealthTextDropdownButtonNormalTexture {}
    HealBot_Options_CrashProt_OnClick = <func> @HealBot\HealBot_Options.lua:816
    XCustomBarConfigScrollActionsLine3TextName = XCustomBarConfigScrollActionsLine3TextName {}
    PawnItemComparer = <func> @..\Pawn.lua:3022
    Inst39Quest10_HORDE_Aim = "Caza'rez inside the Shattered Halls of Hellfire Citadel wants you to kill 4 Shattered Hand Legionnaires, 2 Shattered Hand Centurions, and 2 Shattered Hand Champions. "
    Inst70Quest1_HORDE_Location = "Dark Ranger Marrah (Utgarde Keep; |cff0070ddEntrance|cffFFFFFF)"
    AudioOptionsVoicePanelOutputDeviceDropDownButtonHighlightTexture = AudioOptionsVoicePanelOutputDeviceDropDownButtonHighlightTexture {}
    Inst55Quest6 = "6. Wanted: A Warp Splinter Clipping (Heroic Daily)"
    Inst84Quest1_HORDE_QuestID = "13372"
    MerchantItem5AltCurrencyFrameItem1Text = MerchantItem5AltCurrencyFrameItem1Text {}
    BINDING_NAME_NAMEPLATES = "Show Enemy Name Plates"
    INSTANCE_UNAVAILABLE_OTHER_TEMPORARILY_DISABLED = "%s cannot enter. This instance is temporarily disabled."
    ArmorySpellButton5 = ArmorySpellButton5 {}
    IsReferAFriendLinked = <func> =[C]:-1
    AudioOptionsVoicePanelMicrophoneVolumeThumb = AudioOptionsVoicePanelMicrophoneVolumeThumb {}
    CALENDAR_RAID_RESET_DESCRIPTION = "%1$s resets at %2$s."
    ArmoryMainHandSlot = ArmoryMainHandSlot {}
    Inst93Quest1_Prequest = "None"
    GemHelper_UserDropdownIcon = GemHelper_UserDropdownIcon {}
    Inst39Quest5Rewardtext_HORDE = "|cff0070dd No Rewards"
    MoneyFrame_OnEvent = <func> @FrameXML\MoneyFrame.lua:224
    LFDParentFrameBotLeftCorner = LFDParentFrameBotLeftCorner {}
    InterfaceOptionsCombatTextPanelFCTDropDown_OnClick = <func> @FrameXML\InterfaceOptionsPanels.lua:1684
    AGGRO_NOTIFIER_GENERIC_AGGRO_TEXT_OPTION_DESCRIPTION_PET = "This is used as a fall-back when the Desired Pet Aggro Text includes @enemy@, but there's no enemy available (e.g. when you leave combat)."
    TradeSkillInputBoxLeft = TradeSkillInputBoxLeft {}
    LFGTeleport = <func> =[C]:-1
    SpellButton6Cooldown = SpellButton6Cooldown {}
    AtlasLootItem_30_QA = AtlasLootItem_30_QA {}
    ToggleEncounterJournal = <func> @FrameXML\UIParent.lua:563
    Graphics_QualityText = Graphics_QualityText {}
    Inst91Quest1_HORDE_Prequest = "Echoes of Tortured Souls (|cffFFd200Forge of Souls|cffFFFFFF)"
    TalentMicroButtonAlertShadowTopLeft = TalentMicroButtonAlertShadowTopLeft {}
    ArmoryRaidInfoScrollFrameButton11Reset = ArmoryRaidInfoScrollFrameButton11Reset {}
    CompactUnitFrameProfilesSaveButton = CompactUnitFrameProfilesSaveButton {}
    Inst39Quest3ID2 = "25805"
    Inst51Quest4_HORDE_Note = "This daily quest can only be completed on Heroic difficulty.

    Epoch Hunter is at |cffFFd200[3]|cffFFFFFF."
    ArmoryTalentFrameBranch2 = ArmoryTalentFrameBranch2 {}
    Is64BitClient = <func> =[C]:-1
    ArmoryOptionsTooltipPanelShowCanLearnColorSwatchNormalTexture = ArmoryOptionsTooltipPanelShowCanLearnColorSwatchNormalTexture {}
    Inst67Quest8_HORDE_Prequest = "None"
    HealBot_Options_AltText = HealBot_Options_AltText {}
    GemHelper_CheckButton35Text = GemHelper_CheckButton3

    Bug 2:

    7x ReagentRestocker-v2.6.18\Core.lua:294: attempt to index global "RRGlobal" (a nil value)
    ReagentRestocker-v2.6.18\Core.lua:294: in function "safeGetItemInfo"
    ReagentRestocker-v2.6.18\Core.lua:623: in function "checkWaters"
    ReagentRestocker-v2.6.18\Core.lua:786: in function "MERCHANT_SHOW"
    ReagentRestocker-v2.6.18\Core.lua:777: in function "v"
    ReagentRestocker-v2.6.18\EventHandler.lua:66: in function <ReagentRestocker\EventHandler.lua:32>
    (tail call): ?

    waters = <table> {
    1 = 159
    2 = 1179
    3 = 1205
    4 = 1708
    5 = 1645
    6 = 8766
    7 = 28399
    8 = 27860
    9 = 33444
    10 = 33445
    11 = 58256
    12 = 58257
    (for generator) = <func> =[C]:-1
    (for state) = <table> {
    1 = 159
    2 = 1179
    3 = 1205
    4 = 1708
    5 = 1645
    6 = 8766
    7 = 28399
    8 = 27860
    9 = 33444
    10 = 33445
    11 = 58256
    12 = 58257
    (for control) = 1
    _ = 1
    id = 159

    Bug 3:

    23x ReagentRestocker-v2.6.18\Core.lua:291: attempt to index global "RRGlobal" (a nil value)
    ReagentRestocker-v2.6.18\Core.lua:291: in function "safeGetItemInfo"
    ReagentRestocker-v2.6.18\UI.lua:703: in function "refreshShoppingList"
    ReagentRestocker-v2.6.18\UI.lua:948: in function "showFrame"
    ReagentRestocker-v2.6.18\Core.lua:1615: in function "?"
    FrameXML\ChatFrame.lua:4293: in function <FrameXML\ChatFrame.lua:4239>
    <in C code>
    FrameXML\ChatFrame.lua:3992: in function "ChatEdit_SendText"
    FrameXML\ChatFrame.lua:4031: in function "ChatEdit_OnEnterPressed"
    <string>:"*:OnEnterPressed":1: in function <string>:"*:OnEnterPressed":1

    shopNum = 1
    sellNum = 1
    excludeNum = 1
    (for generator) = <func> =[C]:-1
    (for state) = <table> {
    17031 = <table> {}
    17032 = <table> {}
    17020 = <table> {}
    (for control) = 17031
    k = 17031
    v = <table> {
    item_sell = 250
    0 = "Rune of Teleportation"
    3 = 20
    tags = <table> {}
    5 = "Miscellaneous"
    4 = 0
    7 = 20
    6 = "Reagent"
    9 = "Icons\INV_Misc_Rune_06"
    8 = ""
    2 = 1
    low_warning = 5
    item_name = "Rune of Teleportation"
    qty = 20
    1 = "|cffffffff|Hitem:17031:0:0:0:0:0:0:0:85:0|h[Rune of Teleportation]|h|r"
    tocversion = 40300

    All occurred while trying to top of 20 stacks of Runes of TP and Portal from vendor. Mod didn't top off the stacks either.

    P.S. That means I had to *cough* manually purchase them. That's right, the M-word.

    Last edited by Outrider on 5/23/2012 8:01:12 PM
  • #448

    Sorry for replying so late. Hopefully you still see this.

    Bug 1: Appears to be some database update code is buggy. I've fixed it, but you may have to delete your saved variables and restart.

    Bug 2: Should be impossible :/. Oh well, I've made the nil check more explicit, so the interpreter should catch it. Or maybe I fixed it but didn't release the fix yet?

    Bug 3: Fixed in the next version.

  • #446

    I have RR set to put overstocks in the bank. When I open the bank with an overstock in my bags, I get this error:

    1x ReagentRestocker-v2.6.18\BankBag.lua:1178: Usage: GetItemInfo(itemID|"name"|"itemlink")
    <in C code>
    ReagentRestocker-v2.6.18\BankBag.lua:1178: in function "scanForItem"
    ReagentRestocker-v2.6.18\BankBag.lua:56: in function "v"
    ReagentRestocker-v2.6.18\EventHandler.lua:66: in function <ReagentRestocker\EventHandler.lua:32>
    (tail call): ?

    location = 2
    itemID = 2863
    itemList = <table> {
    1 = <table> {}
    (for index) = 8
    (for limit) = 11
    (for step) = 1
    bag = 8
    bagLink = nil

  • #443

    I use this addon to farm recipes, however I noticed that it will not allow me more than 15 recipes, it used to go upon to my empty bag limit.  How do I increase this limit as my farming alts hold lots of the recipes between selling them?

  • #444

    There is no hard coded limit. You should be able to put in as many as you want. If not, then there is a bug somewhere.

    It could be handling specialized bags poorly, as that part of the code still has some bugs Frown.

    Last edited by CobraA1 on 4/16/2012 5:38:30 PM
  • 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 »

Curse $5,000 Dreamhack CS:GO Skin Giveaway

Enter Now!