• 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? Change the look. To dismiss this notice, click the X --->
AutoVendor

Macro - AutoVendor (1 Viewer) 3.6

Ionis

Moderator
Joined
Nov 11, 2012
RedCents
3,624¢
Ionis submitted a new resource:

AutoVendor - Automatically vendor's your junk!

This macro will automatically vendor your junk determined by an INI that you setup!

Initialization: /mac autovendor buildini #ofitemshere (You can find the total # of items in your find item window in the bottom right hand corner, it's the second number)

In your AutoVendor.ini, set what you want to sell to Sell and what you want to keep to Ignore.

After running the initialization and editing your INI, go...

Read more about this resource...
 
Last edited:
There are other options in this area, but the .ini builder here is a great idea.
I made this actually in part because I had little experience in actually building/declaring INIs and partly because I was getting tired of having to sift through my inventory to sell vendor trash after every night. :P Was a great learning experience and figured I'd throw it up in-case anyone was tired of the same thing!

Also, big shoutout to @ChatWithThisName and anyone else who worked on the bazaar.mac since I used that as reference material when writing the function for building the INI, helped me out a bunch. :)
 
Where, and in what format do the items need to be listed in the INI? Is it the same as the common loot.ini file that comes with most MQ@ distros? Can you show me a sample autovendor.ini?
 
Where, and in what format do the items need to be listed in the INI? Is it the same as the common loot.ini file that comes with most MQ@ distros? Can you show me a sample autovendor.ini?

After building the INI it will look something like this:


