• 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
(Mighty) Lua Event Manager

Release (Mighty) Lua Event Manager 12/13/2024

No permission to download
Joined
Sep 13, 2019
RedCents
15,643¢
aquietone submitted a new resource:

Event Manager - Consolidates mq2events, mq2react and all your one-off Lua scripts

Lua Event Manager

NOTE: This is a WIP

A script to manage event handlers for text based events (like mq2events) and condition based events (like mq2react).

View attachment 39803

Overview

Lua Event Manager is intended to provide an alternative to mq2events, mq2react and one-off lua scripts being written for events.

Rather than events with giant, difficult to read...

Read more about this resource...
 
Man, I've been waiting for something like this.

Can't wait to get my hands on it and try it out.
 
Just went to a 48/50 box. Suffice to say was just looking at all my events / reacts in near future. Can’t wait to play with it… Truly great add
 
Last edited:
aquietone updated Lua Event Manager with a new update entry:

fix crash displaying events

- Fix event viewer crashing when event code includes formatted strings
- Add a couple more realistic sample events (aten silence run away, shei root for clr/shm)

Didn't get a chance to try the aten/shei mission events yet but just copied them from the individual lua scripts i'd been using. They may need updating a bit to match the format better before they work.

Read the rest of this update entry...
 
aquietone updated Lua Event Manager with a new update entry:

event categories and other updates

Moved lem/settings.lua to lem/settings.default.lua so that updates don't overwrite modified settings. lem/settings.default.lua includes sample events and categories, just rename it to use them.

- Added Categories for grouping events
- Categories can be created in the Categories section and then assigned when adding/editing events
- Display message when event code fails to load
- Checkbox for enable/disable now displayed in events table
- Added filtering to events list
- Only save character...

Read the rest of this update entry...
 
So excited to boot this up. I’ve been managing event and react lists through a ”raid_structure” overarching macro which had includes on my tank to fire off events for different classes and the entire thing was getting out of control. This may be a total game changer.
 
aquietone updated Lua Event Manager with a new update entry:

handle errors in users functions

Protect calls to user defined condition and action functions so that the main script stays running in case a broken event is enabled.

View attachment 39835

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

Some things I may consider if broken events are too common and spammy:
-...

Read the rest of this update entry...
 
So excited to boot this up. I’ve been managing event and react lists through a ”raid_structure” overarching macro which had includes on my tank to fire off events for different classes and the entire thing was getting out of control. This may be a total game changer.
One thing I'm thinking down the road is a sort of weakauras like loading system, like being able to select different load options: never, always, in combat, out of combat, in zone xyz, when class is xyz, etc.
 
would there be any interst in a LEM events library sub folder on this site? is it even possible to share them anon?

+1000. KA and macros to an extent are relatively simple for us non-tech folks. I’m leaning Lua, reacts and all thta slowly but the syntax has been tough for me. If I have something original to fiddle with whether it’s a react to mez a certain type of mob or other event comparisons - it’s been much easier to tweak. I suspect you’d find a lot more community input/value added s this would bridge the gap folks like me.
 
aquietone updated Lua Event Manager with a new update entry:

Add import/export of events

- Event configurations can be exported from the event viewer or right click menu in event list. The configuration will be copied to clipboard to be pasted elsewhere.
- Event configurations can be imported from the Import section on the left.

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

Code:
...

Read the rest of this update entry...
 
aquietone updated Lua Event Manager with a new update entry:

Templates and function library

- Add template selection in event editor to fill in event code from some samples. Don't really have many samples yet, but hopefully in the future...
- Add lem/library.lua with a bunch of helper functions that may or may not be useful when writing event code. Include it by adding local library = require('lem.library') to your event.
- Includes things like casting spells, using AAs, using items, using discs, checking if any of the same are ready or not, nav'ing...

Read the rest of this update entry...
 
aquietone updated Lua Event Manager with a new update entry:

More samples

  • Add more templates / samples - mostly just simple ports of common reacts like primal bandolier swaps, icebound avatar duck, clicking jboots, clicking shield of the immaculate.
  • Add support for defining an on_load function for events, in case you want something to happen when an event loads for the first time. This may be more useful once dynamic load options are being used. For example, mem'ing a bane or cure spell when zoning into Shei mission where the event...

Read the rest of this update entry...
 
anyway to convert exsisting mq2events to this Lua?
Convert as in automatically take an event and turn it into Lua? No, nothing like that. However, anything written in mq2events or mq2react should be able to be written with LEM. Its not necessary to convert them unless you just really wanted to for some reason.
The main reason for LEM was to write potentially more complex events without having to write a lot of the plumbing of a one-off script like the ones which have been written for shei and AHR missions. For example, in mq2events it gets complicated very quickly writing some giant multiline ${If[,,,]} statement.

