• 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
Any chance we can get the ability to send just single collectibles? that would make this very usable for me so i can flood a toon with collects to level them.

jb321 has a paid Lua that'll do that for you across all toons logged in using Dannet. It's pretty cool.


BB~
 
I was just about to ask for the ability to filter for ornaments, but it looks like the new filters system should be able to do that? Do you have a sample config entry for that? Thanks!
 
I was just about to ask for the ability to filter for ornaments, but it looks like the new filters system should be able to do that? Do you have a sample config entry for that? Thanks!
I can't find a way to tell if an item is an ornament or not... Would it work to just check if it has the word "Ornament" in the name? if so you can use my "Item That starts with A" example in the sources file.
 
Feature request:
section within filter-config which will allow to define “nosend” items, like pearl for mag, bonechips for sk and alike.
Items flagged as TS-Items but needed as spell-reagent for some classes.
No need to link to specific classes, just a list of items globally excluded for parcel when included into this list.
This would allow to add “iron ration“ and “water flask“ or any other food and drink to be excluded as well if those are used to force-feed.

Used it today for the first time and really like, how this makes life easier.

Feature request 2:
in a similar way a posibillity to create a list of names for vendors which will not be found with the actual search routine for parcel vendors.
Actually the one in the gl was not accepted, as he does not fulfil the requirements.
One could add the vendor by himself, if the prefered one is not found with the actual vendor-search-routine.
Presume easier to maintain than attempting to create additional code for the vendors which actually are not flagged the right way.
 
You could build your own filter with the custom filters that would allow you to remove anything you want. It's a bit of a work around but what do you think about that option?

the second request I like and ill look into it.
 
As far as I understood, the actual filter allows to populate the list of items which will be shown in the ui and later send to the recipient. So within the same file, it should be able to create a function which removes the unwanted items before the list is returned.
I think Iunderstood, what you meant and will attempt to implement it.
Will come back, once I was able to create it.
Actually I am not anymore at my pc to check it myself.
Are your own filters, like TS-Items or Collectibles, converted to be part of this structure, so if I create a function like EliminateExcludedItems(filteredItems) will be passed to take out those items from the TS-Items as well?

Otherwhise I could create an entry “TS-Items-Excludes-Filtered” or alike … maybe finding a better name as well ;)
 
As far as I understood, the actual filter allows to populate the list of items which will be shown in the ui and later send to the recipient. So within the same file, it should be able to create a function which removes the unwanted items before the list is returned.
I think Iunderstood, what you meant and will attempt to implement it.
Will come back, once I was able to create it.
Actually I am not anymore at my pc to check it myself.
Are your own filters, like TS-Items or Collectibles, converted to be part of this structure, so if I create a function like EliminateExcludedItems(filteredItems) will be passed to take out those items from the TS-Items as well?

Otherwhise I could create an entry “TS-Items-Excludes-Filtered” or alike … maybe finding a better name as well ;)
I posted a set of samples earlier in the thread you could use those to start with. My concern with blanket ignore lists is that they are rarely always right "I usually want to ignore Iron Rations but not in this case" which is why the custom filters work better IMO.
 
Tried to understand the posts within this thread in order to be able to create custom filters.
The path "MQNext" is my actual main folder of mq.
I do not unterstand release/config as path, as I did not download the ressources, but started with the attempt to create parcel_sources.Lua and get it to work, using the example provided.
My guess is: "release/config" is the path used, when you use the source-files and compile the stuff by yourself.
As a user, my intension is not to download the whole sources and compile it myself, but just add filter-functionallity by adding the filter-definition-file.

At first I created the file within the same folder of the other files: "MQNext/Lua/parcel". That did not work.
Next attempt I created a subfolder "config" and put the file there:
1706910160783.png

did not work either,
Next attempt I went one folder up and put the file into MQNext/Lua/config. Did not work.
Next attempt I went one folder up and put the file into MQNext/config. That did work :)
1706910299566.png