INI Example:
[Instructions]
Instructions=Set items on the list to either Sell or Ignore.
[Items]
Battle Fractured Diamond=Sell
Blue Diamond=Sell
Cabilisian Diamond=Sell
Chronal Resonance Dust=Ignore
Cloudy Potion=Ignore
Diamond=Sell
Exquisite Animal Pelt=Ignore
Exquisite Silk=Ignore
Fellowship Campfire Materials=Ignore
Immaculate Animal Pelt=Ignore
Immaculate Marrow=Ignore
Immaculate Silk=Ignore
Juice of Quellious=Ignore
Kaladim Constitutional=Ignore
Misty Thicket Picnic=Ignore
Philter of Major Translocation=Ignore
Porous Loam=Ignore
Pristine Delphinium=Ignore
Pristine Laburnum=Ignore
Pristine Muscimol=Ignore
Pristine Oleander=Ignore
Purified Grade AA Gormar Venom=Ignore
Purified Grade AA Nigriventer Venom=Ignore
Spell: Dermal Brimstone Rk. II=Sell
Spell: Halcyon Whisper Rk. II=Sell
Spell: Netherside Rk. II=Sell
Spell: Sound of Reverberance Rk. II=Sell
Spongy Loam=Ignore
Tantalum Ore=Ignore
Titanium Ore=Ignore
Tome of Punch Through Rk. II=Sell
Trade-In Gem: Assault Rk. II=Ignore
Trade-In Gem: Swarm of Bees Rk. II=Ignore
Trade-In Gem: Vigorous Dagger-Throw Rk. II=Ignore
Trade-In Gem: Wind of Malis Rk. II=Ignore
Urticaceae=Ignore
Vanadium Ore=Ignore
Chokidai Meat=Sell
Chokidai Scale=Sell
Flawless Animal Pelt=Ignore
Flawless Silk=Ignore
Iksar Meat=Sell
Immaculate Spinneret Fluid=Ignore
Pristine Caladium=Ignore
Pristine Larkspur=Ignore
Pristine Privet=Ignore
Purified Grade AA Taipan Venom=Ignore
Sarnak Meat=Sell
Song: Chorus of Rodcet Rk.II=Sell
Song: Firiona's Blessed Clarinet Rk.II=Sell
Song: Mirror Melody Rk. II=Sell
Song: Pulse of Rodcet Rk.II=Sell
Spell: Abolish Corruption Rk. II=Sell
Spell: Aina's Faithful Rk. II=Sell
Spell: Armor of Unwavering Faith Rk. II=Sell
Spell: Bark of Tashan Rk. II=Sell
Spell: Barrage of Arrows Rk. II=Sell
Spell: Bone-Rattling Shriek Rk. II=Sell
Spell: Chant of the Burynai Rk. II=Sell
Spell: Coldwhisper Breath Rk. II=Sell
Spell: Color Conflux Rk. II=Sell
Spell: Devout Cleansing Rk. II=Sell
Spell: Fellid's Pallid Haze Rk. II=Sell
Spell: Harvesting Inferno Rk. II=Sell
Spell: Heartpierce Rk. II=Sell
Spell: Ice Sheet Rk. II=Sell
Spell: Jeneca's Mark Rk. II=Sell
Spell: Leap of Static Jolts Rk. II=Sell
Spell: Magmatic Eruption Rk. II=Sell
Spell: Mark of the Unsullied Rk. II=Sell
Spell: Mojo Rk. II=Sell
Spell: Nectar of the Slitheren Rk. II=Sell
Spell: Palladium of Vie Rk. II=Sell
Spell: Providence Rk. II=Sell
Spell: Putrescence Rk. II=Sell
Spell: Serene Harvest Rk. II=Sell
Spell: Sermon of Castigation Rk. II=Sell
Spell: Shining Light Rk. II=Sell
Spell: Smother Rk. II=Sell
Spell: Spirit of Vaxztn Rk. II=Sell
Spell: Summon Frigid Paradox Rk. II=Sell
Spell: Talendor's Presence Rk. II=Sell
Spell: Torrid Skin Rk. II=Sell
Spell: Voidwhisper Manacles Rk. II=Sell
Spell: Ward of Admonishment Rk. II=Sell
Tome of Armor of Endless Honor Rk. II=Sell
Tome of Jarring Clash Rk. II=Sell
Tome of Maelstrom Blade Rk. II=Sell
Tome of Withstand Rk. II=Sell
Chokidai Eye=Sell
Purified Grade AA Choresine Sample=Ignore
Sealed Pure Energeian Metal Orb=Ignore
Spell: Burning Pyroshroud Rk. II=Sell
Spell: Burst of Spite Rk. II=Sell
Spell: Burynai Balm Rk. II=Sell
Spell: Cadmael's Mending Rk. II=Sell
Spell: Cloak of Feathers Rk. II=Sell
Spell: Crystalwing Shell Rk. II=Sell
Spell: Dannal's Mending Rk. II=Sell
Spell: Deluge of Thunderbolts Rk. II=Sell
Spell: Devout Elixir Rk. II=Sell
Spell: Divine Eminence Rk. II=Sell
Spell: Drape of Korafax Rk. II=Sell
Spell: Empyrean Guardian Rk. II=Sell
Spell: Gallantry Rk. II=Sell
Spell: Heartwood Skin Rk. II=Sell
Spell: Hushed Mind Rk. II=Sell
Spell: Malarian Spear Rk. II=Sell
Spell: Minion of Sebilis Rk. II=Sell
Spell: Mortal Coil Rk. II=Sell
Spell: Polychaotic Assault Rk. II=Sell
Spell: Purified Blood Rk. II=Sell
Spell: Repel Corruption Rk. II=Sell
Spell: Rune of the Void Rk. II=Sell
Spell: Silent Edict Rk. II=Sell
Spell: Skin to Flora Rk. II=Sell
Spell: Spiritual Edification Rk. II=Sell
Spell: Talisman of the Resolute Rk. II=Sell
Spell: The Downward Spiral Rk. II=Sell
Tome of Chrono Projection Rk. II=Sell
Tome of Fourth Wind Rk. II=Sell
[TotalItems]
TotalItems=298

The builder defaults every item to Sell, in the INI you'll want to keep the items you want to Sell set to Sell and change any you don't want to to Ignore. The INI is called AutoVendor.ini, after running the builder and setting up your INI just run the macro with no parameters and you'll be good to go. If you didn't want to use the builder and wanted to manually add items in to the INI you can do so by adding the *exact* item name followed by an equals sign then Sell or Ignore under the [Items] category, but the builder will do all that for you, I'd say you'd only need to do this if you have a no drop (like back to the same vendor you bought it from) or no value item you'd like to sell as I automatically filtered those out as well as the containers you're currently using.

The total items is the second parameter in the builder and is used as a control for the loop so it knows how many times it should iterate. You can find your total items in the find item window in the bottom right hand corner of the window.

An example of intialization is: /mac autovendor buildini 298

Once it's done, change your INI accordingly then type /mac autovendor and it will go. If you ever need to add more items or change your total items just run the initialization again and it'll do it all for you.
 