For a comparison from mq2events to Lua, can look at the atensilence event I included with lem:

mq2event ini
Code:
[AtenHaRa]
trigger=#*#Aten Ha Ra points at |${Me.Name}|#*#
command=/docommand ${If[${EventArg1.Equal[${Me}]} && !${Group.Member[0].MainAssist},/multiline ; /docommand /${Me.Class.ShortName} mode 0; /mqp on; /twist off; /if (${Me.ActiveDisc.Name.Find[Frenzied Resolve Discipline]}) /stopdisc; /timed 5 /afollow off; /nav stop; /target clear; /timed 10 /nav locxyz 1186.12 0.932035 235.003; /timed 150 /docommand /${Me.Class.ShortName} mode 2; /timed 150 /mqp off; /timed 150 /twist on,/docommand ${If[${EventArg1.Equal[${Group.MainAssist}]} && !${Group.Member[0].MainAssist},/multiline ; /docommand /${Me.Class.ShortName} mode 0; /mqp on; /twist off; /if (${Me.ActiveDisc.Name.Find[Frenzied Resolve Discipline]}) /stopdisc; /timed 5 /afollow off; /nav stop; /target clear; /timed 10 /nav locxyz 1186.12 0.932035 235.003; /timed 150 /docommand /${Me.Class.ShortName} mode 2; /timed 150 /mqp off; /timed 150 /twist on,/echo BAD]}]}

Lua code
Lua:
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()

    -- Run away if I am the target and I am not the MA, or if the MA is the target and I am not the MA
    if not i_am_ma and (target == my_name or target == ma_name) then
        mq.cmdf('/%s mode 0', my_class) -- pause CWTN and other sorts of automation
        if my_class == 'BER' and mq.TLO.Me.ActiveDisc.Name() == mq.TLO.Spell('Frenzied Resolve Discipline').RankName() then
            mq.cmd('/stopdisc') -- Stop BER disc that roots you in place so you can run if you are a BER
        end
        mq.cmd('/mqp on')
        mq.cmd('/twist off')
        mq.cmd('/afollow off')
        mq.cmd('/nav stop')
        mq.cmd('/target clear')
        mq.delay(100)

        mq.cmd('/nav locxyz 1222.67 -48.97 236.41') -- Move to the safe spot
        mq.delay(15000)

        mq.cmdf('/%s mode 2', my_class) -- Unpause and return with CWTN chase mode
        mq.cmd('/mqp off')
        mq.cmd('/twist on')
    end
end

These both accomplish the same thing. It just comes down to personal preference. If you're very familiar with macros you could pick apart that giant command into the individual components and make edits to it. Meanwhile, the Lua code is pretty readable.
 
Last edited:
Convert as in automatically take an event and turn it into lua? No, nothing like that. However, anything written in mq2events or mq2react should be able to be written with LEM. Its not necessary to convert them unless you just really wanted to for some reason.
The main reason for LEM was to write potentially more complex events without having to write a lot of the plumbing of a one-off script like the ones which have been written for shei and AHR missions. For example, in mq2events it gets complicated very quickly writing some giant multiline ${If[,,,]} statement.

For a comparison from mq2events to lua, can look at the atensilence event I included with lem:

mq2event ini
Code:
[AtenHaRa]
trigger=#*#Aten Ha Ra points at |${Me.Name}|#*#
command=/docommand ${If[${EventArg1.Equal[${Me}]} && !${Group.Member[0].MainAssist},/multiline ; /docommand /${Me.Class.ShortName} mode 0; /mqp on; /twist off; /if (${Me.ActiveDisc.Name.Find[Frenzied Resolve Discipline]}) /stopdisc; /timed 5 /afollow off; /nav stop; /target clear; /timed 10 /nav locxyz 1186.12 0.932035 235.003; /timed 150 /docommand /${Me.Class.ShortName} mode 2; /timed 150 /mqp off; /timed 150 /twist on,/docommand ${If[${EventArg1.Equal[${Group.MainAssist}]} && !${Group.Member[0].MainAssist},/multiline ; /docommand /${Me.Class.ShortName} mode 0; /mqp on; /twist off; /if (${Me.ActiveDisc.Name.Find[Frenzied Resolve Discipline]}) /stopdisc; /timed 5 /afollow off; /nav stop; /target clear; /timed 10 /nav locxyz 1186.12 0.932035 235.003; /timed 150 /docommand /${Me.Class.ShortName} mode 2; /timed 150 /mqp off; /timed 150 /twist on,/echo BAD]}]}

