• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver
Resource icon

Release Lua Event Manager (LEM) Event Library

RoguePoison conversion:

Export:
[CODE title="string export"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENnb3RMUzFBY21WMGRYSnVJR0p2YjJ4bFlXNGdRRkpsZEhWeWJuTWdkSEoxWlNCcFppQjBhR1VnWVdOMGFXOXVJSE5vYjNWc1pDQm1hWEpsTENCdmRHaGxjbmRwYzJVZ1ptRnNjMlV1Q214dlkyRnNJR1oxYm1OMGFXOXVJRzl1WDJ4dllXUW9LUW9nSUNBZ0xTMGdVR1Z5Wm05eWJTQmhibmtnYVc1cGRHbGhiQ0J6WlhSMWNDQm9aWEpsSUhkb1pXNGdkR2hsSUdWMlpXNTBJR2x6SUd4dllXUmxaQzRLWlc1a0NncHNiMk5oYkNCbWRXNWpkR2x2YmlCamIyNWthWFJwYjI0b0tRb2dJQ0FnTFMwZ1NXMXdiR1Z0Wlc1MElIUm9aU0JqYjI1a2FYUnBiMjRnZEc4Z1pYWmhiSFZoZEdVZ2FHVnlaUzRLSUNBZ0lBb2dJQ0FnYkc5allXd2djMkZtWlZSdlEyRnpkQ0E5SUhSeWRXVUtJQ0FnSUFvZ0lDQWdMUzBnU1NCaGJTQnViM1FnZEhKNWFXNW5JSFJ2SUdocFpHVUtJQ0FnSUhOaFptVlViME5oYzNRZ1BTQnpZV1psVkc5RFlYTjBJR0Z1WkNCdWIzUWdiWEV1VkV4UExrMWxMbE52Ym1jb0owVjJZV1JsY2x3bmN5QlRhSEp2ZFdRZ2IyWWdVM1JsWVd4MGFDY3BMa2xFS0NrZ1lXNWtJRzV2ZENCdGNTNVVURTh1VFdVdVUyOXVaeWduUlhaaFpHVnlYQ2R6SUVsdWRtbHphV0pwYkdsMGVTY3BMa2xFS0NrZ0NpQWdJQ0FLSUNBZ0lDMHRJRWtnWVcwZ2JtOTBJR0ZzYlc5emRDQmtaV0ZrQ2lBZ0lDQnpZV1psVkc5RFlYTjBJRDBnYzJGbVpWUnZRMkZ6ZENCaGJtUWdibTkwSUNodGNTNVVURTh1VFdVdVVHTjBTRkJ6S0NrZ1BDQXlOaWtLSUNBZ0lBb2dJQ0FnTFMwZ1NTQmhiU0J1YjNRZ2JXOTJhVzVuSUc5eUlHTmhjM1JwYm1jZ2MyOXRaWFJvYVc1bkNpQWdJQ0J6WVdabFZHOURZWE4wSUQwZ2MyRm1aVlJ2UTJGemRDQmhibVFnYm05MElHMXhMbFJNVHk1TlpTNU5iM1pwYm1jb0tTQmhibVFnYm05MElHMXhMbFJNVHk1TlpTNURZWE4wYVc1bkxrbEVLQ2tnQ2lBZ0lDQUtJQ0FnSUMwdElFa2dZVzBnYm05MElHcDFjM1FnY21WamIzWmxjbVZrSUdaeWIyMGdjMnhwWjJoMElHTmhjMlVnYjJZZ1pHVmhkR2dzSUdSbFlXUXNJRzl5SUhCc1lYbHBibWNnWkdWaFpBb2dJQ0FnYzJGbVpWUnZRMkZ6ZENBOUlITmhabVZVYjBOaGMzUWdZVzVrSUc1dmRDQnRjUzVVVEU4dVRXVXVRblZtWmxzblVtVjJhWFpoYkNCVGFXTnJibVZ6Y3lkZExrbEVLQ2tnWVc1a0lHNXZkQ0J0Y1M1VVRFOHVUV1V1UkdWaFpDZ3BJR0Z1WkNCdGNTNVVURTh1VFdVdVUzUmhkR1VvS1NCK1BTQW5Sa1ZKUjA0bkNpQWdJQ0FLSUNBZ0lDMHRJRWwwSUdseklHRnpZV1psSUdGeWIzVnVaQ0J0WlM0S0lDQWdJSE5oWm1WVWIwTmhjM1FnUFNCellXWmxWRzlEWVhOMElHRnVaQ0J0Y1M1VVRFOHVVM0JoZDI1RGIzVnVkQ2duYm5CaklISmhaR2wxY3lBMk1DY3BLQ2tnUENBeElHRnVaQ0J0Y1M1VVRFOHVUV1V1V0ZSaGNtZGxkQ2dwSUR3Z01Rb2dJQ0FnQ2lBZ0lDQXRMU0JVY25WbElHTm9aV05yTENCa2J5QkpJRzVsWldRZ2RHaGxJSEJ2YVhOdmJpQmlkV1ptSUdGdVpDQmtieUJKSUdoaGRtVWdjRzlwYzI5dUlHOXVJRzFsTGdvZ0lDQWdjbVYwZFhKdUlITmhabVZVYjBOaGMzUWdZVzVrSUc1dmRDQnRjUzVVVEU4dVRXVXVRblZtWmlnblFtbDBaU0J2WmlCMGFHVWdVMmhwYzNOaGNpQlFiMmx6YjI0Z1dFbEpKeWt1U1VRb0tTQmhibVFnYlhFdVZFeFBMa1pwYm1SSmRHVnRRMjkxYm5Rb0p6MURiMjV6YVdkdVpXUWdRbWwwWlNCdlppQjBhR1VnVTJocGMzTmhjaUJZV0VrbktTZ3BJRDRnTUFvS0NtVnVaQW9LYkc5allXd2dablZ1WTNScGIyNGdZV04wYVc5dUtDa0tJQ0FnSUMwdElFbHRjR3hsYldWdWRDQjBhR1VnWVdOMGFXOXVJSFJ2SUhCbGNtWnZjbTBnYUdWeVpTNEtJQ0FnSUMwdElDOXRkV3gwYVd4cGJtVWdPeUF2Y21WaFkzUWdaR2x6WVdKc1pTQlNiMmRRYjJsemIyNUJjSEJzZVRzZ0wzUnBiV1ZrSURJMUlDOXlaV0ZqZENCbGJtRmliR1VnVW05blVHOXBjMjl1UVhCd2JIazdJQzkxYzJWcGRHVnRJRU52Ym5OcFoyNWxaQ0JDYVhSbElHOW1JSFJvWlNCVGFHbHpjMkZ5SUZoWVNUc0tJQ0FnSUMwdElFa25iU0J1YjNRZ2MzVnlaU0JwWmlCMGFHVWdaR2x6WVdKc1pTQmhibVFnY21WdVlXSnNaU0JwY3lCdVpXVmtaV1FzSUdKMWRDQnBibU5zZFdScGJtY3VDaUFnSUNCdGNTNWpiV1FvSnk5c1pXMGdZMjl1WkNCU2IyZDFaVkJ2YVhOdmJpQXdKeWtLSUNBZ0lHMXhMbU50WkNnbkwyY2dSbWx5YVc1bklHVjJaVzUwSVNjcENpQWdJQ0J0Y1M1amJXUW9KeTkxYzJWcGRHVnRJRU52Ym5OcFoyNWxaQ0JDYVhSbElHOW1JSFJvWlNCVGFHbHpjMkZ5SUZoWVNTY3BDaUFnSUNBS0lDQWdJRzF4TG1SbGJHRjVLREkxS1FvZ0lDQWdiWEV1WTIxa0tDY3ZaeUJHYVhKbFpDQmxkbVZ1ZENFbktRb2dJQ0FnYlhFdVkyMWtLQ2N2YkdWdElHTnZibVFnVW05bmRXVlFiMmx6YjI0Z01TY3BDbVZ1WkFvS2NtVjBkWEp1SUh0dmJteHZZV1E5YjI1ZmJHOWhaQ3dnWTI5dVpHWjFibU05WTI5dVpHbDBhVzl1TENCaFkzUnBiMjVtZFc1alBXRmpkR2x2Ym4wPSIsCiBjYXRlZ29yeSA9ICJHZW5lcmFsIiwKIHR5cGUgPSAiY29uZGl0aW9ucyIsCiBuYW1lID0gIlJvZ3VlUG9pc29uIiwKfQ==[/CODE]

[CODE lang="Lua" title="RoguePoison"]local mq = require('mq')

---@return boolean @Returns true if the action should fire, otherwise false.
local function on_load()
-- Perform any initial setup here when the event is loaded.
end

local function condition()
-- Implement the condition to evaluate here.

local safeToCast = true

-- I am not trying to hide
safeToCast = safeToCast and not mq.TLO.Me.Song('Evader\'s Shroud of Stealth').ID() and not mq.TLO.Me.Song('Evader\'s Invisibility').ID()

-- I am not almost dead
safeToCast = safeToCast and not (mq.TLO.Me.PctHPs() < 26)

-- I am not moving or casting something
safeToCast = safeToCast and not mq.TLO.Me.Moving() and not mq.TLO.Me.Casting.ID()

-- I am not just recovered from slight case of death, dead, or playing dead
safeToCast = safeToCast and not mq.TLO.Me.Buff['Revival Sickness'].ID() and not mq.TLO.Me.Dead() and mq.TLO.Me.State() ~= 'FEIGN'

-- It is asafe around me.
safeToCast = safeToCast and mq.TLO.SpawnCount('npc radius 60')() < 1 and mq.TLO.Me.XTarget() < 1

-- True check, do I need the poison buff and do I have poison on me.
return safeToCast and not mq.TLO.Me.Buff('Bite of the Shissar Poison XII').ID() and mq.TLO.FindItemCount('=Consigned Bite of the Shissar XXI')() > 0


end

local function action()
-- Implement the action to perform here.
-- /multiline ; /react disable RogPoisonApply; /timed 25 /react enable RogPoisonApply; /useitem Consigned Bite of the Shissar XXI;
-- I'm not sure if the disable and renable is needed, but including.
mq.cmd('/lem cond RoguePoison 0')
mq.cmd('/g Firing event!')
mq.cmd('/useitem Consigned Bite of the Shissar XXI')

mq.delay(25)
mq.cmd('/g Fired event!')
mq.cmd('/lem cond RoguePoison 1')
end

return {onload=on_load, condfunc=condition, actionfunc=action}[/CODE]

EDIT: updated export with debug lines now gone.
EDIT2: Removed debug check for count < 100 and updated export.
 
Last edited:
Awesome @bytebite thanks!

It works. Only thing is that it spams it a bunch of times. Looks like turning it off with 25 delay is not haveing the intended effect. Is there another way around that?
1674155379760.png

Edit: Fix is to change delay from 25 to 2500
 
Last edited:
Here are a couple of conditions that others might find useful.

Firstly, one thing I found extremely useful in React was the ability to create Global conditions that you could refer to in any other react. @bytebite helped me create a way to do the same in Lem.

Create a folder for common conditions in the in /Lua root folder. I called mine lemcommons. Put a Lua file in there. I called mine commons.lua.

Here is my commons.Lua. It creates two conditions that I use all the time: Commons.safeToCast() which checks if it's safe to cast (e.g. buff myself), and Commons.engaged() which checks whether I'm in combat (e.g. so as to use combat abilities).

Disclaimer: these are all pretty specific to the classes I play. I mostly use these for my Rogue.

Lua:
local mq = require('mq')
Commons = {}

function Commons.safeToCast()
    local safeToCast = true
   
    -- I am not trying to hide
    safeToCast = safeToCast and not mq.TLO.Me.Song('Evader\'s Shroud of Stealth').ID() and not mq.TLO.Me.Song('Evader\'s Invisibility').ID()
   
    -- I am not almost dead
    safeToCast = safeToCast and not (mq.TLO.Me.PctHPs() < 26)
   
    -- I am not moving or casting something
    safeToCast = safeToCast and not mq.TLO.Me.Moving() and not mq.TLO.Me.Casting.ID() and not mq.TLO.Me.Stunned()
   
    -- I am not just recovered from slight case of death, dead, or playing dead
    safeToCast = safeToCast and not mq.TLO.Me.Buff('Revival Sickness').ID() and not mq.TLO.Me.Dead() and mq.TLO.Me.State() ~= 'FEIGN'
   
    -- It is asafe around me.
    safeToCast = safeToCast and mq.TLO.SpawnCount('npc radius 60')() < 1 and mq.TLO.Me.XTarget() < 1

    return safeToCast
end

function Commons.engaged()
    local amEngaged = true

    --Have a target and am in melee range
    amEngaged = amEngaged and mq.TLO.Target.ID() ~=0 and mq.TLO.Target.Distance() < 18 and mq.TLO.Target.Distance() > 0

    --Target is an NPC
    amEngaged = mq.TLO.Target.Type() == 'NPC'

    --Am in combat
    amEngaged = amEngaged and mq.TLO.Me.Combat()

    --Not moving, casting, or stunned
    amEngaged = amEngaged and not mq.TLO.Me.Moving() and not mq.TLO.Me.Casting.ID() and not mq.TLO.Me.Stunned()

    --Not dead or feigning
    amEngaged = amEngaged and not mq.TLO.Me.Dead() and mq.TLO.Me.State() ~= 'FEIGN'

    --Target is high enough to be worth doing something
    amEngaged = amEngaged and mq.TLO.Target.Level() > 110

    return amEngaged
end

return Commons

From there, you can include that file in other conditions (see second line below).
For example, here is a condition that makes all my toons recast Geomantra if it's worn off and it's safe to do so using the safeToCast() function:

[CODE title="string export"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENteHZZMkZzSUVOdmJXMXZibk1nUFNCeVpYRjFhWEpsS0Nkc1pXMWpiMjF0YjI1ekxrTnZiVzF2Ym5NbktRb0tiRzlqWVd3Z1puVnVZM1JwYjI0Z2IyNWZiRzloWkNncENtVnVaQW9LYkc5allXd2diWGxEYUdGeWJTQTlJRzF4TGxSTVR5NU5aUzVKYm5abGJuUnZjbmtvSjBOb1lYSnRKeWt1VG1GdFpTZ3BDbXh2WTJGc0lHWjFibU4wYVc5dUlHTnZibVJwZEdsdmJpZ3BDaUFnSUNCeVpYUjFjbTRnUTI5dGJXOXVjeTV6WVdabFZHOURZWE4wS0NrZ0NpQWdJQ0JoYm1RZ2JYRXVWRXhQTGsxbExrSjFabVlvSjBkbGIyMWhiblJ5WVNjcExrbEVLQ2tnUFQwZ2JtbHNDaUFnSUNCaGJtUWdiWEV1VkV4UExrMWxMa2wwWlcxU1pXRmtlU2h0ZVVOb1lYSnRLU2dwQ21WdVpBb0tiRzlqWVd3Z1puVnVZM1JwYjI0Z1lXTjBhVzl1S0NrS0lDQWdJRzF4TG1OdFpDZ25MMnhsYlNCamIyNWtJRWRsYjIxaGJuUnlZU0F3SnlrS0lDQWdJRzF4TG1OdFpHWW9KeTkxYzJWcGRHVnRJQ1Z6Snl3Z2JYbERhR0Z5YlNrS0lDQWdJSEJ5YVc1MEtDZERZWE4wYVc1bklFZGxiMjFoYm5SeVlTNHVMaWNwQ2lBZ0lDQnRjUzVrWld4aGVTZ3lOVEF3S1FvZ0lDQWdiWEV1WTIxa0tDY3ZiR1Z0SUdOdmJtUWdSMlZ2YldGdWRISmhJREVuS1FwbGJtUUtDbkpsZEhWeWJpQjdiMjVzYjJGa1BXOXVYMnh2WVdRc0lHTnZibVJtZFc1alBXTnZibVJwZEdsdmJpd2dZV04wYVc5dVpuVnVZejFoWTNScGIyNTkiLAogY2F0ZWdvcnkgPSAiIiwKIHR5cGUgPSAiY29uZGl0aW9ucyIsCiBuYW1lID0gIkdlb21hbnRyYSIsCn0=[/CODE]

Lua:
local mq = require('mq')
local Commons = require('lemcommons.Commons')

---@return boolean @Returns true if the action should fire, otherwise false.
local function on_load()
    -- Perform any initial setup here when the event is loaded.
end

local myCharm = mq.TLO.Me.Inventory('Charm').Name()
local function condition()
    -- Implement the condition to evaluate here.

    return Commons.safeToCast()
    and mq.TLO.Me.Buff('Geomantra').ID() == nil
    and mq.TLO.Me.ItemReady(myCharm)()
end

local function action()
    -- Implement the action to perform here.
    mq.cmd('/lem cond Geomantra 0')    
    mq.cmdf('/useitem %s', myCharm)    
    print('Casting Geomantra...')    
    mq.delay(2500)    
    mq.cmd('/lem cond Geomantra 1')
end

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

And here is a condition that makes all my toons use Unified Phoenix Feather when they need it, either while in combat, or when it's safe to cast (and not at the same time):

[CODE title="string export"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENteHZZMkZzSUVOdmJXMXZibk1nUFNCeVpYRjFhWEpsS0Nkc1pXMWpiMjF0YjI1ekxrTnZiVzF2Ym5NbktRb0tMUzB0UUhKbGRIVnliaUJpYjI5c1pXRnVJRUJTWlhSMWNtNXpJSFJ5ZFdVZ2FXWWdkR2hsSUdGamRHbHZiaUJ6YUc5MWJHUWdabWx5WlN3Z2IzUm9aWEozYVhObElHWmhiSE5sTGdwc2IyTmhiQ0JtZFc1amRHbHZiaUJ2Ymw5c2IyRmtLQ2tLSUNBZ0lDMHRJRkJsY21admNtMGdZVzU1SUdsdWFYUnBZV3dnYzJWMGRYQWdhR1Z5WlNCM2FHVnVJSFJvWlNCbGRtVnVkQ0JwY3lCc2IyRmtaV1F1Q21WdVpBb0tiRzlqWVd3Z1puVnVZM1JwYjI0Z1kyOXVaR2wwYVc5dUtDa0tJQ0FnSUMwdElFbHRjR3hsYldWdWRDQjBhR1VnWTI5dVpHbDBhVzl1SUhSdklHVjJZV3gxWVhSbElHaGxjbVV1Q2lBZ0lDQUtJQ0FnSUhKbGRIVnliaUFvUTI5dGJXOXVjeTV6WVdabFZHOURZWE4wS0NrZ2IzSWdRMjl0Ylc5dWN5NWxibWRoWjJWa0tDa3BDaUFnSUNCaGJtUWdiWEV1VkV4UExrMWxMa2wwWlcxU1pXRmtlU2duTVRZMU1UZzRKeWtvS1FvZ0lDQWdZVzVrSUc1dmRDQnRjUzVVVEU4dVRXVXVRblZtWmlnblIzSmhZMlVnYjJZZ1ZXNXBkSGtuS1M1SlJDZ3BDaUFnSUNCaGJtUWdLRzF4TGxSTVR5NU5aUzVRWTNSRmJtUjFjbUZ1WTJVb0tTQThJRFl3SUc5eUlDaHRjUzVVVEU4dVRXVXVVR04wVFdGdVlTZ3BJRHdnTmpBZ1lXNWtJRzF4TGxSTVR5NU5aUzVRWTNSTllXNWhLQ2tnZmowZ01Da3BDaUFnSUNBS1pXNWtDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmhZM1JwYjI0b0tRb2dJQ0FnYlhFdVkyMWtLQ2N2YkdWdElHTnZibVFnUm1WaGRHaGxjaUF3SnlrS0lDQWdJRzF4TG1OdFpDZ25MM1Z6WldsMFpXMGdWVzVwWm1sbFpDQlFhRzlsYm1sNElFWmxZWFJvWlhJbktRb2dJQ0FnY0hKcGJuUW9KMVZ6YVc1bklHWmxZWFJvWlhJdUxpNG5LUW9nSUNBZ2JYRXVaR1ZzWVhrb01qVXdNQ2tLSUNBZ0lHMXhMbU50WkNnbkwyeGxiU0JqYjI1a0lFWmxZWFJvWlhJZ01TY3BDaUFnSUNBS0lDQWdJQXBsYm1RS0NuSmxkSFZ5YmlCN2IyNXNiMkZrUFc5dVgyeHZZV1FzSUdOdmJtUm1kVzVqUFdOdmJtUnBkR2x2Yml3Z1lXTjBhVzl1Wm5WdVl6MWhZM1JwYjI1OSIsCiBjYXRlZ29yeSA9ICIiLAogdHlwZSA9ICJjb25kaXRpb25zIiwKIG5hbWUgPSAiRmVhdGhlciIsCn0=[/CODE]

Lua:
local mq = require('mq')
local Commons = require('lemcommons.Commons')

---@return boolean @Returns true if the action should fire, otherwise false.
local function on_load()
    -- Perform any initial setup here when the event is loaded.
end

local function condition()
    -- Implement the condition to evaluate here.
   
    return (Commons.safeToCast() or Commons.engaged())
    and mq.TLO.Me.ItemReady('165188')()
    and not mq.TLO.Me.Buff('Grace of Unity').ID()
    and (mq.TLO.Me.PctEndurance() < 60 or (mq.TLO.Me.PctMana() < 60 and mq.TLO.Me.PctMana() ~= 0))
   
end

local function action()
   
    mq.cmd('/lem cond Feather 0')
    mq.cmd('/useitem Unified Phoenix Feather')
    print('Using feather...')
    mq.delay(2500)
    mq.cmd('/lem cond Feather 1')
    
   
end

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

That one could probably be cleaned up, but you get the idea.

And, finally, here is one that keeps my Rogue constantly rotating disciplines while in combat.

[CODE title="string export"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENteHZZMkZzSUVOdmJXMXZibk1nUFNCeVpYRjFhWEpsS0Nkc1pXMWpiMjF0YjI1ekxrTnZiVzF2Ym5NbktRb0tMUzB0UUhKbGRIVnliaUJpYjI5c1pXRnVJRUJTWlhSMWNtNXpJSFJ5ZFdVZ2FXWWdkR2hsSUdGamRHbHZiaUJ6YUc5MWJHUWdabWx5WlN3Z2IzUm9aWEozYVhObElHWmhiSE5sTGdwc2IyTmhiQ0JtZFc1amRHbHZiaUJ2Ymw5c2IyRmtLQ2tLSUNBZ0lDMHRJRkJsY21admNtMGdZVzU1SUdsdWFYUnBZV3dnYzJWMGRYQWdhR1Z5WlNCM2FHVnVJSFJvWlNCbGRtVnVkQ0JwY3lCc2IyRmtaV1F1Q21WdVpBb0tiRzlqWVd3Z1puVnVZM1JwYjI0Z1kyOXVaR2wwYVc5dUtDa0tJQ0FnSUMwdElFbHRjR3hsYldWdWRDQjBhR1VnWTI5dVpHbDBhVzl1SUhSdklHVjJZV3gxWVhSbElHaGxjbVV1Q2lBZ0lDQnlaWFIxY200Z1EyOXRiVzl1Y3k1bGJtZGhaMlZrS0NrZ1lXNWtJRzF4TGxSTVR5NVVZWEpuWlhRdVVHTjBTRkJ6S0NrZ1BpQXlNQXBsYm1RS0NteHZZMkZzSUdaMWJtTjBhVzl1SUdGamRHbHZiaWdwQ2lBZ0lDQXRMU0JKYlhCc1pXMWxiblFnZEdobElHRmpkR2x2YmlCMGJ5QndaWEptYjNKdElHaGxjbVV1Q2lBZ0lDQnBaaUJ0Y1M1VVRFOHVUV1V1UTI5dFltRjBRV0pwYkdsMGVWSmxZV1I1S0NkRmVHVmpkWFJwYjI1bGNpQkVhWE5qYVhCc2FXNWxJRkpyTGlCSlNTY3BLQ2tnWVc1a0lHNXZkQ0J0Y1M1VVRFOHVUV1V1UVdOMGFYWmxSR2x6WXk1SlJDZ3BJSFJvWlc0S0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5a2FYTmpJRVY0WldOMWRHbHZibVZ5SUVScGMyTnBjR3hwYm1VZ1Vtc3VJRWxKSnlrS0lDQWdJR1ZzYzJWcFppQnRjUzVVVEU4dVRXVXVRMjl0WW1GMFFXSnBiR2wwZVZKbFlXUjVLQ2RTWVdkblpXUWdSV1JuWlNCRWFYTmphWEJzYVc1bElGSnJMaUJKU1NjcEtDa2dZVzVrSUc1dmRDQnRjUzVVVEU4dVRXVXVRV04wYVhabFJHbHpZeTVKUkNncElIUm9aVzRLSUNBZ0lDQWdJQ0J0Y1M1amJXUW9KeTlrYVhOaklGSmhaMmRsWkNCRlpHZGxJRVJwYzJOcGNHeHBibVVnVW1zdUlFbEpKeWtLSUNBZ0lHVnNjMlZwWmlCdGNTNVVURTh1VFdVdVEyOXRZbUYwUVdKcGJHbDBlVkpsWVdSNUtDZEdjbVZ1ZW1sbFpDQlRkR0ZpWW1sdVp5QkVhWE5qYVhCc2FXNWxKeWtvS1NCaGJtUWdibTkwSUcxeExsUk1UeTVOWlM1QlkzUnBkbVZFYVhOakxrbEVLQ2tnZEdobGJnb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwyUnBjMk1nUm5KbGJucHBaV1FnVTNSaFltSnBibWNnUkdselkybHdiR2x1WlNjcENpQWdJQ0JsYkhObGFXWWdiWEV1VkV4UExrMWxMa052YldKaGRFRmlhV3hwZEhsU1pXRmtlU2duUzI1cFptVndiR0Y1SUVScGMyTnBjR3hwYm1VbktTZ3BJR0Z1WkNCdWIzUWdiWEV1VkV4UExrMWxMa0ZqZEdsMlpVUnBjMk11U1VRb0tTQmhibVFnYm05MElHMXhMbFJNVHk1TlpTNVRiMjVuS0NkU2IyZDFaVnduY3lCR2RYSjVKeWt1U1VRb0tTQjBhR1Z1Q2lBZ0lDQWdJQ0FnYlhFdVkyMWtLQ2N2Wkdsell5QkxibWxtWlhCc1lYa2dSR2x6WTJsd2JHbHVaU2NwQ2lBZ0lDQmxiSE5sYVdZZ2JYRXVWRXhQTGsxbExrTnZiV0poZEVGaWFXeHBkSGxTWldGa2VTZ25SWGh2ZEc5NGFXNGdSR2x6WTJsd2JHbHVaU0JTYXk0Z1NVa25LU2dwSUdGdVpDQnViM1FnYlhFdVZFeFBMazFsTGtGamRHbDJaVVJwYzJNdVNVUW9LU0IwYUdWdUNpQWdJQ0FnSUNBZ2JYRXVZMjFrS0NjdlpHbHpZeUJGZUc5MGIzaHBiaUJFYVhOamFYQnNhVzVsSUZKckxpQkpTU2NwQ2lBZ0lDQmxiSE5sYVdZZ2JYRXVWRXhQTGsxbExrTnZiV0poZEVGaWFXeHBkSGxTWldGa2VTZ25WMlZoY0c5dUlFTnZkbVZ1WVc1MElGSnJMaUJKU1NjcEtDa2dZVzVrSUc1dmRDQnRjUzVVVEU4dVRXVXVRV04wYVhabFJHbHpZeTVKUkNncElIUm9aVzRLSUNBZ0lDQWdJQ0J0Y1M1amJXUW9KeTlrYVhOaklGZGxZWEJ2YmlCRGIzWmxibUZ1ZENCU2F5NGdTVWtuS1FvZ0lDQWdaVzVrQ21WdVpBb0tjbVYwZFhKdUlIdHZibXh2WVdROWIyNWZiRzloWkN3Z1kyOXVaR1oxYm1NOVkyOXVaR2wwYVc5dUxDQmhZM1JwYjI1bWRXNWpQV0ZqZEdsdmJuMD0iLAogY2F0ZWdvcnkgPSAiUm9ndWUiLAogdHlwZSA9ICJjb25kaXRpb25zIiwKIG5hbWUgPSAiUm9nQ29uc3RhbnRCdXJuIiwKfQ==[/CODE]

Lua:
local mq = require('mq')
local Commons = require('lemcommons.Commons')

---@return boolean @Returns true if the action should fire, otherwise false.
local function on_load()
    -- Perform any initial setup here when the event is loaded.
end

local function condition()
    -- Implement the condition to evaluate here.
    return Commons.engaged() and mq.TLO.Target.PctHPs() > 20
end

local function action()
    -- Implement the action to perform here.
    if mq.TLO.Me.CombatAbilityReady('Executioner Discipline Rk. II')() and not mq.TLO.Me.ActiveDisc.ID() then
        mq.cmd('/disc Executioner Discipline Rk. II')
    elseif mq.TLO.Me.CombatAbilityReady('Ragged Edge Discipline Rk. II')() and not mq.TLO.Me.ActiveDisc.ID() then
        mq.cmd('/disc Ragged Edge Discipline Rk. II')
    elseif mq.TLO.Me.CombatAbilityReady('Frenzied Stabbing Discipline')() and not mq.TLO.Me.ActiveDisc.ID() then
        mq.cmd('/disc Frenzied Stabbing Discipline')
    elseif mq.TLO.Me.CombatAbilityReady('Knifeplay Discipline')() and not mq.TLO.Me.ActiveDisc.ID() and not mq.TLO.Me.Song('Rogue\'s Fury').ID() then
        mq.cmd('/disc Knifeplay Discipline')
    elseif mq.TLO.Me.CombatAbilityReady('Exotoxin Discipline Rk. II')() and not mq.TLO.Me.ActiveDisc.ID() then
        mq.cmd('/disc Exotoxin Discipline Rk. II')
    elseif mq.TLO.Me.CombatAbilityReady('Weapon Covenant Rk. II')() and not mq.TLO.Me.ActiveDisc.ID() then
        mq.cmd('/disc Weapon Covenant Rk. II')
    end
end

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

Hope this helps and gives some inspiration!

Edit: cleaned up some code and added import strings
 
Last edited:
Good evening!

Does anyone have a LEM for the "Time and Tides" mission in VoA? Having 3 toons click 2 items within seconds is a toughie boxing.
 
Can you please update the overview with this code for Remove Familiars? Also should mention, I have these to use the Jann's Veil with addclicky downtime for CWTN plugins, and a buff condition with KA.

Code:
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}
 
Good evening!

Does anyone have a LEM for the "Time and Tides" mission in VoA? Having 3 toons click 2 items within seconds is a toughie boxing.
Hi Tebus - Dont complicate things by making a Lem for this - very easy to just do a /dgae /useitem "Talisman of Whatever"
If you need to Target the high Priest first - then create a button on your driver toon which does a multiline. you want to pause everyone, Target the High Priest, then /useitem "thingy"; unpause everyone

Everyone who has one in inventory will click it. Very simple and easy.
 
Hi Tebus - Dont complicate things by making a Lem for this - very easy to just do a /dgae /useitem "Talisman of Whatever"
If you need to Target the high Priest first - then create a button on your driver toon which does a multiline. you want to pause everyone, Target the High Priest, then /useitem "thingy"; unpause everyone

Everyone who has one in inventory will click it. Very simple and easy.
Awesome! thank you!
 
For autoinventorying stuff on your cursor if you're not using CWTN or stuff is paused. Prevents you from eating your stat food with MQ2feedme


[CODE title="Spam Version"]local mq = require('mq')

local function condition()
return mq.TLO.Cursor.ID() ~= nil
end

local function action()
mq.cmd('/dgt --> Item on cursor, auto inventory in 20s.')
mq.delay(20000)
if mq.TLO.Cursor.ID() ~= nil then
mq.cmd('/autoinv')
end
end

return {condfunc=condition, actionfunc=action}[/CODE]


[CODE title="Not Spammy Version"]local mq = require('mq')

local function condition()
return mq.TLO.Cursor.ID() ~= nil
end

local function action()

mq.delay(20000)
if mq.TLO.Cursor.ID() ~= nil then
mq.cmd('/autoinv')
mq.cmd('/dgt --> Item on cursor, auto inventoryinge everything')
end
end

return {condfunc=condition, actionfunc=action}[/CODE]

Thanks to @Trapper for the help
 
^ reasons why i recommend against having any automation deleting items, since items to get deleted require to be on your cursor
 
Auto pulling sometimes says stuff is in line of sight and will sit and wait forever saying Not in line of sight. But EQ and MQ say it is.

Here is a workaround for that that is working fairly well.

Text event with the text: You cannot see your target.

[CODE title="Export"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENteHZZMkZzSUd4dmMwTnZkVzUwSUQwZ01Bb0tiRzlqWVd3Z1puVnVZM1JwYjI0Z2IyNWZiRzloWkNncENpQWdJQ0F0TFNCUVpYSm1iM0p0SUdGdWVTQnBibWwwYVdGc0lITmxkSFZ3SUdobGNtVWdkMmhsYmlCMGFHVWdaWFpsYm5RZ2FYTWdiRzloWkdWa0xnb2dJQ0FnYkc5elEyOTFiblFnUFNBd0NtVnVaQW9LYkc5allXd2dablZ1WTNScGIyNGdaWFpsYm5SZmFHRnVaR3hsY2lncENpQWdJQ0F0TFNCSmJYQnNaVzFsYm5RZ2RHaGxJR2hoYm1Sc2FXNW5JR1p2Y2lCMGFHVWdaWFpsYm5RZ2FHVnlaUzRLSUNBZ0lHbG1JRzF4TGxSTVR5NU5aUzVZVkdGeVoyVjBLQ2tnUGlBd0lIUm9aVzRLSUNBZ0lDQWdJQ0J0Y1M1amJXUW9KeTluSUVodlpHOXlJU2NwQ2lBZ0lDQWdJQ0FnY21WMGRYSnVDaUFnSUNCbGJtUUtJQ0FnSUdsbUlHeHZjME52ZFc1MElEdzlJRFVnZEdobGJnb2dJQ0FnSUNBZ0lHeHZjME52ZFc1MElEMGdiRzl6UTI5MWJuUWdLeUF4Q2lBZ0lDQmxibVFLSUNBZ0lHbG1JR3h2YzBOdmRXNTBJRDRnTlNCMGFHVnVDaUFnSUNBZ0lDQWdiWEV1WTIxa0tDY3ZaeUJIWlhSMGFXNW5JR05zYjNObGNpY3BDaUFnSUNBZ0lDQWdiWEV1WTIxa0tDY3ZibUYySUhSaGNtZGxkQ2NwQ2lBZ0lDQWdJQ0FnYkc5elEyOTFiblFnUFNBd0NpQWdJQ0JsYm1RS1pXNWtDZ3B5WlhSMWNtNGdlMjl1Ykc5aFpEMXZibDlzYjJGa0xDQmxkbVZ1ZEdaMWJtTTlaWFpsYm5SZmFHRnVaR3hsY24wPSIsCiBjYXRlZ29yeSA9ICJHZW5lcmFsIiwKIHR5cGUgPSAiZXZlbnRzIiwKIG5hbWUgPSAiUHVsbGVyQ2xvc2VyIiwKIHBhdHRlcm4gPSAiWW91IGNhbm5vdCBzZWUgeW91ciB0YXJnZXQuIiwKfQ==[/CODE]

Full Code:

[CODE lang="Lua" title="PullCloser"]local mq = require('mq')
local losCount = 0

local function on_load()
-- Perform any initial setup here when the event is loaded.
losCount = 0
end

local function event_handler()
-- Implement the handling for the event here.
if mq.TLO.Me.XTarget() > 0 then
mq.cmd('/g Hodor!')
return
end
if losCount <= 5 then
losCount = losCount + 1
end
if losCount > 5 then
mq.cmd('/g Getting closer')
mq.cmd('/nav target')
losCount = 0
end
end

return {onload=on_load, eventfunc=event_handler}[/CODE]

The idea is that if you see "You cannot see your target" 5 times it will attempt to nav to the target as long as nothing is on XTar.

Working fairly well so far to not get stuck.
 
@bytebite : should this work with any automation-tool or is it meant to be an extension for a specific one, like kissassist?
I use it with CWTN Mq2Eskay right now and Kissassist pulling on the bard. I imagine anything that is auto pulling and gets stuck because of the bug with line of sight this will work for. Nav and mesh required as usual though.
 
Shei Vintras multi Class Banish
Actual best Version here
Update:
- Bugfix ... when spell really wasn't already memmed, there could be an errormessage caused by the return of "NIL"
- found the syntax to eliminate the need of the spells precise rankname within the declaration

Attn 1: Fixed and running, the event now will select the right Rank of the spell, if a ranked spell is used to banish the mobs. At the full code you see "BRD={name='Slumber of the Diabo',type='spell'}," despite the fact that my bard uses RK. II
Attn 2: if using a spell to banish mobs, it's best to mem it befor starting events. If Spell is not memmed, Ill attemt to load it into gem 13. Some automation might remem the spell it considered right for gem 13


[CODE title="Bugfix and Rankname of spells"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJMUzB0UUhSNWNHVWdUWEVLTFMwdFFIUjVjR1VnU1cxSGRXa0tDbXh2WTJGc0lHMXhJRDBnY21WeGRXbHlaU2duYlhFbktRb0tiRzlqWVd3Z2NtVnhkV2x5WldSZmVtOXVaU0E5SUNkaGEyaGxkbUYwZDI5ZmJXbHpjMmx2YmljS2JHOWpZV3dnWW1GdVpWOXRiMkpmYm1GdFpTQTlJQ2RrWVhScFlYSWdlR2tnZEdGMmRXVnNhVzBuQ214dlkyRnNJRk53Wld4c1RHOWhaR1ZrSUQwZ2RISjFaUXBzYjJOaGJDQmlZVzVsY3lBOUlIc0tJQ0FnSUVKU1JEMTdibUZ0WlQwblUyeDFiV0psY2lCdlppQjBhR1VnUkdsaFltOG5MSFI1Y0dVOUozTndaV3hzSjMwc0NpQWdJQ0JEVEZJOWUyNWhiV1U5SjBKc1pYTnpaV1FnUTJoaGFXNXpKeXgwZVhCbFBTZGhZU2Q5TEFvZ0lDQWdSVTVEUFh0dVlXMWxQU2RDWldkMWFXeGxjbHduY3lCQ1lXNXBjMmh0Wlc1MEp5eDBlWEJsUFNkaFlTZDlMQW9nSUNBZ1VHRnNQWHR1WVcxbFBTZFRhR0ZqYTJ4bGN5QnZaaUJVZFc1aGNtVW5MSFI1Y0dVOUoyRmhKMzBzQ2lBZ0lDQlRTRTA5ZTI1aGJXVTlKMVpwY25Wc1pXNTBJRkJoY21Gc2VYTnBjeWNzZEhsd1pUMG5ZV0VuZlN3S0lDQWdJRTVsWXoxN2JtRnRaVDBuVUdWemRHbHNaVzUwSUZCaGNtRnNlWE5wY3ljc2RIbHdaVDBuWVdFbmZTd0tJQ0FnSUVSU1ZUMTdibUZ0WlQwblVHRnlZV3g1ZEdsaklGTndiM0psY3ljc2RIbHdaVDBuWVdFbmZTd0tJQ0FnSUZKT1J6MTdibUZ0WlQwblIzSmhjM0FnYjJZZ1UzbHNkbUZ1SUZOd2FYSnBkSE1uTEhSNWNHVTlKMkZoSjMwc0NuMEtiRzlqWVd3Z1puVnVZM1JwYjI0Z1UzUnZjRVJRVXlncENpQWdJQ0J0Y1M1amJXUW9KeTl6Y1hWbGJHTm9JQzl0Y1hBZ2IyNG5LUW9nSUNBZ2JYRXVaR1ZzWVhrb01UQXBDaUFnSUNCcFppQnRjUzVVVEU4dVRXVXVRMnhoYzNNdVUyaHZjblJPWVcxbEtDa2dQVDBnSjBKU1JDY2dkR2hsYmdvZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDNOeGRXVnNZMmdnTDNSM2FYTjBJRzltWmljcENpQWdJQ0FnSUNBZ2JYRXVaR1ZzWVhrb01UQXBDaUFnSUNBZ0lDQWdiWEV1WTIxa0tDY3ZjM0YxWld4amFDQXZjM1J2Y0hOdmJtY25LUW9nSUNBZ0lDQWdJRzF4TG1SbGJHRjVLREV3S1FvZ0lDQWdaVzVrQ2lBZ0lDQXRMVzF4TG1OdFpDZ25MMkYwZEdGamF5QnZabVluS1NBZ0xpNHVJRzFoZVdKbElHUmxZV04wYVhaaGRHVWdZWFIwWVdOcklHSjFkQ0J6WVhabElITjBZWFJsSUhSdklISmxZV04wYVhaaGRHVWdZWFFnVTNSaGNuUkVjSE1LSUNBZ0lDMHRiWEV1WkdWc1lYa29NVEFwQ2lBZ0lDQnRjUzVqYldRb0p5OXpjWFZsYkdOb0lDOWliM2h5SUhCaGRYTmxKeWtLSUNBZ0lHMXhMbVJsYkdGNUtERXdLUW9nSUNBZ2QyaHBiR1VnYlhFdVZFeFBMazFsTGtOaGMzUnBibWN1U1VRb0tTQmtid29nSUNBZ0lDQWdiWEV1WkdWc1lYa29NakF3S1FvZ0lDQWdaVzVrQ21WdVpBcHNiMk5oYkNCbWRXNWpkR2x2YmlCU1pYTjFiV1ZFVUZNb0tRb2dJQ0J0Y1M1amJXUW9KeTl6Y1hWbGJHTm9JQzl0Y1hBZ2IyWm1KeWtLSUNBZ2JYRXVaR1ZzWVhrb01UQXBDaUFnSUdsbUlHMXhMbFJNVHk1TlpTNURiR0Z6Y3k1VGFHOXlkRTVoYldVb0tTQTlQU0FuUWxKRUp5QjBhR1Z1Q2lBZ0lDQnRjUzVqYldRb0p5OXpjWFZsYkdOb0lDOTBkMmx6ZENCdmJpY3BDaUFnSUNCdGNTNWtaV3hoZVNneE1Da0tJQ0FnWlc1a0NpQWdJRzF4TG1OdFpDZ25MM054ZFdWc1kyZ2dMMkp2ZUhJZ2RXNXdZWFZ6WlNjcENpQWdJRzF4TG1SbGJHRjVLREV3S1FwbGJtUUtiRzlqWVd3Z1puVnVZM1JwYjI0Z2IyNWZiRzloWkNncENpQWdJQ0JwWmlCdGNTNVVURTh1V205dVpTNVRhRzl5ZEU1aGJXVW9LU0IrUFNCeVpYRjFhWEpsWkY5NmIyNWxJSFJvWlc0Z2NtVjBkWEp1SUdWdVpBb2dJQ0FnYkc5allXd2dZbUZ1WlNBOUlHSmhibVZ6VzIxeExsUk1UeTVOWlM1RGJHRnpjeTVUYUc5eWRFNWhiV1VvS1YwS0lDQWdJR3h2WTJGc0lITndaV3hzYm1GdFpTQTlJRzF4TGxSTVR5NVRjR1ZzYkNoMGIzTjBjbWx1WnloaVlXNWxMbTVoYldVcEtTNVNZVzVyVG1GdFpTZ3BDaUFnSUNCd2NtbHVkQ2h6Y0dWc2JHNWhiV1VwQ2lBZ0lDQnBaaUJpWVc1bElHRnVaQ0JpWVc1bExuUjVjR1VnUFQwZ0ozTndaV3hzSnlCMGFHVnVDaUFnSUNBZ0lDQWdhV1lnYlhFdVZFeFBMazFsTGtkbGJTaHpjR1ZzYkc1aGJXVXBLQ2tnUGlBd0lIUm9aVzRnY21WMGRYSnVJR1Z1WkNBZ0xTMGdVMmh2ZFd4a0lHSmxJRzFsYlcxbFpDQmhiSEpsWVdSNUNpQWdJQ0FnSUNBZ1UzUnZjRVJRVXlncENpQWdJQ0FnSUNBZ2JYRXVZMjFrWmlnbkwyMWxiWE53Wld4c0lERXpJQ0lsY3lJbkxDQnpjR1ZzYkc1aGJXVXBDaUFnSUNBZ0lDQWdiWEV1WkdWc1lYa29KelJ6SnlrS0lDQWdJQ0FnSUNCdGNTNVVURTh1VjJsdVpHOTNLQ2RUY0dWc2JFSnZiMnRYYm1RbktTNUViME5zYjNObEtDa0tJQ0FnSUNBZ0lDQlNaWE4xYldWRVVGTW9LUW9nSUNBZ1pXNWtDbVZ1WkFvdExTMUFjbVYwZFhKdUlHSnZiMnhsWVc0Z1FGSmxkSFZ5Ym5NZ2RISjFaU0JwWmlCMGFHVWdZV04wYVc5dUlITm9iM1ZzWkNCbWFYSmxMQ0J2ZEdobGNuZHBjMlVnWm1Gc2MyVXVDbXh2WTJGc0lHWjFibU4wYVc5dUlHTnZibVJwZEdsdmJpZ3BDaUFnSUNCeVpYUjFjbTRnYlhFdVZFeFBMbHB2Ym1VdVUyaHZjblJPWVcxbEtDa2dQVDBnY21WeGRXbHlaV1JmZW05dVpTQmhibVFnYlhFdVZFeFBMbE53WVhkdVEyOTFiblFvS0NjbGN5QnVjR01uS1RwbWIzSnRZWFFvWW1GdVpWOXRiMkpmYm1GdFpTa3BLQ2tnUGlBd0NpQWdJQ0F0TFhKbGRIVnliaUIwY25WbENtVnVaQXBzYjJOaGJDQm1kVzVqZEdsdmJpQjBZWEpuWlhSZlltRnVaVjl0YjJJb0tRb2dJQ0FnYVdZZ2JYRXVWRXhQTGxSaGNtZGxkQzVEYkdWaGJrNWhiV1VvS1NCK1BTQmlZVzVsWDIxdllsOXVZVzFsSUhSb1pXNEtJQ0FnSUNBZ0lDQnRjUzVqYldSbUtDY3ZiWEYwWVhJZ0pYTWdibkJqSnl3Z1ltRnVaVjl0YjJKZmJtRnRaU2tLSUNBZ0lDQWdJQ0J0Y1M1a1pXeGhlU2cxTUNrS0lDQWdJR1Z1WkFwbGJtUUtiRzlqWVd3Z1puVnVZM1JwYjI0Z1kyRnpkQ2h6Y0dWc2JDa0tJQ0FnSUcxeExtTnRaR1lvSnk5allYTjBJQ1Z6Snl3Z2MzQmxiR3d1VW1GdWEwNWhiV1VvS1NrS0lDQWdJRzF4TG1SbGJHRjVLRFV3SzNOd1pXeHNMazE1UTJGemRGUnBiV1VvS1NrS1pXNWtDbXh2WTJGc0lHWjFibU4wYVc5dUlIVnpaVjloWVNoaFlTa0tJQ0FnSUcxeExtTnRaR1lvSnk5aGJIUWdZV04wYVhaaGRHVWdKWE1uTENCaFlTNUpSQ2dwS1FvZ0lDQWdiWEV1WkdWc1lYa29OVEFyWVdFdVUzQmxiR3d1UTJGemRGUnBiV1VvS1NrS1pXNWtDbXh2WTJGc0lHWjFibU4wYVc5dUlHSmhibVZmY21WaFpIa29ZbUZ1WlNrS0lDQWdJR2xtSUdKaGJtVXVkSGx3WlNBOVBTQW5jM0JsYkd3bklIUm9aVzRLSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiWEV1VkV4UExrMWxMbE53Wld4c1VtVmhaSGtvWW1GdVpTNXVZVzFsS1NCaGJtUWdibTkwSUcxeExsUk1UeTVOWlM1RFlYTjBhVzVuS0NrS0lDQWdJR1ZzYzJWcFppQmlZVzVsTG5SNWNHVWdQVDBnSjJGaEp5QjBhR1Z1Q2lBZ0lDQWdJQ0FnY21WMGRYSnVJRzF4TGxSTVR5NU5aUzVCYkhSQlltbHNhWFI1VW1WaFpIa29ZbUZ1WlM1dVlXMWxLU0JoYm1RZ2JtOTBJRzF4TGxSTVR5NU5aUzVEWVhOMGFXNW5LQ2tLSUNBZ0lHVnVaQXBsYm1RS2JHOWpZV3dnWm5WdVkzUnBiMjRnWVdOMGFXOXVLQ2tLSUNBZ0lHeHZZMkZzSUcxNVgyTnNZWE56SUQwZ2JYRXVWRXhQTGsxbExrTnNZWE56TGxOb2IzSjBUbUZ0WlNncENpQWdJQ0JzYjJOaGJDQmlZVzVsSUQwZ1ltRnVaWE5iYlhsZlkyeGhjM05kQ2lBZ0lDQXRMU0JwWmlCdWIzUWdZU0JpWVc1bElHTnNZWE56TENCeVpYUjFjbTRLSUNBZ0lHbG1JRzV2ZENCaVlXNWxJSFJvWlc0Z2NtVjBkWEp1SUdWdVpBb2dJQ0FnTFMwZ2FXWWdZbUZ1WlNCaFltbHNhWFI1SUdsemJpZDBJSEpsWVdSNUxDQnlaWFIxY200S0lDQWdJR2xtSUcxNVgyTnNZWE56SUg0OUlDZENVa1FuSUdGdVpDQnViM1FnWW1GdVpWOXlaV0ZrZVNoaVlXNWxLU0IwYUdWdUlISmxkSFZ5YmlCbGJtUUtJQ0FnSUZOMGIzQkVVRk1vS1FvZ0lDQWdkR0Z5WjJWMFgySmhibVZmYlc5aUtDa0tJQ0FnSUdsbUlHSmhibVV1ZEhsd1pTQTlQU0FuYzNCbGJHd25JSFJvWlc0S0lDQWdJQ0FnSUNCallYTjBLRzF4TGxSTVR5NVRjR1ZzYkNoaVlXNWxMbTVoYldVcEtRb2dJQ0FnWld4elpRb2dJQ0FnSUNBZ0lIVnpaVjloWVNodGNTNVVURTh1VFdVdVFXeDBRV0pwYkdsMGVTaGlZVzVsTG01aGJXVXBLUW9nSUNBZ1pXNWtDaUFnSUNCM2FHbHNaU0J0Y1M1VVRFOHVUV1V1UTJGemRHbHVaeWdwSUdSdkNpQWdJQ0FnSUNBZ2JYRXVaRzlsZG1WdWRITW9LUW9nSUNBZ0lDQWdJRzF4TG1SbGJHRjVLRFV3S1FvZ0lDQWdaVzVrQ2lBZ0lDQlNaWE4xYldWRVVGTW9LUXBsYm1RS2NtVjBkWEp1SUh0dmJteHZZV1E5YjI1ZmJHOWhaQ3dnWTI5dVpHWjFibU05WTI5dVpHbDBhVzl1TENCaFkzUnBiMjVtZFc1alBXRmpkR2x2Ym4wPSIsCiBjYXRlZ29yeSA9ICJUb2wiLAogdHlwZSA9ICJjb25kaXRpb25zIiwKIG5hbWUgPSAiU2hlaUJhbmlzaCIsCn0=[/CODE]

full source code:
[CODE title="SheiBanish sourcecode"]
---@type Mq
---@type ImGui
local mq = require('mq')
local required_zone = 'akhevatwo_mission'
local bane_mob_name = 'datiar xi tavuelim'
local SpellLoaded = true
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(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
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}
[/CODE]
Using this with my ENC it runs like a charm, but I tried it for the first time with my Bard, and once Shei gets to 2% the bard stops banishing the tavuelims and I wipe. Any idea why would that happen?
 
Does anyone have a working raid version of Griklor, if he points at you?

Hard to test this.

Please.
 
Using this with my ENC it runs like a charm, but I tried it for the first time with my Bard, and once Shei gets to 2% the bard stops banishing the tavuelims and I wipe. Any idea why would that happen?
Did it with my bard from first day. Seems strange. Could it be that you dps'ed too fast and the spawns just came faster than the bard could follow or have you really seen the bard stopping to cast "Slumber..."?. The Bard's casttime is 2.75 seconds with max aa.
I covered it by activating the lem on another toon as well, usually a priest. But that's easy for me, because any of my group-setups contains a real priest and might not be a solution for you.

The only issue I am aware of, is that you should have memmed the spell, if you are using a spell, before launching it, as otherewhise the automation tool may unmem it again, to complete it's own intended spellset.

Easiest workaround for now, if you can't narrow down the issue, to activate it on any of the other toons able to banish.
 
Last edited:
Did it with my bard from first day. Seems strange. Could it be that you dps'ed too fast and the spawns just came faster than the bard could follow or have you really seen the bard stopping to cast "Slumber..."?. The Bard's casttime is 2.75 seconds with max aa.
I covered it by activating the lem on another toon as well, usually a priest. But that's easy for me, because any of my group-setups contains a real priest and might not be a solution for you.

The only issue I am aware of, is that you should have memmed the spell, if you are using a spell, before launching it, as otherewhise the automation tool may unmem it again, to complete it's own intended spellset.

Easiest workaround for now, if you can't narrow down the issue, to activate it on any of the other toons able to banish.
Thanks for the response Dragon. Yes, it is a DPS issue. I made a social where I unload the LEM when Shei is at 2% and makes the bard cast wave of slumber so I can deal with the adds before we wipe. It got very messy but we did it. I am trying to figure out better solutions. Maybe the best will be to slow down DPS a bit
 
Here's something which I have been doing by hand and almost always failed - keeping XP in a group of toons halfway aligned. This assumes that your toons are all available on dannet, that all groupmembers are your toons and that all share the same maxlevel. Feel free to adapt and comment :-) not continues to regular XP once all toons are close. Todo: maxlevel / max AA handling

[CODE lang="Lua" title="balance_xp,Lua"]
local mq = require('mq')
local exparray = {}
local sort_exparray = {}
local groupcount = 0
local dan_xp = 0
local dan_aaxp = 0
local dan_timeout = 1000 -- this can be changed
local exp_max = 0
local aaexp_min = 0 -- this can be changed (your min AA EXP %)
local aaexp_max = 100 -- this can be changed (your max AA EXP %)
local exp_min = math.huge
local exp_thresh = 0.005 -- this can be changed (desired XP spacing of group. The more XP mobs give, the higher this should be set 0.005 = 0.5%) Don't set to 0.
local function condition()
mq.delay(30000)
exparray = {}
sort_exparray = {}
if mq.TLO.Group.Present() == nil then return false end
groupcount = mq.TLO.Group.Present() + 1
for i = 1, groupcount do
mq_i = i - 1
mq.cmdf('/dquery %s -q "%s"', mq.TLO.Group.Member(mq_i)(), "Me.PctExp")
mq.delay(dan_timeout)
dan_xp = mq.TLO.DanNet.Q()
if dan_xp == nil then
print("EXP Assertion failed, increase timeout, Toon: ", mq.TLO.Group.Member(mq_i)())
return false
end
mq.cmdf('/dquery %s -q "%s"', mq.TLO.Group.Member(mq_i)(), "Me.PctExpToAA")
mq.delay(dan_timeout)
dan_aaxp = mq.TLO.DanNet.Q()
if dan_aaxp == nil then
print("AA EXP % Assertion failed, increase timeout, Toon: ", mq.TLO.Group.Member(mq_i)())
return false
end
table.insert(exparray, {
toon = mq.TLO.Group.Member(mq_i)(),
xp = mq.TLO.Group.Member(mq_i).Level() + (dan_xp/100),
aaxp = dan_aaxp,
})
end

for _, data in ipairs(exparray) do
if (data.xp) then table.insert(sort_exparray, data.xp) end
end
exp_max = math.max(unpack(sort_exparray))
exp_min = math.min(unpack(sort_exparray))
sort_exparray = {}
for _, data in ipairs(exparray) do
if (data.aaxp) then table.insert(sort_exparray, tonumber(data.aaxp)) end
end
cur_aaexp_min = math.min(unpack(sort_exparray))
cur_aaexp_max = math.max(unpack(sort_exparray))

return ((exp_max - exp_min > exp_thresh) or (cur_aaexp_min > aaexp_min) or (cur_aaexp_min ~= cur_aaexp_max ))

end
local function action()
for _, data in ipairs(exparray) do
if (exp_max - data.xp < exp_thresh) and (exp_max - exp_min > exp_thresh ) then
if tonumber(data.aaxp) ~= aaexp_max then
if data.toon == mq.TLO.Me() then
mq.cmdf('/alt on %s',aaexp_max)
print("set AAXP to ",aaexp_max," on self (was: ", data.aaxp,")")
else
mq.cmdf('/dexecute %s /alt on %s', data.toon, aaexp_max)
print("set AAXP to ",aaexp_max," on ",data.toon," (was: ", data.aaxp,")")
end
end
elseif tonumber(data.aaxp) ~= aaexp_min then
if data.toon == mq.TLO.Me() then
if aaexp_min == 0 then
mq.cmdf('/alt off')
else
mq.cmdf('/alt on %s',aaexp_min)
end
print("set AAXP to ",aaexp_min," on self (was: ", data.aaxp,")")
else
if aaexp_min == 0 then
mq.cmdf('/dexecute %s /alt off', data.toon)
else
mq.cmdf('/dexecute %s /alt on %s', data.toon, aaexp_min)
end
print("set AAXP to ",aaexp_min," on ",data.toon," (was: ", data.aaxp,")")
end
end
end
end
return {condfunc=condition, actionfunc=action}
[/CODE]

Enjoy!
 
Last edited:
Using a random delay to prevent your toons from overriding each other's grace of unity if they all meet the same condition at the same time.

Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENteHZZMkZzSUVOdmJXMXZibk1nUFNCeVpYRjFhWEpsS0Nkc1pXMWpiMjF0YjI1ekxrTnZiVzF2Ym5NbktRb0tMUzB0UUhKbGRIVnliaUJpYjI5c1pXRnVJRUJTWlhSMWNtNXpJSFJ5ZFdVZ2FXWWdkR2hsSUdGamRHbHZiaUJ6YUc5MWJHUWdabWx5WlN3Z2IzUm9aWEozYVhObElHWmhiSE5sTGdwc2IyTmhiQ0JtZFc1amRHbHZiaUJ2Ymw5c2IyRmtLQ2tLSUNBZ0lDMHRJRkJsY21admNtMGdZVzU1SUdsdWFYUnBZV3dnYzJWMGRYQWdhR1Z5WlNCM2FHVnVJSFJvWlNCbGRtVnVkQ0JwY3lCc2IyRmtaV1F1Q21WdVpBb0tiRzlqWVd3Z1puVnVZM1JwYjI0Z1kyOXVaR2wwYVc5dUtDa0tJQ0FnSUMwdElFbHRjR3hsYldWdWRDQjBhR1VnWTI5dVpHbDBhVzl1SUhSdklHVjJZV3gxWVhSbElHaGxjbVV1Q2lBZ0lDQUtJQ0FnSUhKbGRIVnliaUFvUTI5dGJXOXVjeTV6WVdabFZHOURZWE4wS0NrZ2IzSWdRMjl0Ylc5dWN5NWxibWRoWjJWa0tDa3BDaUFnSUNCaGJtUWdiWEV1VkV4UExrMWxMa2wwWlcxU1pXRmtlU2duTVRZMU1UZzRKeWtvS1FvZ0lDQWdZVzVrSUcxeExsUk1UeTVOWlM1Q2RXWm1LQ2RIY21GalpTQnZaaUJWYm1sMGVTY3BMa2xFS0NrZ1BUMGdibWxzQ2lBZ0lDQmhibVFnS0cxeExsUk1UeTVOWlM1UVkzUkZibVIxY21GdVkyVW9LU0E4SURZd0lHOXlJQ2h0Y1M1VVRFOHVUV1V1VUdOMFRXRnVZU2dwSUR3Z05qQWdZVzVrSUcxeExsUk1UeTVOWlM1UVkzUk5ZVzVoS0NrZ2ZqMGdNQ2twQ2lBZ0lDQUtaVzVrQ2dwc2IyTmhiQ0JtZFc1amRHbHZiaUJoWTNScGIyNG9LUW9nSUNBZ2JpQTlJRzFoZEdndWNtRnVaRzl0S0RNd01EQXBDaUFnSUNCdGNTNWtaV3hoZVNodUtRb2dJQ0FnYVdZZ2JYRXVWRXhQTGsxbExrSjFabVlvSjBkeVlXTmxJRzltSUZWdWFYUjVKeWt1U1VRb0tTQTlQU0J1YVd3Z2RHaGxiZ29nSUNBZ2JYRXVZMjFrS0NjdmRYTmxhWFJsYlNCVmJtbG1hV1ZrSUZCb2IyVnVhWGdnUm1WaGRHaGxjaWNwQ2lBZ0lDQndjbWx1ZENnblZYTnBibWNnWm1WaGRHaGxjaTR1TGljcENpQWdJQ0J0Y1M1a1pXeGhlU2d5TlRBd0tRb2dJQ0FnWlc1a0NpQWdJQ0FLSUNBZ0lBcGxibVFLQ25KbGRIVnliaUI3YjI1c2IyRmtQVzl1WDJ4dllXUXNJR052Ym1SbWRXNWpQV052Ym1ScGRHbHZiaXdnWVdOMGFXOXVablZ1WXoxaFkzUnBiMjU5IiwKIGNhdGVnb3J5ID0gIiIsCiB0eXBlID0gImNvbmRpdGlvbnMiLAogbmFtZSA9ICJGZWF0aGVyIiwKfQ==

[CODE lang="Lua" title="Unity Feather"]local mq = require('mq')

local function on_load()
end

local function condition()
return mq.TLO.Me.ItemReady('165188')()
and mq.TLO.Me.Buff('Grace of Unity').ID() == nil
and (mq.TLO.Me.PctEndurance() < 60 or (mq.TLO.Me.PctMana() < 60 and mq.TLO.Me.PctMana() ~= 0))
--add whatever other conditions, like being in combat
end

local function action()
n = math.random(3000) --this small random delay will prevent them all casting at once
mq.delay(n)
if mq.TLO.Me.Buff('Grace of Unity').ID() == nil then
mq.cmd('/useitem Unified Phoenix Feather')
print('Using feather...')
mq.delay(2500)
end
end

return {onload=on_load, condfunc=condition, actionfunc=action}[/CODE]
 
Thanks for the response Dragon. Yes, it is a DPS issue. I made a social where I unload the LEM when Shei is at 2% and makes the bard cast wave of slumber so I can deal with the adds before we wipe. It got very messy but we did it. I am trying to figure out better solutions. Maybe the best will be to slow down DPS a bit
What are the other classes in your team when doing shei? Most of the classes can banish at shei.
 
Aquietone - Can you change the main page description and code for AAPCT to:

Import String:
Code:
bkxDQnpaWFJoWVhCamRDa0tJQ0FnSUdWdVpBcGxibVFLQ25KbGRIVnliaUI3WTI5dVpHWjFibU05WTI5dVpHbDBhVzl1TENCaFkzUnBiMjVtZFc1alBXRmpkR2x2Ym4wPSIsCiBjYXRlZ29yeSA9ICJDaGFyYWN0ZXIiLAogdHlwZSA9ICJjb25kaXRpb25zIiwKIG5hbWUgPSAiQUFQQ1QiLAp9

Actual Code:
Code:
local mq = require('mq')
local setaapct = 0
local function condition()
    local level = mq.TLO.Me.Level()
    local maxlevel = mq.TLO.Me.MaxLevel()
    local exppctint1 = mq.TLO.Me.PctExp.Int() + 1
    local aapct = mq.TLO.Me.PctExpToAA()
    local aapoints = mq.TLO.Me.AAPoints()
    
    if level ~= maxlevel and aapct > 0 then
        setaapct = 0
        return true
    end
    if level == maxlevel and aapoints < (level * 2) then    
        setaapct = exppctint1
        return true
    end
    if level == maxlevel and aapoints >= (level * 2) then
        setaapct = 0
        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}

Thanks! This should resolve the issue of spamming and negate the usage of "StopAA_XP" text event. This will allow you to continue gaining AA after you have hit the max cap and continued usage of the Glyphs. This also assumes you have autobank set to a lower value like 220 before spending AA in MQ2AASpend.
 
Last edited:
Ok, the above AAPCT code is ready to be tested/used. If you encounter any numbers that may be off with regards to maxAA counts, let me know and I will adjust accordingly. I only have ToV but will be getting NoS soon. I did a pseudo test and it worked in my faking of numbers lol.
 
I think I got it! Tested and functioning, but I am not a coder, so I invite all feedback to help make this more efficient. Thanks to aquietone for providing a starting point and examples I could learn from.
[CODE lang="lua" title="Grind LEM Event"]local mq = require('mq')

local function condition()
if mq.TLO.Grind.Active() then
if not mq.TLO.Grind.Paused() then
return mq.TLO.Group.LowMana(20)() > 0
elseif mq.TLO.Grind.Paused() then
return mq.TLO.Group.LowMana(95)() < 1
end
end
end

local function action()
if not mq.TLO.Grind.Paused() then
mq.cmd('/grind pause')
elseif mq.TLO.Grind.Paused() then
mq.cmd('/grind resume')
end
end

return {condfunc=condition, actionfunc=action}[/CODE]



How does one convert this into an import string that can be imported into Lua Event Manager?
 
How does one convert this into an import string that can be imported into Lua Event Manager?
That one is not complete. You need the actions to go through with it to maximize your mana regen capabilities. Just pausing it without trying to meditate to speed up the process...is well...

The import string is nice, but not necessary. You can copy the direct code into one you make, then you can export it to get the import code.
 
That one is not complete. You need the actions to go through with it to maximize your mana regen capabilities. Just pausing it without trying to meditate to speed up the process...is well...

The import string is nice, but not necessary. You can copy the direct code into one you make, then you can export it to get the import code.
It's basic, but note is it pausing GRIND... all other functions that dictate when to sit, med, twist, etc are still unpaused and handled by your CWTN/KissAssist.

So you can edit the action to change modes of your specific group members like this: (Note: as you can see the reason I did not export a string is because I have my toon names in the live config I use)

[CODE lang="Lua" title="local function action() if not mq.TLO.Grind.Paused() then mq.cmd('/grind pause') elseif mq.TLO.Grind.Paused() then mq.cmd('/grind resume') end end"]local function action()
if not mq.TLO.Grind.Paused() then
mq.cmd('/grind pause')
mq.cmd('dex HealerName /clr mode 1')
mq.cmd('dex BeastLordName /bst mode 1')
mq.cmd('dex BardName /medstart 96')
elseif mq.TLO.Grind.Paused() then
mq.cmd('dex HealerName /clr mode 2')
mq.cmd('dex BeastLordName /bst mode 2')
mq.cmd('dex BardName /medstart 20')
mq.cmd('/grind resume')

end
end[/CODE]
 
Last edited:
It's basic, but note is it pausing GRIND... all other functions that dictate when to sit, med, twist, etc are still unpaused and handled by your CWTN/KissAssist.

So you can edit the action to change modes of your specific group members like this: (Note: as you can see the reason I did not export a string is because I have my toon names in the live config I use)

[CODE lang="lua" title="local function action() if not mq.TLO.Grind.Paused() then mq.cmd('/grind pause') elseif mq.TLO.Grind.Paused() then mq.cmd('/grind resume') end end'/grind pause') elseif mq.TLO.Grind.Paused() then mq.cmd('/grind resume') end end"]local function action()
if not mq.TLO.Grind.Paused() then
mq.cmd('/grind pause')
mq.cmd('dex HealerName /clr mode 1')
mq.cmd('dex BeastLordName /bst mode 1')
mq.cmd('dex BardName /medstart 96')
elseif mq.TLO.Grind.Paused() then
mq.cmd('dex HealerName /clr mode 2')
mq.cmd('dex BeastLordName /bst mode 2')
mq.cmd('dex BardName /medstart 20')
mq.cmd('/grind resume')

end
end[/CODE]
Which is unnecessary if you have aliases set up correctly. You have a dex to both your healer/bst (using names) which are both using CWTN - you could have aliases there instead for all CWTN toons for mode 1. They aren't doing anything anyway, might as well med up while everyone else is. The tank should be Mode 4 (again via an alias), and then have a universal alias for KA toons.

I really try hard to not include character names in any of my hotkeys/macros/lems if I can help it specifically to make them as universal as possible across the wide range of toons I might be playing at that time.

[code lang="Lua"]
local function action()
if not mq.TLO.Grind.Paused() then
mq.cmd('/grind pause')
mq.cmd('/cwtn mode 1')
mq.cmd('/cwtns mode 4')
elseif mq.TLO.Grind.Paused() then
mq.cmd('/cwtns mode 7')
mq.cmd('/cwtn mode 2')
mq.cmd('/grind resume')
end
end[/code]

But this might be moot now since I believe Hytiek added mana checking into Grind now? I haven't looked into it as haven't needed to, plus no reason to use Grind atm until I get expansions.
 
Last edited:
Which is unnecessary if you have aliases set up correctly. You have a dex to both your healer/bst (using names) which are both using CWTN - you could have aliases there instead for all CWTN toons for mode 1. They aren't doing anything anyway, might as well med up while everyone else is. The tank should be Mode 4 (again via an alias), and then have a universal alias for KA toons.

I really try hard to not include character names in any of my hotkeys/macros/lems if I can help it specifically to make them as universal as possible across the wide range of toons I might be playing at that time.

[code lang="lua"]
local function action()
if not mq.TLO.Grind.Paused() then
mq.cmd('/grind pause')
mq.cmd('/cwtn mode 1')
mq.cmd('/cwtns mode 4')
elseif mq.TLO.Grind.Paused() then
mq.cmd('/cwtns mode 7')
mq.cmd('/cwtn mode 2')
mq.cmd('/grind resume')
end
end[/code]

But this might be moot now since I believe Hytiek added mana checking into Grind now? I haven't looked into it as haven't needed to, plus no reason to use Grind atm until I get expansions.
Keep in mind. The cwtn plugins in chase or vorpal mode, will automatically sit if your manis sitting. So just sit your ma, and those in mode 2 or 3 will sit too
 
Keep in mind. The cwtn plugins in chase or vorpal mode, will automatically sit if your manis sitting. So just sit your ma, and those in mode 2 or 3 will sit too
Oh...I thought they had to be in assist mode, while tank is in tank mode (4) to have them sit. So one could just have tank in mode 4, and the others stay in chase mode and will sit? Good to know, and thanks!
 
Oh...I thought they had to be in assist mode, while tank is in tank mode (4) to have them sit. So one could just have tank in mode 4, and the others stay in chase mode and will sit? Good to know, and thanks!
There is a wait until mana is full option for the end of the grind. What I am trying to accomplish is getting them to pause in the middle of the grind when they run out of mana.
 
There is a wait until mana is full option for the end of the grind. What I am trying to accomplish is getting them to pause in the middle of the grind when they run out of mana.
Oh, ok so end of grind wait to full option. Then yes, the LEM I use will accomplish what you are seeking. Make sure you have the proper aliases setup. You can find them in Sic's Hotkey thread, and further in that thread, the one I use for /cwtns, and adjust your LEM accordingly.
 
Installing boxr helps when you have a mixed group of CWTN/KA/other.

The point of the LEM action section is that it's easy to customize to do anything you want. To alias, or not to alias, is up to the individual. I can see aliases being extremely high value for someone boxing 20+ chars, but significantly less value to someone running 2 characters.
 
Installing boxr helps when you have a mixed group of CWTN/KA/other.

The point of the LEM action section is that it's easy to customize to do anything you want. To alias, or not to alias, is up to the individual. I can see aliases being extremely high value for someone boxing 20+ chars, but significantly less value to someone running 2 characters.
Boxr is great, and I use it. The aliases are great, and I use them. There are all sorts of things you can or cannot do in everything. There is something in the IT world most refer to as "best business practices". 2FA, or Two Factor Authentication, is a classic example of a best business practice. But, as you pointed out, it is entirely up to the individual (or organization) if they utilize it. If I could give client information out freely, I would implore you to ask one of my former clients whether they thought it was wise not to have 2FA enabled on their M365 Global admin accounts and whether they regret that decision in the long run. I can tell you from our side of things, we certainly did not regret the payments from the said client for restoring/fixing/improving their environment over a period of 40-ish days.

In the MQ world, hotkeys are considered a best business practice. Do you have to use them? Nope. It is entirely up to the individual. But if you ask around, people will generally say using hotkeys makes life so much easier. Aliases fall into the same boat. This really isn't necessarily a question of the current value with regard to the number of characters controlled. As I mentioned before, I personally, think it is a best business practice to universalize my hotkeys in a way to utilize the same commands across the board generally. CWTNS alias allows this capability regardless of the driver toon I am using for switching modes, making Buttonmaster an invaluable tool in my daily MQ life. Using something like: /cwtna campradius 30, or useaoe on, or burnallnamed off, etc etc etc...invaluable and best business practice.

I feel the point of this community and why we offer suggestions is to help others to improve their MQ experience. Otherwise, people would not post ideas, resources, etc. Now, with that said, I do sometimes take my opinions possibly a little further than I should. It is a character flaw, and I apologize if you felt offended or I slighted you in some way. Not my intention. I just truly want to help and have my compatriots' experience similar to my own experience. A good one.
 
Last edited:
Just started using LEM. Looks good so far. Only had one crash when I hit the LOAD tab on my event. Then I seen where it was Under Construction.

Anyway, my first event.
Code:
cmV0dXJuIHsKIGxvYWQgPSB7CiAgY2xhc3MgPSAiIiwKICBhbHdheXMgPSBmYWxzZSwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENnb3RMU0JFYnlCdWIzUWdaV1JwZENCMGFHbHpJR2xtSUdOdmJtUnBkR2x2YmdwcFppQnViM1FnY0dGamEyRm5aUzVzYjJGa1pXUmJKMnhsYlM1bGRtVnVkSE1uWFNCMGFHVnVDaUFnSUNCd2NtbHVkQ2duVkdocGN5QnpZM0pwY0hRZ2FYTWdhVzUwWlc1a1pXUWdkRzhnWW1VZ2FXMXdiM0owWldRZ2RHOGdUSFZoSUVWMlpXNTBJRTFoYm1GblpYSWdLRXhGVFNrdUlGUnllU0FpQnkxMEwyeDFZU0J5ZFc0Z2JHVnRCeTEwSWljcENtVnVaQW9LYkc5allXd2dablZ1WTNScGIyNGdiMjVmYkc5aFpDZ3BDbTF4TG1OdFpHWW9KeTlrWjNSbGJHd2dZV3hzSUNWeklDMGdUM1psY25ObFpYSWdRM0poYzJobFpDQk1iMkZrWldRbkxDQnRjUzVVVEU4dVRXVXVRMnhsWVc1T1lXMWxLQ2twQ21WdVpBb0tMUzB0UUhKbGRIVnliaUJpYjI5c1pXRnVJRUJTWlhSMWNtNXpJSFJ5ZFdVZ2FXWWdkR2hsSUdGamRHbHZiaUJ6YUc5MWJHUWdabWx5WlN3Z2IzUm9aWEozYVhObElHWmhiSE5sTGdwc2IyTmhiQ0JtZFc1amRHbHZiaUJqYjI1a2FYUnBiMjRvS1FweVpYUjFjbTRnYlhFdVZFeFBMa3gxWVM1VFkzSnBjSFFvSjI5MlpYSnpaV1Z5SnlrdVUzUmhkSFZ6S0NrZ2ZqMGdJbEpWVGs1SlRrY2lDbVZ1WkFvS2JHOWpZV3dnWm5WdVkzUnBiMjRnWVdOMGFXOXVLQ2tLSUNBZ0lDQWdJQ0J0Y1M1amJXUW9KeTlpWldWd0p5a0tJQ0FnSUNBZ0lDQnRjUzVqYldSbUtDY3ZaR2QwWld4c0lHRnNiQ0FsY3lBdElFOTJaWEp6WldWeUlFTnlZWE5vWldRbkxDQnRjUzVVVEU4dVRXVXVRMnhsWVc1T1lXMWxLQ2twQ2lBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvSnpWekp5a0tJQ0FnSUNBZ0lDQndjbWx1ZENnblUzUmhjblJwYm1jZ1QzWmxjbk5sWlhJZ1RGVkJKeWtLSUNBZ0lDQWdJQ0J0Y1M1amJXUm1LQ2N2YlhGc2IyY2dUM1psY25ObFpYSWdRM0poYzJobFpDQWxjeWNzYlhFdVZFeFBMazFsTGtOc1pXRnVUbUZ0WlNncEtRb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwyeDFZU0J5ZFc0Z2IzWmxjbk5sWlhJbktRcGxibVFLQ25KbGRIVnliaUI3YjI1c2IyRmtQVzl1WDJ4dllXUXNJR052Ym1SbWRXNWpQV052Ym1ScGRHbHZiaXdnWVdOMGFXOXVablZ1WXoxaFkzUnBiMjU5IiwKIGNhdGVnb3J5ID0gIk1pc2MiLAogdHlwZSA9ICJjb25kaXRpb25zIiwKIG5hbWUgPSAiT3ZlcnNlZXJDcmFzaGVkIiwKfQ==
Code:
local mq = require('mq')

-- Do not edit this if condition
if not package.loaded['lem.events'] then
    print('This script is intended to be imported to Lua Event Manager (LEM). Try "-t/lua run lem-t"')
end

local function on_load()
mq.cmdf('/dgtell all %s - Overseer Crashed Loaded', mq.TLO.Me.CleanName())
end

---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
return mq.TLO.Lua.Script('overseer').Status() ~= "RUNNING"
end

local function action()
        mq.cmd('/beep')
        mq.cmdf('/dgtell all %s - Overseer Crashed', mq.TLO.Me.CleanName())
        mq.delay('5s')
        print('Starting Overseer LUA')
        mq.cmdf('/mqlog Overseer Crashed %s',mq.TLO.Me.CleanName())
        mq.cmd('/lua run overseer')
end

return {onload=on_load, condfunc=condition, actionfunc=action}
 
About time you made a contribution here @Cannonballdex

Slackers, I tell you....
 
Is there one of these event scripts for Shei Vinitras or someone that might be able to work on one? Thanks.
 
My first Lua Event, hope you find it useful. I have four parts for this event. This works for the Mission and Raid.
Note: Design this for toons not to be in chase mode.

This one is for everyone. This a complete go to Grilor and come back to the camp.

[CODE title="Griklor the Restless roars and points at"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRTljbVZ4ZFdseVpTZ25iWEVuS1Fwc2IyTmhiQ0JtZFc1amRHbHZiaUJsZG1WdWRGOW9ZVzVrYkdWeUtHeHBibVVzSUc1aGJXVXBDaUFnSUNCcFppQnVZVzFsSUQwOUlHMXhMbFJNVHk1TlpTNURiR1ZoYms1aGJXVW9LU0IwYUdWdUlBb2dJQ0FnSUcxeExtTnRaQ2duTDI1aGRpQnpjR0YzYmlCSGNtbHJiRzl5SnlrS0lDQWdJQ0J0Y1M1amJXUW9KeTkwWVhJZ1IzSnBhMnh2Y2ljcENpQWdJQ0FnYlhFdVkyMWtLQ2N2WW05NGNpQlFZWFZ6WlNjcENpQWdJQ0FnY21Wd1pXRjBDaUFnSUNBZ2RXNTBhV3dnYlhFdVZFeFBMbFJoY21kbGRDNUVhWE4wWVc1alpTZ3BJRHdnTmdvZ0lDQWdJRzF4TG1OdFpDZ25MM04wYVdOcklHOXVKeWtLSUNBZ0lDQnRjUzVrWld4aGVTZzVNREF3S1FvZ0lDQWdJRzF4TG1OdFpDZ25MM1JoY2lCamJHVmhjaWNwQ2lBZ0lDQWdiWEV1WTIxa0tDY3ZjM1JwWTJzZ2IyWm1KeWtLSUNBZ0lDQnRjUzVqYldRb0p5OWliM2h5SUhWdWNHRjFjMlVuS1FvZ0lDQWdJRzF4TG1OdFpDZ25MMjVoZGlCc2IyTjRlWG9nSURrM0xqZzVJREUzTUM0d01DQXROREV1TmpJd0p5a0tJQ0FnSUdWdVpBb2dJQ0FnSUFvZ0lDQWdDbVZ1WkNBZ0NuSmxkSFZ5YmlCN1pYWmxiblJtZFc1alBXVjJaVzUwWDJoaGJtUnNaWEo5IiwKIGNhdGVnb3J5ID0gIlRPViIsCiB0eXBlID0gImV2ZW50cyIsCiBuYW1lID0gIkdyaWtsb3IgdGhlIFJlc3RsZXNzIHJvYXJzIGFuZCBwb2ludHMgYXQiLAogcGF0dGVybiA9ICIjKiNHcmlrbG9yIHRoZSBSZXN0bGVzcyByb2FycyBhbmQgcG9pbnRzIGF0ICMxIy4jKiMiLAp9[/CODE]

Code:
local mq=require('mq')
local function event_handler(line, name)
    if name == mq.TLO.Me.CleanName() then
     mq.cmd('/nav spawn Griklor')
     mq.cmd('/tar Griklor')
     mq.cmd('/boxr Pause')
     repeat
     until mq.TLO.Target.Distance() < 6
     mq.cmd('/stick on')
     mq.delay(9000)
     mq.cmd('/tar clear')
     mq.cmd('/stick off')
     mq.cmd('/boxr unpause')
     mq.cmd('/nav locxyz  97.89 170.00 -41.620')
    end
    
    
end 
return {eventfunc=event_handler}

This is for only the main tank. This will make the tank head to Griklor when he drops and start attacking him.
After that, you have to bring him back to the camp yourself.
Note: If you are doing a mission, you can have them come to you at this point.

[CODE title="causing Griklor to fall to the ground"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRTljbVZ4ZFdseVpTZ25iWEVuS1FvS2JHOWpZV3dnWm5WdVkzUnBiMjRnWlhabGJuUmZhR0Z1Wkd4bGNpZ3BDbTF4TG1OdFpDZ25MM1JoY2lCSGNtbHJiRzl5SnlrS2JYRXVZMjFrS0NjdmJtRjJJSE53WVhkdUlFZHlhV3RzYjNJbktRcHlaWEJsWVhRS2RXNTBhV3dnYlhFdVZFeFBMbFJoY21kbGRDNUVhWE4wWVc1alpTZ3BJRHdnTmdwdGNTNWtaV3hoZVNneE1EQXBDbTF4TG1OdFpDZ25MMkYwZEdGamF5QnZiaWNwQ21WdVpDQWdJQXB5WlhSMWNtNGdlMlYyWlc1MFpuVnVZejFsZG1WdWRGOW9ZVzVrYkdWeWZRPT0iLAogY2F0ZWdvcnkgPSAiVE9WIiwKIHR5cGUgPSAiZXZlbnRzIiwKIG5hbWUgPSAiY2F1c2luZyBHcmlrbG9yIHRvIGZhbGwgdG8gdGhlIGdyb3VuZCIsCiBwYXR0ZXJuID0gIiMqI2NhdXNpbmcgR3Jpa2xvciB0byBmYWxsIHRvIHRoZSBncm91bmQjKiMiLAp9[/CODE]

Code:
local mq=require('mq')

local function event_handler()
mq.cmd('/tar Griklor')
mq.cmd('/nav spawn Griklor')
repeat
until mq.TLO.Target.Distance() < 6
mq.delay(100)
mq.cmd('/attack on')
end   
return {eventfunc=event_handler}


This for everyone, will stop attacks, and pets when Griklor takes off.
Note: This is not fully tested, we have not raided him for a while.

[CODE title="Griklor lets out a tuneless whistle"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgY2xhc3MgPSAiIiwKICBhbHdheXMgPSBmYWxzZSwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRTljbVZ4ZFdseVpTZ25iWEVuS1Fwc2IyTmhiQ0JtZFc1amRHbHZiaUJsZG1WdWRGOW9ZVzVrYkdWeUtDa0tiWEV1WTIxa0tDY3ZkR0Z5SUdOc1pXRnlKeWtLYlhFdVkyMWtLQ2N2Y0dWMElITjNiR1ZoZG1VbktRcHRjUzVrWld4aGVTZ3hNREFwQ20xeExtTnRaQ2duTDNCbGRDQmlZV05ySUc5bVppY3BDbTF4TG1SbGJHRjVLREV3TUNrS2JYRXVZMjFrS0NjdllYUjBZV05ySUc5bVppY3BDbVZ1WkNBZ0lBcHlaWFIxY200Z2UyVjJaVzUwWm5WdVl6MWxkbVZ1ZEY5b1lXNWtiR1Z5ZlE9PSIsCiBjYXRlZ29yeSA9ICJUT1YiLAogdHlwZSA9ICJldmVudHMiLAogbmFtZSA9ICJHcmlrbG9yIGxldHMgb3V0IGEgdHVuZWxlc3Mgd2hpc3RsZSIsCiBwYXR0ZXJuID0gIiMqI0dyaWtsb3IgbGV0cyBvdXQgYSB0dW5lbGVzcyB3aGlzdGxlIyojIiwKfQ==[/CODE]

Code:
local mq=require('mq')
local function event_handler()
mq.cmd('/tar clear')
mq.cmd('/pet swleave')
mq.delay(100)
mq.cmd('/pet back off')
mq.delay(100)
mq.cmd('/attack off')
end   
return {eventfunc=event_handler}


This is for the AE event, which makes everyone go to the NPC.
Note: We do not use this, because we can eat the AE.

[CODE title="Gather This fire should protect you from the sleet"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRTljbVZ4ZFdseVpTZ25iWEVuS1Fwc2IyTmhiQ0JtZFc1amRHbHZiaUJsZG1WdWRGOW9ZVzVrYkdWeUtDa0tiWEV1WkdWc1lYa29NVEF3S1FwdGNTNWtaV3hoZVNneE1EQXBDbTF4TG1OdFpDZ25MMjVoZGlCemNHRjNiaUJDWlhSb2RXNG5LUXBsYm1RZ0lDQUtjbVYwZFhKdUlIdGxkbVZ1ZEdaMWJtTTlaWFpsYm5SZmFHRnVaR3hsY24wPSIsCiBjYXRlZ29yeSA9ICJUT1YiLAogdHlwZSA9ICJldmVudHMiLAogbmFtZSA9ICJHYXRoZXIgVGhpcyBmaXJlIHNob3VsZCBwcm90ZWN0IHlvdSBmcm9tIHRoZSBzbGVldCIsCiBwYXR0ZXJuID0gIiMqI0dhdGhlciEgVGhpcyBmaXJlIHNob3VsZCBwcm90ZWN0IHlvdSBmcm9tIHRoZSBzbGVldCEjKiMiLAp9[/CODE]

Code:
local mq=require('mq')
local function event_handler()
mq.delay(100)
mq.delay(100)
mq.cmd('/nav spawn Bethun')
end   
return {eventfunc=event_handler}
 
Ok, made this cool LEM, enjoy.

Old Man McKenzie Classic Missions / Raids.

Driver toon buttons:

/alt activate 2810 <<<<<<<<<< Pet driver, you do not want the LEM activated on your driver toon. This will active a Necro pet
/alt activate 2823 <<<<<<<<<<< Feign Death
/alt activate 2805 <<<<<<<<<<< Pet buff Necro pet
/alt activate 2709 <<<<<<<<<<< DMF
/dggexecute /alt activate 2805 <<<<<<<<Pet buff all the Necros pet in the group

/dgzexecute /afollow spawn ${Me.ID} <<<<<<< Makes everyone in the raid to follow you.
/dgaexecute /afo off <<<<<<< Makes everyone in the raid stop following you.

Assist, one button
/dgzexecute /target id ${Target.ID}
/noparse /dgzexecute /pet attack
/pet swarm
/noparse /dgzexecute /attack


[CODE title="Summon Pets for Necro, Mage and Shammy."]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENteHZZMkZzSUdaMWJtTjBhVzl1SUdOdmJtUnBkR2x2YmlncENtbG1JRzF4TGxSTVR5NWFiMjVsTGtsRUtDa2dQVDBnTnpNZ2IzSWdiWEV1VkV4UExscHZibVV1U1VRb0tTQTlQU0F6TWlCdmNpQnRjUzVVVEU4dVdtOXVaUzVKUkNncElEMDlJRFkySUhSb1pXNEtDaUFnSUNBZ0lHbG1JRzF4TGxSTVR5NU5aUzVEYkdGemN5NVRhRzl5ZEU1aGJXVW9LU0E5UFNBblRrVkRKeUJoYm1RZ2JYRXVWRXhQTGsxbExsQmxkQzVKUkNncElEMDlJREFnZEdobGJnb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwyRnNkQ0JoWTNRZ01qZ3hNQ2NwQ2lBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvSnpGekp5a0tJQ0FnSUNBZ0lDQnRjUzVqYldRb0p5OXdaWFFnWVhSMFlXTnJKeWtLSUNBZ0lDQWdJR1Z1WkFvS0lDQWdJQ0FnSUdsbUlHMXhMbFJNVHk1TlpTNURiR0Z6Y3k1VGFHOXlkRTVoYldVb0tTQTlQU0FuVFVGSEp5QmhibVFnYlhFdVZFeFBMazFsTGxCbGRDNUpSQ2dwSUQwOUlEQWdkR2hsYmdvZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDJGc2RDQmhZM1FnTWpZNE5DY3BDaUFnSUNBZ0lDQWdiWEV1WkdWc1lYa29KekZ6SnlrS0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5d1pYUWdZWFIwWVdOckp5a0tJQ0FnSUNBZ0lHVnVaQW9nSUNBZ0lDQUtJQ0FnSUNBZ0lHbG1JRzF4TGxSTVR5NU5aUzVEYkdGemN5NVRhRzl5ZEU1aGJXVW9LU0E5UFNBblUwaE5KeUJoYm1RZ2JYRXVWRXhQTGsxbExsQmxkQzVKUkNncElEMDlJREFnZEdobGJnb2dJQ0FnSUNBZ0lDQnRjUzVqYldRb0p5OWhiSFFnWVdOMElESTRORGNuS1FvZ0lDQWdJQ0FnSUNCdGNTNWtaV3hoZVNnbk1YTW5LUW9nSUNBZ0lDQWdJQ0J0Y1M1amJXUW9KeTl3WlhRZ1lYUjBZV05ySnlrS0lDQWdJQ0FnSUdWdVpBcGxibVFnSUFvS1pXNWtDbkpsZEhWeWJpQjdZMjl1WkdaMWJtTTlZMjl1WkdsMGFXOXVmUT09IiwKIGNhdGVnb3J5ID0gIk9sZCBNYW4iLAogdHlwZSA9ICJjb25kaXRpb25zIiwKIG5hbWUgPSAiTmVjcm8gUGV0cyIsCn0=[/CODE]

Code:
local mq = require('mq')
local function condition()
if mq.TLO.Zone.ID() == 73 or mq.TLO.Zone.ID() == 32 or mq.TLO.Zone.ID() == 66 then

      if mq.TLO.Me.Class.ShortName() == 'NEC' and mq.TLO.Me.Pet.ID() == 0 then
        mq.cmd('/alt act 2810')
        mq.delay('1s')
        mq.cmd('/pet attack')
       end

       if mq.TLO.Me.Class.ShortName() == 'MAG' and mq.TLO.Me.Pet.ID() == 0 then
        mq.cmd('/alt act 2684')
        mq.delay('1s')
        mq.cmd('/pet attack')
       end
      
       if mq.TLO.Me.Class.ShortName() == 'SHM' and mq.TLO.Me.Pet.ID() == 0 then
         mq.cmd('/alt act 2847')
         mq.delay('1s')
         mq.cmd('/pet attack')
       end
end 

end
return {condfunc=condition}
 
Release Lua Event Manager (LEM) Event Library

Users who are viewing this thread

Back
Top
Cart