• 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 - Collection collection

Warl0ck45

Well-known member
Joined
Jan 31, 2014
RedCents
8,554¢
With TBM emptying up from folks flooding the new expansion, I found it was a great time to run around collecting shinies. Ran into a few trouble ones... and recalled that the MQ Developers had changed the ${Ground} TLO to include a .Grab action. Thus, you can set up a hotkey that says " /echo ${Ground[Glowing Globe].Grab} " and, if there is a shiny with in 20 feet of you, it will target and grab it (making those hard to get ones a lot easier)

Then running my rogue around like a madman it occurs to me that someone can set up pathing for X dungeon, and have a rogue run in loops collecting shinies.

Before tackling such a thing I thought I would ask if someone had already tried this out beforehand.

The shinies tend to spawn in the same locations, so eventually getting a working advpath file seems very feasible to me, then working out some logic to grab shinies as the toon runs past them.

- - - Updated - - -

Rich (BB code):
|Collection V1.0
|NecroGnomie Flavored!
|
|
|	REQUIREMENTS:
|		MQ2AdvPath
|

#CHAT BC
#turbo 40

	 

Sub Main
	/declare ChatChannel	 string 	outer echo
	/declare PathNumber		 int	 	outer 1
	/if (${Defined[Param0]}) /varset PathNumber ${Param0}
	/if (${Bool[${Plugin[MQ2EQBC]}]}) {
		/varset ChatChannel BC
		}
	/if (!${Bool[${Plugin[MQ2AdvPath]}]} || !${AdvPath.Active}) {
		/${ChatChannel} This macro requires MQ2Advpath to be loaded, ending...
		/end
		} 
	/if (!${GroundItemCount[Glowing Globe]}) /${ChatChannel} Are you sure there are shinies here? None in zone...
:mainloop
	/if (!${Me.Invis} && ${Me.Class.ShortName.Equal[ROG]}) {
		/if (${Me.AbilityReady[Sneak]}) /doability sneak
		/delay 1s
		/if (${Me.AbilityReady[hide]})	/doability hide
		}
	/if (${Ground[Glowing Globe].Distance3D}<20) {
		/play pause
		/invoke ${Ground[Glowing Globe].Grab}
		/delay 1s
		/if (${Cursor.ID}) /autoinv
		/goto :mainloop
		}
	/if (${AdvPath.Paused}) /play unpause
	/if (${Defined[param0]}) {
		/play Collection${param0} smart
		/delay 1s
		}
	/if (!${AdvPath.Playing}) /call PickPath
	/goto :mainloop
	/return	
	
Sub PickPath
	/if (${Me.Moving}) /return
	/if (!${AdvPath.Playing}) {
		/keypress forward hold 
		/delay 1s
		/keypress forward hold 
		/play Collection${PathNumber} smart
		/delay 1s
		}
|	/varset PathNumber ${Math.Calc[${PathNumber}+1]}
|	/if (${AdvPath.Waypoints}==0) /varset PathNumber 1
	/delay 1s
	/return

Alrighty then, roughed in something to start with. Wanted to make it loop through different paths eventually, but for now want to get it working! heh.

