• 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
Resource icon

Release lootnscoot (for emu) (1 Viewer) 05/16/2026

No permission to download
View attachment 74698

better or worse than dropdown? clunky as shit but 1 less click at least.
So initially looking at this my first thought was some things aren't aligned and my brain doesn't like that.
My second thought was I need to decipher these single letter choices, but I get where you're going.
Perhaps a better option would be the icons you use in the normal items section to indicate the current choice for each item.

Now my next request is that there be an editable ZRadius - Currently it's set to 50, sometimes my character decides the corpse on the floor above me is a prime target for looting.
In other situations I want to loot the entire zone on one toon as their only job while the rest murder away. But looking at the code you have a couple of places where 50 is hard coded.

Lua:
local spawnSearch                       = '%s radius %d zradius 50'

Lua:
local deadCount      = mq.TLO.SpawnCount(string.format('npccorpse radius %s zradius 50', settings.Settings.CorpseRadius or 100))()

additionally
the logic you have designed to prevent getting stuck I'm assuming in the navtoid logic. I personally just deleted that break because I was looting such a large area it would nav for a bit, then break then try the next corpse and nav for a bit then break, etc because it was so far to walk - This is on an emu where I had my own instance.

Regarding the issue with "sometimes not looting" My experience has been that it would loot if the rule was set the first time I opened the corpse. If I had ask and I changed it to keep or sell, so it went to loot the corpse again it would not loot the items sometimes. I'm not expecting the logic is different, but that's been my experience.

for what it's worth when I was troubleshooting the zaxis bit I noticed that you /loot and after that you check if we're casting a spell and return false if we are. Often time this happens fast enough that I'm both looting a corpse and casting a spell at the same time. The check for if you're casting may need to be moved prior to the /loot so that it will wait for the spell to finish before it opens the corpse because what ends up happening is you /loot, it detects you're casting, then just stands over the corpse for a bit till the code comes back around which can take a few seconds. That makes it appear as though the script has locked up, and in a way it has. I realize this is a lot to do with conflicting behavior at this point, but still think if a user clicks a spell manually or are in the middle of casting a spell that it shouldn't interrupt it with /loot (which unlike ducking or /stopcast it doesn't actually stop the casting bar).

My last ask is the combat check use XTargets either optionally or by default.

The below code uses Me.Combat() which is actually referencing if attack is on or not. This may have been an intentional choice you made in conjunction with checking for mobs nearby to allow you to loot despite some random thing on the other end of the zone popping up on your xtarget - but I think if you check XTargets and find you have autohaters and combatlooting is on then you can ignore it. Too often have I pulled a swarm of mobs then while waiting for them to arrive LNS has decided I got time to loot.
Lua:
if (deadCount + myCorpseCount) == 0 or (mobsNearby > 0 and not settings.Settings.CombatLooting) or (mq.TLO.Me.Combat() and not settings.Settings.CombatLooting) then
        actors.FinishedLooting()
        return false
    end

Sorry, I know it's a lot of feedback and I don't mean to put anything here down at all I promise. I've really been enjoying it!
 
Last edited:
CWTN's post was very long and I am illiterate so I only got a few sentences in, but I would recommend considering using Nav.PathDistance instead of radius anything.
 
CWTN's post was very long and I am illiterate so I only got a few sentences in, but I would recommend considering using Nav.PathDistance instead of radius anything.
I considered suggesting that as well. My reason for not doing it is how much processing is done for that to get the path distances of all the corpses and find the nearest one. But I do that in GroundSpawns plugins - so if performance isn't a concern (I don't think it is) then Ill second this.
 
So initially looking at this my first thought was some things aren't aligned and my brain doesn't like that.
My second thought was I need to decipher these single letter choices, but I get where you're going.
Perhaps a better option would be the icons you use in the normal items section to indicate the current choice for each item.

