• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Question - TLO to identify loot item is a collectible?

Joined
Jul 25, 2023
RedCents
2,957¢
I'm trying to find a way to tell if an item in the advloot window is a collectible or not. I didn't find one but it may exist. Is there one?

If not, is there another way to check if something is a collectible that anyone can point me to?

I'd like to set up a Lua that will optionally autoloot all collectibles when they drop (as opposed to having to name them all for each zone).

Thanks!
 
Solution
In the advloot window we get very little information about the item, like its id, its icon id, its name, and i think thats about it.

So we cant use TLO's to inspect the item data without actually inspecting the item, as in right clicking and inspecting it like youd normally do.

The problem with doing this, is that it sends a package to the server every time you inspect an item in the advloot window, and youd be running around inspecting everything you loot, to determine if its a collectible, then they gonna susban you.

you could make a pre filled list of items that are collectibles, probably can download a list from lucy or raidloot. and put it in the lua, compare the item ids and then loot the colletible
In the advloot window we get very little information about the item, like its id, its icon id, its name, and i think thats about it.

So we cant use TLO's to inspect the item data without actually inspecting the item, as in right clicking and inspecting it like youd normally do.

The problem with doing this, is that it sends a package to the server every time you inspect an item in the advloot window, and youd be running around inspecting everything you loot, to determine if its a collectible, then they gonna susban you.

you could make a pre filled list of items that are collectibles, probably can download a list from lucy or raidloot. and put it in the Lua, compare the item ids and then loot the colletible
 
Solution
Something like this would require a user maintained list of collectibles and then it would simply be a name comparison of the available item to the list to return it is a collectible.
The reason is that almost no item information is available at all while it's in the loot window. Essentially, item information isn't available until it's in a container. Corpses are a container, but unless you have advanced loot turned off and are manually looting corpses, there's no way to know the details of the items.

This is all the information showing up in the struct that MQ users have access to.

Code:
struct [[offsetcomments]] AdvancedLootItem
{
/*0x00*/ int64_t       ItemID;                   // EqGuid?
/*0x08*/ char          Name[0x40];
/*0x48*/ int           IconID;
/*0x4c*/ bool          bStackable;
/*0x50*/ int           MaxStack;
/*0x54*/ bool          NoDrop;
/*0x58*/ int           ComboID;
/*0x5c*/ unsigned int  LootID;
/*0x60*/ eAdvLootState State;
/*0x64*/ eAdvLootStatus       Status;
/*0x68*/ bool          bAutoRoll;
/*0x69*/ bool          ActivelyManaged;          // User has the manage Window up
/*0x6a*/ bool          ContextMenu;              // item has a context menu
/*0x6b*/ bool          AskRandomMode;            // item is in AskRandom mode
/*0x6c*/ bool          CLootInProgress;
/*0x6d*/ bool          PLootInProgress;
/*0x70*/ SoeUtil::Array<AdvancedLootItemNPC> LootDetails;
/*0x80*/ unsigned int  AskTimer;
/*0x84*/ bool          AutoRoll;
/*0x85*/ bool          FG;
/*0x86*/ bool          Need;
/*0x87*/ bool          Greed;
/*0x88*/ bool          No;
/*0x89*/ bool          AlwaysNeed;
/*0x8a*/ bool          AlwaysGreed;
/*0x8b*/ bool          Never;
/*0x8c*/
};

So as Kaen mentioned, the information isn't readily available. We do have some things that use a list of stuff for comparison - like Spawnmaster uses a list, but it's prone to error and requires regular maintenance or user input, as well Spawnmaster isn't limited to just named for example.
There are some tools that use a list of collectibles - or the achievement window to determine what items are collectibles. I suppose if someone wanted to use the achievement window to gather a list of collectibles then they could scan the achievement window for collectible specific entries and use that to compare to the active list of loot items.

This then wouldn't be a TLO, but rather just something standalone that does the comparison. So it probably wouldn't play nice with other loot tools like Autoloot or Lootmanager etc.
Lootmanager would allow you to just select once if you wanted an item, then anytime it showed up in the adv loot window it would grab it. This is probably the better bet to do for the time it would take. Simply use the link @reedreddington provided to drop a list of all the items you want to keep and get those collectibles added. You can go through the achievement window and gather a list of all the items in question. Provided both the list and the MQ2LootManager plugin you'd have yourself collecting all of them automatically in no time (on the master looter, you'd still have to distribute to your crew manually).
 
Good timing. Just so happens I am working on a tool to help me with finding and managing collectibles. They always get scattered around among my toons wasting space and whatnot.

No where near a finished product, but I extracted a bit of code that will build a table with all the collectibles in all the XPACs since RoF. The final table isn't optimized for your purpose (it would be better to create a dictionary using the collectible name as the index), but that is easy enough a change to make. The real point here is the code to generate the list dynamically by traversing all the collection achievements. Took a bit of tweaking to correct some of the achievement names

This might not find every collectible in the game (anything not directly tied to a scavenger achievement will not be found), but I did check that it is working for all the XPACs. Please let me know if there is something wrong - it is far from fully vetted, though it probably works best for the newer XPACs. There are 3128 collectibles per my count ATM.

Anyway, just attaching the code in case you find it useful. I can tweak it to create a dictionary using the collectible name with a function to test if an item name is a collectible based on that table if you would like.
 

