• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Click "RG3" at the very bottom-left of this page to change it. To dismiss this notice, click the X --->
AutoVendor

Utility AutoVendor 3.6

AutoVendor Ver. 3.6 Changelog:

Bugfixes:
-Tributing is now fully functional again thanks to a great deal of help debugging from @kaen01

As always, let me know if there are any problems.
AutoVendor Ver. 3.5 Changelog:


**Removal of Tribute**
Unfortunately, with the InvSlot functionality currently being broken within the core of MQ2, tributing will no longer work as the functionality behind it has no (good) work-around and you cannot accomplish what we want to with the capabilities available to us. I've kept the core functionality and the variables in-tact but they are currently commented out, I will come back to this in the future when it is possible to get this fully functional again. Tributing now works again as of most recent update.

**Palatial Support**
Autovendor should now find the tribute & sell vendors within the palatial guild hall, thanks to @ChatWithThisName for giving me the information needed to get this fully functional. Again, if there are any issues with this, please let me know.

Bugfixes:
-Removed a lot of unnecessary duplicated messages.
-Updated the container check to consider the new slots 33 and 34.
-Parceling w/ and w/o multiple parcel mules should now be fully functional again.


Bugfixes in more detail:
To go in to detail about what was happening with the parcels, lets compare a snippet from our old parceling logic to our new one:


Old:
                        /if (${Ini[AutoVendor_${Me.CleanName}.ini,"- ${firstLetter} -",${itemName}].Equal[Parcel1]} || ${Ini[AutoVendor_${Me.CleanName}.ini,"- ${firstLetter} -",${itemName}].Equal[BuyParcel1]}) {
                            /nomodkey /notify FindItemWnd FIW_ItemList listselect ${looper}
                            /varset itemQuantity ${Window[FindItemWnd].Child[FIW_ItemList].List[${looper},3]}
                            /nomodkey /notify MerchantWnd MW_Send_To_Edit leftmouseup
                            /if (${targetMule.Length}) {
                                /if (${targetMule.Equal[${parcelMules.Arg[1,|]}]}) {
                                } else {
                                    /for looperFour 0 to ${targetMule.Length}
                                        /nomodkey /keypress backspace chat
                                    /next looperFour
                                    /varset targetMule ${parcelMules.Arg[1,|]}
                                    /nomodkey /notify FindItemWnd FIW_ItemList listselect ${looper}
                                    /delay 10
                                }
                            } else {
                                /varset targetMule ${parcelMules.Arg[1,|]}
                            }
                            /if (${whichMule} != 1) {
                                /for looperThree 1 to ${targetMule.Length}
                                    /varset char ${targetMule.Mid[${looperThree},1]}
                                    /if (${looperThree} == ${targetMule.Length}) {
                                        /nomodkey /keypress ${char} chat
                                        /varset looperThree -1
                                        /varset whichMule 1
                                        /break
                                    } else {
                                        /nomodkey /keypress ${char} chat
                                    }
                                /next looperThree
                            }
                            /nomodkey /notify MerchantWnd MW_Send_Button leftmouseup
                            /delay 10
                            /if (${Window[QuantityWnd].Open}) {
                                /nomodkey /notify QuantityWnd QTYW_Accept_Button leftmouseup
                                /echo You sent \at ${itemQuantity} ${itemName} \ax to \ar ${targetMule}\ax!
                                /varcalc totalParcel ${totalParcel}+${itemQuantity}
                                /delay 30
                                /nomodkey /notify FindItemWnd FIW_ItemList listselect ${looper}
                            } else {
                                /echo You sent \at ${itemQuantity} ${itemName} \ax to \ar ${targetMule}\ax!
                                /delay 30
                                /nomodkey /notify FindItemWnd FIW_ItemList listselect ${looper}
                            }  
                        }