Question: what is the intended location of the filter definition file : parcel_sources.Lua?
As it is of type Lua, my feeling is, it may be located under MQNext/Lua/config ... or even better to stay together with the other files of that project "MQNext/Lua/parcel" or "MQNext/Lua/parcel/config".
To proceed, for now it is not important to get the answer immediatley.

As far as I have seen, the Lua-projects attempt to contain all necessary files of the project within their subfolder within "Lua/".
Are you going to change the location of the filter-definition to stay within the same folder of the other project-files?


For me step 1 is done: understand how to implement personalized filters
Step 2 now will be: try which modification exactly I need to do, to add the ability to create and recognize the "nosend" list of itens, to be excluded for parcel.

Will come back and present the result, if I get it to work.

PS: I like the idea to keep the core of the project as clean and small as possible, and give users the possibility to personalize it at their will.
Should keep the maintainance of the project as easy as possible while offering all extensions requested without the need to end with spaghetticode within the core of the project itself.
 
Tried to understand the posts within this thread in order to be able to create custom filters.
The path "MQNext" is my actual main folder of mq.
I do not unterstand release/config as path, as I did not download the ressources, but started with the attempt to create parcel_sources.lua and get it to work, using the example provided.
My guess is: "release/config" is the path used, when you use the source-files and compile the stuff by yourself.
As a user, my intension is not to download the whole sources and compile it myself, but just add filter-functionallity by adding the filter-definition-file.

At first I created the file within the same folder of the other files: "MQNext/lua/parcel". That did not work.
Next attempt I created a subfolder "config" and put the file there:
View attachment 57031

did not work either,
Next attempt I went one folder up and put the file into MQNext/lua/config. Did not work.
Next attempt I went one folder up and put the file into MQNext/config. That did work :)
View attachment 57032

Question: what is the intended location of the filter definition file : parcel_sources.lua?
As it is of type lua, my feeling is, it may be located under MQNext/lua/config ... or even better to stay together with the other files of that project "MQNext/lua/parcel" or "MQNext/lua/parcel/config".
To proceed, for now it is not important to get the answer immediatley.

As far as I have seen, the lua-projects attempt to contain all necessary files of the project within their subfolder within "lua/".
Are you going to change the location of the filter-definition to stay within the same folder of the other project-files?


For me step 1 is done: understand how to implement personalized filters
Step 2 now will be: try which modification exactly I need to do, to add the ability to create and recognize the "nosend" list of itens, to be excluded for parcel.

Will come back and present the result, if I get it to work.

PS: I like the idea to keep the core of the project as clean and small as possible, and give users the possibility to personalize it at their will.
Should keep the maintainance of the project as easy as possible while offering all extensions requested without the need to end with spaghetticode within the core of the project itself.
1) MQNext/config is correct. All configs are located here for MQ, while it is a .Lua file it is a export of a Lua table as a configuration value not an actual runnable Lua script.
2) Putting configuration files anywhere other than config/ is an anti-pattern and should not be done. Mainly because config/ should never be overwritten or patched as it contains things specific to the user, other folders can be updated/modified.
3) This is a semi-advanced function and it is great you are taking the time to learn how to do it!
 
I may need some help to understand how to extend the parcel_sources.Lua with some code to achieve the filter I would like.
If I add a Filter for TS-Items It works like:
[CODE title="TS"]return {
{
name = "Personal TS Items",
filter = function(item)
return (item.Tradeskills() == true)
end,
},
}[/CODE]