Now my next request is that there be an editable ZRadius - Currently it's set to 50, sometimes my character decides the corpse on the floor above me is a prime target for looting.
In other situations I want to loot the entire zone on one toon as their only job while the rest murder away. But looking at the code you have a couple of places where 50 is hard coded.

Lua:
local spawnSearch                       = '%s radius %d zradius 50'

Lua:
local deadCount      = mq.TLO.SpawnCount(string.format('npccorpse radius %s zradius 50', settings.Settings.CorpseRadius or 100))()

additionally
the logic you have designed to prevent getting stuck I'm assuming in the navtoid logic. I personally just deleted that break because I was looting such a large area it would nav for a bit, then break then try the next corpse and nav for a bit then break, etc because it was so far to walk - This is on an emu where I had my own instance.

Regarding the issue with "sometimes not looting" My experience has been that it would loot if the rule was set the first time I opened the corpse. If I had ask and I changed it to keep or sell, so it went to loot the corpse again it would not loot the items sometimes. I'm not expecting the logic is different, but that's been my experience.

for what it's worth when I was troubleshooting the zaxis bit I noticed that you /loot and after that you check if we're casting a spell and return false if we are. Often time this happens fast enough that I'm both looting a corpse and casting a spell at the same time. The check for if you're casting may need to be moved prior to the /loot so that it will wait for the spell to finish before it opens the corpse because what ends up happening is you /loot, it detects you're casting, then just stands over the corpse for a bit till the code comes back around which can take a few seconds. That makes it appear as though the script has locked up, and in a way it has. I realize this is a lot to do with conflicting behavior at this point, but still think if a user clicks a spell manually or are in the middle of casting a spell that it shouldn't interrupt it with /loot (which unlike ducking or /stopcast it doesn't actually stop the casting bar).

My last ask is the combat check use XTargets either optionally or by default.

The below code uses Me.Combat() which is actually referencing if attack is on or not. This may have been an intentional choice you made in conjunction with checking for mobs nearby to allow you to loot despite some random thing on the other end of the zone popping up on your xtarget - but I think if you check XTargets and find you have autohaters and combatlooting is on then you can ignore it. Too often have I pulled a swarm of mobs then while waiting for them to arrive LNS has decided I got time to loot.
Lua:
if (deadCount + myCorpseCount) == 0 or (mobsNearby > 0 and not settings.Settings.CombatLooting) or (mq.TLO.Me.Combat() and not settings.Settings.CombatLooting) then
        actors.FinishedLooting()
        return false
    end

Sorry, I know it's a lot of feedback and I don't mean to put anything here down at all I promise. I've really been enjoying it!
xtarget is beyond unreliable on emu, or at the very least on lazarus, so i tend to never rely on it for mobs on agro.

It does have a pathlength check already but that check reads backwards to me as its currently written.

alignment.. i'm not ocd enough to care. but I can change it to use the icons which align slightly better than the letters but not perfect. as far as what the letters or icons mean the full setting name tooltip is there on each of them already.

The only casting check I see occurs before nav'ing to and looting a corpse, not after. Though if you're in a loop, then before 1 mob can look the same as after another I guess.
 
I wasn't tracking that, so cheers, but even still...

Xtargets bug out often enough to be an issue on emu with dropped or extra targets (corpses from pet kills, mobs proofing from fades), and spawn searches aren't exactly foolproof either.

It's all a house of cards, right?

Combat state doesn't throw up false positives... But any of the above is better than relying on auto attack IMO. Funny that certain behaviors I've noticed just clicked as soon as you brought it up, I think it's less noticeable in directed mode fwiw.

Edit: I misread. Hiding the window doesn't get rid of combat state. I don't understand how what you said above would even be an argument against using it.
 
Last edited:
Sometimes I forget other people have issues with xtargets on emu.
combat state won't throw a false positive on default ui or in the event of a custom ui as long as it's still named what it should be named.
 
i have a question for loot-n-scoot EMU, is it posable while on my driver for my group to tell one of my toons to loot a specific item so i dont have to ALT TAB to loot?
 
Being told "Puasing looting until finished looting my own corpse." but LootMyCorpse is off.

View attachment 74912


Lua:
    if not settings.Settings.LootMyCorpse and not settings.Settings.IgnoreMyNearCorpses and foundMine then
        Logger.Debug(LNS.guiLoot.console, 'lootMobs(): Puasing looting until finished looting my own corpse.')
        actors.FinishedLooting()
        return false
    end

I could probably rename the IgnoreMyNearCorpses and make it reversed as PauseForMyCorpse

basically not ignoring your corpses will pause looting so you can loot your corpse.
 
Lua:
    if not settings.Settings.LootMyCorpse and not settings.Settings.IgnoreMyNearCorpses and foundMine then
        Logger.Debug(LNS.guiLoot.console, 'lootMobs(): Puasing looting until finished looting my own corpse.')
        actors.FinishedLooting()
        return false
    end

I could probably rename the IgnoreMyNearCorpses and make it reversed as PauseForMyCorpse

basically not ignoring your corpses will pause looting so you can loot your corpse.
I see. My corpses contain nothing of value. I assumed it was meant to ignore the corpse entirely, which was my aim.
 
So, pausing isn't working correctly for whatever reason.

1770235462562.png

My guess is if limit == nil then limit = 50 end
in conjunction with

Lua:
for i = 1, myCorpseCount do
            local corpse = mq.TLO.NearestSpawn(string.format("%d, %s", i, pcCorpseFilter))
            if corpse() then
                if (corpse.DisplayName():lower() == mq.TLO.Me.DisplayName():lower()) then
                    corpse.DoTarget()
                    mq.delay(2000, function() return (mq.TLO.Target.ID() or 0) == corpse.ID() end)
                    mq.cmd("/corpse")
                    mq.delay(2000, function() return mq.TLO.Target.Distance() <= 10 end)
                    corpse.RightClick()
                    mq.delay(2000, function() return mq.TLO.Window('LootWnd').Open() end)
                    mq.cmdf('/lootall')
                    mq.delay("45s", function() return not mq.TLO.Window('LootWnd').Open() end)
                end
            end
        end

Is not taking pause into consideration and breaking from the loop.

I was able to confirm it by changing if corpse() then to if corpse() and not LNS.PauseLooting then which resulted in immediately stopping the loot process.

Applied similar to other loops in the LNS.LootMob function
 
So, pausing isn't working correctly for whatever reason.

View attachment 74982

My guess is if limit == nil then limit = 50 end
in conjunction with

Lua:
for i = 1, myCorpseCount do
            local corpse = mq.TLO.NearestSpawn(string.format("%d, %s", i, pcCorpseFilter))
            if corpse() then
                if (corpse.DisplayName():lower() == mq.TLO.Me.DisplayName():lower()) then
                    corpse.DoTarget()
                    mq.delay(2000, function() return (mq.TLO.Target.ID() or 0) == corpse.ID() end)
                    mq.cmd("/corpse")
                    mq.delay(2000, function() return mq.TLO.Target.Distance() <= 10 end)
                    corpse.RightClick()
                    mq.delay(2000, function() return mq.TLO.Window('LootWnd').Open() end)
                    mq.cmdf('/lootall')
                    mq.delay("45s", function() return not mq.TLO.Window('LootWnd').Open() end)
                end
            end
        end

Is not taking pause into consideration and breaking from the loop.

I was able to confirm it by changing if corpse() then to if corpse() and not LNS.PauseLooting then which resulted in immediately stopping the loot process.

Applied similar to other loops in the LNS.LootMob function
curious why its getting that far, it should get caught at the top of the function.

Lua:
function LNS.lootMobs(limit)
    local didLoot = false
    settings.TempSettings.LastCheck = os.clock()

    if LNS.PauseLooting or LNS.SafeZones[LNS.Zone] then
        actors.FinishedLooting()
        return false
    end
 
The icons look much better, its cleaned up.

I might offer that the corpse ID thing just looks... out of place, I would think it would be its own cell in a table (or right aligned, or something) rather than tacked on randomly.

1770594162015.png
 
aquietone updated lootnscoot (for emu) with a new update entry:

02/09/2026

Features ⛲


- TLOs, wildcard nodrop check (#77)
* feat: TLOs, wildcard nodrop check

added some TLO's

`mq.TLO.LNS()` returns 'LootNScoot' if running
`mq.TLO.LNS.Looting()` return if we are looting currently
`mq.TLO.LNS.Paused()` returns pause state
`mq.TLO.LNS.Mode()` returns Mode we are in (once, standalone,directed)
`mq.TLO.LNS.SafeZone()` is the current zone a safezone...

Read the rest of this update entry...
 
Forgive my ignorance in this matter... but i'm happy to see WildCards available..

I'm assuming .* is for anything... so if i wanted to loot every Xxxxx Sulston Xxxxxxx I would just do .*Sulstone.* ? and so forth for each time?

i do plan on reading the Lua doc, and hopfully getting something out of it later

edit... now i'm thinking .*%sSulstone%s.*
 
Forgive my ignorance in this matter... but i'm happy to see WildCards available..

I'm assuming .* is for anything... so if i wanted to loot every Xxxxx Sulston Xxxxxxx I would just do .*Sulstone.* ? and so forth for each time?

i do plan on reading the lua doc, and hopfully getting something out of it later

edit... now i'm thinking .*%sSulstone%s.*


For those that may come here to look, i believe .*%sNAME%s.* is what worked... name being interchangeable for what you may be after.
 
I am a noob to Lua. I have 2 questions.

1. I am farming a named, so I setup 3 wildcards.
For example. I want any item that has the name "Tome" in it.
Is this the correct wild card? .*Tome.*. Any characters before and any characters after are fine. as long as "Tome" is there?

2. After setting my 3 wild cards, I want to ignore all other loot at this time. How do i tell it to not loot anything that isn't in my wild card list?

This looks awesome btw. Thank you.
 
Not sure why this item was looted? Item is no drop. Set to ask in the db.

Screenshot 2026-03-05 122655.png Screenshot 2026-03-05 122700.png
 
I can get this to run but when I kill a mob and there is a corpse it shuts off lootnscoot. been trying to figure this out and get it working for last 3 hours. Any help would be very much apprecaited. thank you!
1774551166316.png
 
I can get this to run but when I kill a mob and there is a corpse it shuts off lootnscoot. been trying to figure this out and get it working for last 3 hours. Any help would be very much apprecaited. thank you!
View attachment 76377
You need to load mq2nav

I'll be honest and direct, the script should be checking for it, and not crashing, (IMO) but that is the answer for you atm.
 
aquietone updated lootnscoot (for emu) with a new update entry:

03/30/2026

〰️Commits​


Consolidate tables (#80)

Since Personal rule sets were added, the need for global and normal rule sets became redundant.

Merged the Normal Rules table into the Global rules table, keeping the Global rule on conflicts.

Dropped the Normal Rules table after the migration.

Now we only deal with GLobal rules and Personal Per charcter rules.

Added the ability to share setting items as personal...

Read the rest of this update entry...
 
Last couple of feature updates have been chef's kiss, getting rid of the double ruleset is great, and broadcasting personal rules is very handy for quest items on quests some characters have completed but not others!
Also really like that corpse ID that snuck in there a few updates ago for those times when i need to manually loot, allowing me to do a /target id xxx instead of trying to click around like a doofus.
 
Yeah we had talked about removing that extra table. I had just been dragging ass on doing it.
Glad the personal items broadcast is working great for you as well. That was something on my todo list, it was annoying otherwise to update everyone as you out leveled items or finished quests.
 
Release lootnscoot (for emu)

Users who are viewing this thread

  • Back
    Top
    Cart