lua code
Lua:
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()

    -- Run away if I am the target and I am not the MA, or if the MA is the target and I am not the MA
    if not i_am_ma and (target == my_name or target == ma_name) then
        mq.cmdf('/%s mode 0', my_class) -- pause CWTN and other sorts of automation
        if my_class == 'BER' and mq.TLO.Me.ActiveDisc.Name() == mq.TLO.Spell('Frenzied Resolve Discipline').RankName() then
            mq.cmd('/stopdisc') -- Stop BER disc that roots you in place so you can run if you are a BER
        end
        mq.cmd('/mqp on')
        mq.cmd('/twist off')
        mq.cmd('/afollow off')
        mq.cmd('/nav stop')
        mq.cmd('/target clear')
        mq.delay(100)

        mq.cmd('/nav locxyz 1222.67 -48.97 236.41') -- Move to the safe spot
        mq.delay(15000)

        mq.cmdf('/%s mode 2', my_class) -- Unpause and return with CWTN chase mode
        mq.cmd('/mqp off')
        mq.cmd('/twist on')
    end
end

These both accomplish the same thing. It just comes down to personal preference. If you're very familiar with macros you could pick apart that giant command into the individual components and make edits to it. Meanwhile, the lua code is pretty readable.

I just have some rather extensive events for a rather complicated event, and was wondering what my learning curve was. Thank you for answering.
 
wow ok this is awesome ... can i vote now for the best Lua of 2022? !!!!! im excited for this
 
Ok...I am definitely doing something wrong here, but not sure where the issue lies:

[CODE title="Shei CureAll"]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}[/CODE]

Edit: This works now. I had to remove the library in control part I ripped from an example and now it will use the curealls, keeping your solo healer to just focus on healing. While personally, I had a cleric and had no issues keeping up with heals/cures, YMMV.
 
Last edited:
Shei Bard Event

[CODE title="Shei Bard"]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}[/CODE]

Shei Enchanter Event

[CODE title="Import"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2xhc3MgPSAiIiwKICB6b25lID0gIiIsCiB9LAogY29kZSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENncHNiMk5oYkNCbWRXNWpkR2x2YmlCamIyNWthWFJwYjI0b0tRb2dJQ0FnY21WMGRYSnVJRzF4TGxSTVR5NVRjR0YzYmtOdmRXNTBLQ2RrWVhScFlYSWdlR2tnZEdGMmRXVnNhVzBnYm5Cakp5a29LU0ErSURBS1pXNWtDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmhZM1JwYjI0b0tRb2dJQ0FnYkc5allXd2diWGxmWTJ4aGMzTWdQU0J0Y1M1VVRFOHVUV1V1UTJ4aGMzTXVVMmh2Y25ST1lXMWxLQ2s2Ykc5M1pYSW9LUW9nSUNBZ2JHOWpZV3dnWVdSa2JHVWdQU0J0Y1M1VVRFOHVVM0JsYkd3b0owRmtaR3hsSnlrdVVtRnVhMDVoYldVb0tRb0tJQ0FnSUcxeExtTnRaQ2duTDJWdVl5QndZWFZ6WlNCdmJpY3BDaUFnSUNCcFppQnRjUzVVVEU4dVZHRnlaMlYwTGtOc1pXRnVUbUZ0WlNncElINDlJQ2RrWVhScFlYSWdlR2tnZEdGMmRXVnNhVzBuSUhSb1pXNEtJQ0FnSUNBZ0lDQnRjUzVqYldRb0lpOXpkRzl3WTJGemRDSXBDaUFnSUNBZ0lDQWdiWEV1WTIxa0tDY3ZiWEYwWVhJZ1pHRjBhV0Z5SUhocElIUmhkblZsYkdsdElHNXdZeWNwQ2lBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvTlRBcENpQWdJQ0JsYm1RS0lDQWdJR2xtSUcxeExsUk1UeTVOWlM1VGNHVnNiRkpsWVdSNUtHRmtaR3hsS1NncElHRnVaQ0J1YjNRZ2JYRXVWRXhQTGsxbExrTmhjM1JwYm1jb0tTQjBhR1Z1Q2lBZ0lDQWdJQ0FnYlhFdVkyMWtaaWduTDJOaGMzUWdKWE1uTENCaFpHUnNaU2tLSUNBZ0lDQWdJQ0J0Y1M1a1pXeGhlU2d4TURBd0syMXhMbFJNVHk1VGNHVnNiQ2hoWkdSc1pTa3VUWGxEWVhOMFZHbHRaU2dwS1FvZ0lDQWdaVzVrQ2lBZ0lDQnRjUzVqYldRb0p5OWxibU1nY0dGMWMyVWdiMlptSnlrS1pXNWtDZ3B5WlhSMWNtNGdlMk52Ym1SbWRXNWpQV052Ym1ScGRHbHZiaXdnWVdOMGFXOXVablZ1WXoxaFkzUnBiMjU5IiwKIGNhdGVnb3J5ID0gIlRvTCIsCiB0eXBlID0gImNvbmRpdGlvbnMiLAogbmFtZSA9ICJzaGVpZW5jaGFudGVyIiwKfQ==[/CODE]

[CODE title="Shei Enchanter"]
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}
[/CODE]
 
