Skocz do zawartości


#1. lua [wstęp, struktura skryptu, zmienne, funkcje]

Scripting

2 odpowiedzi w tym temacie

#1 patr0

    mistrz

  • Użytkownicy
  • 430 postów

Napisano 29 wrzesień 2013 - 13:58

  • Wstęp
Witam, ze względu na brak poradników do LUA na MTA, postanowiłem zacząć serię poradników które mam nadzieję wyjasnią podstawy programowania w tym bardzo łatwym języku. Od razu napisze, że składnia to nie wszystko, umiejętności logicznego układania kodu nie nauczymy się z poradników, do tego trzeba praktyki, metody prób i błędów i wytrwałości. Postaram się opisać to prostym językiem aby każdy kto nie miał styczności z LUA miał możliwość coś pojąć.
  • Struktura skryptu
Skrypty w MTA mogą mieć format .zip oraz normalnego folderu. Każdy skrypt musi składać się z pliku META, w którym definiujemy pliki LUA. Jednym słowem definiujemy tu rzeczy których będziemy używać podczas pisania naszego kodu.
Wiki oczywiście mówi nam więcej : https://wiki.multith...m/wiki/Meta.xml

Kod z WIKI :
<meta>
	<info author="Slothman" type="gamemode" name="Stealth" />
	<config src="help.xml" type="client"/>

	<min_mta_version client="1.3.4 " server="1.3.4 " />

	<sync_map_element_data>false</sync_map_element_data>

	<script src="stealthmain_server.lua" />
	<script src="noiseblip.lua" />
	<script src="mission_timer.lua" />
	<script src="gadgets_server.lua" />
	<script src="gadgets_client.lua" type="client"/>
	<script src="stealthmain_client.lua" type="client"/>
	<script src="noisebar.lua" type="client"/>
	<script src="spycam.lua" type="client"/>
	<script src="riemann_z_demonstration.lua" type="client" cache="false"/>

	<file src="riot_shield.txd" />
	<file src="riot_shield.dff" />
	<file src="riot_shield.col" />
	<file src="armor.png" download="true"/>
	<file src="camera.png" download="false"/>
	<file src="cloak.png" />
	<file src="goggles.png" />
	<file src="mine.png" />
	<file src="radar.png" />
	<file src="shield.png" />

	<include resource="scoreboard" />
	<include resource="killmessages" />
	<include resource="maplimits" />

	<settings>
		 <setting name="roundlimit" value="[6]" />
  <setting name="teamdamage" value="[1]" />
  <setting name="teambalance" value="[1]" />
  <setting name="spazammo" value="[25]" />
  <setting name="m4ammo" value="[100]" />
  <setting name="shotgunammo" value="[25]" />
  <setting name="sniperammo" value="[20]" />
  <setting name="ak47ammo" value="[120]" />
  <setting name="rifleammo" value="[40]" />
  <setting name="deserteagleammo" value="[45]" />
  <setting name="pistolammo" value="[132]" />
  <setting name="uziammo" value="[150]" />
  <setting name="tec9ammo" value="[150]" />
  <setting name="silencedammo" value="[65]" />
  <setting name="grenadeammo" value="[4]" />
  <setting name="satchelammo" value="[4]" />
  <setting name="teargasammo" value="[4]" />
  <setting name="molatovammo" value="[4]" />
  <setting name="isAllowedToShoot" value="true" />
	 </settings>

	 <aclrequest>
  <right name="function.startResource" access="true" />
  <right name="function.stopResource" access="true" />
  <right name="function.setPlayerMuted" access="true" />
	 </aclrequest>

</meta>

Jest to bardzo proste zagadnienie dlatego myślę ze nie potrzeba na nie więcej czasu.
  • zmienne

Według definicji zmienną nazywamy miejsce przechowywania wartości, normalnie zdefiniowana zmienna typu :

zmienna = "tekst"

Jest zmienną globalną, czyli taką którą możemy użyć z poziomu innego pliku i np pobrać lub zmodyfikować jej zawartość.
Zmienną możemy zdefiniować jako lokalną :

local zmienna = "tekst"

W przypadku zdefiniowania zmiennej jako lokalnej używać jej możemy bezpośrednio tylko z poziomu pliku w którym została zdefiniowana.
Zmienne mogą przechowywać wiele typu wartości, tablice, string(tekst), cyfry, funkcje, elementy MTA (np. tekstury).

local numer = 1234 -- jeden typ wartości
local tablica = {"1234", 1234} -- dwa typy wartości, zdefiniowanej w tablicy, tablice opisze w kolejnej częsci poradnika.
local tekst = "jakiś tam tekst" -- zwykły tekst

Użyjemy w/w zmiennych w kolejnym zagadnieniu.
  • funkcje

Funkcje również możemy zdefiniować jako lokalną i globalną dla danej strony skryptu (serwer, client). W funkcji możemy użyć argumentów, czasem nawet musimy w przypadku zwrócenia jakiś danych przez EVENT ( eventy opisze w kolejnej części ), czyli wartości opcjonalne które będziemy przesyłać w do naszej funkcji aby dalej ich użyć. Przydkład funkcji :

function naszafunkcja (argument1, argument2)
--- KOD
end


Teraz napiszemy sobie prostą funkcje po stronie serwera ( po włączeniu skryptu każdy zobaczy wiadomość na czacie) która będzie pobierać nam wartość ze zmiennej oraz agumentów i pokazywać nam w konsoli :

local numer = 1234 -- jeden typ wartości
local tablica = {"1234", 1234} -- dwa typy wartości, zdefiniowanej w tablicy, tablice opisze w kolejnej częsci poradnika.
local tekst = "jakiś tam tekst" -- zwykły tekst

function naszafunkcja (argument1, argument2)
-- argument1 posiada teraz w sobie "jakiś tekst"
-- argument2 posiada teraz cyfry 1234

outputChatBox ("argument 1 : "..argument1)
outputChatBox ("argument 2 : "..argument2)

-- za pomoca ".." możemy łączyć w funkcji outputChatBox różne wartosci tekstu i cyfr

-- teraz pobierzemy wartości ze zmiennych

outputChatBox (numer) -- wyświetli "1234"
outputChatBox (tekst) -- wyświetli nam "jakiś tam tekst"

-- tablice opiszę w kolejnej części
end

naszafunkcja ("jakis tekst", 1234") --- wysyłamy wartości do funkcji w której wcześniej zdefiniowaliśmy opcjonalne argumenty.


Użytkownik butelka edytował ten post 29 wrzesień 2013 - 15:33

Dołączona grafika


#2 Enerv

  • Użytkownicy
  • 145 postów

Napisano 03 październik 2013 - 14:12

Dobre, jak na podstawy. Ale dodałbym tutaj klasy (na wzór tego chociażby) i jakiś wzorzec / architekturę programowania. Tj. kiedy używamy funkcji po stronie klienta, a serwera, itd.
Dołączona grafika

#3 patr0

    mistrz

  • Użytkownicy
  • 430 postów

Napisano 03 październik 2013 - 14:46

Strony skryptu, eventy, tablice opisze w następnej części

Dołączona grafika






Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych