• 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
(YALM) Yet Another Loot Manager

Release (YALM) Yet Another Loot Manager 0.12.7

No permission to download
Some commands that I use.

/yalm setitem Destroy all (with item on cursor is global)
/yalm setitem Destroy me (with item on cursor is individual)
/yalm setitem Guild all
/yalm setitem Sell all
/yalm setitem Keep all
/yalm setitem Tribute all
/yalm setitem Destroy all

/yalm Guild (for guild deposits items marked Guild)
/yalm Tribute (for tribute items marked Tribute)
/yalm Sell (sell all sell items marked sell)
/yalm Destroy (destroy items in inventory marked Destroy)
 
Last edited:
If my yalm folder looks like this, does this suggest that the global/character files are not being created?

1677164322629.png
 
OK I know I'm really bulldogging this, but I'm adamant about getting this working.

What I did:
  1. Put a Sealed Letter on my cursor
  2. Type /yalm setitem sell all
  3. Stood in Guild Lobby next to and targeting A Vendor of Reagents
  4. Typed /yalm sell
What I expected to happen:
  1. YALM would mark the Sealed Letter as Sell in the global file
  2. YALM would drop the Sealed Letter in my inventory
  3. YALM would open the merchant window with A Vendor of Reagents
  4. YALM would sell all Sealed Letters in my inventory
  5. YALM would close the merchant window
Here's what actually happened:

1677248325471.png

I have 8 of this item in my inventory right now and this is an item I can sell manually without issue. I'm updated to the latest version of YALM.

What's the best way for me to troubleshoot this?
 
OK I know I'm really bulldogging this, but I'm adamant about getting this working.

What I did:
  1. Put a Sealed Letter on my cursor
  2. Type /yalm setitem sell all
  3. Stood in Guild Lobby next to and targeting A Vendor of Reagents
  4. Typed /yalm sell
What I expected to happen:
  1. YALM would mark the Sealed Letter as Sell in the global file
  2. YALM would drop the Sealed Letter in my inventory
  3. YALM would open the merchant window with A Vendor of Reagents
  4. YALM would sell all Sealed Letters in my inventory
  5. YALM would close the merchant window
Here's what actually happened:

View attachment 46555

I have 8 of this item in my inventory right now and this is an item I can sell manually without issue. I'm updated to the latest version of YALM.

What's the best way for me to troubleshoot this?
Just a possible scenario. /yalm setitem sell all (places the setting in the global) Is that toon using a personal loot.ini file?

config/yalm/yalm-server-yourtoon.Lua
 
OK I know I'm really bulldogging this, but I'm adamant about getting this working.

What I did:
  1. Put a Sealed Letter on my cursor
  2. Type /yalm setitem sell all
  3. Stood in Guild Lobby next to and targeting A Vendor of Reagents
  4. Typed /yalm sell
What I expected to happen:
  1. YALM would mark the Sealed Letter as Sell in the global file
  2. YALM would drop the Sealed Letter in my inventory
  3. YALM would open the merchant window with A Vendor of Reagents
  4. YALM would sell all Sealed Letters in my inventory
  5. YALM would close the merchant window
Here's what actually happened:

View attachment 46555

I have 8 of this item in my inventory right now and this is an item I can sell manually without issue. I'm updated to the latest version of YALM.

What's the best way for me to troubleshoot this?
try a /yalm check with the item on your cursor. it could be something else taking precedence. Also post that character's config file.

Does the item get selected and show in the merchant window?
 
Last edited:
Just a possible scenario. /yalm setitem sell all (places the setting in the global) Is that toon using a personal loot.ini file?

config/yalm/yalm-server-yourtoon.lua

OK this was it.

So when I did a /yalm check, this is what I got:

1677251969030.png

I then did /yalm setitem sell me (with the item on the cursor), did /yalm sell, and it did work after that.

Is there anything I can do to make /yalm sell fallback to the global file if nothing matches for the personal file?
 
OK this was it.

So when I did a /yalm check, this is what I got:

View attachment 46556

I then did /yalm setitem sell me (with the item on the cursor), did /yalm sell, and it did work after that.

Is there anything I can do to make /yalm sell fallback to the global file if nothing matches for the personal file?
It should fallback to the global file. Can you message me your config files and i can look?
 