OK cool. I ran the initiation with a total of one item, just to test it out but it didn't put the second [TotalItems] in the INI. Just the TotalItems=1 part at the end. We'll see how it goes this time. Cool idea.
 
OK cool. I ran the initiation with a total of one item, just to test it out but it didn't put the second [TotalItems] in the INI. Just the TotalItems=1 part at the end. We'll see how it goes this time. Cool idea.
Huh, strange it should throw it in a category so that's weird. Let me know if you run in to any outstanding issues! :)
 
Is it possible to have it parcel items? Just a thought but that would be cool. I send all of my TS items to a toon and it takes forever to parcel them all.
 
Is it possible to have it parcel items? Just a thought but that would be cool. I send all of my TS items to a toon and it takes forever to parcel them all.
Yeah! If you could give me more of an idea of what you want I can definitely do that. You thinking something like you can mark an item as Parcel and then it Parcels to your pre-designated toon after selling sort of thing?
 
Exactly, or have parcel and toon name be part of the ini. I send some stuff to my trader mule, rogue poisons stuff to my rogue, general ts to a different mule, collectables to another, ornaments to yet another,.. That's why it takes me a while.
 
Exactly, or have parcel and toon name be part of the ini. I send some stuff to my trader mule, rogue poisons stuff to my rogue, general ts to a different mule, collectables to another, ornaments to yet another,.. That's why it takes me a while.
Sounds like a good idea, I could always tie it to an array that expands based on the number of parcel mules you want to send out to. I'll have to toy around with it.
 
I made this actually in part because I had little experience in actually building/declaring INIs and partly because I was getting tired of having to sift through my inventory to sell vendor trash after every night. :P Was a great learning experience and figured I'd throw it up in-case anyone was tired of the same thing!

Also, big shoutout to @ChatWithThisName and anyone else who worked on the bazaar.mac since I used that as reference material when writing the function for building the INI, helped me out a bunch. :)

If you ever felt inclined to make a post detailing your experience making something that generated .ini files I would certainly read it. When I was making macros for emu servers more regularly I was very interested in the user friendliness of ini files being generated for a macro. Simply open the ini and make the edits in clearly defined areas, instead of sifting through good/bad macro and making changes all over the place and hoping you didn't goof a change somewhere you'll never find again.

Most servers I play on now are RoF supported, and KA or CWTN plugins do most of the brunt work. I would still like to continue learning from people more skilled than I. <3
 
If you ever felt inclined to make a post detailing your experience making something that generated .ini files I would certainly read it. When I was making macros for emu servers more regularly I was very interested in the user friendliness of ini files being generated for a macro. Simply open the ini and make the edits in clearly defined areas, instead of sifting through good/bad macro and making changes all over the place and hoping you didn't goof a change somewhere you'll never find again.

Most servers I play on now are RoF supported, and KA or CWTN plugins do most of the brunt work. I would still like to continue learning from people more skilled than I. <3
I can break down my build function for you:

Grab Containers:
    /if (!${Window[InventoryWindow].Open}) {
    /windowstate InventoryWindow open
    }
    /echo Grabbing our containers...
    /delay 10
    /for slot 23 to 30
        /varset itemName ${Me.Inventory[${slot}].Name}
        /if (${InvSlot[${slot}].Item.Container}) {
            /varset containers[${slot}] ${itemName}
            /echo ${containers[${slot}]}
        } else {
        /echo ${itemName} is not a container, skipping...
        }
    /next slot
    /windowstate InventoryWindow close
    /ini AutoVendor.ini "Instructions" "Instructions" "Set items on the list to either Sell or Ignore."
    /varset slot -1
    /if (!${Window[FindItemWnd].Open}) {
        /windowstate FindItemWnd open
    }

The beginning of the function is just a for loop that iterates over inventory slot 23-30 (as those are your primary inventory slots you'd put bags and such in) to grab our containers since we don't want our vendor attempting to sell our bags, we can skip past that.





INI Builder:
/echo Grabbing our items...
    /delay 10
    /for slot 0 to ${totalSlots}
        /if (${Window[FindItemWnd].Child[FIW_ItemList].List[${slot},4].Compare[General]} == 32) {
            /nomodkey /notify FindItemWnd FIW_ItemList listselect ${slot}
            /varset itemName ${Window[FindItemWnd].Child[FIW_ItemList].List[${slot},2]}
            /if (!${Ini[AutoVendor.ini,"Items",${itemName}].Length}) {
                    /if (${FindItem[${itemName}].Value} <= 0) {
                        /echo ${itemName} has no value, skipping...
                        /next slot
                    }
                    /if (${containers[23].Equal[${itemName}]} || ${containers[24].Equal[${itemName}]} || ${containers[25].Equal[${itemName}]} || ${containers[26].Equal[${itemName}]} || ${containers[27].Equal[${itemName}]} || ${containers[28].Equal[${itemName}]} || ${containers[29].Equal[${itemName}]} || ${containers[30].Equal[${itemName}]}) {
                        /echo ${itemName} is a container and we don't want to sell our bags, skipping...
                        /next slot
                    } 
                    /if (${FindItem[${itemName}].NoDrop}) {
                        /echo ${itemName} is not vendorable, skipping...
                        /next slot
                    } 
            /echo Creating entry for ${itemName}.
            /ini AutoVendor.ini "Items" "${itemName}" "Sell"
            }
        }
    /next slot
    /windowstate FindItemWnd close
    /ini AutoVendor.ini "TotalItems" "TotalItems" ${totalSlots}

This is the real meat of the builder, so what this does is it iterates over your find item window using a for loop that is limited by the second parameter (total # of items). The first if statement is checking if the item is within the "General" section, as those are the items within our personal inventory, if it is we take the item name and set it to our designated string. The second if checks it against value, if it has no value then it skips to the next iteration in the loop, the third if checks for if it is one of our containers and if it is it skips that item and the fourth if checks if the item is no trade/no drop and if it is it skips as well. If the item passes all of these checks, it calls the function for building our INI on said item: /ini AutoVendor.ini "Items" "${itemName}" "Sell" this function essentially checks if AutoVendor.ini exists, if not it creates the file then the first variable passed in to the constructor is the category, second variable is the sub so the item itself and the third variable is the status of that item (Sell or Ignore). One we've iterated our total amount of times, we write our second parameter, total # of items, to the ini file that way it can be called upon once we restart our macro.

So what calls this is our initial functionality in our main:

Initialization:
/if (${Defined[Param0]}) {
    /if (${Defined[Param1]}) {
    /varset totalSlots ${Param1}
        /if (${Param0.Equal[buildini]}) {
            /echo Building our INI...
            /call BuildINI
            /echo Finished creating INI, please edit the INI file accordingly then restart your macro without any parameters.
            /echo ex. /mac AutoVendor
            /endmac
        } else {
            /echo You have declared your parameters incorrectly.
            /echo Try again but do it like this: /mac autovendor buildini #ofitemshere
            /echo You can find the number of items in the bottom right of your find item window.
            /endmac
        }
    } else {
        /echo You need to declare how many items you have total.
        /echo Try again but do it like this: /mac autovendor buildini #ofitemshere
        /echo You can find the number of items in the bottom right of your find item window.
        /endmac
    }
}

The first if checks if there is a parameter entered, this is the buildini part of /mac autovendor buildini #, if that gets a hit we set our totalSlots (total # of items variable) to the second parameter then we do a syntax check to make sure everything was entered correctly, if it was we call our BuildINI function and end the macro after running. You can then edit the ini then restart the macro WITHOUT any parameters (ex. /mac autovendor) and it will run the main functionality which is this:


Code:
/varset totalSlots ${Ini[AutoVendor.ini,"TotalItems",TotalItems]}
/call FindVendor
/delay 20
/if (!${Window[FindItemWnd].Open}) {
    /windowstate FindItemWnd open
}
/for looper 0 to ${totalSlots}
    /if (${Window[FindItemWnd].Child[FIW_ItemList].List[${looper},4].Compare[General]} == 32) {
        /for looperTwo 0 to ${totalSlots}
            /nomodkey /notify FindItemWnd FIW_ItemList listselect ${looper}
            /varset itemName ${Window[FindItemWnd].Child[FIW_ItemList].List[${looper},2]}
            /varset itemQuantity ${Window[FindItemWnd].Child[FIW_ItemList].List[${looper},3]}
            /varset itemValue ${Int[${Math.Calc[${FindItem[=${itemName}].Value}/1000]}]}
                /if (${Ini[AutoVendor.ini,"Items",${itemName}].Equal[Sell]}) {
                    /delay 10
                    /nomodkey /notify MerchantWnd MW_Sell_Button leftmouseup
                    /delay 20
                    /if (${Window[QuantityWnd].Open}) {
                        /nomodkey /notify QuantityWnd QTYW_Accept_Button leftmouseup
                        /delay 20
                    }   
                    /varcalc saleTotal ${itemQuantity}*${itemValue}
                    /echo We sold ${itemQuantity} ${itemName} for a total of ${saleTotal}!
                    /varcalc totalMoney ${saleTotal}+${totalMoney}
                    /varcalc totalSold ${itemQuantity}+${totalSold}
                    /nomodkey /notify FindItemWnd FIW_ItemList listselect ${looper}
                } else {
                    /break
                }
        /next looperTwo
    }
/next looper
/if (${Window[FindItemWnd].Open}) {
    /windowstate FindItemWnd close
}
/if (${Window[MerchantWnd].Open}) {
    /windowstate MerchantWnd close
}
/echo We are finished vendoring!
/echo We vendored ${totalSold} items for a rough estimate of ${totalMoney}pp!

Which will first call our function for finding a vendor, then it will loop over our find item window and use a system of checks to decide whether or not an item should be sold. This check is /if (${Ini[AutoVendor.ini,"Items",${itemName}].Equal[Sell]}) which essentially says if the item we are highlighted on is set to Sell in our INI, then sell the item. There's just a flat else catch in there, so technically you can set it to anything BUT Sell and it will still not sell the item, it doesn't HAVE to be Ignore, I just tell people to set it to Ignore because it made sense and is less confusing than saying "Set it to anything because the else will catch the exception so it doesn't matter" sort of deal.

There's a bunch of squish in there, mainly because I personally like to see the stats of what I sold, how much, how much I gained etc. to make it easier to gauge a camps value based on the vendor trash but as well I like my applications to be as transparent as possible as it not only helps with debugging but also helps others understand exactly what the macro is doing and why.

If you have any questions, feel free to ask! :)

Edit: I forgot to mention, for the main functionality, the reason the main loop has another loop within it is because sometimes you'll have items one after another that need to be sold, if this is the case the main loop will actually skip the item right after it as it's moving on to the next in the list via the ${looper} variable BUT, because we sold an item, the next in the list is now the current iteration so when it increments it skips. A second loop that iterates over the functionality until it hits something that ISN'T on the INI then breaks fixes this and that's why it is there. :)
 
Last edited:
Currently working on a build that will take parcels in to account, I also revamped the find vendor a little bit so it doesn't rely on compare but instead stores the NPC type as a string and then compares that string to the type you want for better accuracy and threw in an exception catcher for when there is no available NPC as I forgot to do that. Will push the update as soon as I've completed all functionality.

Little sneak peek @ what the new find vendor function looks like if anyone was interested:


Find Vendor:
|-------------------------------------------------------------|
| Sub FindVendor
|-------------------------------------------------------------|
Sub FindVendor
    /declare slot           int         local   -1
    
    /for slot 0 to 200
    /if (${parcels} == 0) {
        /for looper 0 to 200
            /varset vendorType ${Window[FindLocationWnd].Child[FLW_FindLocationList].List[${looper},1]}
            /if (${vendorType.Equal[Parcels and General Supplies]} || ${vendorType.Equal[General Supplies]} )    {
                /varset vendorName ${Window[FindLocationWnd].Child[FLW_FindLocationList].List[${looper},2]}
                /delay 10
                /tar ${vendorName}
                /echo We have found a suitable vendor! Navigating to ${vendorName}.
                /delay 10
                /nav target
                /while (${Navigation.Active}) {
                    /delay 10
                }
                /usetarget
                /if (${Window[FindLocationWnd].Open}) {
                    /windowstate FindLocationWnd close
                }   
                /break
            }           
        /next looper
        /break
    }
    /if (${parcels} == 1) {
        /for looper 0 to 200
                /varset vendorType ${Window[FindLocationWnd].Child[FLW_FindLocationList].List[${looper},1]}
                /if (${vendorType.Equal[Parcels and General Supplies]})    {
                    /varset vendorName ${Window[FindLocationWnd].Child[FLW_FindLocationList].List[${looper},2]}
                    /delay 10
                    /tar ${vendorName}
                    /echo We have found a suitable vendor! Navigating to ${vendorName}.
                    /delay 10
                    /nav target
                    /while (${Navigation.Active}) {
                        /delay 10
                    }
                    /usetarget
                    /if (${Window[FindLocationWnd].Open}) {
                        /windowstate FindLocationWnd close
                    }   
                    /break
                }           
        /next looper
        /break
    }
        /if (${Zone.Name.Equal[Guild Lobby]} && ${parcels} == 0) {
            /tar A Disciple of Luclin
            /echo We have found a suitable vendor! Navigating to A Disciple of Luclin.
            /delay 20
            /nav target
            /while (${Navigation.Active}) {
                /delay 10
            }
            /usetarget
            /break
        }
    /next slot
    /delay 10
    /if (!${Window[MerchantWnd].Open}) {
        /echo There was no suitable vendor for your requirements.
        /echo Please move to a different zone.
        /endmac
    }