New:
/if (${Ini[AutoVendor_${Me.CleanName}.ini,"- ${firstLetter} -",${itemName}].Equal[Parcel1]} || ${Ini[AutoVendor_${Me.CleanName}.ini,"- ${firstLetter} -",${itemName}].Equal[BuyParcel1]}) {
                        /nomodkey /notify FindItemWnd FIW_ItemList listselect ${looper}
                        /varset itemQuantity ${Window[FindItemWnd].Child[FIW_ItemList].List[${looper},3]}
                        /nomodkey /notify MerchantWnd MW_Send_To_Edit leftmouseup
                        /if (${targetMule.Length}) {
                                /for looperFour 0 to ${targetMule.Length}
                                    /nomodkey /keypress backspace chat
                                /next looperFour
                                /varset targetMule ${parcelMules.Arg[1,|]}
                                /nomodkey /notify FindItemWnd FIW_ItemList listselect ${looper}
                                /delay 10
                        } else {
                            /varset targetMule ${parcelMules.Arg[1,|]}
                        }
                            /nomodkey /notify MerchantWnd MW_Send_To_Edit leftmouseup
                            /for looperThree 1 to ${targetMule.Length}
                                /varset char ${targetMule.Mid[${looperThree},1]}
                                /if (${looperThree} == ${targetMule.Length}) {
                                    /nomodkey /keypress ${char} chat
                                    /varset looperThree -1
                                    /varset whichMule 1
                                    /break
                                } else {
                                    /nomodkey /keypress ${char} chat
                                }
                            /next looperThree
                        /delay 10
                        /nomodkey /notify MerchantWnd MW_Send_Button leftmouseup
                        /delay 10
                        /if (${Window[QuantityWnd].Open}) {
                            /nomodkey /notify QuantityWnd QTYW_Accept_Button leftmouseup
                            /echo You sent \at ${itemQuantity} ${itemName} \ax to \ar ${targetMule}\ax!
                            /varcalc totalParcel ${totalParcel}+${itemQuantity}
                            /delay 30
                            /nomodkey /notify FindItemWnd FIW_ItemList listselect ${looper}
                        } else {
                            /echo You sent \at ${itemQuantity} ${itemName} \ax to \ar ${targetMule}\ax!
                            /delay 30
                            /nomodkey /notify FindItemWnd FIW_ItemList listselect ${looper}
                        }  
                    }
In the old, I've highlighted what was removed and in the new I've highlighted what was added. Before, I had arbitrary checks on whether or not the name was already typed and if the name was already in use as the current mule. I removed these checks so we will always type the name everytime regardless of whether or not it's the same mule or not. As well, I added a notify in to our new routine that will set the parcel text field to active to avoid the macro hanging on an inactive chat field.


The macro should be fully working again! Thanks for all the feedback fellas, let me know if there are any issues with the current build, I have tested it myself and ran in to no issues after these fixes. Please let me know what goes on, thanks again! :)
Some cleanup stuff with grammar/spelling, no major changed.
AutoVendor Ver. 3.4 Changelog:

**SellVendor**
Selling to specified vendors is now here! No longer are the days of having to run across the zone to the first vendor the macro picks up! You can now specify exactly what vendor you'd like the macro to interact with!

--New variable SellVendor
--SellStuff can now be set to 1 or 2, 1 for your normal FindVendor routine where it will find the vendor for you and 2 if you'd like to use the SellVendor variable to find a specific vendor.
--Updated CheckINI, the SellVendor variable should be automatically merged in to any existing INI


**Bug Fixes & Stuff**

--Fixed a bug where the macro would hit an exception if there was no parcel tab in the vendor you were vendoring to, now it will just skip parceling.
AutoVendor Ver. 3.3 Changelog:

**Tributing**
Tributing is now here! Enjoy the convenience of having all of that jank tribute gear that just rots in your inventory magically disappear before your very eyes!

--New variable Tribute
--Tribute can be set to 1 or 0, 1 for do thing 0 for don't do thing.
--You can now set items to Tribute, GuildTribute or PersonalTribute.
*If set to GuildTribute, the item will only be donated to the tribute master in the Guild Hall, will be ignored otherwise.
*If set to PersonalTribute, the item will only be donated to the tribute master in your home city/race tribute master, will be ignored otherwise.
*If set to Tribute, the item will be donated to whatever tribute master is available in your current zone.
Note: If you notice your find item window is opening and closing while tributing, this is due to the window not updating when an item is donated for some reason. It's perfectly normal and by design, don't worry about it! :)