OK this was it.

So when I did a /yalm check, this is what I got:

View attachment 46556

I then did /yalm setitem sell me (with the item on the cursor), did /yalm sell, and it did work after that.

Is there anything I can do to make /yalm sell fallback to the global file if nothing matches for the personal file?
I thought the design was to check the individual file first then check the global, but you would have to see what Fuddles says. I do remember having a conversation about it.
 
Does YALM have the ability to set newly discovered items so that they are only distributed to classes that can use the item?
 
Does YALM have the ability to set newly discovered items so that they are only distributed to classes that can use the item?
Yes it does. You can take a look at yalm/config/rules/Defiant.lua as an example of what you can do.
 
fuddles updated (YALM) Yet Another Loot Manager with a new update entry:

Config Change

Breaking Change

This is a pretty big update as it paves the way for getting a GUI working.

The main change is that Rules are no longer separate files. They will live only in config/YALM.LUA. Helper functions now must be defined in lua/yalm/config/functions/ and must be under functions in YALM.LUA. Here's an example

{ functions = { GetClassList = { name = "GetClassList", }...

Read the rest of this update entry...
 
Last edited:
fuddles updated (YALM) Yet Another Loot Manager with a new update entry:

Performance Improvement

mq.pickle() now properly supports keys with spaces. This means I was able to get rid of the lua based persistence libraries. Now if you have thousands of items from converting from lootly, /yalm setitem and other commands will finish MUCH faster. Almost instantly compared to the 20+ seconds it took.

This does require updating to the latest MQ version though.

Read the rest of this update entry...
 
Any suggestions on how to set an item preference with a partial name match... for example, if I wanted to destroy all fine steel items I loot... is there a way to </yalm setitem "fine steel*" destroy me> ?
 
Any suggestions on how to set an item preference with a partial name match... for example, if I wanted to destroy all fine steel items I loot... is there a way to </yalm setitem "fine steel*" destroy me> ?
You should be making conditions and rules. I have several already included if you take a look in yalm/config/rules and yalm/config/conditions

They are a little more DIY right now but there is /yalm condition create and /yalm rule create to help.
 
You should be making conditions and rules. I have several already included if you take a look in yalm/config/rules and yalm/config/conditions

They are a little more DIY right now but there is /yalm condition create and /yalm rule create to help.
I'd love to see a more detailed explanation / documentation of how these work once you've got the core functionality where you'd like it to be! Are the conditions called when an item is looted? Sold? Banked? Do you need to make a /yalm something something function call to apply a rule? Do rules check conditions or does YALM check conditions as part of its core functionality?

I'm not trying to be presumptuous or critical; apologies if I'm coming across that way. I think a tool as powerful as YALM can be would benefit from some robust documentation. (Again, once the functionality is more settled than it is at the moment.) I appreciate your vision for YALM.
 
I'd love to see a more detailed explanation / documentation of how these work once you've got the core functionality where you'd like it to be! Are the conditions called when an item is looted? Sold? Banked? Do you need to make a /yalm something something function call to apply a rule? Do rules check conditions or does YALM check conditions as part of its core functionality?

I'm not trying to be presumptuous or critical; apologies if I'm coming across that way. I think a tool as powerful as YALM can be would benefit from some robust documentation. (Again, once the functionality is more settled than it is at the moment.) I appreciate your vision for YALM.
Core functionality is done. Right now I'm working on the configuration aspect to make it easier.

As for how it works, whenever a preference is checked for an item it will:
  1. check if item is in the character configuration under items
  2. check if item is in the global configuration under items
  3. evaluate each rule in order they are listed for a character configuration
    1. check if item is in the rule under items
    2. evaluate conditions in order they are listed to see if the item passes the condition
  4. if none of these apply, then the character's default preference is used
  5. if the character doesn't have a default preference, then it will use the global configuration preference
Anything that requires getting an item preference will go through this list. So all the commands you mentioned along with looting as well.

For example, i have this configuration on a DRU that i'm leveling:

Lua:
return {
    items = {},
    rules = {
        {
            name = "DRU",
            enabled = true,
        },
        {
            name = "Defiant",
            enabled = true,
        },
        {
            name = "Leveling",
            enabled = true,
        },
    },
    settings = {
        unmatched_item_rule = {
            setting = "Sell",
        },
    },
}

By default, everything will be marked as sell if it doesn't pass one of the rules above. As for those rules, lets looka t leveling:

Lua:
        ['Leveling'] = {
            ['category'] = '',
            ['items'] = {},
            ['name'] = 'Leveling',
            ['conditions'] = {
                [1] = {
                    ['name'] = 'NoValue',
                    ['setting'] = 'Destroy',
                },
                [2] = {
                    ['name'] = 'Tradeskill',
                    ['setting'] = 'Sell',
                },
                [3] = {
                    ['name'] = 'Quest',
                    ['setting'] = 'Sell',
                },
                [4] = {
                    ['name'] = 'Augmentation',
                    ['setting'] = 'Destroy',
                },
                [5] = {
                    ['name'] = 'Poisons',
                    ['setting'] = 'Destroy',
                },
                [6] = {
                    ['name'] = 'FoodDrink',
                    ['setting'] = 'Keep',
                },
                [7] = {
                    ['name'] = 'Temporary',
                    ['setting'] = 'Destroy',
                },
                [8] = {
                    ['quantity'] = 1,
                    ['name'] = 'Collectible',
                    ['setting'] = 'Keep',
                },
            },
        },

If an item isn't in the DRU list (right now it's just Fire Beetle Eye set to buy), or a Defiant item, it will evaluate these rules going in order.

  1. Items that have no value will be set to destroy
  2. Tradeskill items will be sold
  3. Quest items set to sell
  4. Augmentations set to destroy
  5. Poisons set to destroy
  6. Keep food or drink items
  7. Destroy temporary items
  8. Keep collectibles.
If the item doesn't pass one of these conditions, it will default to Sell.

Here's an example of a condition, this one is "Temporary" which will match temporary items.

Lua:
local function(item)
    return item.NoRent()
end

return { condition_func = condition }
 
Core functionality is done. Right now I'm working on the configuration aspect to make it easier.

As for how it works, whenever a preference is checked for an item it will:
  1. check if item is in the character configuration under items
  2. check if item is in the global configuration under items
  3. evaluate each rule in order they are listed for a character configuration
    1. check if item is in the rule under items
    2. evaluate conditions in order they are listed to see if the item passes the condition
  4. if none of these apply, then the character's default preference is used
  5. if the character doesn't have a default preference, then it will use the global configuration preference
Anything that requires getting an item preference will go through this list. So all the commands you mentioned along with looting as well.

For example, i have this configuration on a DRU that i'm leveling:

Lua:
return {
    items = {},
    rules = {
        {
            name = "DRU",
            enabled = true,
        },
        {
            name = "Defiant",
            enabled = true,
        },
        {
            name = "Leveling",
            enabled = true,
        },
    },
    settings = {
        unmatched_item_rule = {
            setting = "Sell",
        },
    },
}

By default, everything will be marked as sell if it doesn't pass one of the rules above. As for those rules, lets looka t leveling:

Lua:
        ['Leveling'] = {
            ['category'] = '',
            ['items'] = {},
            ['name'] = 'Leveling',
            ['conditions'] = {
                [1] = {
                    ['name'] = 'NoValue',
                    ['setting'] = 'Destroy',
                },
                [2] = {
                    ['name'] = 'Tradeskill',
                    ['setting'] = 'Sell',
                },
                [3] = {
                    ['name'] = 'Quest',
                    ['setting'] = 'Sell',
                },
                [4] = {
                    ['name'] = 'Augmentation',
                    ['setting'] = 'Destroy',
                },
                [5] = {
                    ['name'] = 'Poisons',
                    ['setting'] = 'Destroy',
                },
                [6] = {
                    ['name'] = 'FoodDrink',
                    ['setting'] = 'Keep',
                },
                [7] = {
                    ['name'] = 'Temporary',
                    ['setting'] = 'Destroy',
                },
                [8] = {
                    ['quantity'] = 1,
                    ['name'] = 'Collectible',
                    ['setting'] = 'Keep',
                },
            },
        },

If an item isn't in the DRU list (right now it's just Fire Beetle Eye set to buy), or a Defiant item, it will evaluate these rules going in order.

  1. Items that have no value will be set to destroy
  2. Tradeskill items will be sold
  3. Quest items set to sell
  4. Augmentations set to destroy
  5. Poisons set to destroy
  6. Keep food or drink items
  7. Destroy temporary items
  8. Keep collectibles.
