PL/Client side scripts: Difference between revisions
m (Updated syntax) |
|||
Line 25: | Line 25: | ||
'''Client-side:''' | '''Client-side:''' | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
function recvRandomPlayer( | function recvRandomPlayer(player) | ||
outputChatBox("Serwer wylosował gracza o nazwie:" .. | outputChatBox("Serwer wylosował gracza o nazwie: " .. player) | ||
end | end | ||
Line 36: | Line 36: | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
addEvent("recvRandomPlayer", true) | addEvent("recvRandomPlayer", true) | ||
addEventHandler("recvRandomPlayer", | addEventHandler("recvRandomPlayer", root, function ( player ) | ||
outputChatBox("Serwer wylosował gracza o nazwie: " .. player) | |||
end) | |||
) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Server-side:''' | '''Server-side:''' | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
triggerClientEvent ( | triggerClientEvent ( "recvRandomPlayer", root, getPlayerName( getRandomPlayer() ) ) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[it:Script client-side]] | [[it:Script client-side]] |
Latest revision as of 17:44, 25 June 2022
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() ) )