This of course requires making a path called Collection(#) IE Collection1, taking your toon to all known places collection items spawn (or just cover every conceivable empty space) Currently working the kinks out of 2 paths in a CoDecayb, one for the entrance and one for the basement.

Seem to need to keep the beginning and end of the path some distance apart or the plugin zips to the end and stop, heh. Other then that, have it looping decently while picking up shinies. Just have to rough in the path file, then go back and fine tune it to insure it covers all the areas I intended.

If anyone has some suggested they are of course welcome.

- - - Updated - - -

Ah forgot to mention, if you want to start it out on something other then Collection1, just "/macro collection 3" or what ever.

Still working some trouble places out on the path, will work some more on getting the macro some safety nets and whatnot later. For now it seems to be picking up collection stuff fine, but the MQ2AdvPath plugin seems to be having sticking issues when in the background.
 
Last edited:
Updated to use MQ2Nav

As noted this is NOT a "turn on an go away" macro. Typically I run a FTP or friends rogue in the background while I handle my main group(s) and regularly check on the rogue.

The advantage of this is not having to create ADVPaths to collectables. The disadvantage is, you need a very good mesh or you get stuck, or unable to path.

Code:
|**    Collection V2.3
    NecroGnomie Flavored!

    This is designed to have a rogue run around collecting "shinies"

    REQUIREMENTS:
        MQ2Nav

    This is NOT a "turn on and go on vacation" macro. Your toon will eventually get stuck!
    There is no stuck logic written, so be warned! Collect shinies under supervision!

    In the event you need to manually retrieve a collection item, I find these three hotbuttons
    to be helpful (uses MQ2MoveUtils)

Button 1:
    Line 1: /Nav stop
   
Button 2:
    Line 1: /moveto loc ${Ground[Glowing Globe].Y} ${Ground[Glowing Globe].X} ${Ground[Glowing Globe].Z}

Button 3:
    Line 1: /invoke ${Ground[Glowing Globe].Grab}
    Line 2: /pause 005
    Line 3: /if (${Cursor.ID}) /autoinv
    Line 4: /if (${Window[InventoryWindow]}) /invoke ${Window[InventoryWindow].DoClose}

   
    If you stop the pathing, the macro will pick up again when you pick up a shiny,
    or you can simply restart the macro
**|

#CHAT BC
#turbo 40

    

Sub Main
    /if (!${Me.Class.ShortName.Equal[ROG]}) {
        /echo \ar WARNING \ay This macro is intended for rogues only!!
        /echo \ag You have been warned....
        }
    /if (${Bool[${Plugin[MQ2EQBC]}]}) {
        /if (!${Defined[ChatChannel]}) {
            /declare ChatChannel BC
            } else {
            /declare ChatChannel Echo
            }
        }
    /if (${Bool[${Plugin[MQ2Nav]}]}) {
        /if (!${Navigation.MeshLoaded}) {
            /nav reload
            /delay 5s ${Navigation.MeshLoaded}
            /if (!${Navigation.MeshLoaded}) {
                /echo \ar ERROR \ay Either MQ2Nav is not loaded, or there is no mesh for this zone!!
                /endmacro
                }
            }
        }
    /if (${Macro.Params}) {
        /declare PathDistLimit ${Param0}
        } 
:mainloop
    /if (!${Me.Invis} && ${Me.Class.ShortName.Equal[ROG]}) /call RogueInvis
    /call InventoryCheck
    /if (!${GroundItemCount[Glowing Globe]}) {
        /echo Are you sure there are shinies here? None in zone...
        /delay 005
        /echo Pausing 30 seconds
        /delay 30s ${GroundItemCount[Glowing Globe]}
        /goto :mainloop
        }
    /if (${GroundItemCount[Glowing Globe]}) {
        /invoke ${Ground[Glowing Globe].DoTarget}
        /delay 1s ${Bool[${Ground.ID}]}==TRUE
        /if (${Bool[${Ground.ID}]} == TRUE) {
            /if (!${Navigation.PathExists[item id ${Ground[Glowing Globe].ID}]}) {
                /echo \ayNo path exists for closest shiny...
                /echo \ayManually get it, or move toon closer to a different shiny manually...
                /echo \ay pausing 30s...
                /delay 30s
                /goto :mainloop
                }
            /if (${Navigation.PathExists[item id ${Ground[Glowing Globe].ID}]}) {
                /if (${Defined[PathDistLimit]}) {
                    /if (${Navigation.PathLength[item id ${Ground[Glowing Globe].ID}]}>=${PathDistLimit}) {
                        /echo \ayPath distance \ag${Navigation.PathLength[item id ${Ground[Glowing Globe].ID}]} \ay greater then path restriction \ar${PathDistLimit}
                        /echo \ay pausing 30s
                        /delay 30s
                        /goto :mainloop
                        }
                    }
                /if (${Ground[Glowing Globe].Distance3D}<20) {
                    /call GrabShiny
                    /goto :mainloop
                    }
                /nav item
                /delay 1s
                /if (!${Navigation}) /goto :mainloop
                /delay 60s ${Ground[Glowing Globe].Distance3D}<20
                /if (${Ground[Glowing Globe].Distance3D}<20) /call GrabShiny
                }
            }
        }
    /delay 1s
    /goto :mainloop
    /return   
   
Sub RogueInvis
    :ReDoinvis
    /if (${Me.AbilityReady[Sneak]}) /doability sneak
    /delay 1s
    /if (${Me.AbilityReady[hide]})    /doability hide
    /if (!${Me.Invis}) /goto ReDoInvis
    /return
   
Sub GrabShiny
    /if (${Ground[Glowing Globe].Distance3D}>20) {
        /echo not close enough to grab.....
        /return
        }
    /invoke ${Ground[Glowing Globe].Grab}
    /delay 1s
    /if (${Cursor.ID}) /autoinv
    /if (${Window[InventoryWindow]}) /invoke ${Window[InventoryWindow].DoClose}
    /return   

Sub InventoryCheck
    /if (${Me.FreeInventory}<=1) {
        /echo \ar Inventory is full, shutting down
        /end
        }
    /return

Edited to put a pull distance, usage;
"/macro collection 1000"

Will put a path distance limit of 1000
 
Last edited:
This is great! I love doing collectibles, but it can get tedious.
 
Aye, and when you make new toons... heh.

I was redoing my spreadsheets tracking progressions and collection for the horde, and going back a few expansions to when collectables started (RoF) and figured some others might get a use out of this. There are times the pathing one works better (says Katta Deluge) as Nav doesn't like the zone. Or one that just uses MQ2moveUtils if its in a tight area (for instance the underwater collecting in Katta)

For the most part though I find use the Mq2Nav one works best. When it gets stuck, just stopping the nav, fetching the goofy shiny manually, and the macro picks up at that point. I find I am fighting the plugin less then the other one, and usually the oddly placed shiny takes some thought on how to get (as in not something you can just put in logic for all occasions)


There is the rare time MQ2Nav will go nuts. Unloading the plugin (/plugin mq2nav unload) and reloading it (/plugin mq2nav) seems to fix it.
 
Question - Collection collection

Users who are viewing this thread

Back
Top
Cart