• 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 --->
  • EverQuest's 31st expansion The Outer Brood goes live Dec 3rd. brainiac is spending extra time updating MacroQuest. Please show him your appreciation.
Resource icon

Lua Event Manager (LEM) Event Library

Software Requirements
Lua Event Manager
Server Type
🏢 Live 🏘️ Emu TLP Test
Lua Event Manager (LEM) is a Lua script which combines features of MQ2Events and MQ2React plugins. It allows you to manage small Lua scripts which will run based on text based events or as reactions to conditions like the current state of a TLO.

The purpose of this resource is to collect LEM event definitions that have been created and shared by the community so that they are easier to discover and maintain. Try to keep the discussion thread limited to submitting new events or reporting on issues with the events defined here. Leave other LEM related discussion to the main LEM resource thread.

How to use these events

Each of these events may be imported to LEM by either:
a. Copying the base64 encoded import string (long string of letters/numbers) and pasting it into the "Import" section, or
b. Copying the event Lua code and pasting it into the code section of the "Add Event" window.

Importing an Event
  1. Select "Import" from the left menu.
  2. Copy the import string from one of the events on this page and paste it into the text field
    1664032347900.png

    You can paste with your normal keyboard shortcut like ctrl-v, or by clicking the paste button.
  3. Click "Import Event"
  4. The "Add Event" window will pop up, pre-populated with the imported event details. If everything looks good, you can just click save.

Adding an Event

  1. Decide what type of event you are adding: a text event, which fires off of some text pattern in a chat window, or a condition event, which fires based off of the value of some MQ TLO.
    1664032089326.png
  2. Click "Add Event" to open the add event window where you enter the name, pattern (if a text event), a category to organize the event, and the Lua source code for the event.
    1664032161651.png
  3. By default, the add event window will be populated with some template code to help begin writing an event. If you are just copying in Lua code from this library, then you can overwrite this with the code you will paste in.
  4. Give the event a name, and paste in the event pattern if it is a text event.
  5. Save the event.
How to share your event here

If you have an event you've written which you would like to contribute here, provide the following:
  • A name for the event
  • The event pattern, if it is a text event
  • The import string for the event. This can be obtained by clicking "Export Event" in the event viewer, or right clicking the event in the list and clicking "Export Event". This will copy the import string to the clipboard so that you can paste it here.
  • The Lua code for the event. Mostly just so that people can easily review what an event does before deciding to import it using the import string.

Looking to write your own event?

Check out the "Writing Events" section on the overview of the LEM resource.

Event Definitions

Below is a list of events taken from the LEM resource discussion thread. I've not / will not be testing every event which someone contributes to ensure they're actually something valid, but if someone comments that some event isn't working then may correct or remove any that are broken.

LS Mission Events

Heroes Are Forged

