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)