**INI Changes**
Changes have been made to how the INI builds itself to make it not only cleaner, but more efficient. Sadly, this does mean that the old INIs are antiquated and will not work anymore *cue the angry booing*. Apologies ahead of time! But the new INI is much cleaner and more efficient, I'm sure you'll love it. :)

--Changed how INI is built, loops over a string to write the entire alphabet to the INI.
--Properly checks the INI for missing variables and applies them based on new changes to how we build INIs.
--Fixed category alphabetization.

**Bug Fixes & Stuff**

--Fixed a bug where if you had an item in the bank that was the same name as an item you were sending, it would get stuck attempting to send the item that was in the bank.
--Fixed a bug where, while parceling, the macro would sometimes deselect the item it was trying to parcel causing duplicated messages.
--Fixed a bug where the FindVendor function sometimes failed due to bad syntax on some of the checks.
--Fixed a bug where certain objects that were vendorable were not being detected as vendorable.
--A bunch of organization and syntax changes.
**AutoVendor Update 3.2 1/17/21**


New Stuff:
-You can now set the macro to buy things for you! Just set BuyStuff to 1 and set whatever you want to purchase to either Buy or, alternatively, BuyParcel1-5 if you'd also like to parcel what you purchase! As well, if you set BuyStuff to 2 you can designate up to 5 vendors that the macro will then run around and search!

-New subroutine CheckINI for checking if your INI has all the proper variables and, if not, writes them and gives you the opportunity to restart the macro before running.

Let me know if there are any issues, thanks! :)
**AutoVendor Update 3.1 1/15/21**

What's new?:

-New variable SellStuff! Flipping this variable to 0 will turn off selling to vendors in-case you just want to parcel and/or destroy! Default is 1.

-Some spelling and grammar mistakes were fixed.
**Autovendor 3.0 Update 1/15/21**

What's new?:

-You no longer have to enter the total items and rebuild the INI everytime you need to run it! That's right, you read correctly, I have done away with my antiquated methods of requiring that silly thing called "user input" and have automated the process of counting your items for you with the new GetTotalSlots subroutine which runs automatically on startup!

-You can now set the macro to destroy certain items! In your INI, set DestroyItems to 1 and then set whatever items you'd like to get rid of to Destroy! No more no value nonsense cluttering your inventory, just throw it in the INI and set it to Destroy!

-No longer are the times of having to leave your camp to vendor your junk, you can now summon a vendor where there otherwise wouldn't be one! Just set the SummonVendor variable to 1 in your INI and when the macro can't find a vendor, it will use your Summon Resupply Agent cooldown to summon one! Note: This requires ParcelOn to be 0 and your Summon Resupply Agent to be off cooldown.

-I revamped our BuildINI subroutine to not be so amateur-ish! Enjoy the new and improved fancy INI with all the options in one place, clearer instructions and alphabetized item names! Unfortunately, this does mean that old INIs are antiquated and will no longer work, sorry about that!

-Now supports multiple INIs for different characters! With our new BuildINI routine, each character gets assigned their own separate INI so you no longer have to constantly swip swap your variables based on which character you're selling on! Tired of having to switch around your variables from Live for your Rizlona vendor? Now you don't have to!

-Loads and loads of quality of life changes and bug fixes. Cleaned up the FindVendor routine to be more consistent, fixed the for loop error that would catch in BuildINI if you had sub-100 total items and more!

As always, if there's any issues or if you have any suggestions on how I should expand the macro, let me know!

Thanks folks! :)
After a few days of tinkering, I am certain I've figured out a solution to the double echo/loop hits with parceling. It seems it was caused by the logic running through the name initialization too fast when the mule name had to change to a different one than the previous parceled mule. Fixed this by throwing in a 1 second delay and re-highlighting the marked item within the name change shenanigans. To make up for the extra one second delay, the wait between items has been cut by one second, this hasn't seemed to cause any issues but let me know if it's running through the process too fast or something.

As always, if you have any issues or ideas on how to expand the macro please let me know! :)
Changed the delay between parcels to be 4 seconds as opposed to 3 as I was still getting double hits on the loop due to parcels not being ready yet. This should fix the issue, but will tinker with it more if not. Also added a visual representation for when parceling begins.
Top