Text Event: Heros Run
Added by: Overtimer (https://www.redguides.com/community/threads/laurions-song-mission-heroes-are-forged.88961/)
Code:
cmV0dXJuIHsKIGNhdGVnb3J5ID0gIkxPUyIsCiBwYXR0ZXJuID0gIiMqI3RvIG1vdmUgdG93YXJkICMxIy4jKiMiLAogY29kZSA9ICJiRzlqWVd3Z2JYRTljbVZ4ZFdseVpTZ25iWEVuS1Fwc2IyTmhiQ0JtZFc1amRHbHZiaUJsZG1WdWRGOW9ZVzVrYkdWeUtHeHBibVVzSUc1aGJXVnpLUXBwWmlCdGNTNVVURTh1V205dVpTNUpSQ2dwSUQwOUlEZzJNaUIwYUdWdUNpQnBaaUJ6ZEhKcGJtY3VabWx1WkNodVlXMWxjeXdnYlhFdVZFeFBMazFsTGtOc1pXRnVUbUZ0WlNncEtTQjBhR1Z1Q2lBZ2JYRXVZMjFrS0NjdmRHbHRaV1FnTlNBdllXWnZiR3h2ZHlCdlptWW5LUW9nSUcxeExtTnRaQ2duTDI1aGRpQnNiMk40ZVhvZ0lDMDJORFF1TlRneElERXhNeTQ1TVRFZ01qVXVNamt4TXlBbktRb2dJRzF4TG1SbGJHRjVLRE0xTURBd0tRb2dJRzF4TG1OdFpDZ25MMjVoZGlCc2IyTjRlWG9nSUMwNU9EVXVPREVnTkRZM0xqVTFJREU1TXk0eE5DQW5LUW9LSUNBS0lDQUtJQ0JsYm1RS0lHVnVaQXBsYm1RS2NtVjBkWEp1SUh0bGRtVnVkR1oxYm1NOVpYWmxiblJmYUdGdVpHeGxjbjA9IiwKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgem9uZSA9ICIiLAogIGNsYXNzID0gIiIsCiB9LAogbmFtZSA9ICJIZXJvcyBSdW4iLAogdHlwZSA9ICJldmVudHMiLAp9
Code:
#*#to move toward #1#.#*#
Lua:
local mq=require('mq')
local function event_handler(line, names)
if mq.TLO.Zone.ID() == 862 then
 if string.find(names, mq.TLO.Me.CleanName()) then
  mq.cmd('/timed 5 /afollow off')
  mq.cmd('/nav locxyz  -644.581 113.911 25.2913 ')
  mq.delay(35000)
  mq.cmd('/nav locxyz  -985.81 467.55 193.14 ')
  end
 end
end
return {eventfunc=event_handler}

Final Fugue

Text Event: Stun Kar the Unmovable - Cleric Version
Added by: Loen (https://www.redguides.com/community/threads/lua-event-manager-lem-event-library.83548/post-587512)
Code:
cmV0dXJuIHsKIGNhdGVnb3J5ID0gIkxTIiwKIHR5cGUgPSAiZXZlbnRzIiwKIHBhdHRlcm4gPSAiIyojS2FyIHJvYXJzLCBwdWxscyBoaXMgc2hpZWxkIGZyb20gaGlzIGJhY2ssIGFuZCBzZXRzIGhpcyBmZWV0IzEjIiwKIGNvZGUgPSAiYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmxkbVZ1ZEY5b1lXNWtiR1Z5S0d4cGJtVXNJSFJoY21kbGRDa0tJQ0FnSUd4dlkyRnNJSE4wZFc0Z1BTQnRjUzVVVEU4dVUzQmxiR3dvSjBGM1pXSnZiSFFuS1M1U1lXNXJUbUZ0WlNncENpQWdJQ0J0Y1M1amJXUm1LQ2N2WTJ4eUlIQmhkWE5sSUc5dUp5a0tDaUFnSUNCcFppQnRjUzVVVEU4dVZHRnlaMlYwTGtOc1pXRnVUbUZ0WlNncElINDlJQ2RMWVhJZ2RHaGxJRlZ1Ylc5MllXSnNaU2NnZEdobGJnb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwyMXhkR0Z5SUV0aGNpQjBhR1VnVlc1dGIzWmhZbXhsSUc1d1l5Y3BDaUFnSUNBZ0lDQWdiWEV1WkdWc1lYa29OVEFwQ2lBZ0lDQmxibVFLSUNBZ0lIZG9hV3hsSUc1dmRDQnRjUzVVVEU4dVRXVXVVM0JsYkd4U1pXRmtlU2h6ZEhWdUtTZ3BJRzl5SUcxeExsUk1UeTVOWlM1RFlYTjBhVzVuS0NrZ1pHOEtJQ0FnSUNBZ0lDQnRjUzVrWld4aGVTZ3hNREF3S1FvZ0lDQWdaVzVrQ2lBZ0lDQnRjUzVqYldSbUtDY3ZZMkZ6ZENBbGN5Y3NJSE4wZFc0cENpQWdJQ0J0Y1M1a1pXeGhlU2d4TURBd0syMXhMbFJNVHk1VGNHVnNiQ2h6ZEhWdUtTNU5lVU5oYzNSVWFXMWxLQ2twQ2dvZ0lDQWdiWEV1WTIxa1ppZ25MMk5zY2lCd1lYVnpaU0J2Wm1ZbktRcGxibVFLQ25KbGRIVnliaUI3WlhabGJuUm1kVzVqUFdWMlpXNTBYMmhoYm1Sc1pYSjkiLAogbG9hZCA9IHsKICBhbHdheXMgPSBmYWxzZSwKICB6b25lID0gIiIsCiAgY2xhc3MgPSAiIiwKIH0sCiBuYW1lID0gIlN0dW4gS2FyIChDbHIpIiwKfQ==
Code:
#*#Kar roars, pulls his shield from his back, and sets his feet#1#
Lua:
local mq = require('mq')

local function event_handler(line, target)
    local stun = mq.TLO.Spell('Awebolt').RankName()
    mq.cmdf('/clr pause on')
    if mq.TLO.Target.CleanName() ~= 'Kar the Unmovable' then
        mq.cmd('/mqtar Kar the Unmovable npc')
        mq.delay(50)
    end
    while not mq.TLO.Me.SpellReady(stun)() or mq.TLO.Me.Casting() do
        mq.delay(1000)
    end
    mq.cmdf('/cast %s', stun)
    mq.delay(1000+mq.TLO.Spell(stun).MyCastTime())
    mq.cmdf('/clr pause off')
end

return {eventfunc=event_handler}

NoS Mission Events

Under Siege

Text Event: Dimming Cure
Added by: Someone in the mission thread
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCRmRtVnVkRjlFYVcxdGFXNW5LQ2tLSUNBZ0lIQnlhVzUwS0cxeExsUk1UeTVOWlM1T1lXMWxLQ2tnTGk0Z0lpQjNhV3hzSUdkbGRDQjBhR1VnWTNWeVpTSXBDaUFnSUNCdGNTNWpiV1JtS0NjdkpYTWdjR0YxYzJVZ2IyNG5MQ0J0Y1M1VVRFOHVUV1V1UTJ4aGMzTXVVMmh2Y25ST1lXMWxLQ2twQ2lBZ0lDQnRjUzVqYldRb0p5OXRjWEFnYjI0bktRb2dJQ0FnYVdZZ2JYRXVWRXhQTGsxbExrTnNZWE56TGxOb2IzSjBUbUZ0WlNncElEMDlJQ0pDVWtRaUlIUm9aVzRLSUNBZ0lDQWdJQ0J0Y1M1amJXUW9KeTkwZDJsemRDQnpkRzl3SnlrS0lDQWdJR1Z1WkFvZ0lDQWdiWEV1WTIxa0tDY3ZZWFIwWVdOcklHOW1aaWNwQ2lBZ0lDQnRjUzVrWld4aGVTZ3lOVEFwQ2lBZ0lDQnRjUzVqYldRb0p5OXVZWFlnYzNCaGQyNGdjM0JwY21sMEp5a0tJQ0FnSUcxeExtUmxiR0Y1S0RFd01Dd2dablZ1WTNScGIyNG9LU0J5WlhSMWNtNGdiWEV1VkV4UExrNWhkaTVCWTNScGRtVW9LU0JsYm1RcENpQWdJQ0J0Y1M1a1pXeGhlU2d4TlRBd01Dd2dablZ1WTNScGIyNG9LU0J5WlhSMWNtNGdibTkwSUcxeExsUk1UeTVPWVhZdVFXTjBhWFpsS0NrZ1pXNWtLUW9nSUNBZ2JYRXVZMjFrS0NjdmJYRjBZWElnYzNCcGNtbDBKeWtLSUNBZ0lHMXhMbVJsYkdGNUtEYzFNQ2tLSUNBZ0lHMXhMbU50WkNnbkwzTmhlU0JvWld4d0p5a0tJQ0FnSUcxeExtUmxiR0Y1S0RJd01EQXBDaUFnSUNCdGNTNWpiV1FvSnk5dGNYQWdiMlptSnlrS0lDQWdJRzF4TG1OdFpHWW9KeThsY3lCd1lYVnpaU0J2Wm1ZbkxDQnRjUzVVVEU4dVRXVXVRMnhoYzNNdVUyaHZjblJPWVcxbEtDa3BDbVZ1WkFvS2NtVjBkWEp1SUh0bGRtVnVkR1oxYm1NOVJYWmxiblJmUkdsdGJXbHVaMzA9IiwKIGNhdGVnb3J5ID0gIk5vUyIsCiB0eXBlID0gImV2ZW50cyIsCiBuYW1lID0gIkRpbW1pbmcgQ3VyZSIsCiBwYXR0ZXJuID0gIiMqI1RoZSBkYXJrbmVzcyBpbnNpZGUgeW91IGJlZ2lucyB0byBncm93IyojIiwKfQ==
Code:
#*#The darkness inside you begins to grow#*#
Lua:
local mq = require('mq')
local function Event_Dimming()
    print(mq.TLO.Me.Name() .. " will get the cure")
    mq.cmdf('/%s pause on', mq.TLO.Me.Class.ShortName())
    mq.cmd('/mqp on')
    if mq.TLO.Me.Class.ShortName() == "BRD" then
        mq.cmd('/twist stop')
    end
    mq.cmd('/attack off')
    mq.delay(250)
    mq.cmd('/nav spawn spirit')
    mq.delay(100, function() return mq.TLO.Nav.Active() end)
    mq.delay(15000, function() return not mq.TLO.Nav.Active() end)
    mq.cmd('/mqtar spirit')
    mq.delay(750)
    mq.cmd('/say help')
    mq.delay(2000)
    mq.cmd('/mqp off')
    mq.cmdf('/%s pause off', mq.TLO.Me.Class.ShortName())
end
return {eventfunc=Event_Dimming}

Mean Streets

The Spirit Fades

When One Door Closes


Condition Event: Multiclass Banishing the whirling debris.
Added by: Dragonslayer, some notes here https://www.redguides.com/community/threads/lua-event-manager-lem-event-library.83548/post-542139
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJMUzB0UUhSNWNHVWdUWEVLYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDZ290TFMxQWRIbHdaU0JKYlVkMWFRcHNiMk5oYkNCcFp5QTlJSEpsY1hWcGNtVW9KMGx0UjNWcEp5a0tDbXh2WTJGc0lISmxjWFZwY21Wa1gzcHZibVVnUFNBbmMyaGhaRzkzYUdGMlpXNTBkMjlmYldsemMybHZiaWNLYkc5allXd2dZbUZ1WlY5dGIySmZibUZ0WlNBOUlDZDNhR2x5YkdsdVp5QmtaV0p5YVhNbkNteHZZMkZzSUdSbGJHRjVZalJpWVc1bElEMGdOVEF3TUNBZ0lDQWdJQ0FnSUMwdGRHRnJaWE1nYVc1MGJ5QmhZMk52ZFc1MExDQjBhR0YwSUhSb1pTQmlZVzVsYlc5aWN5QmhjbVVnTVRBdE1UVWdjMlZySUdsdVlXTjBhWFpoSUdGdVpDQnViM1FnSW1KaGJtVmhZbXhsSWlCaFpuUmxjaUJ6Y0dGM2JtbHVaeUFvYzI4Z1ltVnpkQ0IzYUdWdUlERXdNREF3TFRFMU1EQXdLUW9LYkc5allXd2dZbUZ1WlhNZ1BTQjdDaUFnSUNCQ1VrUTllMjVoYldVOUowRnlhV0VnYjJZZ1FXSnpiMngxZEdsdmJpY3NkSGx3WlQwbmMzQmxiR3duZlN3S0lDQWdJRU5NVWoxN2JtRnRaVDBuVTJGdVkzUnBabWxsWkNCQ2JHOXZaQ2NzZEhsd1pUMG5jM0JsYkd3bmZTd0tJQ0FnSUZCaGJEMTdibUZ0WlQwblEzVnlaU0JEYjNKeWRYQjBhVzl1Snl4MGVYQmxQU2R6Y0dWc2JDZDlMQW9nSUNBZ1UwaE5QWHR1WVcxbFBTZERkWEpsSUVOdmNuSjFjSFJwYjI0bkxIUjVjR1U5SjNOd1pXeHNKMzBzQ2lBZ0lDQkVVbFU5ZTI1aGJXVTlKMU5oYm1OMGFXWnBaV1FnUW14dmIyUW5MSFI1Y0dVOUozTndaV3hzSjMwc0NpQWdJQ0JTVGtjOWUyNWhiV1U5SjB4MWJtRnlJRUpoYkcwbkxIUjVjR1U5SjNOd1pXeHNKMzBLZlFvS2JHOWpZV3dnWm5WdVkzUnBiMjRnVTJ4bFpYQkJWMmhwYkdVb2JYTXBDaUFnSUd4dlkyRnNJR3h2YjNCMGFXMWxJRDBnTVRBS0lDQWdiRzlqWVd3Z2RHOTBkR2x0WlNBOUlEQUtJQ0FnZDJocGJHVWdkRzkwZEdsdFpTQThJRzF6SUdSdkNpQWdJQ0J0Y1M1a1pXeGhlU2hzYjI5d2RHbHRaU2tLSUNBZ0lHMXhMbVJ2WlhabGJuUnpLQ2tLSUNBZ0lIUnZkSFJwYldVZ1BTQjBiM1IwYVcxbElDc2diRzl2Y0hScGJXVUtJQ0FnWlc1a0NtVnVaQW9LYkc5allXd2dablZ1WTNScGIyNGdVM1J2Y0VSUVV5Z3BDaUFnSUNCdGNTNWpiV1FvSnk5emNYVmxiR05vSUM5dGNYQWdiMjRuS1FvZ0lDQWdiWEV1WkdWc1lYa29NVEFwQ2lBZ0lDQnBaaUJ0Y1M1VVRFOHVUV1V1UTJ4aGMzTXVVMmh2Y25ST1lXMWxLQ2tnUFQwZ0owSlNSQ2NnZEdobGJnb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwzTnhkV1ZzWTJnZ0wzUjNhWE4wSUc5bVppY3BDaUFnSUNBZ0lDQWdiWEV1WkdWc1lYa29NVEFwQ2lBZ0lDQWdJQ0FnYlhFdVkyMWtLQ2N2YzNGMVpXeGphQ0F2YzNSdmNITnZibWNuS1FvZ0lDQWdJQ0FnSUcxeExtUmxiR0Y1S0RFd0tRb2dJQ0FnWlc1a0NpQWdJQ0F0TFcxeExtTnRaQ2duTDJGMGRHRmpheUJ2Wm1ZbktTQWdMaTR1SUcxaGVXSmxJR1JsWVdOMGFYWmhkR1VnWVhSMFlXTnJJR0oxZENCellYWmxJSE4wWVhSbElIUnZJSEpsWVdOMGFYWmhkR1VnWVhRZ1UzUmhjblJFY0hNS0lDQWdJQzB0YlhFdVpHVnNZWGtvTVRBcENpQWdJQ0J0Y1M1amJXUW9KeTl6Y1hWbGJHTm9JQzlpYjNoeUlIQmhkWE5sSnlrS0lDQWdJRzF4TG1SbGJHRjVLREV3S1FvZ0lDQWdkMmhwYkdVZ2JYRXVWRXhQTGsxbExrTmhjM1JwYm1jdVNVUW9LU0JrYndvZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvTWpBd0tRb2dJQ0FnWlc1a0NtVnVaQXBzYjJOaGJDQm1kVzVqZEdsdmJpQlNaWE4xYldWRVVGTW9LUW9nSUNCdGNTNWpiV1FvSnk5emNYVmxiR05vSUM5dGNYQWdiMlptSnlrS0lDQWdiWEV1WkdWc1lYa29NVEFwQ2lBZ0lHbG1JRzF4TGxSTVR5NU5aUzVEYkdGemN5NVRhRzl5ZEU1aGJXVW9LU0E5UFNBblFsSkVKeUIwYUdWdUNpQWdJQ0J0Y1M1amJXUW9KeTl6Y1hWbGJHTm9JQzkwZDJsemRDQnZiaWNwQ2lBZ0lDQnRjUzVrWld4aGVTZ3hNQ2tLSUNBZ1pXNWtDaUFnSUcxeExtTnRaQ2duTDNOeGRXVnNZMmdnTDJKdmVISWdkVzV3WVhWelpTY3BDaUFnSUcxeExtUmxiR0Y1S0RFd0tRcGxibVFLYkc5allXd2dablZ1WTNScGIyNGdiMjVmYkc5aFpDZ3BDaUFnSUNCcFppQnRjUzVVVEU4dVdtOXVaUzVUYUc5eWRFNWhiV1VvS1NCK1BTQnlaWEYxYVhKbFpGOTZiMjVsSUhSb1pXNGdjbVYwZFhKdUlHVnVaQW9nSUNBZ2JHOWpZV3dnWW1GdVpTQTlJR0poYm1WelcyMXhMbFJNVHk1TlpTNURiR0Z6Y3k1VGFHOXlkRTVoYldVb0tWMEtJQ0FnSUd4dlkyRnNJSE53Wld4c2JtRnRaU0E5SUcxeExsUk1UeTVUY0dWc2JDaDBiM04wY21sdVp5aGlZVzVsTG01aGJXVXBLUzVTWVc1clRtRnRaU2dwQ2lBZ0lDQXRMWEJ5YVc1MEtITndaV3hzYm1GdFpTa0tJQ0FnSUdsbUlHSmhibVVnWVc1a0lHSmhibVV1ZEhsd1pTQTlQU0FuYzNCbGJHd25JSFJvWlc0S0lDQWdJQ0FnSUNCcFppQnRjUzVVVEU4dVRXVXVSMlZ0S0hOd1pXeHNibUZ0WlNrb0tTQStJREFnZEdobGJpQnlaWFIxY200Z1pXNWtJQ0F0TFNCVGFHOTFiR1FnWW1VZ2JXVnRiV1ZrSUdGc2NtVmhaSGtLSUNBZ0lDQWdJQ0JUZEc5d1JGQlRLQ2tLSUNBZ0lDQWdJQ0J0Y1M1amJXUm1LQ2N2YldWdGMzQmxiR3dnTVRNZ0lpVnpJaWNzSUhOd1pXeHNibUZ0WlNrS0lDQWdJQ0FnSUNCdGNTNWtaV3hoZVNnbk5ITW5LUW9nSUNBZ0lDQWdJRzF4TGxSTVR5NVhhVzVrYjNjb0oxTndaV3hzUW05dmExZHVaQ2NwTGtSdlEyeHZjMlVvS1FvZ0lDQWdJQ0FnSUZKbGMzVnRaVVJRVXlncENpQWdJQ0JsYm1RS1pXNWtDaTB0TFVCeVpYUjFjbTRnWW05dmJHVmhiaUJBVW1WMGRYSnVjeUIwY25WbElHbG1JSFJvWlNCaFkzUnBiMjRnYzJodmRXeGtJR1pwY21Vc0lHOTBhR1Z5ZDJselpTQm1ZV3h6WlM0S2JHOWpZV3dnWm5WdVkzUnBiMjRnWTI5dVpHbDBhVzl1S0NrS0lDQWdJSEpsZEhWeWJpQnRjUzVVVEU4dVdtOXVaUzVUYUc5eWRFNWhiV1VvS1NBOVBTQnlaWEYxYVhKbFpGOTZiMjVsSUdGdVpDQnRjUzVVVEU4dVUzQmhkMjVEYjNWdWRDZ29KeVZ6SUc1d1l5Y3BPbVp2Y20xaGRDaGlZVzVsWDIxdllsOXVZVzFsS1Nrb0tTQStJREFLSUNBZ0lDMHRjbVYwZFhKdUlIUnlkV1VLWlc1a0NteHZZMkZzSUdaMWJtTjBhVzl1SUhSaGNtZGxkRjlpWVc1bFgyMXZZaWdwQ2lBZ0lDQnBaaUJ0Y1M1VVRFOHVWR0Z5WjJWMExrTnNaV0Z1VG1GdFpTZ3BJSDQ5SUdKaGJtVmZiVzlpWDI1aGJXVWdkR2hsYmdvZ0lDQWdJQ0FnSUcxeExtTnRaR1lvSnk5dGNYUmhjaUFsY3lCdWNHTW5MQ0JpWVc1bFgyMXZZbDl1WVcxbEtRb2dJQ0FnSUNBZ0lHMXhMbVJsYkdGNUtEVXdLUW9nSUNBZ1pXNWtDbVZ1WkFwc2IyTmhiQ0JtZFc1amRHbHZiaUJqWVhOMEtITndaV3hzS1FvZ0lDQWdiWEV1WTIxa1ppZ25MMk5oYzNRZ0pYTW5MQ0J6Y0dWc2JDNVNZVzVyVG1GdFpTZ3BLUW9nSUNBZ2JYRXVaR1ZzWVhrb05UQXJjM0JsYkd3dVRYbERZWE4wVkdsdFpTZ3BLUXBsYm1RS2JHOWpZV3dnWm5WdVkzUnBiMjRnZFhObFgyRmhLR0ZoS1FvZ0lDQWdiWEV1WTIxa1ppZ25MMkZzZENCaFkzUnBkbUYwWlNBbGN5Y3NJR0ZoTGtsRUtDa3BDaUFnSUNCdGNTNWtaV3hoZVNnMU1DdGhZUzVUY0dWc2JDNURZWE4wVkdsdFpTZ3BLUXBsYm1RS2JHOWpZV3dnWm5WdVkzUnBiMjRnWW1GdVpWOXlaV0ZrZVNoaVlXNWxLUW9nSUNBZ2FXWWdZbUZ1WlM1MGVYQmxJRDA5SUNkemNHVnNiQ2NnZEdobGJnb2dJQ0FnSUNBZ0lISmxkSFZ5YmlCdGNTNVVURTh1VFdVdVUzQmxiR3hTWldGa2VTaGlZVzVsTG01aGJXVXBJR0Z1WkNCdWIzUWdiWEV1VkV4UExrMWxMa05oYzNScGJtY29LUW9nSUNBZ1pXeHpaV2xtSUdKaGJtVXVkSGx3WlNBOVBTQW5ZV0VuSUhSb1pXNEtJQ0FnSUNBZ0lDQnlaWFIxY200Z2JYRXVWRXhQTGsxbExrRnNkRUZpYVd4cGRIbFNaV0ZrZVNoaVlXNWxMbTVoYldVcElHRnVaQ0J1YjNRZ2JYRXVWRXhQTGsxbExrTmhjM1JwYm1jb0tRb2dJQ0FnWlc1a0NtVnVaQXBzYjJOaGJDQm1kVzVqZEdsdmJpQmhZM1JwYjI0b0tRb2dJQ0FnYkc5allXd2diWGxmWTJ4aGMzTWdQU0J0Y1M1VVRFOHVUV1V1UTJ4aGMzTXVVMmh2Y25ST1lXMWxLQ2tLSUNBZ0lHeHZZMkZzSUdKaGJtVWdQU0JpWVc1bGMxdHRlVjlqYkdGemMxMEtJQ0FnSUMwdElHbG1JRzV2ZENCaElHSmhibVVnWTJ4aGMzTXNJSEpsZEhWeWJnb2dJQ0FnYVdZZ2JtOTBJR0poYm1VZ2RHaGxiaUJ5WlhSMWNtNGdaVzVrQ2lBZ0lDQXRMU0JwWmlCaVlXNWxJR0ZpYVd4cGRIa2dhWE51SjNRZ2NtVmhaSGtzSUhKbGRIVnliZ29nSUNBZ2FXWWdiWGxmWTJ4aGMzTWdmajBnSjBKU1JDY2dZVzVrSUc1dmRDQmlZVzVsWDNKbFlXUjVLR0poYm1VcElIUm9aVzRnY21WMGRYSnVJR1Z1WkFvZ0lDQWdVMnhsWlhCQlYyaHBiR1VvWkdWc1lYbGlOR0poYm1VcENpQWdJQ0JUZEc5d1JGQlRLQ2tLSUNBZ0lIUmhjbWRsZEY5aVlXNWxYMjF2WWlncENpQWdJQ0JwWmlCaVlXNWxMblI1Y0dVZ1BUMGdKM053Wld4c0p5QjBhR1Z1Q2lBZ0lDQWdJQ0FnWTJGemRDaHRjUzVVVEU4dVUzQmxiR3dvWW1GdVpTNXVZVzFsS1NrS0lDQWdJR1ZzYzJVS0lDQWdJQ0FnSUNCMWMyVmZZV0VvYlhFdVZFeFBMazFsTGtGc2RFRmlhV3hwZEhrb1ltRnVaUzV1WVcxbEtTa0tJQ0FnSUdWdVpBb2dJQ0FnZDJocGJHVWdiWEV1VkV4UExrMWxMa05oYzNScGJtY29LU0JrYndvZ0lDQWdJQ0FnSUcxeExtUnZaWFpsYm5SektDa0tJQ0FnSUNBZ0lDQnRjUzVrWld4aGVTZzFNQ2tLSUNBZ0lHVnVaQW9nSUNBZ1VtVnpkVzFsUkZCVEtDa0taVzVrQ25KbGRIVnliaUI3YjI1c2IyRmtQVzl1WDJ4dllXUXNJR052Ym1SbWRXNWpQV052Ym1ScGRHbHZiaXdnWVdOMGFXOXVablZ1WXoxaFkzUnBiMjU5IiwKIGNhdGVnb3J5ID0gIk5vUyIsCiB0eXBlID0gImNvbmRpdGlvbnMiLAogbmFtZSA9ICJPbmVEb29yQmFuaXNoIiwKfQ==
Lua:
---@type Mq
local mq = require('mq')

---@type ImGui
local ig = require('ImGui')

local required_zone = 'shadowhaventwo_mission'
local bane_mob_name = 'whirling debris'
local delayb4bane = 5000         --takes into account, that the banemobs are 10-15 sek inactive and not "baneable" after spawning (so best when 10000-15000)

local banes = {
    BRD={name='Aria of Absolution',type='spell'},
    CLR={name='Sanctified Blood',type='spell'},
    Pal={name='Cure Corruption',type='spell'},
    SHM={name='Cure Corruption',type='spell'},
    DRU={name='Sanctified Blood',type='spell'},
    RNG={name='Lunar Balm',type='spell'}
}

local function SleepAWhile(ms)
   local looptime = 10
   local tottime = 0
   while tottime < ms do
    mq.delay(looptime)
    mq.doevents()
    tottime = tottime + looptime
   end
end

local function StopDPS()
    mq.cmd('/squelch /mqp on')
    mq.delay(10)
    if mq.TLO.Me.Class.ShortName() == 'BRD' then
        mq.cmd('/squelch /twist off')
        mq.delay(10)
        mq.cmd('/squelch /stopsong')
        mq.delay(10)
    end
    --mq.cmd('/attack off')  ... maybe deactivate attack but save state to reactivate at StartDps
    --mq.delay(10)
    mq.cmd('/squelch /boxr pause')
    mq.delay(10)
    while mq.TLO.Me.Casting.ID() do
       mq.delay(200)
    end
end
local function ResumeDPS()
   mq.cmd('/squelch /mqp off')
   mq.delay(10)
   if mq.TLO.Me.Class.ShortName() == 'BRD' then
    mq.cmd('/squelch /twist on')
    mq.delay(10)
   end
   mq.cmd('/squelch /boxr unpause')
   mq.delay(10)
end
local function on_load()
    if mq.TLO.Zone.ShortName() ~= required_zone then return end
    local bane = banes[mq.TLO.Me.Class.ShortName()]
    local spellname = mq.TLO.Spell(tostring(bane.name)).RankName()
    --print(spellname)
    if bane and bane.type == 'spell' then
        if mq.TLO.Me.Gem(spellname)() > 0 then return end  -- Should be memmed already
        StopDPS()
        mq.cmdf('/memspell 13 "%s"', spellname)
        mq.delay('4s')
        mq.TLO.Window('SpellBookWnd').DoClose()
        ResumeDPS()
    end
end
---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
    return mq.TLO.Zone.ShortName() == required_zone and mq.TLO.SpawnCount(('%s npc'):format(bane_mob_name))() > 0
    --return true
end
local function target_bane_mob()
    if mq.TLO.Target.CleanName() ~= bane_mob_name then
        mq.cmdf('/mqtar %s npc', bane_mob_name)
        mq.delay(50)
    end
end
local function cast(spell)
    mq.cmdf('/cast %s', spell.RankName())
    mq.delay(50+spell.MyCastTime())
end
local function use_aa(aa)
    mq.cmdf('/alt activate %s', aa.ID())
    mq.delay(50+aa.Spell.CastTime())
end
local function bane_ready(bane)
    if bane.type == 'spell' then
        return mq.TLO.Me.SpellReady(bane.name) and not mq.TLO.Me.Casting()
    elseif bane.type == 'aa' then
        return mq.TLO.Me.AltAbilityReady(bane.name) and not mq.TLO.Me.Casting()
    end
end
local function action()
    local my_class = mq.TLO.Me.Class.ShortName()
    local bane = banes[my_class]
    -- if not a bane class, return
    if not bane then return end
    -- if bane ability isn't ready, return
    if my_class ~= 'BRD' and not bane_ready(bane) then return end
    SleepAWhile(delayb4bane)
    StopDPS()
    target_bane_mob()
    if bane.type == 'spell' then
        cast(mq.TLO.Spell(bane.name))
    else
        use_aa(mq.TLO.Me.AltAbility(bane.name))
    end
    while mq.TLO.Me.Casting() do
        mq.doevents()
        mq.delay(50)
    end
    ResumeDPS()
end
return {onload=on_load, condfunc=condition, actionfunc=action}

ToL mission events

Ka Vethan: Shei Vinitras

Condition Event: self-cure clicky
Added by: Shadow
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENteHZZMkZzSUd4cFluSmhjbmtnUFNCeVpYRjFhWEpsS0Nkc1pXMHViR2xpY21GeWVTY3BDZ3BzYjJOaGJDQnBkR1Z0Ym1GdFpTQTlJQ2RUWldGd2IzSjBJRU4xY21VdFFXeHNKd3BzYjJOaGJDQmlkV1ptYm1GdFpTQTlJQ2RXWlc1dmJXOTFjeUJVYjNWamFDQnZaaUJXYVc1cGRISmhjeWNLQ2kwdExVQnlaWFIxY200Z1ltOXZiR1ZoYmlCQVVtVjBkWEp1Y3lCMGNuVmxJR2xtSUhSb1pTQmhZM1JwYjI0Z2MyaHZkV3hrSUdacGNtVXNJRzkwYUdWeWQybHpaU0JtWVd4elpTNEtiRzlqWVd3Z1puVnVZM1JwYjI0Z1kyOXVaR2wwYVc5dUtDa0tJQ0FnSUhKbGRIVnliaUJ0Y1M1VVRFOHVSbWx1WkVsMFpXMG9hWFJsYlc1aGJXVXBLQ2tnWVc1a0NpQWdJQ0FnSUNBZ2JYRXVWRXhQTGsxbExrSjFabVlvWW5WbVptNWhiV1VwS0NrZ1lXNWtDaUFnSUNBZ0lDQWdibTkwSUcxeExsUk1UeTVOWlM1RFlYTjBhVzVuS0NrS1pXNWtDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmhZM1JwYjI0b0tRb2dJQ0FnYlhFdVkyMWtaaWduTDNWelpXbDBaVzBnSWlWeklpY3NJR2wwWlcxdVlXMWxLUXBsYm1RS0NuSmxkSFZ5YmlCN1kyOXVaR1oxYm1NOVkyOXVaR2wwYVc5dUxDQmhZM1JwYjI1bWRXNWpQV0ZqZEdsdmJuMD0iLAogY2F0ZWdvcnkgPSAiVG9MIiwKIHR5cGUgPSAiY29uZGl0aW9ucyIsCiBuYW1lID0gInNoZWljdXJlYWxsIiwKfQ==
Lua:
local mq = require('mq')
local library = require('lem.library')
local itemname = 'Seaport Cure-All'
local buffname = 'Venomous Touch of Vinitras'
---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
    return mq.TLO.FindItem(itemname)() and
        mq.TLO.Me.Buff(buffname)() and
        not mq.TLO.Me.Casting()
end
local function action()
    mq.cmdf('/useitem "%s"', itemname)
end
return {condfunc=condition, actionfunc=action}

A bunch of different options for shei bane events. Some may work better than others.

Condition Event: shei bane
Added by: Dragonslayer
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJMUzB0UUhSNWNHVWdUWEVLTFMwdFFIUjVjR1VnU1cxSGRXa0tDbXh2WTJGc0lHMXhJRDBnY21WeGRXbHlaU2duYlhFbktRb0tiRzlqWVd3Z2NtVnhkV2x5WldSZmVtOXVaU0E5SUNkaGEyaGxkbUYwZDI5ZmJXbHpjMmx2YmljS2JHOWpZV3dnWW1GdVpWOXRiMkpmYm1GdFpTQTlJQ2RrWVhScFlYSWdlR2tnZEdGMmRXVnNhVzBuQ2dwc2IyTmhiQ0JpWVc1bGN5QTlJSHNLSUNBZ0lFSlNSRDE3Ym1GdFpUMG5VMngxYldKbGNpQnZaaUIwYUdVZ1JHbGhZbThuTEhSNWNHVTlKM053Wld4c0ozMHNDaUFnSUNCRFRGSTllMjVoYldVOUowSnNaWE56WldRZ1EyaGhhVzV6Snl4MGVYQmxQU2RoWVNkOUxBb2dJQ0FnUlU1RFBYdHVZVzFsUFNkQ1pXZDFhV3hsY2x3bmN5QkNZVzVwYzJodFpXNTBKeXgwZVhCbFBTZGhZU2Q5TEFvZ0lDQWdVR0ZzUFh0dVlXMWxQU2RUYUdGamEyeGxjeUJ2WmlCVWRXNWhjbVVuTEhSNWNHVTlKMkZoSjMwc0NpQWdJQ0JUU0UwOWUyNWhiV1U5SjFacGNuVnNaVzUwSUZCaGNtRnNlWE5wY3ljc2RIbHdaVDBuWVdFbmZTd0tJQ0FnSUU1bFl6MTdibUZ0WlQwblVHVnpkR2xzWlc1MElGQmhjbUZzZVhOcGN5Y3NkSGx3WlQwbllXRW5mU3dLSUNBZ0lFUlNWVDE3Ym1GdFpUMG5VR0Z5WVd4NWRHbGpJRk53YjNKbGN5Y3NkSGx3WlQwbllXRW5mU3dLSUNBZ0lGSk9SejE3Ym1GdFpUMG5SM0poYzNBZ2IyWWdVM2xzZG1GdUlGTndhWEpwZEhNbkxIUjVjR1U5SjJGaEozMHNDbjBLQ214dlkyRnNJR1oxYm1OMGFXOXVJRk4wYjNCRVVGTW9LUW9nSUNBZ2JYRXVZMjFrS0NjdmMzRjFaV3hqYUNBdmJYRndJRzl1SnlrS0lDQWdJRzF4TG1SbGJHRjVLREV3S1FvZ0lDQWdhV1lnYlhFdVZFeFBMazFsTGtOc1lYTnpMbE5vYjNKMFRtRnRaU2dwSUQwOUlDZENVa1FuSUhSb1pXNEtJQ0FnSUNBZ0lDQnRjUzVqYldRb0p5OXpjWFZsYkdOb0lDOTBkMmx6ZENCdlptWW5LUW9nSUNBZ0lDQWdJRzF4TG1SbGJHRjVLREV3S1FvZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDNOeGRXVnNZMmdnTDNOMGIzQnpiMjVuSnlrS0lDQWdJQ0FnSUNCdGNTNWtaV3hoZVNneE1Da0tJQ0FnSUdWdVpBb2dJQ0FnTFMxdGNTNWpiV1FvSnk5aGRIUmhZMnNnYjJabUp5a2dJQzR1TGlCdFlYbGlaU0JrWldGamRHbDJZWFJsSUdGMGRHRmpheUJpZFhRZ2MyRjJaU0J6ZEdGMFpTQjBieUJ5WldGamRHbDJZWFJsSUdGMElGTjBZWEowUkhCekNpQWdJQ0F0TFcxeExtUmxiR0Y1S0RFd0tRb2dJQ0FnYlhFdVkyMWtLQ2N2YzNGMVpXeGphQ0F2WW05NGNpQndZWFZ6WlNjcENpQWdJQ0J0Y1M1a1pXeGhlU2d4TUNrS0lDQWdJSGRvYVd4bElHMXhMbFJNVHk1TlpTNURZWE4wYVc1bkxrbEVLQ2tnWkc4S0lDQWdJQ0FnSUcxeExtUmxiR0Y1S0RJd01Da0tJQ0FnSUdWdVpBcGxibVFLQ214dlkyRnNJR1oxYm1OMGFXOXVJRkpsYzNWdFpVUlFVeWdwQ2lBZ0lHMXhMbU50WkNnbkwzTnhkV1ZzWTJnZ0wyMXhjQ0J2Wm1ZbktRb2dJQ0J0Y1M1a1pXeGhlU2d4TUNrS0lDQWdhV1lnYlhFdVZFeFBMazFsTGtOc1lYTnpMbE5vYjNKMFRtRnRaU2dwSUQwOUlDZENVa1FuSUhSb1pXNEtJQ0FnSUcxeExtTnRaQ2duTDNOeGRXVnNZMmdnTDNSM2FYTjBJRzl1SnlrS0lDQWdJRzF4TG1SbGJHRjVLREV3S1FvZ0lDQmxibVFLSUNBZ2JYRXVZMjFrS0NjdmMzRjFaV3hqYUNBdlltOTRjaUIxYm5CaGRYTmxKeWtLSUNBZ2JYRXVaR1ZzWVhrb01UQXBDbVZ1WkFvS2JHOWpZV3dnWm5WdVkzUnBiMjRnYjI1ZmJHOWhaQ2dwQ2lBZ0lDQnBaaUJ0Y1M1VVRFOHVXbTl1WlM1VGFHOXlkRTVoYldVb0tTQitQU0J5WlhGMWFYSmxaRjk2YjI1bElIUm9aVzRnY21WMGRYSnVJR1Z1WkFvZ0lDQWdiRzlqWVd3Z1ltRnVaU0E5SUdKaGJtVnpXMjF4TGxSTVR5NU5aUzVEYkdGemN5NVRhRzl5ZEU1aGJXVW9LVjBLSUNBZ0lHeHZZMkZzSUZOd1pXeHNibUZ0WlNBOUlHMXhMbFJNVHk1VGNHVnNiQ2hpWVc1bExtNWhiV1VwTGxKaGJtdE9ZVzFsS0NrS0lDQWdJR2xtSUdKaGJtVWdZVzVrSUdKaGJtVXVkSGx3WlNBOVBTQW5jM0JsYkd3bklIUm9aVzRLSUNBZ0lDQWdJQ0JwWmlCdGNTNVVURTh1VFdVdVIyVnRLRk53Wld4c2JtRnRaU2tvS1NCaGJtUWdiWEV1VkV4UExrMWxMa2RsYlNoVGNHVnNiRzVoYldVcEtDa2dQaUF3SUhSb1pXNGdjbVYwZFhKdUlHVnVaQ0FnTFMwZ1UyaHZkV3hrSUdKbElHMWxiVzFsWkNCaGJISmxZV1I1Q2lBZ0lDQWdJQ0FnVTNSdmNFUlFVeWdwQ2lBZ0lDQWdJQ0FnYlhFdVkyMWtaaWduTDIxbGJYTndaV3hzSURFeklDSWxjeUluTENCVGNHVnNiRzVoYldVcENpQWdJQ0FnSUNBZ2JYRXVaR1ZzWVhrb0p6UnpKeWtLSUNBZ0lDQWdJQ0J0Y1M1VVRFOHVWMmx1Wkc5M0tDZFRjR1ZzYkVKdmIydFhibVFuS1M1RWIwTnNiM05sS0NrS0lDQWdJQ0FnSUNCU1pYTjFiV1ZFVUZNb0tRb2dJQ0FnWlc1a0NtVnVaQW9LTFMwdFFISmxkSFZ5YmlCaWIyOXNaV0Z1SUVCU1pYUjFjbTV6SUhSeWRXVWdhV1lnZEdobElHRmpkR2x2YmlCemFHOTFiR1FnWm1seVpTd2diM1JvWlhKM2FYTmxJR1poYkhObExncHNiMk5oYkNCbWRXNWpkR2x2YmlCamIyNWthWFJwYjI0b0tRb2dJQ0FnY21WMGRYSnVJRzF4TGxSTVR5NWFiMjVsTGxOb2IzSjBUbUZ0WlNncElEMDlJSEpsY1hWcGNtVmtYM3B2Ym1VZ1lXNWtJRzF4TGxSTVR5NVRjR0YzYmtOdmRXNTBLQ2duSlhNZ2JuQmpKeWs2Wm05eWJXRjBLR0poYm1WZmJXOWlYMjVoYldVcEtTZ3BJRDRnTUFwbGJtUUtDbXh2WTJGc0lHWjFibU4wYVc5dUlIUmhjbWRsZEY5aVlXNWxYMjF2WWlncENpQWdJQ0JwWmlCdGNTNVVURTh1VkdGeVoyVjBMa05zWldGdVRtRnRaU2dwSUg0OUlHSmhibVZmYlc5aVgyNWhiV1VnZEdobGJnb2dJQ0FnSUNBZ0lHMXhMbU50WkdZb0p5OXRjWFJoY2lBbGN5QnVjR01uTENCaVlXNWxYMjF2WWw5dVlXMWxLUW9nSUNBZ0lDQWdJRzF4TG1SbGJHRjVLRFV3S1FvZ0lDQWdaVzVrQ21WdVpBb0tiRzlqWVd3Z1puVnVZM1JwYjI0Z1kyRnpkQ2h6Y0dWc2JDa0tJQ0FnSUcxeExtTnRaR1lvSnk5allYTjBJQ1Z6Snl3Z2MzQmxiR3d1VW1GdWEwNWhiV1VvS1NrS0lDQWdJRzF4TG1SbGJHRjVLRFV3SzNOd1pXeHNMazE1UTJGemRGUnBiV1VvS1NrS1pXNWtDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQjFjMlZmWVdFb1lXRXBDaUFnSUNCdGNTNWpiV1JtS0NjdllXeDBJR0ZqZEdsMllYUmxJQ1Z6Snl3Z1lXRXVTVVFvS1NrS0lDQWdJRzF4TG1SbGJHRjVLRFV3SzJGaExsTndaV3hzTGtOaGMzUlVhVzFsS0NrcENtVnVaQW9LYkc5allXd2dablZ1WTNScGIyNGdZbUZ1WlY5eVpXRmtlU2hpWVc1bEtRb2dJQ0FnYVdZZ1ltRnVaUzUwZVhCbElEMDlJQ2R6Y0dWc2JDY2dkR2hsYmdvZ0lDQWdJQ0FnSUhKbGRIVnliaUJ0Y1M1VVRFOHVUV1V1VTNCbGJHeFNaV0ZrZVNoaVlXNWxMbTVoYldVcElHRnVaQ0J1YjNRZ2JYRXVWRXhQTGsxbExrTmhjM1JwYm1jb0tRb2dJQ0FnWld4elpXbG1JR0poYm1VdWRIbHdaU0E5UFNBbllXRW5JSFJvWlc0S0lDQWdJQ0FnSUNCeVpYUjFjbTRnYlhFdVZFeFBMazFsTGtGc2RFRmlhV3hwZEhsU1pXRmtlU2hpWVc1bExtNWhiV1VwSUdGdVpDQnViM1FnYlhFdVZFeFBMazFsTGtOaGMzUnBibWNvS1FvZ0lDQWdaVzVrQ21WdVpBb0tiRzlqWVd3Z1puVnVZM1JwYjI0Z1lXTjBhVzl1S0NrS0lDQWdJR3h2WTJGc0lHMTVYMk5zWVhOeklEMGdiWEV1VkV4UExrMWxMa05zWVhOekxsTm9iM0owVG1GdFpTZ3BDaUFnSUNCc2IyTmhiQ0JpWVc1bElEMGdZbUZ1WlhOYmJYbGZZMnhoYzNOZENpQWdJQ0F0TFNCcFppQnViM1FnWVNCaVlXNWxJR05zWVhOekxDQnlaWFIxY200S0lDQWdJR2xtSUc1dmRDQmlZVzVsSUhSb1pXNGdjbVYwZFhKdUlHVnVaQW9nSUNBZ0xTMGdhV1lnWW1GdVpTQmhZbWxzYVhSNUlHbHpiaWQwSUhKbFlXUjVMQ0J5WlhSMWNtNEtJQ0FnSUdsbUlHMTVYMk5zWVhOeklINDlJQ2RDVWtRbklHRnVaQ0J1YjNRZ1ltRnVaVjl5WldGa2VTaGlZVzVsS1NCMGFHVnVJSEpsZEhWeWJpQmxibVFLSUNBZ0lGTjBiM0JFVUZNb0tRb2dJQ0FnZEdGeVoyVjBYMkpoYm1WZmJXOWlLQ2tLSUNBZ0lHbG1JR0poYm1VdWRIbHdaU0E5UFNBbmMzQmxiR3duSUhSb1pXNEtJQ0FnSUNBZ0lDQmpZWE4wS0cxeExsUk1UeTVUY0dWc2JDaGlZVzVsTG01aGJXVXBLUW9nSUNBZ1pXeHpaUW9nSUNBZ0lDQWdJSFZ6WlY5aFlTaHRjUzVVVEU4dVRXVXVRV3gwUVdKcGJHbDBlU2hpWVc1bExtNWhiV1VwS1FvZ0lDQWdaVzVrQ2lBZ0lDQjNhR2xzWlNCdGNTNVVURTh1VFdVdVEyRnpkR2x1WnlncElHUnZDaUFnSUNBZ0lDQWdiWEV1Wkc5bGRtVnVkSE1vS1FvZ0lDQWdJQ0FnSUcxeExtUmxiR0Y1S0RVd0tRb2dJQ0FnWlc1a0NpQWdJQ0JTWlhOMWJXVkVVRk1vS1FwbGJtUUtDbkpsZEhWeWJpQjdiMjVzYjJGa1BXOXVYMnh2WVdRc0lHTnZibVJtZFc1alBXTnZibVJwZEdsdmJpd2dZV04wYVc5dVpuVnVZejFoWTNScGIyNTkiLAogY2F0ZWdvcnkgPSAiVG9sIiwKIHR5cGUgPSAiY29uZGl0aW9ucyIsCiBuYW1lID0gIlNoZWlCYW5pc2giLAp9
Lua:
---@type Mq
---@type ImGui

local mq = require('mq')

local required_zone = 'akhevatwo_mission'
local bane_mob_name = 'datiar xi tavuelim'

local banes = {
    BRD={name='Slumber of the Diabo',type='spell'},
    CLR={name='Blessed Chains',type='aa'},
    ENC={name='Beguiler\'s Banishment',type='aa'},
    Pal={name='Shackles of Tunare',type='aa'},
    SHM={name='Virulent Paralysis',type='aa'},
    Nec={name='Pestilent Paralysis',type='aa'},
    DRU={name='Paralytic Spores',type='aa'},
    RNG={name='Grasp of Sylvan Spirits',type='aa'},
}

local function StopDPS()
    mq.cmd('/squelch /mqp on')
    mq.delay(10)
    if mq.TLO.Me.Class.ShortName() == 'BRD' then
        mq.cmd('/squelch /twist off')
        mq.delay(10)
        mq.cmd('/squelch /stopsong')
        mq.delay(10)
    end
    --mq.cmd('/attack off')  ... maybe deactivate attack but save state to reactivate at StartDps
    --mq.delay(10)
    mq.cmd('/squelch /boxr pause')
    mq.delay(10)
    while mq.TLO.Me.Casting.ID() do
       mq.delay(200)
    end
end

local function ResumeDPS()
   mq.cmd('/squelch /mqp off')
   mq.delay(10)
   if mq.TLO.Me.Class.ShortName() == 'BRD' then
    mq.cmd('/squelch /twist on')
    mq.delay(10)
   end
   mq.cmd('/squelch /boxr unpause')
   mq.delay(10)
end

local function on_load()
    if mq.TLO.Zone.ShortName() ~= required_zone then return end
    local bane = banes[mq.TLO.Me.Class.ShortName()]
    local Spellname = mq.TLO.Spell(bane.name).RankName()
    if bane and bane.type == 'spell' then
        if mq.TLO.Me.Gem(Spellname)() and mq.TLO.Me.Gem(Spellname)() > 0 then return end  -- Should be memmed already
        StopDPS()
        mq.cmdf('/memspell 13 "%s"', Spellname)
        mq.delay('4s')
        mq.TLO.Window('SpellBookWnd').DoClose()
        ResumeDPS()
    end
end

---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
    return mq.TLO.Zone.ShortName() == required_zone and mq.TLO.SpawnCount(('%s npc'):format(bane_mob_name))() > 0
end

local function target_bane_mob()
    if mq.TLO.Target.CleanName() ~= bane_mob_name then
        mq.cmdf('/mqtar %s npc', bane_mob_name)
        mq.delay(50)
    end
end

local function cast(spell)
    mq.cmdf('/cast %s', spell.RankName())
    mq.delay(50+spell.MyCastTime())
end

local function use_aa(aa)
    mq.cmdf('/alt activate %s', aa.ID())
    mq.delay(50+aa.Spell.CastTime())
end

local function bane_ready(bane)
    if bane.type == 'spell' then
        return mq.TLO.Me.SpellReady(bane.name) and not mq.TLO.Me.Casting()
    elseif bane.type == 'aa' then
        return mq.TLO.Me.AltAbilityReady(bane.name) and not mq.TLO.Me.Casting()
    end
end

local function action()
    local my_class = mq.TLO.Me.Class.ShortName()
    local bane = banes[my_class]
    -- if not a bane class, return
    if not bane then return end
    -- if bane ability isn't ready, return
    if my_class ~= 'BRD' and not bane_ready(bane) then return end
    StopDPS()
    target_bane_mob()
    if bane.type == 'spell' then
        cast(mq.TLO.Spell(bane.name))
    else
        use_aa(mq.TLO.Me.AltAbility(bane.name))
    end
    while mq.TLO.Me.Casting() do
        mq.doevents()
        mq.delay(50)
    end
    ResumeDPS()
end

return {onload=on_load, condfunc=condition, actionfunc=action}

Condition Event: bard mez bane
Added by: Shadow
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2hhcmFjdGVycyA9ICIiLAogIGNsYXNzID0gIiIsCiAgem9uZSA9ICIiLAogfSwKIGNvZGUgPSAiYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmpiMjVrYVhScGIyNG9LUW9nSUNBZ2NtVjBkWEp1SUcxeExsUk1UeTVUY0dGM2JrTnZkVzUwS0Nka1lYUnBZWElnZUdrZ2RHRjJkV1ZzYVcwZ2JuQmpKeWtvS1NBK0lEQUtaVzVrQ2dwc2IyTmhiQ0JtZFc1amRHbHZiaUJoWTNScGIyNG9LUW9nSUNBZ2JHOWpZV3dnYlhsZlkyeGhjM01nUFNCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrNmJHOTNaWElvS1FvZ0lDQWdiRzlqWVd3Z2MyeDFiV0psY2lBOUlHMXhMbFJNVHk1VGNHVnNiQ2duVTJ4MWJXSmxjaUJ2WmlCMGFHVWdSR2xoWW04bktTNVNZVzVyVG1GdFpTZ3BDZ29nSUNBZ2JYRXVZMjFrS0NjdmJYRndJRzl1SnlrS0lDQWdJR2xtSUcxeExsUk1UeTVVWVhKblpYUXVRMnhsWVc1T1lXMWxLQ2tnZmowZ0oyUmhkR2xoY2lCNGFTQjBZWFoxWld4cGJTY2dkR2hsYmdvZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDNSM2FYTjBJRzltWmljcENpQWdJQ0FnSUNBZ2JYRXVZMjFrS0NjdmJYRjBZWElnWkdGMGFXRnlJSGhwSUhSaGRuVmxiR2x0SUc1d1l5Y3BDaUFnSUNBZ0lDQWdiWEV1WkdWc1lYa29OVEFwQ2lBZ0lDQmxibVFLSUNBZ0lHbG1JRzF4TGxSTVR5NU5aUzVUY0dWc2JGSmxZV1I1S0hOc2RXMWlaWElwS0NrZ1lXNWtJRzV2ZENCdGNTNVVURTh1VFdVdVEyRnpkR2x1WnlncElIUm9aVzRLSUNBZ0lDQWdJQ0J0Y1M1amJXUm1LQ2N2WTJGemRDQWxjeWNzSUhOc2RXMWlaWElwQ2lBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvTVRBd01DdHRjUzVVVEU4dVUzQmxiR3dvYzJ4MWJXSmxjaWt1VFhsRFlYTjBWR2x0WlNncEtRb2dJQ0FnWlc1a0NpQWdJQ0J0Y1M1amJXUW9KeTl0Y1hBZ2IyWm1KeWtLWlc1a0NncHlaWFIxY200Z2UyTnZibVJtZFc1alBXTnZibVJwZEdsdmJpd2dZV04wYVc5dVpuVnVZejFoWTNScGIyNTkiLAogY2F0ZWdvcnkgPSAiVG9MIiwKIHR5cGUgPSAiY29uZGl0aW9ucyIsCiBuYW1lID0gInNoZWliYXJkIiwKfQ==
Lua:
local mq = require('mq')
local function condition()
    return mq.TLO.SpawnCount('datiar xi tavuelim npc')() > 0
end
local function action()
    local my_class = mq.TLO.Me.Class.ShortName():lower()
    local slumber = mq.TLO.Spell('Slumber of the Diabo').RankName()
    mq.cmd('/mqp on')
    if mq.TLO.Target.CleanName() ~= 'datiar xi tavuelim' then
        mq.cmd('/twist off')
        mq.cmd('/mqtar datiar xi tavuelim npc')
        mq.delay(50)
    end
    if mq.TLO.Me.SpellReady(slumber)() and not mq.TLO.Me.Casting() then
        mq.cmdf('/cast %s', slumber)
        mq.delay(1000+mq.TLO.Spell(slumber).MyCastTime())
    end
    mq.cmd('/mqp off')
end
return {condfunc=condition, actionfunc=action}

Condition Event: enchanter mez bane
Added by: Shadow
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCamIyNWthWFJwYjI0b0tRb2dJQ0FnY21WMGRYSnVJRzF4TGxSTVR5NVRjR0YzYmtOdmRXNTBLQ2RrWVhScFlYSWdlR2tnZEdGMmRXVnNhVzBnYm5Cakp5a29LU0ErSURBS1pXNWtDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmhZM1JwYjI0b0tRb2dJQ0FnYkc5allXd2diWGxmWTJ4aGMzTWdQU0J0Y1M1VVRFOHVUV1V1UTJ4aGMzTXVVMmh2Y25ST1lXMWxLQ2s2Ykc5M1pYSW9LUW9nSUNBZ2JHOWpZV3dnWVdSa2JHVWdQU0J0Y1M1VVRFOHVVM0JsYkd3b0owRmtaR3hsSnlrdVVtRnVhMDVoYldVb0tRb0tJQ0FnSUcxeExtTnRaQ2duTDJWdVl5QndZWFZ6WlNCdmJpY3BDaUFnSUNCcFppQnRjUzVVVEU4dVZHRnlaMlYwTGtOc1pXRnVUbUZ0WlNncElINDlJQ2RrWVhScFlYSWdlR2tnZEdGMmRXVnNhVzBuSUhSb1pXNEtJQ0FnSUNBZ0lDQnRjUzVqYldRb0lpOXpkRzl3WTJGemRDSXBDaUFnSUNBZ0lDQWdiWEV1WTIxa0tDY3ZiWEYwWVhJZ1pHRjBhV0Z5SUhocElIUmhkblZsYkdsdElHNXdZeWNwQ2lBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvTlRBcENpQWdJQ0JsYm1RS0lDQWdJR2xtSUcxeExsUk1UeTVOWlM1VGNHVnNiRkpsWVdSNUtHRmtaR3hsS1NncElHRnVaQ0J1YjNRZ2JYRXVWRXhQTGsxbExrTmhjM1JwYm1jb0tTQjBhR1Z1Q2lBZ0lDQWdJQ0FnYlhFdVkyMWtaaWduTDJOaGMzUWdKWE1uTENCaFpHUnNaU2tLSUNBZ0lDQWdJQ0J0Y1M1a1pXeGhlU2d4TURBd0syMXhMbFJNVHk1VGNHVnNiQ2hoWkdSc1pTa3VUWGxEWVhOMFZHbHRaU2dwS1FvZ0lDQWdaVzVrQ2lBZ0lDQnRjUzVqYldRb0p5OWxibU1nY0dGMWMyVWdiMlptSnlrS1pXNWtDZ3B5WlhSMWNtNGdlMk52Ym1SbWRXNWpQV052Ym1ScGRHbHZiaXdnWVdOMGFXOXVablZ1WXoxaFkzUnBiMjU5IiwKIGNhdGVnb3J5ID0gIlRvTCIsCiB0eXBlID0gImNvbmRpdGlvbnMiLAogbmFtZSA9ICJzaGVpZW5jaGFudGVyIiwKfQ==
Lua:
local mq = require('mq')
local function condition()
    return mq.TLO.SpawnCount('datiar xi tavuelim npc')() > 0
end
local function action()
    local my_class = mq.TLO.Me.Class.ShortName():lower()
    local addle = mq.TLO.Spell('Addle').RankName()
    mq.cmd('/enc pause on')
    if mq.TLO.Target.CleanName() ~= 'datiar xi tavuelim' then
        mq.cmd("/stopcast")
        mq.cmd('/mqtar datiar xi tavuelim npc')
        mq.delay(50)
    end
    if mq.TLO.Me.SpellReady(addle)() and not mq.TLO.Me.Casting() then
        mq.cmdf('/cast %s', addle)
        mq.delay(1000+mq.TLO.Spell(addle).MyCastTime())
    end
    mq.cmd('/enc pause off')
end
return {condfunc=condition, actionfunc=action}

Condition Event: shackle root bane
Added by: aquietone
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCamIyNWthWFJwYjI0b0tRb2dJQ0FnY21WMGRYSnVJRzF4TGxSTVR5NVRjR0YzYmtOdmRXNTBLQ2RrWVhScFlYSWdlR2tnZEdGMmRXVnNhVzBnYm5Cakp5a29LU0ErSURBS1pXNWtDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmhZM1JwYjI0b0tRb2dJQ0FnYkc5allXd2diWGxmWTJ4aGMzTWdQU0J0Y1M1VVRFOHVUV1V1UTJ4aGMzTXVVMmh2Y25ST1lXMWxLQ2s2Ykc5M1pYSW9LUW9nSUNBZ2JHOWpZV3dnYzJoaFkydHNaU0E5SUcxeExsUk1UeTVUY0dWc2JDZ25VMmhoWTJ0c1pTY3BMbEpoYm10T1lXMWxLQ2tLQ2lBZ0lDQnRjUzVqYldSbUtDY3ZKWE1nY0dGMWMyVWdiMjRuTENCdGVWOWpiR0Z6Y3lrS0lDQWdJR2xtSUcxeExsUk1UeTVVWVhKblpYUXVRMnhsWVc1T1lXMWxLQ2tnZmowZ0oyUmhkR2xoY2lCNGFTQjBZWFoxWld4cGJTY2dkR2hsYmdvZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDIxeGRHRnlJR1JoZEdsaGNpQjRhU0IwWVhaMVpXeHBiU0J1Y0dNbktRb2dJQ0FnSUNBZ0lHMXhMbVJsYkdGNUtEVXdLUW9nSUNBZ1pXNWtDaUFnSUNCcFppQnRjUzVVVEU4dVRXVXVVM0JsYkd4U1pXRmtlU2h6YUdGamEyeGxLU2dwSUdGdVpDQnViM1FnYlhFdVZFeFBMazFsTGtOaGMzUnBibWNvS1NCMGFHVnVDaUFnSUNBZ0lDQWdiWEV1WTIxa1ppZ25MMk5oYzNRZ0pYTW5MQ0J6YUdGamEyeGxLUW9nSUNBZ0lDQWdJRzF4TG1SbGJHRjVLREV3TURBcmJYRXVWRXhQTGxOd1pXeHNLSE5vWVdOcmJHVXBMazE1UTJGemRGUnBiV1VvS1NrS0lDQWdJR1Z1WkFvZ0lDQWdiWEV1WTIxa1ppZ25MeVZ6SUhCaGRYTmxJRzltWmljc0lHMTVYMk5zWVhOektRcGxibVFLQ25KbGRIVnliaUI3WTI5dVpHWjFibU05WTI5dVpHbDBhVzl1TENCaFkzUnBiMjVtZFc1alBXRmpkR2x2Ym4wPSIsCiBjYXRlZ29yeSA9ICJUb0wiLAogdHlwZSA9ICJjb25kaXRpb25zIiwKIG5hbWUgPSAic2hlaXJvb3QiLAp9
INI:
local mq = require('mq')
local function condition()
    return mq.TLO.SpawnCount('datiar xi tavuelim npc')() > 0
end
local function action()
    local my_class = mq.TLO.Me.Class.ShortName():lower()
    local shackle = mq.TLO.Spell('Shackle').RankName()
    mq.cmdf('/%s pause on', my_class)
    if mq.TLO.Target.CleanName() ~= 'datiar xi tavuelim' then
        mq.cmd('/mqtar datiar xi tavuelim npc')
        mq.delay(50)
    end
    if mq.TLO.Me.SpellReady(shackle)() and not mq.TLO.Me.Casting() then
        mq.cmdf('/cast %s', shackle)
        mq.delay(1000+mq.TLO.Spell(shackle).MyCastTime())
    end
    mq.cmdf('/%s pause off', my_class)
end
return {condfunc=condition, actionfunc=action}

Vex Thal: Aten Ha Ra

Text Event: Run away with silence emote
Added by: aquietone
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCbGRtVnVkRjlvWVc1a2JHVnlLR3hwYm1Vc0lIUmhjbWRsZENrS0lDQWdJR2xtSUc1dmRDQnRjUzVVVEU4dVdtOXVaUzVUYUc5eWRFNWhiV1VvS1NBOVBTQW5kbVY0ZEdoaGJIUjNiMTl0YVhOemFXOXVKeUIwYUdWdUlISmxkSFZ5YmlCbGJtUUtDaUFnSUNCc2IyTmhiQ0J0ZVY5amJHRnpjeUE5SUcxeExsUk1UeTVOWlM1RGJHRnpjeTVUYUc5eWRFNWhiV1VvS1FvZ0lDQWdiRzlqWVd3Z2FWOWhiVjl0WVNBOUlHMXhMbFJNVHk1SGNtOTFjQzVOWlcxaVpYSW9NQ2t1VFdGcGJrRnpjMmx6ZENncENpQWdJQ0JzYjJOaGJDQnRlVjl1WVcxbElEMGdiWEV1VkV4UExrMWxMa05zWldGdVRtRnRaU2dwQ2lBZ0lDQnNiMk5oYkNCdFlWOXVZVzFsSUQwZ2JYRXVWRXhQTGtkeWIzVndMazFoYVc1QmMzTnBjM1F1UTJ4bFlXNU9ZVzFsS0NrS0NpQWdJQ0JwWmlCdWIzUWdhVjloYlY5dFlTQmhibVFnS0hSaGNtZGxkQ0E5UFNCdGVWOXVZVzFsSUc5eUlIUmhjbWRsZENBOVBTQnRZVjl1WVcxbEtTQjBhR1Z1Q2lBZ0lDQWdJQ0FnYVdZZ2JYbGZZMnhoYzNNZ1BUMGdKMEpGVWljZ1lXNWtJRzF4TGxSTVR5NU5aUzVCWTNScGRtVkVhWE5qTGs1aGJXVW9LU0E5UFNCdGNTNVVURTh1VTNCbGJHd29KMFp5Wlc1NmFXVmtJRkpsYzI5c2RtVWdSR2x6WTJsd2JHbHVaU2NwTGxKaGJtdE9ZVzFsS0NrZ2RHaGxiZ29nSUNBZ0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5emRHOXdaR2x6WXljcENpQWdJQ0FnSUNBZ1pXNWtDaUFnSUNBZ0lDQWdiWEV1WTIxa1ppZ25MeVZ6SUcxdlpHVWdNQ2NzSUcxNVgyTnNZWE56S1FvZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDIxeGNDQnZiaWNwQ2lBZ0lDQWdJQ0FnYlhFdVkyMWtLQ2N2ZEhkcGMzUWdiMlptSnlrS0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5MGFXMWxaQ0ExSUM5aFptOXNiRzkzSUc5bVppY3BDaUFnSUNBZ0lDQWdiWEV1WTIxa0tDY3ZibUYySUhOMGIzQW5LUW9nSUNBZ0lDQWdJRzF4TG1OdFpDZ25MM1JoY21kbGRDQmpiR1ZoY2ljcENpQWdJQ0FnSUNBZ2JYRXVaR1ZzWVhrb01UQXdLUW9nSUNBZ0lDQWdJRzF4TG1OdFpDZ25MMjVoZGlCc2IyTjRlWG9nTVRJeU1pNDJOeUF0TkRndU9UY2dNak0yTGpReEp5a0tJQ0FnSUNBZ0lDQnRjUzVrWld4aGVTZ3hOVEF3TUNrS0lDQWdJQ0FnSUNCdGNTNWpiV1JtS0NjdkpYTWdiVzlrWlNBeUp5d2diWGxmWTJ4aGMzTXBDaUFnSUNBZ0lDQWdiWEV1WTIxa0tDY3ZiWEZ3SUc5bVppY3BDaUFnSUNBZ0lDQWdiWEV1WTIxa0tDY3ZkSGRwYzNRZ2IyNG5LUW9nSUNBZ1pXNWtDbVZ1WkFvS2NtVjBkWEp1SUh0bGRtVnVkR1oxYm1NOVpYWmxiblJmYUdGdVpHeGxjbjA9IiwKIGNhdGVnb3J5ID0gIlRvTCIsCiB0eXBlID0gImV2ZW50cyIsCiBuYW1lID0gImF0ZW5zaWxlbmNlIiwKIHBhdHRlcm4gPSAiIyojQXRlbiBIYSBSYSBwb2ludHMgYXQgIzEjIHdpdGggb25lIGFybSMqIyIsCn0=
Code:
#*#Aten Ha Ra points at #1# with one arm#*#
Lua:
local mq = require('mq')
local function event_handler(line, target)
    if not mq.TLO.Zone.ShortName() == 'vexthaltwo_mission' then return end
    local my_class = mq.TLO.Me.Class.ShortName()
    local i_am_ma = mq.TLO.Group.Member(0).MainAssist()
    local my_name = mq.TLO.Me.CleanName()
    local ma_name = mq.TLO.Group.MainAssist.CleanName()
    if not i_am_ma and (target == my_name or target == ma_name) then
        if my_class == 'BER' and mq.TLO.Me.ActiveDisc.Name() == mq.TLO.Spell('Frenzied Resolve Discipline').RankName() then
            mq.cmd('/stopdisc')
        end
        mq.cmdf('/%s mode 0', my_class)
        mq.cmd('/mqp on')
        mq.cmd('/twist off')
        mq.cmd('/timed 5 /afollow off')
        mq.cmd('/nav stop')
        mq.cmd('/target clear')
        mq.delay(100)
        mq.cmd('/nav locxyz 1222.67 -48.97 236.41')
        mq.delay(15000)
        mq.cmdf('/%s mode 2', my_class)
        mq.cmd('/mqp off')
        mq.cmd('/twist on')
    end
end
return {eventfunc=event_handler}

Bloodfalls: Close the Gate

Condition Event: Disable windowed gamma
Added by: Shadow
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCeVpYRjFhWEpsWkY5NmIyNWxJRDBnSjJKc2IyOWtabUZzYkhOZmJXbHpjMmx2YmljS2JHOWpZV3dnZDJsdVpHOTNJRDBnYlhFdVZFeFBMbGRwYm1SdmR5Z25RV1IyWVc1alpXUkVhWE53YkdGNVQzQjBhVzl1YzFkcGJtUnZkeTlCUkU5WFgwVnVZV0pzWlZkcGJtUnZkMlZrUjJGdGJXRkRhR1ZqYTJKdmVDY3BDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQnZibDlzYjJGa0tDa0tJQ0FnSUdsbUlHMXhMbFJNVHk1YWIyNWxMbE5vYjNKMFRtRnRaU2dwSUg0OUlISmxjWFZwY21Wa1gzcHZibVVnZEdobGJpQnlaWFIxY200Z1pXNWtDbVZ1WkFvS0xTMHRRSEpsZEhWeWJpQmliMjlzWldGdUlFQlNaWFIxY201eklIUnlkV1VnYVdZZ2RHaGxJR0ZqZEdsdmJpQnphRzkxYkdRZ1ptbHlaU3dnYjNSb1pYSjNhWE5sSUdaaGJITmxMZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmpiMjVrYVhScGIyNG9LUW9nSUNBZ2NtVjBkWEp1SUcxeExsUk1UeTVhYjI1bExsTm9iM0owVG1GdFpTZ3BJRDA5SUhKbGNYVnBjbVZrWDNwdmJtVUtaVzVrSUNBZ0lDQWdDaUFLQ214dlkyRnNJR1oxYm1OMGFXOXVJR0ZqZEdsdmJpZ3BDaUFnSUNCcFppQjNhVzVrYjNjdVEyaGxZMnRsWkNncElIUm9aVzRLSUNBZ0lDQWdJQ0IzYVc1a2IzY3VUR1ZtZEUxdmRYTmxWWEFvS1FvZ0lDQWdaVzVrQ21WdVpBb0tjbVYwZFhKdUlIdHZibXh2WVdROWIyNWZiRzloWkN3Z1kyOXVaR1oxYm1NOVkyOXVaR2wwYVc5dUxDQmhZM1JwYjI1bWRXNWpQV0ZqZEdsdmJuMD0iLAogY2F0ZWdvcnkgPSAiVG9MIiwKIHR5cGUgPSAiY29uZGl0aW9ucyIsCiBuYW1lID0gIkJsb29kZmFsbHMiLAp9
Lua:
local mq = require('mq')
local required_zone = 'bloodfalls_mission'
local window = mq.TLO.Window('AdvancedDisplayOptionsWindow/ADOW_EnableWindowedGammaCheckbox')
local function on_load()
    if mq.TLO.Zone.ShortName() ~= required_zone then return end
end
---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
    return mq.TLO.Zone.ShortName() == required_zone
end
 
local function action()
    if window.Checked() then
        window.LeftMouseUp()
    end
end
return {onload=on_load, condfunc=condition, actionfunc=action}

CoV mission events

ToV mission events


Icebound Avatar of War

Text Event: Avatar of War duck emote
Added by: aquietone
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCbGRtVnVkRjlvWVc1a2JHVnlLR3hwYm1Vc0lHNWhiV1VwQ2lBZ0lDQnBaaUJ1WVcxbElEMDlJRzF4TGxSTVR5NU5aUzVEYkdWaGJrNWhiV1VvS1NCaGJtUWdibTkwSUcxeExsUk1UeTVOWlM1RWRXTnJhVzVuS0NrZ2RHaGxiZ29nSUNBZ0lDQWdJQzB0SUhCaGRYTmxJR0YxZEc5dFlYUnBiMjRzSUdGc2RHVnlibUYwYVhabGJIa2dhR0YyWlNCaGRYUnZjM1JoYm1RZ2IyWm1DaUFnSUNBZ0lDQWdiWEV1WTIxa1ppZ25MeVZ6SUhCaGRYTmxJRzl1Snl3Z2JYRXVWRXhQTGsxbExrTnNZWE56TGxOb2IzSjBUbUZ0WlNncEtRb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwyMXhjQ0J2YmljcENpQWdJQ0FnSUNBZ2JYRXVZMjFrS0NjdmRIZHBjM1FnYjJabUp5a0tJQ0FnSUNBZ0lDQnRjUzVqYldRb0p5OXJaWGx3Y21WemN5QkVWVU5MSnlrS0lDQWdJR1Z1WkFwbGJtUUtDbkpsZEhWeWJpQjdaWFpsYm5SbWRXNWpQV1YyWlc1MFgyaGhibVJzWlhKOSIsCiBjYXRlZ29yeSA9ICJUb1YiLAogdHlwZSA9ICJldmVudHMiLAogbmFtZSA9ICJhb3dkdWNrIiwKIHBhdHRlcm4gPSAiIyojVGhlIGljZSBlbmNydXN0ZWQgQXZhdGFyIG9mIFdhciBzaG91dHMgdGhhdCAjMSMgbXVzdCBiZW5kIHRoZSBrbmVlISMqIyIsCn0=
Code:
#*#The ice encrusted Avatar of War shouts that #1# must bend the knee!#*#
Lua:
local mq = require('mq')

local function event_handler(line, name)
    if name == mq.TLO.Me.CleanName() and not mq.TLO.Me.Ducking() then
        -- pause automation, alternatively have autostand off
        mq.cmdf('/%s pause on', mq.TLO.Me.Class.ShortName())
        mq.cmd('/mqp on')
        mq.cmd('/twist off')
        mq.cmd('/keypress DUCK')
    end
end

return {eventfunc=event_handler}

Text Event: Avatar of War stand emote
Added by: aquietone
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCbGRtVnVkRjlvWVc1a2JHVnlLQ2tLSUNBZ0lHbG1JRzF4TGxSTVR5NU5aUzVFZFdOcmFXNW5LQ2tnZEdobGJnb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwzTjBZVzVrSnlrS0lDQWdJQ0FnSUNCdGNTNWpiV1JtS0NjdkpYTWdjR0YxYzJVZ2IyWm1KeXdnYlhFdVZFeFBMazFsTGtOc1lYTnpMbE5vYjNKMFRtRnRaU2dwS1FvZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDIxeGNDQnZabVluS1FvZ0lDQWdaVzVrQ21WdVpBb0tjbVYwZFhKdUlIdGxkbVZ1ZEdaMWJtTTlaWFpsYm5SZmFHRnVaR3hsY24wPSIsCiBjYXRlZ29yeSA9ICJUb1YiLAogdHlwZSA9ICJldmVudHMiLAogbmFtZSA9ICJhb3dzdGFuZCIsCiBwYXR0ZXJuID0gIiMqI1RoZSBBdmF0YXIgb2YgV2FyIG5vZHMsIGFjY2VwdGluZyB0aGUgc3Vic2VydmllbmNlIG9mIHRob3NlIHRoYXQgZ2F2ZSBpdCMqIyIsCn0=
Code:
#*#The Avatar of War nods, accepting the subservience of those that gave it#*#
Lua:
local mq = require('mq')

local function event_handler()
    if mq.TLO.Me.Ducking() then
        mq.cmd('/stand')
        mq.cmdf('/%s pause off', mq.TLO.Me.Class.ShortName())
        mq.cmd('/mqp off')
    end
end

return {eventfunc=event_handler}

Text Event: Avatar of War move emote
Added by: aquietone
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCbGRtVnVkRjlvWVc1a2JHVnlLQ2tLSUNBZ0lDMHRJRWx0Y0d4bGJXVnVkQ0IwYUdVZ2FHRnVaR3hwYm1jZ1ptOXlJSFJvWlNCbGRtVnVkQ0JvWlhKbExnb2dJQ0FnYlhFdVkyMWtLQ2N2ZEdGeUlHNXdZeUJKWTJWaWIzVnVaQ0JCZG1GMFlYSWdiMllnVjJGeUp5a0tJQ0FnSUcxeExtTnRaQ2duTDJGMGRHRmpheUJ2YmljcENpQWdJQ0J0Y1M1amJXUW9KeTl1WVhZZ2MzQmhkMjRnU1dObFltOTFibVFnUVhaaGRHRnlJRzltSUZkaGNpY3BDbVZ1WkFvS2NtVjBkWEp1SUh0bGRtVnVkR1oxYm1NOVpYWmxiblJmYUdGdVpHeGxjbjA9IiwKIGNhdGVnb3J5ID0gIlRvViIsCiB0eXBlID0gImV2ZW50cyIsCiBuYW1lID0gImFvd21vdmUiLAogcGF0dGVybiA9ICIjKiNUaGUgQXZhdGFyIG9mIFdhciBjaGFuZ2VzIHRoZSBydWxlcyBhbmQgY2hvb3NlcyBhIG5ldyBmaWVsZCBvZiBiYXR0bGUhIyojIiwKfQ==
Code:
#*#The Avatar of War changes the rules and chooses a new field of battle!#*#
Lua:
local mq = require('mq')

local function event_handler()
    -- Implement the handling for the event here.
    mq.cmd('/tar npc Icebound Avatar of War')
    mq.cmd('/attack on')
    mq.cmd('/nav spawn Icebound Avatar of War')
end

return {eventfunc=event_handler}

Class based events

Clicky related events


Condition Event: Remove common clicky extra buffs
Added by: Shadow
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENteHZZMkZzSUd4cFluSmhjbmtnUFNCeVpYRjFhWEpsS0Nkc1pXMHViR2xpY21GeWVTY3BDbXh2WTJGc0lHSjFabVpNYVhOMElEMGdld29nSUNBblUzVnRiVzl1SUVaaGJXbHNhV0Z5T2lCUVpYSnpiMjVoYkNCSVpXMXBZeUJUYjNWeVkyVW5MQW9nSUNBblUzVnRiVzl1SUVaaGJXbHNhV0Z5T2lCSlkyVWdRbTkxYm1RZ1ZXeDBhRzl5YXljc0NpQWdJQ2RKYkd4MWMybHZiam9nUkdwcGJtNGdVMjlzWkdsbGNpY3NDaUFnSUNkSmJHeDFjMmx2YmpvZ1QyNWthVzVsSUZkaGRtVm1jbTl1ZENjc0NpQWdJQ2RKYkd4MWMybHZiam9nUldaeVpXVjBhU0JFYVhacGJtVnlKeXdLSUNBZ0owbHNiSFZ6YVc5dU9pQkZabkpsWlhScElFRnRhWEluTEFvZ0lDQW5TV3hzZFhOcGIyNDZJRVJxYVc1dUlFVnRhWE56WVhKNUp5d0tJQ0FnSjBsc2JIVnphVzl1T2lCRWRXVnVaR1VnVTJOb2IyeGhjaWNzQ24wS2JHOWpZV3dnWW5WbVprNWhiV1VnUFNCdWFXd0tMUzB0UUhKbGRIVnliaUJpYjI5c1pXRnVJRUJTWlhSMWNtNXpJSFJ5ZFdVZ2FXWWdkR2hsSUdGamRHbHZiaUJ6YUc5MWJHUWdabWx5WlN3Z2IzUm9aWEozYVhObElHWmhiSE5sTGdwc2IyTmhiQ0JtZFc1amRHbHZiaUJqYjI1a2FYUnBiMjRvS1FvZ0lDQWdabTl5SUY4c0lIUm9aVUoxWm1ZZ2FXNGdhWEJoYVhKektHSjFabVpNYVhOMEtTQmtid29nSUNBZ0lDQWdJR2xtSUcxeExsUk1UeTVOWlM1Q2RXWm1LSFJvWlVKMVptWXBLQ2tnZEdobGJnb2dJQ0FnSUNBZ0lDQWdJQ0JpZFdabVRtRnRaU0E5SUhSb1pVSjFabVlLSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVUtJQ0FnSUNBZ0lDQmxibVFLSUNBZ0lHVnVaQW9nSUNBZ2NtVjBkWEp1SUdaaGJITmxDbVZ1WkFwc2IyTmhiQ0JtZFc1amRHbHZiaUJoWTNScGIyNG9LUW9nSUNBZ2FXWWdZblZtWms1aGJXVWdkR2hsYmdvZ0lDQWdJQ0FnSUcxeExtTnRaR1lvSnk5eVpXMXZkbVZpZFdabUlDSWxjeUluTENCaWRXWm1UbUZ0WlNrS0lDQWdJR1Z1WkFwbGJtUUtjbVYwZFhKdUlIdGpiMjVrWm5WdVl6MWpiMjVrYVhScGIyNHNJR0ZqZEdsdmJtWjFibU05WVdOMGFXOXVmUT09IiwKIGNhdGVnb3J5ID0gIiIsCiB0eXBlID0gImNvbmRpdGlvbnMiLAogbmFtZSA9ICJyZW1vdmVidWZmcyIsCn0=
Lua:
local mq = require('mq')
local library = require('lem.library')
local buffList = {
   'Summon Familiar: Personal Hemic Source',
   'Summon Familiar: Ice Bound Ulthork',
   'Illusion: Djinn Soldier',
   'Illusion: Ondine Wavefront',
   'Illusion: Efreeti Diviner',
   'Illusion: Efreeti Amir',
   'Illusion: Djinn Emissary',
   'Illusion: Duende Scholar',
}
local buffName = nil
---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
    for _, theBuff in ipairs(buffList) do
        if mq.TLO.Me.Buff(theBuff)() then
            buffName = theBuff
            return true
        end
    end
    return false
end
local function action()
    if buffName then
        mq.cmdf('/removebuff "%s"', buffName)
    end
end
return {condfunc=condition, actionfunc=action}

Misc events

Condition Event: Use DPS glyph
Added by: Shadow
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCamIyNWthWFJwYjI0b0tRb2dJQ0FnY21WMGRYSnVJRzF4TGxSTVR5NUJiSFJCWW1sc2FYUjVLQ0kxTXpBMElpa3VRMkZ1VkhKaGFXNG9LUXBsYm1RS0NteHZZMkZzSUdaMWJtTjBhVzl1SUdGamRHbHZiaWdwQ2lBZ0lDQnRjUzVqYldRb0p5OWhiSFFnWW5WNUlEVXpNRFFuS1FwbGJtUUtDbkpsZEhWeWJpQjdZMjl1WkdaMWJtTTlZMjl1WkdsMGFXOXVMQ0JoWTNScGIyNW1kVzVqUFdGamRHbHZibjA9IiwKIGNhdGVnb3J5ID0gIkNoYXJhY3RlciIsCiB0eXBlID0gImNvbmRpdGlvbnMiLAogbmFtZSA9ICJHbHlwaG9mVWx0aW1hdGVQb3dlciIsCn0=
Lua:
local mq = require('mq')
local function condition()
    return mq.TLO.AltAbility("5304").CanTrain()
end
local function action()
    mq.cmd('/alt buy 5304')
end
return {condfunc=condition, actionfunc=action}

Condition Event: Use dragon scales glyph
Added by: Shadow
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgY2xhc3MgPSAiIiwKICBhbHdheXMgPSBmYWxzZSwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCamIyNWthWFJwYjI0b0tRb2dJQ0FnY21WMGRYSnVJRzF4TGxSTVR5NUJiSFJCWW1sc2FYUjVLQ0kxTVRBMElpa3VRMkZ1VkhKaGFXNG9LUXBsYm1RS0NteHZZMkZzSUdaMWJtTjBhVzl1SUdGamRHbHZiaWdwQ2lBZ0lDQnRjUzVqYldRb0p5OWhiSFFnWW5WNUlEVXhNRFFuS1FwbGJtUUtDbkpsZEhWeWJpQjdZMjl1WkdaMWJtTTlZMjl1WkdsMGFXOXVMQ0JoWTNScGIyNW1kVzVqUFdGamRHbHZibjA9IiwKIGNhdGVnb3J5ID0gIkNoYXJhY3RlciIsCiB0eXBlID0gImNvbmRpdGlvbnMiLAogbmFtZSA9ICJHbHlwaG9mRHJhZ29uU2NhbGVzIiwKfQ==
Lua:
local mq = require('mq')
local function condition()
    return mq.TLO.AltAbility("5104").CanTrain()
end
local function action()
    mq.cmd('/alt buy 5104')
end
return {condfunc=condition, actionfunc=action}

Condition Event: adjust aa pct xp
Added by: Shadow
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCelpYUmhZWEJqZENBOUlEQUtDbXh2WTJGc0lHWjFibU4wYVc5dUlHTnZibVJwZEdsdmJpZ3BDaUFnSUNCc2IyTmhiQ0JzWlhabGJDQTlJRzF4TGxSTVR5NU5aUzVNWlhabGJDZ3BDaUFnSUNCc2IyTmhiQ0J0WVhoc1pYWmxiQ0E5SUcxeExsUk1UeTVOWlM1TllYaE1aWFpsYkNncENpQWdJQ0JzYjJOaGJDQmxlSEJ3WTNRZ1BTQnRjUzVVVEU4dVRXVXVVR04wUlhod0tDa0tJQ0FnSUd4dlkyRnNJR1Y0Y0hCamRHbHVkQ0E5SUcxeExsUk1UeTVOWlM1UVkzUkZlSEF1U1c1MEtDa0tJQ0FnSUd4dlkyRnNJR1Y0Y0hCamRHbHVkREVnUFNCdGNTNVVURTh1VFdVdVVHTjBSWGh3TGtsdWRDZ3BJQ3NnTVFvZ0lDQWdiRzlqWVd3Z1lXRndZM1FnUFNCdGNTNVVURTh1VFdVdVVHTjBSWGh3Vkc5QlFTZ3BDaUFnSUNBS0lDQWdJR2xtSUd4bGRtVnNJSDQ5SUcxaGVHeGxkbVZzSUdGdVpDQmhZWEJqZENBK0lEQWdkR2hsYmdvZ0lDQWdJQ0FnSUhObGRHRmhjR04wSUQwZ01Bb2dJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxDaUFnSUNCbGJtUUtJQ0FnSUdsbUlHeGxkbVZzSUQwOUlHMWhlR3hsZG1Wc0lHRnVaQW9nSUNBZ0lDQWdJR1Y0Y0hCamRDQStJREV3SUdGdVpBb2dJQ0FnSUNBZ0lHVjRjSEJqZENBOFBTQTVPUzQ1T0NCaGJtUUtJQ0FnSUNBZ0lDQmxlSEJ3WTNScGJuUWdmajBnWVdGd1kzUWdkR2hsYmdvZ0lDQWdJQ0FnSUNBZ0lDQnpaWFJoWVhCamRDQTlJR1Y0Y0hCamRHbHVkQW9nSUNBZ0lDQWdJSEpsZEhWeWJpQjBjblZsQ2lBZ0lDQmxibVFLSUNBZ0lHbG1JR3hsZG1Wc0lEMDlJRzFoZUd4bGRtVnNJR0Z1WkFvZ0lDQWdJQ0FnSUdWNGNIQmpkQ0ErSURrNUxqazRJR0Z1WkNBS0lDQWdJQ0FnSUNCbGVIQndZM1JwYm5ReElINDlJR0ZoY0dOMElIUm9aVzRLSUNBZ0lDQWdJQ0FnSUNBZ2MyVjBZV0Z3WTNRZ1BTQmxlSEJ3WTNScGJuUXhDaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1VLSUNBZ0lHVnVaQW9LSUNBZ0lISmxkSFZ5YmlCbVlXeHpaUXBsYm1RS0NteHZZMkZzSUdaMWJtTjBhVzl1SUdGamRHbHZiaWdwQ2lBZ0lDQnBaaUJ6WlhSaFlYQmpkQ0E5UFNBd0lIUm9aVzRLSUNBZ0lDQWdJQ0J0Y1M1amJXUW9KeTloYkhRZ2IyWm1KeWtLSUNBZ0lHVnNjMlVLSUNBZ0lDQWdJQ0J0Y1M1amJXUm1LQ2N2WVd4MElHOXVJQ1Z6Snl3Z2MyVjBZV0Z3WTNRcENpQWdJQ0JsYm1RS1pXNWtDZ3B5WlhSMWNtNGdlMk52Ym1SbWRXNWpQV052Ym1ScGRHbHZiaXdnWVdOMGFXOXVablZ1WXoxaFkzUnBiMjU5IiwKIGNhdGVnb3J5ID0gIkNoYXJhY3RlciIsCiB0eXBlID0gImNvbmRpdGlvbnMiLAogbmFtZSA9ICJBQVBDVCIsCn0=
Lua:
local mq = require('mq')
local setaapct = 0
local function condition()
    local level = mq.TLO.Me.Level()
    local maxlevel = mq.TLO.Me.MaxLevel()
    local exppct = mq.TLO.Me.PctExp()
    local exppctint = mq.TLO.Me.PctExp.Int()
    local exppctint1 = mq.TLO.Me.PctExp.Int() + 1
    local aapct = mq.TLO.Me.PctExpToAA()
 
    if level ~= maxlevel and aapct > 0 then
        setaapct = 0
        return true
    end
    if level == maxlevel and
        exppct > 10 and
        exppct <= 99.98 and
        exppctint ~= aapct then
            setaapct = exppctint
        return true
    end
    if level == maxlevel and
        exppct > 99.98 and
        exppctint1 ~= aapct then
            setaapct = exppctint1
        return true
    end
    return false
end
local function action()
    if setaapct == 0 then
        mq.cmd('/alt off')
    else
        mq.cmdf('/alt on %s', setaapct)
    end
end
return {condfunc=condition, actionfunc=action}

Text Event: POP flagging broadcast
Added by: Shadow
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCbGRtVnVkRjlvWVc1a2JHVnlLQ2tLSUNBZ2JYRXVZMjFrS0NjdlpHZDBaV3hzSUdGc2JDQkdiR0ZuSUhWd1pHRjBaV1FuS1FwbGJtUUtDbkpsZEhWeWJpQjdaWFpsYm5SbWRXNWpQV1YyWlc1MFgyaGhibVJzWlhKOSIsCiBjYXRlZ29yeSA9ICJQb1AiLAogdHlwZSA9ICJldmVudHMiLAogbmFtZSA9ICJGbGFnIiwKIHBhdHRlcm4gPSAiIyojWW91J3ZlIHJlY2VpdmVkIGEgY2hhcmFjdGVyIGZsYWchIyojIiwKfQ==
Code:
#*#You've received a character flag!#*#
Lua:
local mq = require('mq')
local function event_handler()
   mq.cmd('/dgtell all Flag updated')
end
return {eventfunc=event_handler}

Condition Event: Turn off tribute
Added by: FriedFryz
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENteHZZMkZzSUdaMWJtTjBhVzl1SUdOdmJtUnBkR2x2YmlncENpQWdJQ0J5WlhSMWNtNGdiWEV1VkV4UExsSmhhV1F1VFdWdFltVnljeWdwSUQwOUlEQWdZVzVrSUcxeExsUk1UeTVOWlM1VWNtbGlkWFJsUVdOMGFYWmxLQ2tnUFQwZ2RISjFaUXBsYm1RS2JHOWpZV3dnWm5WdVkzUnBiMjRnWVdOMGFXOXVLQ2tLSUNBZ0lHMXhMbU50WkNnbkwzUnlhV0oxZEdVZ2NHVnljMjl1WVd3Z2IyWm1KeWtLSUNBZ0lHMXhMbU50WkNnbkwzUnliM0JvZVNCd1pYSnpiMjVoYkNCdlptWW5LUXBsYm1RS2NtVjBkWEp1SUh0amIyNWtablZ1WXoxamIyNWthWFJwYjI0c0lHRmpkR2x2Ym1aMWJtTTlZV04wYVc5dWZRPT0iLAogY2F0ZWdvcnkgPSAiUW9MIiwKIHR5cGUgPSAiY29uZGl0aW9ucyIsCiBuYW1lID0gIlRyaWJ1dGVfT2ZmIiwKfQ==
Lua:
local mq = require('mq')
local function condition()
    return mq.TLO.Raid.Members() == 0 and mq.TLO.Me.TributeActive() == true
end
local function action()
    mq.cmd('/tribute personal off')
    mq.cmd('/trophy personal off')
end
return {condfunc=condition, actionfunc=action}

Text Event: Relay tells
Added by: aquietone
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCbGRtVnVkRjlvWVc1a2JHVnlLR3hwYm1Vc0lHNWhiV1VzSUcxbGMzTmhaMlVwQ2lBZ0lDQXRMU0JKYlhCc1pXMWxiblFnZEdobElHaGhibVJzYVc1bklHWnZjaUIwYUdVZ1pYWmxiblFnYUdWeVpTNEtJQ0FnSUcxeExtTnRaR1lvSnk5a1ozUWdZV3hzSUZSbGJHd2dabkp2YlNBbGN6b2dKWE1uTENCdVlXMWxMQ0J0WlhOellXZGxLUXBsYm1RS0NuSmxkSFZ5YmlCN1pYWmxiblJtZFc1alBXVjJaVzUwWDJoaGJtUnNaWEo5IiwKIGNhdGVnb3J5ID0gIiIsCiB0eXBlID0gImV2ZW50cyIsCiBuYW1lID0gInJlbGF5dGVsbHMiLAogcGF0dGVybiA9ICIjMSMgdGVsbHMgeW91LCAnIzIjJyIsCn0=
Code:
#1# tells you, '#2#'
Lua:
local mq = require('mq')

local function event_handler(line, name, message)
    -- Implement the handling for the event here.
    mq.cmdf('/dgt all Tell from %s: %s', name, message)
end

return {eventfunc=event_handler}
Author
aquietone
First release
Last update
Rating
5.00 star(s) 4 ratings

More resources from aquietone

Share this resource

Latest reviews

I could not for my life ever get mq2events to work correctly, copy and pasted and it was like random if it worked or not, or would work on one character but not the other. I'm sure a lot of it is user error because I am not familiar enough with it but this worked perfectly first try. Will be using this for all events that I can going forward.
This obsoletely Amazing.
great work
Amazing and so much better than reacts and events.
Back
Top