EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Quests::Custom (https://www.eqemulator.org/forums/forumdisplay.php?f=671)
-   -   Lua Example: Multitasking (https://www.eqemulator.org/forums/showthread.php?t=37070)

KLS 07-15-2013 06:40 PM

Lua Example: Multitasking
 
Requires PEQ's Lua Multitasking Module: https://code.google.com/p/projecteqq...ad_manager.lua

This is an example of using multitasking through co-routines in Lua to make timer based scripts on unique npcs easier to write:

Code:

--Some_Crazy_Boss.lua
local ThreadManager = require("thread_manager");
local evt;

function ability_one()
        evt.self:Emote("begins to cast something electrical");
        ThreadManager:Wait(2.5);
        evt.self:Shout("Feel the thunder!");
end

function ability_two()
        evt.self:Emote("begins to cast something fiery");
        ThreadManager:Wait(2.5);
        evt.self:Shout("Feel the fire!");
end

function ability_three()
        evt.self:Emote("begins to cast something cold");
        ThreadManager:Wait(2.5);
        evt.self:Shout("Feel the freeze!");
end

function swapped_abilities()
        local i = 0;
        while true do
                if(i == 0) then
                        ability_one();
                        i = 1;
                elseif(i == 1)
                        ability_two();
                        i = 2;
                else
                        ability_three();
                        i = 0;
                end
                ThreadManager:Wait(15.0);
        end
end

function predictable()
        while true do
                ThreadManager:Wait(10.0);
                evt.self:Emote("begins to cast something predictable");
                ThreadManager:Wait(2.5);
                evt.self:Shout("Feel the Predictableness!");
        end
end

function event_combat(e)
        if(e.joined) then
                eq.set_timer("heartbeat", 500);
                ThreadManager:Clear();
                ThreadManager:Create("Predictable", predictable);
                ThreadManager:Create("Swapping", swapped_abilities);
        else
                eq.stop_timer("heartbeat");
                ThreadManager:Clear();
        end
end

function event_timer(e)
        evt = e;
        ThreadManager:Resume("Predictable");
        ThreadManager:Resume("Swapping");
end



All times are GMT -4. The time now is 03:28 AM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.