Last edited:
I believe some of these can be combined, but I kept them separate so as not to over confuse the issue by adding in 15 classes, 30 spells/aa. I used the KISS method.
 
after you create the event where do you put the file? it's not showing up in template.
You shouldn't really ever have to go putting files manually editing files anywhere. the editor in LEM will put everything where it belongs. that being said, editing Lua in vs code is definitely easier than the little window in the Lua. When you saved an event it should have gone to lem/events or lem/conditions
 
Are you using the gui?

Add Event -> Type Event Name -> Choose a Category -> Choose a Code Template and click Load Template ----> OR -----> Create your own event arguments -> Click Save.

It won't show as a template, as these are prebuilt. But you can export, etc.

I am going to start using this specifically and will build some for the typical group mission events I come across. I have only done Zland/Shei as I have been focusing on leveling/AA, but now I will have time to work on event handling.
 
Shei Bard Event

[CODE title="Shei Bard"]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}[/CODE]

Shei Enchanter Event

[CODE title="Shei Enchanter"]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.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(addle)() and not mq.TLO.Me.Casting() then
mq.cmdf('/cast %s', addle)
mq.delay(1000+mq.TLO.Spell(addle).MyCastTime())
end
mq.cmdf('/%s pause off', my_class)
end

return {condfunc=condition, actionfunc=action}[/CODE]
If you right click an event from the list, or use the export button in the viewer, it will give you a encoded string you can copy/paste around to share the event code + its settings, like the event pattern, that people can import as a whole event definition.
 
Like this?

