PL/Client side scripts
Skrypty typu clientside to skrypty działające po stronie klienta. Oznacza to, że mają one dostęp do większej ilości informacji o grze (bo działają równolegle z nią), ale mniej o serwerze i innych graczach na nim się znajdujących.
Są przydatne do rzeczy takich jak efekty wizualne (rysowanie funkcjami dx*), tworzeniem i modyfikowaniem elementów GUI.
Jak to działa?
Skrypty clientsideowskie są bardzo podobne do skryptów serversideowskich (tych działających po stronie serwera).
Skrypty serwerowe i klienckie bazują na bardzo podobnym systemie zdarzeń. Skrypty serwerowe i klienckie muszą znajdować się w różnych plikach, a każdy plik musi posiadać wpis w pliku meta.xml (tag <script> i atrybut type przyjmujący wartości server dla skryptów serwerowych i client dla skryptów klienckich).
Przykład (meta.xml):
<!-- GUI (client) testing script --> <meta> <script src="guitest.lua" type="client" /> <info author="IJs" /> </meta>
Komunikacja pomiędzy skryptami klienckimi i serwerowymi (i odwrotnie) odbywa się za pomocą funkcji triggerClientEvent i triggerServerEvent. Owe funkcje wysyłają żądanie wykonania danej funkcji (pierwszy/trzeci parametr funkcji triggerClientEvent i pierwszy triggerServerEvent). Komunikacja polega na wywoływaniu zdarzeń. Zanim jednak będziemy mogli wywołać przez serwer zdarzenie u klienta, należy zarejestrować zdarzenie w skrypcie klienckim - funkcją addEvent. Następnie do zdarzenia przypisujemy uchwyt (lub uchwyty bo liczba uchwytów do danego zdarzenia nie jest z góry ograniczona) - funkcją addEventHandler. W tym momencie serwer ma możliwość wywołania zdarzenia o podanej przez nas nazwie (przy użyciu addEvent/addEventHandler). Jeżeli chcemy działać w drugą stronę (tzn. komunikować się z klienta do serwera) musimy powtórzyć powyższe kroki, z tym że do wywołania zdarzenia znajdującego się na serwerze klient musi użyć funkcji triggerServerEvent.
Przykład:
Client-side:
function recvRandomPlayer(player) outputChatBox("Serwer wylosował gracza o nazwie: " .. player) end addEvent("recvRandomPlayer", true) addEventHandler("recvRandomPlayer", getRootElement(), recvRandomPlayer)
lub jak kto woli prościej:
addEvent("recvRandomPlayer", true) addEventHandler("recvRandomPlayer", root, function ( player ) outputChatBox("Serwer wylosował gracza o nazwie: " .. player) end)
Server-side:
triggerClientEvent ( "recvRandomPlayer", root, getPlayerName( getRandomPlayer() ) )