• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->
(Mighty) Lua Event Manager

(Mighty) Lua Event Manager 02/11/2024

Download now:  Join us with Level 2 access or earn your way in with  RedCents.
  • Add more templates / samples - mostly just simple ports of common reacts like primal bandolier swaps, icebound avatar duck, clicking jboots, clicking shield of the immaculate.
  • Add support for defining an on_load function for events, in case you want something to happen when an event loads for the first time. This may be more useful once dynamic load options are being used. For example, mem'ing a bane or cure spell when zoning into Shei mission where the event loaded dynamically based on the zone name.
  • Begin to add but not yet use implementation for dynamic load options for events
  • Fix events enabling by default if no settings exist yet
  • Refactor some stuff
- Add template selection in event editor to fill in event code from some samples. Don't really have many samples yet, but hopefully in the future...
- Add lem/library.lua with a bunch of helper functions that may or may not be useful when writing event code. Include it by adding local library = require('lem.library') to your event.
- Includes things like casting spells, using AAs, using items, using discs, checking if any of the same are ready or not, nav'ing, targeting, etc.
- Event configurations can be exported from the event viewer or right click menu in event list. The configuration will be copied to clipboard to be pasted elsewhere.
- Event configurations can be imported from the Import section on the left.

Events are exported and imported as base64 encoded strings (they will look like blobs of letters/numbers). For example, pasting the following into Import will add the atensilence event (which is also already included):

INI:
cmV0dXJuIHsKIGNvZGUgPSAiYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDZ3BzYjJOaGJDQnRlVjlqYkdGemN5QTlJRzF4TGxSTVR5NU5aUzVEYkdGemN5NVRhRzl5ZEU1aGJXVW9LUW9LYkc5allXd2djR0YxYzJWZlkyMWtjeUE5SUNnbkx5VnpJRzF2WkdVZ01Ec2dMMjF4Y0NCdmJqc2dMM1IzYVhOMElHOW1aanNnTDNScGJXVmtJRFVnTDJGbWIyeHNiM2NnYjJabU95QXZibUYySUhOMGIzQTdJQzkwWVhKblpYUWdZMnhsWVhJbktUcG1iM0p0WVhRb2JYbGZZMnhoYzNNcENteHZZMkZzSUhKMWJsOWhkMkY1WDJOdFpDQTlJQ2N2ZEdsdFpXUWdNVEFnTDI1aGRpQnNiMk40ZVhvZ01USXlNaTQyTnlBdE5EZ3VPVGNnTWpNMkxqUXhKd3BzYjJOaGJDQnlaWE4xYldWZlkyMWtjeUE5SUNnbkwzUnBiV1ZrSURFMU1DQXZKWE1nYlc5a1pTQXlPeUF2ZEdsdFpXUWdNVFV3SUM5dGNYQWdiMlptT3lBdmRHbHRaV1FnTVRVd0lDOTBkMmx6ZENCdmJpY3BPbVp2Y20xaGRDaHRlVjlqYkdGemN5a0tDbXh2WTJGc0lHWjFiR3hmWTIxa0lEMGdLQ2N2YlhWc2RHbHNhVzVsSURzZ0pYTTdJQ1Z6T3lBbGN6c25LVHBtYjNKdFlYUW9jR0YxYzJWZlkyMWtjeXdnY25WdVgyRjNZWGxmWTIxa0xDQnlaWE4xYldWZlkyMWtjeWtLQ214dlkyRnNJR1oxYm1OMGFXOXVJR1YyWlc1MFgyaGhibVJzWlhJb2JHbHVaU3dnZEdGeVoyVjBLUW9nSUNBZ2FXWWdibTkwSUcxeExsUk1UeTVhYjI1bExsTm9iM0owVG1GdFpTZ3BJRDA5SUNkMlpYaDBhR0ZzZEhkdlgyMXBjM05wYjI0bklIUm9aVzRnY21WMGRYSnVJR1Z1WkFvS0lDQWdJR3h2WTJGc0lHbGZZVzFmYldFZ1BTQnRjUzVVVEU4dVIzSnZkWEF1VFdWdFltVnlLREFwTGsxaGFXNUJjM05wYzNRb0tRb2dJQ0FnYkc5allXd2diWGxmYm1GdFpTQTlJRzF4TGxSTVR5NU5aUzVEYkdWaGJrNWhiV1VvS1FvZ0lDQWdiRzlqWVd3Z2JXRmZibUZ0WlNBOUlHMXhMbFJNVHk1SGNtOTFjQzVOWVdsdVFYTnphWE4wTGtOc1pXRnVUbUZ0WlNncENnb2dJQ0FnYVdZZ2RHRnlaMlYwSUQwOUlHMTVYMjVoYldVZ1lXNWtJRzV2ZENCcFgyRnRYMjFoSUhSb1pXNEtJQ0FnSUNBZ0lDQnRjUzVqYldRb1puVnNiRjlqYldRcENpQWdJQ0JsYkhObGFXWWdkR0Z5WjJWMElEMDlJRzFoWDI1aGJXVWdZVzVrSUc1dmRDQnBYMkZ0WDIxaElIUm9aVzRLSUNBZ0lDQWdJQ0J0Y1M1amJXUW9ablZzYkY5amJXUXBDaUFnSUNCbGJtUUtaVzVrQ2dweVpYUjFjbTRnWlhabGJuUmZhR0Z1Wkd4bGNnPT0iLAogY2F0ZWdvcnkgPSAiVG9MIiwKIHR5cGUgPSAiZXZlbnRzIiwKIG5hbWUgPSAiYXRlbnNpbGVuY2UiLAogcGF0dGVybiA9ICIjKiNBdGVuIEhhIFJhIHBvaW50cyBhdCAjMSMgd2l0aCBvbmUgYXJtIyojIiwKfQ==

For anyone who has used weakauras in WoW, its meant to look similar to that, just copy/paste the string to import.
Protect calls to user defined condition and action functions so that the main script stays running in case a broken event is enabled.

failederrors.png


If the condition function fails to run, the first message will be displayed: Failed to invoke condition for event: {name}
If the action function fails to run, the second message will be displayed: Failed to invoke action for event: {name}

Some things I may consider if broken events are too common and spammy:
- Automatically disable event if it gets so many errors
- Throttle printing out the errors

This only applies to condition event functions (the react-like ones), as events are called separately by MQ and will already be caught.

Don't just the macroquest2 folder name in my folders!
Moved lem/settings.lua to lem/settings.default.lua so that updates don't overwrite modified settings. lem/settings.default.lua includes sample events and categories, just rename it to use them.

- Added Categories for grouping events
- Categories can be created in the Categories section and then assigned when adding/editing events
- Display message when event code fails to load
- Checkbox for enable/disable now displayed in events table
- Added filtering to events list
- Only save character specific settings when enabling/disabling an event, instead of all settings
- Save event now checks for what changed before deciding whether to save full settings
- Fix event viewer crashing when event code includes formatted strings
- Add a couple more realistic sample events (aten silence run away, shei root for clr/shm)

Didn't get a chance to try the aten/shei mission events yet but just copied them from the individual lua scripts i'd been using. They may need updating a bit to match the format better before they work.
Changing events to be indexed by name instead of as an array so that it can avoid looping through all events instead of just enabled events.
If anyone happened to get started with this in the last few hours since it was posted, its a breaking change to what's stored in settings.lua.
Back
Top