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
Adding an Event
If you have an event you've written which you would like to contribute here, provide the following:
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/)
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)
NoS Mission Events
Under Siege
Text Event: Dimming Cure
Added by: Someone in the mission thread
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
ToL mission events
Ka Vethan: Shei Vinitras
Condition Event: self-cure clicky
Added by: Shadow
A bunch of different options for shei bane events. Some may work better than others.
Condition Event: shei bane
Added by: Dragonslayer
Condition Event: bard mez bane
Added by: Shadow
Condition Event: enchanter mez bane
Added by: Shadow
Condition Event: shackle root bane
Added by: aquietone
Vex Thal: Aten Ha Ra
Text Event: Run away with silence emote
Added by: aquietone
Bloodfalls: Close the Gate
Condition Event: Disable windowed gamma
Added by: Shadow
CoV mission events
ToV mission events
Icebound Avatar of War
Text Event: Avatar of War duck emote
Added by: aquietone
Text Event: Avatar of War stand emote
Added by: aquietone
Text Event: Avatar of War move emote
Added by: aquietone
Class based events
Clicky related events
Condition Event: Remove common clicky extra buffs
Added by: Shadow
Misc events
Condition Event: Use DPS glyph
Added by: Shadow
Condition Event: Use dragon scales glyph
Added by: Shadow
Condition Event: adjust aa pct xp
Added by: Shadow
Text Event: POP flagging broadcast
Added by: Shadow
Condition Event: Turn off tribute
Added by: FriedFryz
Text Event: Relay tells
Added by: aquietone
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
- Select "Import" from the left menu.
- Copy the import string from one of the events on this page and paste it into the text field
You can paste with your normal keyboard shortcut like ctrl-v, or by clicking the paste button. - Click "Import Event"
- 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
- 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.
- 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.
- 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.
- Give the event a name, and paste in the event pattern if it is a text event.
- Save the event.
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}