PL/Client side scripts: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
m (Updated syntax)
 
Line 25: Line 25:
'''Client-side:'''
'''Client-side:'''
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
function recvRandomPlayer(randompn)
function recvRandomPlayer(player)
   outputChatBox("Serwer wylosował gracza o nazwie:" .. randompn)
   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", getRootElement(),  
addEventHandler("recvRandomPlayer", root, function ( player )
  function ( randompn )
  outputChatBox("Serwer wylosował gracza o nazwie: " .. player)
      outputChatBox("Serwer wylosował gracza o nazwie:" .. randompn)    
end)
  end
)
</syntaxhighlight>
</syntaxhighlight>


'''Server-side:'''
'''Server-side:'''
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
triggerClientEvent ( gracz, "recvRandomPlayer", getRootElement(), getPlayerName( getRandomPlayer() ) )
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() ) )