• 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 Parcel Helper 06/13/2025

No permission to download
I have been trying to add multiple searches to one select item, is this possible? Been trying things like this

name = "Diamond",
filter = function(item)
local mytab = {}
table.insert(mytab, item.Name():find("^.* Diamond") ~= nil)
table.insert(mytab, item.Name():find("Diamond") ~= nil)
return mytab

end,
},
 
Code:
        name = "Items with Diamond in their name'",
        filter = function(item)
            return item.Name():find("diamond") ~= nil
        end,
    },
 
Code:
        name = "Items with Diamond in their name'",
        filter = function(item)
            return item.Name():find("diamond") ~= nil
        end,
    },
Sorry I posted the wrong code for the example. I'm trying to group items but the type of trade skill that used them. For example I'm trying to group all tailoring items in one group.


{
name = "Silk",
filter = function(item)
return item.Name():find("^.* Silk") ~= nil
end,
},
{
name = "Skin",
filter = function(item)
return item.Name():find("^.* Skin") ~= nil
end,
},
{
name = "Pelt",
filter = function(item)
return item.Name():find("^.* Pelt") ~= nil
end,
},
 
I haven't done it before did you try an or statement?

Code:
return item.Name():find("Skin") ~= nil or item.Name():find("Pelt") ~= nil
 
I haven't done it before did you try an or statement?

Code:
return item.Name():find("Skin") ~= nil or item.Name():find("Pelt") ~= nil
Tried that nothing in the extra list shows up when using an or or and and
 
very helpful Lua. snippet below adds the lobby parcel bloke.

Lua:
local function findParcelVendor()
    status = "Finding Nearest Parcel Vendor"
    local parcelSpawns = mq.getFilteredSpawns(function(spawn)
        return (string.find(spawn.Surname(), "Parcel") ~= nil) or
            (string.find(spawn.Surname(), "Parcel Services") ~= nil) or
            (string.find(spawn.Name(), "Postmaster") ~= nil) or
            (string.find(spawn.Name(), "A_Vendor_of_Reagents") ~= nil) or
            (string.find(spawn.Name(), "Hyredel") ~= nil)
    end)
 
Here is your example for your multiple items in the parcel_scources.Lua.

Code:
    {
    name = "Poison TS Items",
    filter = function(item)
        return item.Name():find("Caladium") ~= nil or item.Name():find("Laburnum") ~= nil or item.Name():find("Larkspur") ~= nil or item.Name():find("Muscimol") ~= nil or item.Name():find("Oleander") ~= nil
    end,
    },
 
Here is your example for your multiple items in the parcel_scources.lua.

Code:
    {
    name = "Poison TS Items",
    filter = function(item)
        return item.Name():find("Caladium") ~= nil or item.Name():find("Laburnum") ~= nil or item.Name():find("Larkspur") ~= nil or item.Name():find("Muscimol") ~= nil or item.Name():find("Oleander") ~= nil
    end,
    },
Sweet thank you very much
 
Here is your example for your multiple items in the parcel_scources.lua.

Code:
    {
    name = "Poison TS Items",
    filter = function(item)
        return item.Name():find("Caladium") ~= nil or item.Name():find("Laburnum") ~= nil or item.Name():find("Larkspur") ~= nil or item.Name():find("Muscimol") ~= nil or item.Name():find("Oleander") ~= nil
    end,
    },
That looks pretty cool Burd!! Nice
 
Can we add the new parcel vendor in Hostock Hills to the list you have. I was able to add it to my copy, but figure others can probably use the change.

Code:
local parcelSpawns = mq.getFilteredSpawns(function(spawn)
        return (string.find(spawn.Surname(), "Parcel") ~= nil) or
            (string.find(spawn.Surname(), "Parcel Services") ~= nil) or
            (string.find(spawn.Name(), "Postmaster") ~= nil) or
            (string.find(spawn.Name(), "A_Vendor_of_Reagents") ~= nil) or
            (string.find(spawn.Name(), "Marius_Carver") ~= nil) or
            (string.find(spawn.Name(), "Hyredel") ~= nil)
    end)
 
Can we add the new parcel vendor in Hostock Hills to the list you have. I was able to add it to my copy, but figure others can probably use the change.