/return
|-------------------------------------------------------------|
| End FindVendor
|-------------------------------------------------------------|
 
Ionis updated AutoVendor with a new update entry:

Ver. 2.0 now with parceling for up to 5 mules!

As requested, AutoVendor has been updated with the ability to parcel specific items to mules, how exciting!

I kinda got caught up in scripting this and haven't slept yet, so allow me to explain while I'm still semi-coherent:

*New Stuff*

Parcel Support:

You can now designate up to 5 parcel mules and have your toon send specified items to those parcel mules! To do this, rebuild your INI with the ini builder parameters, then go in to your INI and you'll find a new section called...

Read the rest of this update entry...
 
So I ran the Initializtion and got an ini file below. Is this going to sell the bag or all of the contents?

Scratch that I had searched for container prior to running the program.

INI:
[Instructions]
Instructions=Set items on the list you want to sell to Sell, not sell to Ignore and parcel to Parcel1-5 accordingly.
[Containers]
Satchel of the Combine Hero=TRUE
Heroic Satchel of the Adventurer=TRUE
Restless Sporran=TRUE
Scuffed Journeyman's Pocketed Rucksack=TRUE
Sebilisian Satchel=TRUE
Tan Battleworn Sack=TRUE
Restless Sack=TRUE
Scuffed Journeyman's Rucksack=TRUE
[Parcels]
ParcelOn=0
ParcelMules=InsertMuleNameHere|InsertMuleNameHere|InsertMuleNameHere|InsertMuleNameHere|InsertMuleNameHere
[TotalItems]
TotalItems=46
 
So I ran the Initializtion and got an ini file below. Is this going to sell the bag or all of the contents?

Scratch that I had searched for container prior to running the program.

INI:
[Instructions]
Instructions=Set items on the list you want to sell to Sell, not sell to Ignore and parcel to Parcel1-5 accordingly.
[Containers]
Satchel of the Combine Hero=TRUE
Heroic Satchel of the Adventurer=TRUE
Restless Sporran=TRUE
Scuffed Journeyman's Pocketed Rucksack=TRUE
Sebilisian Satchel=TRUE
Tan Battleworn Sack=TRUE
Restless Sack=TRUE
Scuffed Journeyman's Rucksack=TRUE
[Parcels]
ParcelOn=0
ParcelMules=InsertMuleNameHere|InsertMuleNameHere|InsertMuleNameHere|InsertMuleNameHere|InsertMuleNameHere
[TotalItems]
TotalItems=46

Right on, let me know if you happen to run in to any issues!
 
Still getting double hits on the loop but only seems to happen when switching parcel mule names, going to experiment over the next couple days until I find a solution I'm happy with before posting an update.

Macro still works fine, just sometimes you'll get double echo messages when parceling. :)

As always, if anyone has any issues or suggestions on how to expand the macro just let me know!
 
Ionis updated AutoVendor with a new update entry:

Fixed double echo/loop hits!

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...

Read the rest of this update entry...
 
New version is out! Sorry it took me so long, was pretty swamped with work and holidays! Lots of improvements, lots of changes, let me know what you think! :)

Ver 3.0! Now with Destroy, Summon Vendor, Less Params, Cleaner INIs, bug fixes and more!

**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...

Read the rest of this update entry...
 
Last edited:
3.2 adds functionality for buying stuff and a new subroutine for checking if our INI is properly updated! Probably the last update for a little while unless anyone has any suggestions on how to expand it since I've now done everything I originally planned for the macro, let me know if y'all have any issues.