[CODE title="Shei Bard Export"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2hhcmFjdGVycyA9ICIiLAogIGNsYXNzID0gIiIsCiAgem9uZSA9ICIiLAogfSwKIGNvZGUgPSAiYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmpiMjVrYVhScGIyNG9LUW9nSUNBZ2NtVjBkWEp1SUcxeExsUk1UeTVUY0dGM2JrTnZkVzUwS0Nka1lYUnBZWElnZUdrZ2RHRjJkV1ZzYVcwZ2JuQmpKeWtvS1NBK0lEQUtaVzVrQ2dwc2IyTmhiQ0JtZFc1amRHbHZiaUJoWTNScGIyNG9LUW9nSUNBZ2JHOWpZV3dnYlhsZlkyeGhjM01nUFNCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrNmJHOTNaWElvS1FvZ0lDQWdiRzlqWVd3Z2MyeDFiV0psY2lBOUlHMXhMbFJNVHk1VGNHVnNiQ2duVTJ4MWJXSmxjaUJ2WmlCMGFHVWdSR2xoWW04bktTNVNZVzVyVG1GdFpTZ3BDZ29nSUNBZ2JYRXVZMjFrS0NjdmJYRndJRzl1SnlrS0lDQWdJR2xtSUcxeExsUk1UeTVVWVhKblpYUXVRMnhsWVc1T1lXMWxLQ2tnZmowZ0oyUmhkR2xoY2lCNGFTQjBZWFoxWld4cGJTY2dkR2hsYmdvZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDNSM2FYTjBJRzltWmljcENpQWdJQ0FnSUNBZ2JYRXVZMjFrS0NjdmJYRjBZWElnWkdGMGFXRnlJSGhwSUhSaGRuVmxiR2x0SUc1d1l5Y3BDaUFnSUNBZ0lDQWdiWEV1WkdWc1lYa29OVEFwQ2lBZ0lDQmxibVFLSUNBZ0lHbG1JRzF4TGxSTVR5NU5aUzVUY0dWc2JGSmxZV1I1S0hOc2RXMWlaWElwS0NrZ1lXNWtJRzV2ZENCdGNTNVVURTh1VFdVdVEyRnpkR2x1WnlncElIUm9aVzRLSUNBZ0lDQWdJQ0J0Y1M1amJXUm1LQ2N2WTJGemRDQWxjeWNzSUhOc2RXMWlaWElwQ2lBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvTVRBd01DdHRjUzVVVEU4dVUzQmxiR3dvYzJ4MWJXSmxjaWt1VFhsRFlYTjBWR2x0WlNncEtRb2dJQ0FnWlc1a0NpQWdJQ0J0Y1M1amJXUW9KeTl0Y1hBZ2IyWm1KeWtLWlc1a0NncHlaWFIxY200Z2UyTnZibVJtZFc1alBXTnZibVJwZEdsdmJpd2dZV04wYVc5dVpuVnVZejFoWTNScGIyNTkiLAogY2F0ZWdvcnkgPSAiVG9MIiwKIHR5cGUgPSAiY29uZGl0aW9ucyIsCiBuYW1lID0gInNoZWliYXJkIiwKfQ==[/CODE]

[CODE title="Shei Enchanter Export"]cmV0dXJuIHsKIGxvYWQgPSB7CiAgYWx3YXlzID0gZmFsc2UsCiAgY2hhcmFjdGVycyA9ICIiLAogIGNsYXNzID0gIiIsCiAgem9uZSA9ICIiLAogfSwKIGNvZGUgPSAiYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmpiMjVrYVhScGIyNG9LUW9nSUNBZ2NtVjBkWEp1SUcxeExsUk1UeTVUY0dGM2JrTnZkVzUwS0Nka1lYUnBZWElnZUdrZ2RHRjJkV1ZzYVcwZ2JuQmpKeWtvS1NBK0lEQUtaVzVrQ2dwc2IyTmhiQ0JtZFc1amRHbHZiaUJoWTNScGIyNG9LUW9nSUNBZ2JHOWpZV3dnYlhsZlkyeGhjM01nUFNCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrNmJHOTNaWElvS1FvZ0lDQWdiRzlqWVd3Z1lXUmtiR1VnUFNCdGNTNVVURTh1VTNCbGJHd29KMEZrWkd4bEp5a3VVbUZ1YTA1aGJXVW9LUW9LSUNBZ0lHMXhMbU50WkdZb0p5OGxjeUJ3WVhWelpTQnZiaWNzSUcxNVgyTnNZWE56S1FvZ0lDQWdhV1lnYlhFdVZFeFBMbFJoY21kbGRDNURiR1ZoYms1aGJXVW9LU0IrUFNBblpHRjBhV0Z5SUhocElIUmhkblZsYkdsdEp5QjBhR1Z1Q2lBZ0lDQWdJQ0FnYlhFdVkyMWtLQ2N2YlhGMFlYSWdaR0YwYVdGeUlIaHBJSFJoZG5WbGJHbHRJRzV3WXljcENpQWdJQ0FnSUNBZ2JYRXVaR1ZzWVhrb05UQXBDaUFnSUNCbGJtUUtJQ0FnSUdsbUlHMXhMbFJNVHk1TlpTNVRjR1ZzYkZKbFlXUjVLR0ZrWkd4bEtTZ3BJR0Z1WkNCdWIzUWdiWEV1VkV4UExrMWxMa05oYzNScGJtY29LU0IwYUdWdUNpQWdJQ0FnSUNBZ2JYRXVZMjFrWmlnbkwyTmhjM1FnSlhNbkxDQmhaR1JzWlNrS0lDQWdJQ0FnSUNCdGNTNWtaV3hoZVNneE1EQXdLMjF4TGxSTVR5NVRjR1ZzYkNoaFpHUnNaU2t1VFhsRFlYTjBWR2x0WlNncEtRb2dJQ0FnWlc1a0NpQWdJQ0J0Y1M1amJXUm1LQ2N2SlhNZ2NHRjFjMlVnYjJabUp5d2diWGxmWTJ4aGMzTXBDbVZ1WkFvS2NtVjBkWEp1SUh0amIyNWtablZ1WXoxamIyNWthWFJwYjI0c0lHRmpkR2x2Ym1aMWJtTTlZV04wYVc5dWZRPT0iLAogY2F0ZWdvcnkgPSAiVG9MIiwKIHR5cGUgPSAiY29uZGl0aW9ucyIsCiBuYW1lID0gInNoZWllbmNoYW50ZXIiLAp9[/CODE]
 
Release (Mighty) Lua Event Manager

Users who are viewing this thread

Back
Top
Cart