Autor: Simon
Dobra z racji tego, ?e jestem tutaj nowy i w og?le to chcia?bym udost?pni? m?j tutorial, kt?ry ju? powsta? sporo czasu temu. Mam nadziej?, ?e przyda si? on jakim? skrypterom.
Dotyczy on funkcji addEvent, kt?ra jest popularna i do?? cz?sto u?ywana, je?eli chcemy skorzysta? z us?ugi timera w Lua.
Posiada ona trzy atrybuty:
Parametrem callback przekazujemy funkcj?. Mo?e to by? ju? istniej?ca funkcja lub te? funkcja anonimowa. Je?eli wybrali?my wariant pierwszy, to w celu jej przekazania wystarczy poda? tylko jej nazw?. Dla przyk?adu:
[LUA]local function dodaj()
print(5+3)
end
addEvent(dodaj,500) -- u?ywamy wcze?niej stworzonej funkcji [/LUA]
Nic nie stoi na przeszkodzenie, ?eby?my u?yli wspomnianej wcze?niej funkcji anonimowej, co w wielu przypadkach jest bardzo dobrym pomys?em:
[LUA]addEvent(function() -- tworzymy zupe?nie now? funkcj? jako parametr funkcji addEvent
print(5+3)
end,1000) [/LUA]
Drugi parametr okre?la czas, po kt?rym ma zosta? wywo?ana funkcja przes?ana jako pierwszy parametr. Jest on wyra?ony w milisekundach (0,001 sekundy). Technik? stylistyczn?, kt?ra poprawia wygl?d tej?e funkcji jest zapis:
[LUA]addEvent(function()
print("Hello world z opoznieniem")
end, 5 * 1000) -- zapis x * 1000 jest bardzo popularny w przypadku tej funkcji [/LUA]
Dzi?ki temu innym skrypterom ?atwiej jest na pierwszy rzut oka odczyta?, za co odpowiada ten parametr.
Skrypt:
[LUA]for i = 1, 5 do
addEvent(function()
print("Wiadomosc z opoznieniem.")
end, i * 1000)
end [/LUA]
Wywo?a napis "Wiadomosc z opoznieniem." pi?ciokrotnie, z odst?pami po jednej sekundzie.
Jak wida? jest to bardzo wygodna funkcjonalno??, kt?ra bardzo rozszerza mo?liwo?ci tego j?zyka skryptowego.
Ostatni parametr - parameters odpowiada parametrom funkcji, kt?ra zosta?a przes?ana jako callback. Sposoby ich przes?ania s? dwa - za pomoc? tablicy, lub te? po przecinkach.
Za???my, ?e posiadamy funkcj?, kt?ra dodaje do siebie dwie liczby - x i y.
[LUA]function sum(x, y)
return x + y
end [/LUA]
Chcemy, ?eby jej warto?ci by?y liczone z pewnym odst?pem czasowym w zagnie?d?onej p?tli for. Nic trudnego!
[LUA]for i = 1, 10 do
for j = 1, 10 do
addEvent(function(x, y)
print(sum(x, y))
end, (i + j) * 1000, i, j)
end
end [/LUA]
U?yli?my funkcji anonimowej, kt?ra pobiera dwa parametry, przekazali?my je jako parametr 3. i 4. funkcji addEvent.
Przekazanie parametru parameters jako tablicy w tym przypadku wygl?da?oby nast?puj?co:
[LUA]for i = 1, 10 do
for j = 1, 10 do
addEvent(function(x, y)
print(sum(x, y))
end, (i + j) * 1000, {x = i, y = j})
end
end [/LUA]
Tak jak widzimy, aby przekaza? parametry w tablicy, wystarczy zdefiniowa? je pod odpowiadaj?cymi im indeksom w tabeli, kt?ra przekazywana jest jako parametr nr 3.
U?ycie funkcji addEvent razem z funkcjami typowo OTSowymi nie stanowi ?adnego problemu. A o to skrypt clean.lua z katalogu data/globalevents/scripts, kt?ry prezentuje u?ycie funkcji addEvent w ?rodowisku skryptowym OTSa:
[LUA]function executeClean()
doCleanMap()
doBroadcastMessage("Game map cleaned, next clean in 2 hours.")
return true
end
function onThink(interval, lastExecution, thinkInterval)
doBroadcastMessage("Game map cleaning within 30 seconds, please pick up your items!")
addEvent(executeClean, 30000)
return true
end [/LUA]
My?l?, ?e om?wi?em ju? wszystkie podstawowe mo?liwo?ci tej funkcji, kt?re pozwol? tworzy? bardziej zaawansowane mechanizmy. W razie pyta? s?u?? pomoc?.
Pozdrawiam.
Dobra z racji tego, ?e jestem tutaj nowy i w og?le to chcia?bym udost?pni? m?j tutorial, kt?ry ju? powsta? sporo czasu temu. Mam nadziej?, ?e przyda si? on jakim? skrypterom.
Dotyczy on funkcji addEvent, kt?ra jest popularna i do?? cz?sto u?ywana, je?eli chcemy skorzysta? z us?ugi timera w Lua.
Posiada ona trzy atrybuty:
PHP:
callback - funkcja, kt?ra zostanie wywo?ana.
delay - czas po jakim wywo?a si? funkcja.
parameters - parametry, kt?re u?ywane s? w funkcji jako parametr 'callback', kt?re trzeba deklarowa? z "zewn?trz" (wymaga g??bszego wyja?nienia).
[LUA]local function dodaj()
print(5+3)
end
addEvent(dodaj,500) -- u?ywamy wcze?niej stworzonej funkcji [/LUA]
Nic nie stoi na przeszkodzenie, ?eby?my u?yli wspomnianej wcze?niej funkcji anonimowej, co w wielu przypadkach jest bardzo dobrym pomys?em:
[LUA]addEvent(function() -- tworzymy zupe?nie now? funkcj? jako parametr funkcji addEvent
print(5+3)
end,1000) [/LUA]
Drugi parametr okre?la czas, po kt?rym ma zosta? wywo?ana funkcja przes?ana jako pierwszy parametr. Jest on wyra?ony w milisekundach (0,001 sekundy). Technik? stylistyczn?, kt?ra poprawia wygl?d tej?e funkcji jest zapis:
[LUA]addEvent(function()
print("Hello world z opoznieniem")
end, 5 * 1000) -- zapis x * 1000 jest bardzo popularny w przypadku tej funkcji [/LUA]
Dzi?ki temu innym skrypterom ?atwiej jest na pierwszy rzut oka odczyta?, za co odpowiada ten parametr.
Skrypt:
[LUA]for i = 1, 5 do
addEvent(function()
print("Wiadomosc z opoznieniem.")
end, i * 1000)
end [/LUA]
Wywo?a napis "Wiadomosc z opoznieniem." pi?ciokrotnie, z odst?pami po jednej sekundzie.
Jak wida? jest to bardzo wygodna funkcjonalno??, kt?ra bardzo rozszerza mo?liwo?ci tego j?zyka skryptowego.
Ostatni parametr - parameters odpowiada parametrom funkcji, kt?ra zosta?a przes?ana jako callback. Sposoby ich przes?ania s? dwa - za pomoc? tablicy, lub te? po przecinkach.
Za???my, ?e posiadamy funkcj?, kt?ra dodaje do siebie dwie liczby - x i y.
[LUA]function sum(x, y)
return x + y
end [/LUA]
Chcemy, ?eby jej warto?ci by?y liczone z pewnym odst?pem czasowym w zagnie?d?onej p?tli for. Nic trudnego!
[LUA]for i = 1, 10 do
for j = 1, 10 do
addEvent(function(x, y)
print(sum(x, y))
end, (i + j) * 1000, i, j)
end
end [/LUA]
U?yli?my funkcji anonimowej, kt?ra pobiera dwa parametry, przekazali?my je jako parametr 3. i 4. funkcji addEvent.
Przekazanie parametru parameters jako tablicy w tym przypadku wygl?da?oby nast?puj?co:
[LUA]for i = 1, 10 do
for j = 1, 10 do
addEvent(function(x, y)
print(sum(x, y))
end, (i + j) * 1000, {x = i, y = j})
end
end [/LUA]
Tak jak widzimy, aby przekaza? parametry w tablicy, wystarczy zdefiniowa? je pod odpowiadaj?cymi im indeksom w tabeli, kt?ra przekazywana jest jako parametr nr 3.
U?ycie funkcji addEvent razem z funkcjami typowo OTSowymi nie stanowi ?adnego problemu. A o to skrypt clean.lua z katalogu data/globalevents/scripts, kt?ry prezentuje u?ycie funkcji addEvent w ?rodowisku skryptowym OTSa:
[LUA]function executeClean()
doCleanMap()
doBroadcastMessage("Game map cleaned, next clean in 2 hours.")
return true
end
function onThink(interval, lastExecution, thinkInterval)
doBroadcastMessage("Game map cleaning within 30 seconds, please pick up your items!")
addEvent(executeClean, 30000)
return true
end [/LUA]
My?l?, ?e om?wi?em ju? wszystkie podstawowe mo?liwo?ci tej funkcji, kt?re pozwol? tworzy? bardziej zaawansowane mechanizmy. W razie pyta? s?u?? pomoc?.
Pozdrawiam.