Ver 3.2 Buying functionality and CheckINI

AutoVendor ver. 3.2 update 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...

Read the rest of this update entry...
 
Last edited:
Nice work Lonis, can you add a feature of sending cash to certain mule if selling would reach certain sum of plat?
Past few months I've been busy with contracting work so I haven't been around EQ very much but plan on returning soon, when I do I'll definitely see what I can do about implementing a sort of plat cap feature that would send the plat to a mule after it reaches or exceeds a certain amount.
 
Hey Ionis. Thanks for making this! Just used it for the first time, and I love it. It works in the old school guildhall, but I couldn't get it to work in the Palatial Guild Hall. Any chance that can go into a future update?
 
Past few months I've been busy with contracting work so I haven't been around EQ very much but plan on returning soon, when I do I'll definitely see what I can do about implementing a sort of plat cap feature that would send the plat to a mule after it reaches or exceeds a certain amount.
Dunno if this will help for the limit but Ngreth has said the plat limit on a character is equal to 1 pound or over 1,000,000,000 plats and your character will get stuck and not be able to move but can free itself by buying a Noble which will bring you under the 1b limit. (it is an actual game limit)
 
Hey Ionis. Thanks for making this! Just used it for the first time, and I love it. It works in the old school guildhall, but I couldn't get it to work in the Palatial Guild Hall. Any chance that can go into a future update?
Hey! I actually play on Ragefire which, I believe, just got access to personal Guild Halls. I've actually never screwed around with personal guild halls so that may be why it doesn't work but I'll see if I can gain access to one and take a look (if my guild doesn't already have one, haven't checked just coming back to the game now). Otherwise, if you could throw me the NPC name and type (Whether it's general, Parcels and Noble, etc. etc.) that you're attempting to trade with as well as what the zone name is (/echo ${Zone.Name}) I could potentially implement it in-case we don't have a personal guild hall or something.


Dunno if this will help for the limit but Ngreth has said the plat limit on a character is equal to 1 pound or over 1,000,000,000 plats and your character will get stuck and not be able to move but can free itself by buying a Noble which will bring you under the 1b limit. (it is an actual game limit)
Righteous, it would be fairly easy to throw a check in there for 1b plat, though I don't have such a grand amount of money so testing might be funky, I could always test the logic with something like 1m plat and then just change the variable back to 1b once I have it working. I'll check it out once I get to working on it.

Give me a few days/a week or two to refamiliarize myself with my own code and catch up in-game and I should be able to get to all these updates. :) Thanks for the support y'all, appreciate it. If anyone has any other suggestions or run in to any bugs, feel free to throw them down.
 
Hey Ionis!

I just ran AutoVendor again last night, and I have some (hopefully useful) feedback.

It was able identify the General_Supply_Merchat02 ${Target} as a valid vendor inside the Palatial Guild Hall ${Zone}. But it's not identifying Parcel_Delivery_Agent00 or Teleportation_Assistant00 as valid vendors--the parcel vendor is not the same NPC as a selling vendor in personal guild halls, unfortunately.

I'm also curious if you'd consider adding Personal Tribute and Guild Tribute to this macro. I think that would solve most of the repetitive, modern inventory stuff people encounter.
 
Ionis updated AutoVendor with a new update entry:

Tribute is now here!

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...

Read the rest of this update entry...

**IMPORTANT**
Old INIs are antiquated, if you'd like to keep your old INI then don't download this recent update as it won't work you'll have to redo it. Apologies for the inconvenience, for more info as to why I changed how the INIs were built/checked, check out the patch notes.

Tribute update is live! Thanks to @oniyuri for the idea! As always, let me know if y'all have any ideas or issues, if interested in the ongoing development of this macro, check below for some updates on other stuff.

1. Palatial Guild Hall

Not complete yet, once I have access to one for testing I'll be able to work more on this.

2. Plat Parceling based on Threshold

So, we can do this if it's still something folks want, the way plat amount is determined atm is the raw value of the plat via MQ but that isn't entirely accurate. Things like CHA and specific vendor pricings can adjust how much your item is ACTUALLY sold for. I can pull this information for sure, it's just as it currently stands the plat amount is off by a couple hundred/thousand sometimes which would make the actual parceling of the plat inaccurate and could lead to problems. If folks are interested in this, let me know and I will work on it!