Code:
local parcelSpawns = mq.getFilteredSpawns(function(spawn)
        return (string.find(spawn.Surname(), "Parcel") ~= nil) or
            (string.find(spawn.Surname(), "Parcel Services") ~= nil) or
            (string.find(spawn.Name(), "Postmaster") ~= nil) or
            (string.find(spawn.Name(), "A_Vendor_of_Reagents") ~= nil) or
            (string.find(spawn.Name(), "Marius_Carver") ~= nil) or
            (string.find(spawn.Name(), "Hyredel") ~= nil)
    end)
pushed. Feel free to PR in the future if you like.
 
im not sure what is happening here. all my all ImGui are working, buttonmaster, guildclicky, portalsetter. but whenever i try to run /parcel i get this error imaged below. /Lua run parcel loads up, but its just when i try to load the ui.
1737216781788.png

i can resume but i get the same error each time.

ive tried deleting the download and reloading it again but same error. any suggestions?
 
Has anyone else had this issue? Keep getting the attached issue when trying to /parcel.

I've tried resetting the GUI settings under EQ Button > MQ and no luck.
 

Attachments

  • 4.png
    4.png
    398.9 KB · Views: 0
Has anyone else had this issue? Keep getting the attached issue when trying to /parcel.

I've tried resetting the GUI settings under EQ Button > MQ and no luck.
Did you update to the version listed just above your post? Or read the three posts above it?
I thought it had been addressed.
 
Maybe we can use the last option to nuke these messages, they just seem to be a nuisance in the instances where they crop up XD
Perhaps the distinction is important elsewhere, in a situation I haven't seen yet.
 
I made a minor modification to show the number of items that you will be sending. Just a quick QOL add :) I did my first Pull Request to merge the code changes, so let me know if I did it correctly or not.

1742311840789.png
 
Last edited:
This will let you do a /parcel Filtername NameofToon I use it to /dg all my TS to a mule.