Attachments

All of this is very useful. Thanks, guys!

I suspected that it wouldn't be as easy as I had hoped (or it would have been done already!). I'm just trying to get the collections from the xpacs that give trophy slots. I did EOK and it wasn't too bad but I'm getting low on Overseer collection stuff and will need to go killing in more zones (as well as using MQ2GoundSpawns).

These tools will help!
 
Good timing. Just so happens I am working on a tool to help me with finding and managing collectibles. They always get scattered around among my toons wasting space and whatnot.

No where near a finished product, but I extracted a bit of code that will build a table with all the collectibles in all the XPACs since RoF. The final table isn't optimized for your purpose (it would be better to create a dictionary using the collectible name as the index), but that is easy enough a change to make. The real point here is the code to generate the list dynamically by traversing all the collection achievements. Took a bit of tweaking to correct some of the achievement names

This might not find every collectible in the game (anything not directly tied to a scavenger achievement will not be found), but I did check that it is working for all the XPACs. Please let me know if there is something wrong - it is far from fully vetted, though it probably works best for the newer XPACs. There are 3128 collectibles per my count ATM.

Anyway, just attaching the code in case you find it useful. I can tweak it to create a dictionary using the collectible name with a function to test if an item name is a collectible based on that table if you would like.

Sorry - I didn't respond properly to your kind offer! Yes, that tweak would be awesome (and I'm sure others would find it useful too!). Thank you!
 
Sorry - I didn't respond properly to your kind offer! Yes, that tweak would be awesome (and I'm sure others would find it useful too!). Thank you!
OK. Here is a version that has some of the superfluous stuff stripped out. The function 'isCollectible()' will return true if the name provided (which you can get from the advloot window I believe) is a collectible. The database is generated automatically the first time the function is invoked, and should currently handle 3128 collectibles.
 

Attachments

OK. Here is a version that has some of the superfluous stuff stripped out. The function 'isCollectible()' will return true if the name provided (which you can get from the advloot window I believe) is a collectible. The database is generated automatically the first time the function is invoked, and should currently handle 3128 collectibles.

Thank you! Will give it a try!
 
@vandersl - thanks again for this. It appears to work beautifully all the way back to (and including) TOV.

Prior to that, I'm getting everything returning as false, sadly. It's possible that DBG changed the way they format this stuff, I guess. I don't know - but will experiment a bit. It's a cool idea and should just work, but something appears to be off on those older expansions.

Any thoughts or ideas? I'm guessing that it isn't quite storing the name right but I'm struggling to see which variable to test/print so I can see what's actually happening.
 
@vandersl - thanks again for this. It appears to work beautifully all the way back to (and including) TOV.

Prior to that, I'm getting everything returning as false, sadly. It's possible that DBG changed the way they format this stuff, I guess. I don't know - but will experiment a bit. It's a cool idea and should just work, but something appears to be off on those older expansions.

Any thoughts or ideas? I'm guessing that it isn't quite storing the name right but I'm struggling to see which variable to test/print so I can see what's actually happening.
I'll check when I get a chance tomorrow. It should work all the way back to RoF, but I did not do much testing after stripping out some of the original code. There is some special handling for older expacs that I probably screwed up when I made the changes. In the main project, it properly picks up collectibles in my inventory and bank for all the expacs.
 
I'll check when I get a chance tomorrow. It should work all the way back to RoF, but I did not do much testing after stripping out some of the original code. There is some special handling for older expacs that I probably screwed up when I made the changes. In the main project, it properly picks up collectibles in my inventory and bank for all the expacs.

Thanks again, man. Of course, it could be something I'm doing inadvertently.

To test, I simply did a Printf to see what was being returned for various collectible names (going from the listed achievements for each expac) - this is after I tried it in anger in Plane of Health and Kor-sha and saw that it was ignoring collectibles. I knew it worked on some because you had left in a test on an SOR egg sac collectible (that worked) so I just started going back expac by expac.

If you spot something, let me know! Grateful for your help!
 
Thanks again, man. Of course, it could be something I'm doing inadvertently.

To test, I simply did a Printf to see what was being returned for various collectible names (going from the listed achievements for each expac) - this is after I tried it in anger in Plane of Health and Kor-sha and saw that it was ignoring collectibles. I knew it worked on some because you had left in a test on an SOR egg sac collectible (that worked) so I just started going back expac by expac.

If you spot something, let me know! Grateful for your help!
OK. Found the issue. I did something wrong when stripping out the original stuff. This version should work better. I spot-checked a number of collectibles from each of the older expacs, but I could still have a typo in one of the tables or something else missed. Let me know if you find some that are not properly identified.

For testing, this script accepts the name of the collectible as an argument (use double quotes) and prints the result.
 

Attachments

OK. Found the issue. I did something wrong when stripping out the original stuff. This version should work better. I spot-checked a number of collectibles from each of the older expacs, but I could still have a typo in one of the tables or something else missed. Let me know if you find some that are not properly identified.

For testing, this script accepts the name of the collectible as an argument (use double quotes) and prints the result.

Thank you! I haven't full tested it yet but initial tests look good! This is so valuable - very grateful! I'd never have thought of the approach you have taken.
 
Question - TLO to identify loot item is a collectible?

Users who are viewing this thread

Back
Top
Cart