If the item doesn't pass one of these conditions, it will default to Sell.

Here's an example of a condition, this one is "Temporary" which will match temporary items.

Lua:
local function(item)
    return item.NoRent()
end

return { condition_func = condition }
This was really great to read; thank you so much for taking the time to explain.
 
YALM seems to kill itself in the tutorial zone whenever it encounters one of the LORE metal chunks: "Chunk of Iron" or "Chunk of Bronze". After that, YALM is killing itself when restarting. Here's the log:


[CODE title="YALM crash log" highlight="31"][2023/03/04 12:55:49] Ending Lua script 'yalm' with PID 14 and status -1
[2023/03/04 12:57:18] MQ2Log :: Logging is ON
[2023/03/04 12:57:22] Running Lua script 'yalm' with PID 15
[2023/03/04 12:57:22] [YALM]:: Sqlite version: 3.37.1
[2023/03/04 12:57:22] [YALM]:: Registering commands: Rule
[2023/03/04 12:57:22] [YALM]:: Registering commands: Simulate
[2023/03/04 12:57:22] [YALM]:: Registering commands: Condition
[2023/03/04 12:57:22] [YALM]:: Registering commands: Command
[2023/03/04 12:57:22] [YALM]:: Registering commands: Character
[2023/03/04 12:57:22] [YALM]:: Registering commands: Buy
[2023/03/04 12:57:23] [YALM]:: Registering commands: Destroy
[2023/03/04 12:57:23] [YALM]:: Registering commands: Convert
[2023/03/04 12:57:23] [YALM]:: Registering commands: Bank
[2023/03/04 12:57:23] [YALM]:: Registering commands: Sell
[2023/03/04 12:57:23] [YALM]:: Registering commands: Guild
[2023/03/04 12:57:23] [YALM]:: Registering commands: SetItem
[2023/03/04 12:57:23] [YALM]:: Registering commands: Check
[2023/03/04 12:57:23] [YALM]:: Registering commands: Category
[2023/03/04 12:57:23] [YALM]:: Registering commands: Tribute
[2023/03/04 12:57:23] [YALM]:: Registering functions: GetEquipmentQuantity
[2023/03/04 12:57:23] [YALM]:: Registering functions: GetClassList
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Edit
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Rename
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Create
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Delete
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Remove
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Help
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Add
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Set
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: List
[2023/03/04 12:57:23] ...VeryVanilla\MacroQuest-Live\Lua\yalm\config\settings.Lua:66: attempt to index a nil valuestack traceback: ...VeryVanilla\MacroQuest-Live\Lua\yalm\config\settings.Lua: in function 'load_char_settings' ...VeryVanilla\MacroQuest-Live\Lua\yalm\config\settings.Lua:37: in function 'init_char_settings' ...s\VeryVanilla\MacroQuest-Live\Lua\yalm\core\evaluate.Lua:173: in function 'get_member_char_settings' ...s\VeryVanilla\MacroQuest-Live\Lua\yalm\core\evaluate.Lua:15: in function 'check_can_loot' ...es\VeryVanilla\MacroQuest-Live\Lua\yalm\core\looting.Lua:90: in function 'get_member_can_loot' ...es\VeryVanilla\MacroQuest-Live\Lua\yalm\core\looting.Lua:119: in function 'handle_master_looting' D:\Games\VeryVanilla\MacroQuest-Live\Lua\yalm\init.Lua:122: in function 'main' D:\Games\VeryVanilla\MacroQuest-Live\Lua\yalm\init.Lua:132: in main chunk
[2023/03/04 12:57:23] Ending Lua script 'yalm' with PID 15 and status -1[/CODE]
 