Any other ideas or issues throw em down and I'll check em out! Thanks again guys!
 
Last edited:
Ionis updated AutoVendor with a new update entry:

Selling to specified vendors is now here!

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...

Read the rest of this update entry...

Hey dudes! Thanks to @afortner87 for the PM regarding specific sell vendor finding. I never really thought to allow you to set your own vendors to sell to, silly really since the buy function lets you set 5. Check out the update notes for more details. :)

**Updates on Palatial Hall**

I have a beta of the functionality in place but I need 2 things.

1. If someone could target the **SELLING** vendor and do a /echo ${Target.CleanName} then post up the result that would be awesome.
2. If someone could target the **PARCELING** vendor and do a /echo ${Target.CleanName} then post up the result that would be awesome.
3. If someone could target the **TRIBUTING** vendor and do a /echo ${Target.CleanName} then post up the result that would be awesome.


With that information, I should be able to release a loose build for testing with the functionality in place.

As always, let me know if you have any ideas or issues, thanks guys!
 
Last edited:
Is there any way you can let this use Loot.ini? I've spent years marking items as sell and would really like to use that.
 
Is there any way you can let this use Loot.ini? I've spent years marking items as sell and would really like to use that.
Hey, sorry, been out of the game for a while so haven't been active here. :)

I mean, it's definitely plausible for sure, it wouldn't be too hard either you'd just have it read the loot.ini as opposed to the one the macro creates based on a variable you can flip (probably hardcoded). I just don't know if it would be entirely plausible or if it would fuck up NinjaAdvLoot/AutoLoot since it would be reading variables specific to the macro (things like Parcel1-5, Buy, Tribute, etc.) so I'm not sure if that would cause exceptions within the plugin/macro you're using to loot.

It's something I could throw up for testing if enough folks want it, but I can't guarantee the loot macro/plugin wouldn't need changes for it to not throw exception on the variables it doesn't recognize (if that would happen)
 
For Parcels -
Line 849
/if (${vendorType.Equal[Parcels and General Supplies]}) {
can be changed to
/if (${vendorType.Equal[Parcels and General Supplies]} || ${vendorType.Equal[Parcel Services]}) {
so it will work in personal guild halls.

For Tribute -
Line 783
/if (${vendorType.Equal[Tribute Master]}) {
can be changed to
/if (${vendorType.Equal[Tribute Master]} || ${vendorType.Equal[Personal Tribute Master]}) {
so it will work in personal guild halls.

Selling vendor is covered by vendorType "General Supplies"
 
Last edited:
Also, for anyone that parcels currency to other toons I knocked out a lil helper macro for @thewire82 to grab your currency from alt currency tab and claim it to inventory.
 

Attachments

  • Withdraw.mac
    2.7 KB · Views: 6
Hello,
I find it awesome and really handy to being able to decide what item goes to what different 5 mules.

I am having issues using the parcel feature.
When I trigger that macro it Parcels the first item then it gets struck while trying to parcel the next one because it isn't typing the name of the next mule.

Anyone has a workaround or an alternative?

Thanks.
 
Hello,
I find it awesome and really handy to being able to decide what item goes to what different 5 mules.

I am having issues using the parcel feature.
When I trigger that macro it Parcels the first item then it gets struck while trying to parcel the next one because it isn't typing the name of the next mule.

Anyone has a workaround or an alternative?

Thanks.

Sorry to hear that, I am getting back in to the game as my time has free'd up a bit and this may be outdated, I have yet to test it.

Could I get some more info from you? Were you doing anything with the windows or toon while autovendor was running? When it got stuck, was there anything relayed to chat at all? Was the name field selected at all?

I'll do my own testing here soon when I pop in and see what's going on as well, but any info you can give me would be great!

I have also added the changes @ChatWithThisName threw up there, I'll upload that shortly if I find there's no overarching issues with the macro.
 
I have currently fixed all bugs (parcel problems, selling problems and destroy problems all fixed) caused by updates over the past 8-10 months I've been away excluding one that has to do with bag slot interaction and tributing, thanks for the feedback and messages over the past couple months folks, helped me narrow down issues and figure out what was going on.

I'll throw down an update when I get the tribute issue fixed.
 
Macro - AutoVendor

Users who are viewing this thread

Back
Top