PL/Client side scripts

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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() ) )