YALM seems to kill itself in the tutorial zone whenever it encounters one of the LORE metal chunks: "Chunk of Iron" or "Chunk of Bronze". After that, YALM is killing itself when restarting. Here's the log:


[CODE title="YALM crash log" highlight="31"][2023/03/04 12:55:49] Ending lua script 'yalm' with PID 14 and status -1
[2023/03/04 12:57:18] MQ2Log :: Logging is ON
[2023/03/04 12:57:22] Running lua script 'yalm' with PID 15
[2023/03/04 12:57:22] [YALM]:: Sqlite version: 3.37.1
[2023/03/04 12:57:22] [YALM]:: Registering commands: Rule
[2023/03/04 12:57:22] [YALM]:: Registering commands: Simulate
[2023/03/04 12:57:22] [YALM]:: Registering commands: Condition
[2023/03/04 12:57:22] [YALM]:: Registering commands: Command
[2023/03/04 12:57:22] [YALM]:: Registering commands: Character
[2023/03/04 12:57:22] [YALM]:: Registering commands: Buy
[2023/03/04 12:57:23] [YALM]:: Registering commands: Destroy
[2023/03/04 12:57:23] [YALM]:: Registering commands: Convert
[2023/03/04 12:57:23] [YALM]:: Registering commands: Bank
[2023/03/04 12:57:23] [YALM]:: Registering commands: Sell
[2023/03/04 12:57:23] [YALM]:: Registering commands: Guild
[2023/03/04 12:57:23] [YALM]:: Registering commands: SetItem
[2023/03/04 12:57:23] [YALM]:: Registering commands: Check
[2023/03/04 12:57:23] [YALM]:: Registering commands: Category
[2023/03/04 12:57:23] [YALM]:: Registering commands: Tribute
[2023/03/04 12:57:23] [YALM]:: Registering functions: GetEquipmentQuantity
[2023/03/04 12:57:23] [YALM]:: Registering functions: GetClassList
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Edit
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Rename
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Create
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Delete
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Remove
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Help
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Add
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: Set
[2023/03/04 12:57:23] [YALM]:: Registering subcommands: List
[2023/03/04 12:57:23] ...VeryVanilla\MacroQuest-Live\lua\yalm\config\settings.lua:66: attempt to index a nil valuestack traceback: ...VeryVanilla\MacroQuest-Live\lua\yalm\config\settings.lua: in function 'load_char_settings' ...VeryVanilla\MacroQuest-Live\lua\yalm\config\settings.lua:37: in function 'init_char_settings' ...s\VeryVanilla\MacroQuest-Live\lua\yalm\core\evaluate.lua:173: in function 'get_member_char_settings' ...s\VeryVanilla\MacroQuest-Live\lua\yalm\core\evaluate.lua:15: in function 'check_can_loot' ...es\VeryVanilla\MacroQuest-Live\lua\yalm\core\looting.lua:90: in function 'get_member_can_loot' ...es\VeryVanilla\MacroQuest-Live\lua\yalm\core\looting.lua:119: in function 'handle_master_looting' D:\Games\VeryVanilla\MacroQuest-Live\lua\yalm\init.lua:122: in function 'main' D:\Games\VeryVanilla\MacroQuest-Live\lua\yalm\init.lua:132: in main chunk
[2023/03/04 12:57:23] Ending lua script 'yalm' with PID 15 and status -1[/CODE]
This has been the hardest error to track down. I've just uploaded a new version with some better error handling. Post here with the new error message if you get it again.
 
Code:
[2023/03/04 19:13:47] Running lua script 'yalm' with PID 6
[2023/03/04 19:13:47] [YALM]:: Sqlite version: 3.37.1
[2023/03/04 19:13:47] ...mes\VeryVanilla\MacroQuest-Live\lua\yalm\core\loader.lua:123: bad argument #1 to 'pairs' (table expected, got nil)stack traceback:    [C]: in function 'pairs'    ...mes\VeryVanilla\MacroQuest-Live\lua\yalm\core\loader.lua:123: in function 'manage'    D:\Games\VeryVanilla\MacroQuest-Live\lua\yalm\init.lua:120: in function 'main'    D:\Games\VeryVanilla\MacroQuest-Live\lua\yalm\init.lua:132: in main chunk
[2023/03/04 19:13:47] Ending lua script 'yalm' with PID 6 and status -1

This didn't seem to be related to the lore metal chunks; it's handling those okay now. This is just what happens on start.
 
Release (YALM) Yet Another Loot Manager

Users who are viewing this thread

Back
Top
Cart