Lua:
mq.bind("/parcel", function(...) -- Use varargs (...)
    local args = {...} -- Capture all arguments into a table
    local arg_count = #args

    local filter_name_part
    local recipient_name_part

    if arg_count == 0 then
        -- No arguments: Toggle GUI
        openGUI = not openGUI
        return
    elseif arg_count == 1 then
        -- Single argument: Could be filter OR recipient.
        local single_arg = args[1]
        local is_known_filter = false
        -- Ensure sources are loaded before checking
        if #parcelInv.sendSources == 0 then parcelInv:createContainerInventory() end

        for _, sourceData in ipairs(parcelInv.sendSources) do
            if sourceData.name:lower() == single_arg:lower() then
                is_known_filter = true; break
            end
        end

        if is_known_filter then
            -- Recognized as a filter name
            filter_name_part = single_arg
            Output(string.format("\atOnly filter '\am%s\at' provided. Select recipient in GUI.", filter_name_part))
            -- Update sourceIndex and load items to prepare GUI
            for i, sourceData in ipairs(parcelInv.sendSources) do
                 if sourceData.name:lower() == filter_name_part:lower() then
                      sourceIndex = i; parcelInv:getItems(sourceIndex);
                      Output(string.format("\atSelected filter: \am%s\at. Items found: %d. GUI will open.", parcelInv.sendSources[sourceIndex].name, #parcelInv.items))
                      break
                 end
            end
        else
            -- Treat as recipient if long enough
            if #single_arg >= 3 then
                recipient_name_part = single_arg
                Output(string.format("\atRecipient '\am%s\at' provided. Select filter in GUI.", recipient_name_part))
                parcelTarget = recipient_name_part
            else
                 Output("\aySingle argument '[\am%s\ay]' is too short or not recognized as filter/recipient. Opening GUI.", single_arg)
                 -- Fall through to just open GUI
            end
        end
        openGUI = true -- Ensure GUI opens if only one arg was processed
        return

    elseif arg_count >= 2 then
        -- Multiple arguments: Assume first is filter, rest is recipient.
        filter_name_part = args[1] -- First argument is the filter name
        -- Reconstruct recipient name from args[2] onwards
        local recipient_parts = {}
        for i = 2, arg_count do
            table.insert(recipient_parts, args[i])
        end
        recipient_name_part = table.concat(recipient_parts, " ")

        -- Validate recipient name
        if not recipient_name_part or #recipient_name_part < 3 then
            Output("\ayRecipient name '[\am%s\ay]' too short or invalid. Opening GUI.", recipient_name_part or "")
            openGUI = true; return
         end
         -- Validate filter name
         if not filter_name_part or #filter_name_part == 0 then
              Output("\ayFilter name appears empty. Opening GUI.")
              openGUI = true; return
         end

        -- --- Proceed with Parceling Initiation ---
        parcelTarget = recipient_name_part
        Output(string.format("\atAttempting parcel: Filter='\am%s\at', Target='\am%s\at'.", filter_name_part, parcelTarget))

        local found_filter = false
        if #parcelInv.sendSources == 0 then parcelInv:createContainerInventory() end

        local filter_found_index = -1
        for i, sourceData in ipairs(parcelInv.sendSources) do
            -- Case-insensitive comparison for filter name
            if sourceData.name:lower() == filter_name_part:lower() then
                filter_found_index = i; found_filter = true; break
            end
        end

        if not found_filter then
            Output(string.format("\arFilter '\am%s\ar' not found. Available filters:", filter_name_part))
            for i, sourceData in ipairs(parcelInv.sendSources) do Output(string.format("\ay - %s", sourceData.name)) end
            openGUI = true; return
        end

        -- Filter found, load items
        sourceIndex = filter_found_index
        parcelInv:getItems(sourceIndex)
        Output(string.format("\atSelected filter: \am%s\at. Items found: %d", parcelInv.sendSources[sourceIndex].name, #parcelInv.items))

        if #parcelInv.items == 0 then
            Output(string.format("\ayNo items found for filter '\am%s\ay'. Opening GUI.", filter_name_part))
            openGUI = true; return
        end

        -- Initiate parceling process
        startParcel = true; openGUI = true; mq.cmdf("/nav stop"); parcelInv:resetState(); findParcelVendor()
        Output("\agParceling initiated via command for target: \am%s\ag with filter: \am%s\ag.", parcelTarget, filter_name_part)
        -- --- End Parceling Initiation ---
    end
end)
 
Small personal requests. Either way great script. I'm buggy about hitting the X button and not ending the script and show gui by default. :)



Code:
if ImGui.SmallButton("Recheck Nearest") then
                findParcelVendor()
            end
            ImGui.SameLine()
            if ImGui.SmallButton("Exit Parcel") then
                mq.cmd('/lua stop parcel')
            end

Code:
local openGUI           = true
local shouldDrawGUI     = true
 
Hi, does this not work on EMU servers? it sends first item then trys sending the next , parcel dude says give me chance and doesnt seem try again?
 
Hi, does this not work on EMU servers? it sends first item then trys sending the next , parcel dude says give me chance and doesnt seem try again?
Laz has a 30 second delay between sending parcels.
"EMU" is not really an accurate descriptor in this case. Many don't support parceling at all.
Edit: I guess this could be coded around?
 
Hi, does this not work on EMU servers? it sends first item then trys sending the next , parcel dude says give me chance and doesnt seem try again?
While the resource is listed for Live, TLP and Test, EMU is not listed, I do use it on EMU. EMUs have different setups, not all are the same. Lag can also affect attempts? My EMU s Shelter of the Banned, plain server up to DoN, parcel guys do their thing, I just tested it to see if there was any issue with more than one item. List your EMU, maybe there is special coding there. Can also ask on that server if anyone is having parcel issues, could simply be something server side.
 
While the resource is listed for Live, TLP and Test, EMU is not listed, I do use it on EMU. EMUs have different setups, not all are the same. Lag can also affect attempts? My EMU s Shelter of the Banned, plain server up to DoN, parcel guys do their thing, I just tested it to see if there was any issue with more than one item. List your EMU, maybe there is special coding there. Can also ask on that server if anyone is having parcel issues, could simply be something server side.
Hi, I am on project lazarus guess is some sort of delay on there
 
Laz has a 30 second delay between sending parcels.
"EMU" is not really an accurate descriptor in this case. Many don't support parceling at all.
Edit: I guess this could be coded around?
I have not played on Live for ages is there no delay on live?
 
Release Parcel Helper

Users who are viewing this thread

Back
Top
Cart