W językach skryptowych nie ma znanego z innych języków polecenia ‘sleep’, żeby poczekać np. sekundę – to zatrzymało by działanie całego serwera gry.
W takich językach najczęściej dostępne są funkcje do ‘planowania zdarzeń’ – to znaczy specjalna lista gdzie są spisane funkcje i czas po jakim mają być wykonane.
Przykład w LUA w serwerze gry TFS 1.3 (funkcja do tego służąca: addEvent ).
Do funkcji addEvent można przekazywać parametry, ale nie mogą to być obiekty zdefiniowane w silniku TFS jak Player, Creature, Item itp. – może to doprowadzić do crasha serwera i każde takie użycie generuje komunikat w konsoli.
Ta funkcja (akcja do dodania w actions) wykona się 3 sekundy po użyciu przedmiotu i wyświetli animacje ‘POFF’ na pozycji gracza.
Zamiast przekazywać jako parametr gracza (obiekt Player), przekazujemy jego ID (numer), a w momencie wykonania ‘zdarzenia’ zamieniamy go ponownie na obiekt Player.
function wyslijAnimacjeNaPozycjeGracza(playerId)
-- zamieniamy liczbę playerId w obiekt player
local player = Player(playerId)
-- UWAGA: gracz moze w tym czasie zginac/wylogowac sie, wiec zawsze sprawdzamy czy udalo sie utworzyc obiekt 'player'
if player then
player:getPosition():sendMagicEffect(CONST_ME_POFF)
end
end
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
addEvent(wyslijAnimacjeNaPozycjeGraczaZaSekunde, 3000, player:getId())
return true
end
Ta funkcja zostanie wykonana 2 razy w odstępach sekundy:
function twojaFunkcjaDoWykonaniaKilkaRazy(iloscPowtorzen, czasMiedzyPowtorzeniami)
-- kod odpowiadajacy za powtarzanie
iloscPowtorzen = iloscPowtorzen - 1
if (iloscPowtorzen > 0 ) then
-- parametry przekazywane do funkcji 'addEvent' to kolejno:
-- 1: nazwa funkcji ktora ma sie wykonac
-- 2: czas po jakim ma sie wykonac, 1000 = 1 sekunda
-- 3 i kolejne - sa opcjonalne - wszystkie kolejne parametry zostana przekazane do wykonywanej funkcji w takiej kolejnosci jak zostaly podane
addEvent(twojaFunkcjaDoWykonaniaKilkaRazy, czasMiedzyPowtorzeniami, iloscPowtorzen, czasMiedzyPowtorzeniami)
end
-- kod ktory ma sie wykonywac (twoj wlasny):
print('zostalo powtorzen:', iloscPowtorzen)
end
twojaFunkcjaDoWykonaniaKilkaRazy(2, 1000, 'testowy test', 12345)
Przykład z tą samą funkcją, ale teraz z przekazaniem parametrów. W funkcji wykonywanej ‘później’ nie masz dostępu do zmiennych które są dostępne w ‘aktualnie’ wykonywanym skrypcie (tym który ‘planuje’ wykonanie funkcji), więc trzeba je przekazać.
function twojaFunkcjaDoWykonaniaKilkaRazyZParametrami(iloscPowtorzen, czasMiedzyPowtorzeniami, parametr1, parametr2)
-- kod odpowiadajacy za powtarzanie
iloscPowtorzen = iloscPowtorzen - 1
if (iloscPowtorzen > 0 ) then
addEvent(twojaFunkcjaDoWykonaniaKilkaRazyZParametrami, czasMiedzyPowtorzeniami, iloscPowtorzen, czasMiedzyPowtorzeniami, parametr1, parametr2)
end
-- kod ktory ma sie wykonywac:
print('parametr 1 ma wartosc:', parametr1)
print('parametr 2 ma wartosc:', parametr2)
end
twojaFunkcjaDoWykonaniaKilkaRazyZParametrami(5, 1000, 'testowy test', 12345)