If I attempt to add the table of Items to surpess them to be send by parcel and a function to extend the possibillities no Filters are shown.
[CODE title="TS filtered"]
--[[ TLO Info here: https://docs.macroquest.org/reference/data-types/datatype-item/ ]]
--[[ the table NoParcelItems contains all Names of Items which should be excluded from parcel ]]
local NoParcelItems = {
"Velium Tainted Glob of Slush Water",
"Restless Vegetables"
}
local function findNoParcel(t, value)
for k, v in ipairs(t) do
if v == value then
return true
end
end
return false
end
return {
{
name = "Personal TS Items",
filter = function(item)
return (item.Tradeskills() == true)
end,
},
{
name = "NoParcel Filtered TS Items",
filter = function(item)
return (item.Tradeskills() == true) & not (findNoParcel(NoParcelItems, item.Name))
end,
},
}

[/CODE]

My problem is, I don't understand how this file is used as a function with just a return and wether additional code is allowed with this kind of implementation or if my code just contains an error.
The only way I found so far to debug is launching the Lua with /Lua run parcel and than check within the UI if the filters are shown or not.
 
I may need some help to understand how to extend the parcel_sources.lua with some code to achieve the filter I would like.
If I add a Filter for TS-Items It works like:
[CODE title="TS"]return {
{
name = "Personal TS Items",
filter = function(item)
return (item.Tradeskills() == true)
end,
},
}[/CODE]

If I attempt to add the table of Items to surpess them to be send by parcel and a function to extend the possibillities no Filters are shown.
[CODE title="TS filtered"]
--[[ TLO Info here: https://docs.macroquest.org/reference/data-types/datatype-item/ ]]
--[[ the table NoParcelItems contains all Names of Items which should be excluded from parcel ]]
local NoParcelItems = {
"Velium Tainted Glob of Slush Water",
"Restless Vegetables"
}
local function findNoParcel(t, value)
for k, v in ipairs(t) do
if v == value then
return true
end
end
return false
end
return {
{
name = "Personal TS Items",
filter = function(item)
return (item.Tradeskills() == true)
end,
},
{
name = "NoParcel Filtered TS Items",
filter = function(item)
return (item.Tradeskills() == true) & not (findNoParcel(NoParcelItems, item.Name))
end,
},
}

[/CODE]

My problem is, I don't understand how this file is used as a function with just a return and wether additional code is allowed with this kind of implementation or if my code just contains an error.
The only way I found so far to debug is launching the lua with /lua run parcel and than check within the UI if the filters are shown or not.

this is pretty close just some syntax errors. It is just basic Lua so you can search for Lua tutorials but here try this:

[CODE title="TS filtered"]
--[[ TLO Info here: https://docs.macroquest.org/reference/data-types/datatype-item/ ]]
--[[ the table NoParcelItems contains all Names of Items which should be excluded from parcel ]]
local NoParcelItems = {
"Velium Tainted Glob of Slush Water",
"Restless Vegetables"
}
local function findNoParcel(t, value)
for k, v in ipairs(t) do
if v == value then
return true
end
end
return false
end
return {
{
name = "Personal TS Items",
filter = function(item)
return (item.Tradeskills() == true)
end,
},
{
name = "NoParcel Filtered TS Items",
filter = function(item)
return (item.Tradeskills() == true) and not (findNoParcel(NoParcelItems, item.Name()))
end,
},
}

[/CODE]

Logical AND in Lua is `and` not `&`


Also item.Name is a UserData so you need to dereference it with ()
 
Almost working as intended.
checking on different chars, I found a discrepancy between your incorporated "All TS Items" and my "Personal TS Items". The intension was to create a Filter doing the identic.
Sample:
Your "All TS-Items"
1707242105311.png

my "Personal TS-Items"
1707242150752.png

my Filter includes "Faded Restless Velium flanged Mace" using
[CODE title="TS"] name = "Personal TS Items",
filter = function(item)
return (item.Tradeskills() == true)
end,[/CODE]

my feeling: your "all TS-Items works better" ... what is wrong using:
return (item.Tradeskills() == true)

apart from that, susing the following code exludes the Berries as expected.
[CODE title="TS filtered"]--[[ TLO Info here: https://docs.macroquest.org/reference/data-types/datatype-item/ ]]
--[[ the table NoParcelItems contains all Names of Items which should be excluded from parcel ]]
local NoParcelItems = {
"Velium Tainted Glob of Slush Water",
"Berries",
"Restless Vegetables"
}

local function findNoParcel(t, value)
for k, v in ipairs(t) do
if v == value then
return true
end
end
return false
end

return {
{
name = "Personal TS Items",
filter = function(item)
return (item.Tradeskills() == true)
end,
},
{
name = "NoParcel Filtered TS Items",
filter = function(item)
return (item.Tradeskills() == true) and not (findNoParcel(NoParcelItems, item.Name()))
end,
},
}
[/CODE]

so mostly working. Just wondering what you are using to filter TS-Items.
 
many thanks:
return item.Tradeskills() and item.Stackable()
found it
working solution for those who like a ts-Item filter with the possibillity to define a list of items to be excluded from parcel:



[CODE title="parcel_sources.Lua"]
--[[ TLO Info here: https://docs.macroquest.org/reference/data-types/datatype-item/ ]]
--[[ the table NoParcelItems contains all Names of Items which should be excluded from parcel ]]
local NoParcelItems = {
"Velium Tainted Glob of Slush Water",
"Berries",
"Restless Vegetables"
}
local function findNoParcel(t, value)
for k, v in ipairs(t) do
if v == value then
return true
end
end
return false
end
return {
{
name = "NoParcel Filtered TS Items",
filter = function(item)
return (item.Tradeskills() and item.Stackable()) and not (findNoParcel(NoParcelItems, item.Name()))
end,
},
}
[/CODE]

anyone can define the items to be exluded modifying the table at the top of the file:
[CODE title="NoParcel Filtered TS Items"]
--[[ the table NoParcelItems contains all Names of Items which should be excluded from parcel ]]
local NoParcelItems = {
"Velium Tainted Glob of Slush Water",
"Berries",
"Restless Vegetables"
}
[/CODE]
 
Still on the way to learn “Lua”. So beeing able to create some useful code feels like another step to get used to the syntax of Lua.
Thanks for the idea and the help to get it to a working stage.
 
Not so much a prioirty I think, but still good to report it, this guy does not show up in nearest parcel guys nor nav to him:
1708811334789.png He is not the normal guild parcel guy, he is a reward for a quest completion, he can be placed in a house though (versus the normal is a guild only npc). I have both in my guild hall, this guy is not recognized.
Look at that face... he is crying. /cue 🎶 In the arms of an Angel🎶, only YOU can prevent his Parcel sadness. Please Donate a few lines of code to make bards across Norrath have a little joy.
 
Not so much a prioirty I think, but still good to report it, this guy does not show up in nearest parcel guys nor nav to him:
View attachment 57881 He is not the normal guild parcel guy, he is a reward for a quest completion, he can be placed in a house though (versus the normal is a guild only npc). I have both in my guild hall, this guy is not recognized.
Look at that face... he is crying. /cue 🎶 In the arms of an Angel🎶, only YOU can prevent his Parcel sadness. Please Donate a few lines of code to make bards across Norrath have a little joy.
done for the next build.
 
is there a top level datapoint to identify the rogue specific TS items? My main always seems to get these, and I want to send them to my rogue.
 
is there a top level datapoint to identify the rogue specific TS items? My main always seems to get these, and I want to send them to my rogue.
No because there is nothing that links it to the recipes it is in that I know of. You would have to search backwards -> all TS items for Rgoue -> which ones require item X as a component or subcomponent
 
Found something.

If your parcel system is holding 50 or more item for your toon to retrieve, then it will not allow you to parcel to another toon, until you are 49 or less.

1717273904919.png

When you are trying to send 200 items out, the Lua will just attempt one, get the above message and move to the next to attempt. So that your spamming the NPC.
 
I've been trying to create a filter to find all ore ( Sunshard Ore ,Indium Ore, Rhenium Ore , Thalium Ore ,Tungsten Ore) to send to one account but I have not had any luck. This is what I have.


{ name = "ore",
filter = function(item)
return item.Name():find("^.* ore") ~= nil
end,
},
 
I've been trying to create a filter to find all ore ( Sunshard Ore ,Indium Ore, Rhenium Ore , Thalium Ore ,Tungsten Ore) to send to one account but I have not had any luck. This is what I have.


{ name = "ore",
filter = function(item)
return item.Name():find("^.* ore") ~= nil
end,
},
I think find is case sensative. Did you try "^.*Ore" instead?
 
Release Parcel Helper

Users who are viewing this thread

Back
Top
Cart