Stelma
Active User
- Joined
- Jan 6, 2009
- Messages
- 114
- Reaction score
- 19
{ Ten artyku? ma na celu podniesienie umiej?tno?ci skrypterskich ludzi na tym forum. Zaznaczam i? nie jestem alf? i omeg? dlatego te? prosz? wytyka? b??dy. }
Welcome - Czyli witam i s?owo o artykule
Jak wida? stopka wy?ej przedstawia i? artyku? ma na celu podniesienie umiej?tno?ci skrypter?w. Jednak znajdziecie w nim du?o ciekawostek nie tylko zwi?zanych z pisaniem skrypt?w w silnikach tibi. Wbrew pozorom Lua u?ywany jest w otwartych ?r?d?ach WoW'a czy Metin2 (japo?skiego na bank). Dlatego jak wida? jest to j?zyk bardzo szerokiego zastosowania. Jednak ka?dy kto my?li i? po tym artykule b?dzie potrafi? dos?ownie wszystko mo?e od razu zamkn?? zak?adk? i i?? do piaskownicy. Oczywi?cie prostych skrypt?w artyku? ten nauczy jednak bardziej rozbudowane czy skomplikowane aplikacje (nie ?artuje Lua mo?e wyst?powa? te? sam jak udowodni? mi to Yos z tnp, notabene skryptowy PHP te? ;p) b?dzie trzeba uczy? si? samemu. Dlatego prosz? czyta? ka?dy kawa?ek artyku?u i dopiero wtedy pr?bowa? nowych rzeczy.
Nihil - Dobre zwyczaje przy pisaniu.
Pewnie wi?kszo?? ludzi pominie ten rozdzia? jednak nalegam by przestudiowa? go od A-Z i ka?demu kto nie respektuje zasad tutaj przedstawionych wytyka? je paluchami.
Nihil.I - Przejrzysto??
Je?eli zabieramy si? do pisania skrypt?w to powinni?my zdawa? sobie spraw? ?e je?eli nasz skrypt uro?nie do ogromnych rozmiar?w to pisanie np warunk?w [if] w 1 linijce bez ?adnych odst?p?w od lewej strony mo?e sko?czy? si? bardzo tragicznie. Dlatego wi?kszo?? programist?w przyj??a metod? i? im dalej w las tym wci?cia s? bardziej oddalone od lewej kraw?dzi. Nie musicie wiedzie? co oznacza ten pseudo kod zaprezentowany poni?ej wystarczy i? wbijecie sobie ten wygl?d do g??w.
PHP:
V_var = {
a = 2,
x = 'olaszenko',
pilka = 'pilka'
}
if {warunek} then
{instrukcja}
{instrukcja}
{instrukcja}
end
function XxX( YyY, ZzZ )
{instrukcja}
{instrukcja}
{instrukcja}
end
function XxX( YyY, ZzZ )
if {warunek} then
{instrukcja}
{instrukcja}
{instrukcja}
end
end
Nihil.II - Nazewnictwo
W skryptach musicie pami?ta? o jednolitej metodzie jak? stosujecie do r??nych w?asnych nazw. Np je?eli u?ywamy w komentarzach j?zyka polskiego to r?wnie? w nazewnictwie zmiennych, funkcji stosujemy polskie nazwy. Jednak uczulam tutaj wszystkich i? og?lno?wiatowym j?zykiem jest angielski w wersji brytyjskiej. Dlatego prosz? o stosowanie w?a?nie jego. Natomiast je?eli zachodzi potrzeba wstawienia znaku spacji do nazw to wstawiamy znak '_' b?d? zaczynamy nast?pny wyraz du?? liter?.
Nihil.III - Komentarze
Ja wiem i? w momencie pisania skryptu b?dziemy ?wietnie wiedzie? do czego jaka zmienna s?u?y i co ona przechowuje wewn?trz siebie. Jednak gdy powr?cimy do kodu po pewnym czasie mo?e to wcale nie okaza? si? takim prostym. Dlatego te? uczulam was drodzy przy?li programi?ci o stosowanie komentarzy kt?r? b?d? nas nakierowywa? na znaczenie czego? czy wyja?nia? jak dzia?a dana funkcja.
Nihil.IV - Udost?pnianie kodu
Je?eli uwa?amy i? stworzyli?my co? naprawd? dobrego i jest to warte uwagi b?d? najzwyczajniej w ?wiecie zachodzi potrzeba podzielenia si? ?e ?wiatem jakim? kawa?kiem kodu. To nie spamujemy komu? na gg, aqq, tlen czy inny Irc. Tylko korzystamy z serwis?w do tego przeznaczonych. Oczywi?cie nale?y pami?ta? o estetyce kodu i komentarzach. Oto pare link?w gdzie mo?na wrzuca? tre?ci kod?w :
Nihil.V - ?redniki
A no w?a?nie mo?e dla wi?kszo?ci os?b na tym forum wyda si? to dziwne jednak tak samo jak w Pascalu czy Object Pascalu mo?emy u?ywa? ?rednik?w jednak czy ich u?ywa? to zdania s? podzielone. Ja jako zapalony delphiarz ch?tnie bym u?ywa? ich. Jednak du?a cz??? skrypter?w o tym nie wie (sam do niedawna nie wiedzia?em) ?e si? da. Dlatego te? jak zrobicie to zale?y tylko i wy??cznie od was samych. W tym artykule b?de pisa? raczej bez ?rednik?w chyba ?e b?dzie trzeba napisa? wi?kszy kawa?ek kodu to dla w?asnej wygody je zastosuje. Przedstawiam odrazu kawa?ek kodu kt?ry jak mo?e si? przekona? dzia?a poprawnie.
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'dzila');
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'dzila2');
return false
end
Nihil.VI - Parser
Parser jest programem b?d? funckj? programu dzi?ki kt?remu zacznie ?y? nasz skrypt. Jest potrzebny do testowania dzia?alno?ci skrypt?w itp. O ile tfs posiada wbudowany parser o tyle nie op?aca czasami odpala? si? silnika by przejrze? pare rzeczy. Dlatego te? gor?co polecam parser jaki ju? by? udost?pniany u nas na forum przez gelio.
{ W?a?ciwa cz??? poradnika I rozdzia? }
I. Zmienne i jej typy
Na wst?pie zaznaczam i? nie nadmienie wszystkich informacji je?eli chodzi o zmienne w lua. Jednak b?d? si? stara? by by?y do?? kompletne i niczego im nie brakowa?o. Jednak polecam poczyta? jeszcze pare kurs?w na sieci.
I.Info
Ten taki wst?p ma wyja?ni? pare spraw kt?re tak naprawd? pocz?tkuj?cy programi?ci bardzo cz?sto pomijaj? przez co p??niej zachodzi wielki problem z logicznym my?leniem czy napisaniem algorytmu. Chodzi mi tutaj mianowicie o bardzo prost? sformu?owanie "Do czego s?u?? zmienne". Zmienne maj? s?u?y? do chwilowego przechowywania pewnych informacji jakie uzyskujemy ze ?r?de?. Ponadto s?u?? do przechowywania oblicze?. Deklarowanie zmiennej tylko poto by j? w p??niejszym czasie wy?wietli? mija si? z celem, bo je?eli mo?na powinno si? takie czynno?ci wykonywa? tam gdzie wy?wietlamy warto?? zmiennej.
I.I Nazewnictwo
Nazewnictwo jest do?? dowolne. Jednak przyje?o si? w gronie programist?w i? nazwy zmiennych pisane s? w j?zyku angielskim / takim w jakim reszta j?zyka i komentarze (w przypadku tfs - angielski). Dobrym zwyczajem jest nazywanie zmiennych w spos?b kt?ry pozwoli ustali? do?? szybko co robi dana zmienna np. Zmienne przechowuj?ce nazwy p?yt mo?emy nazywa? AlbumCD, Album, Album_cd itd.
I.II Dozwolone nazewnictwo [/b]
Nazwy zmiennych mog? zawiera? takie litery jak (bez przecink?w): _, a-z, A-Z, 0-9. Zaznaczaj?c i? nazwa nie mo?e zaczyna? si? od cyfry. Wszelkie inne znaki s? nie dozwolone przy nazywaniu zmiennych i radz? to sobie dobrze zapami?ta?.
I.III Deklaracja zmiennnych
W j?zyku Lua nie ma rygorystyki je?eli chodzi o typy zmiennych. Wszystkim zajmuje si? silnik kt?ry przetwarza pliki ze skryptami dlatego te? nie trzeba przejmowa? si? tym co posiada dana zmienna. W razie konieczno?ci zostanie ona samoczynnie przekonwertowana na odpowiedni? warto??. Jedyne o czym musimy pami?ta? jest zasi?g zmiennych. Zasi?g oznacza to czy zmienna b?dzi? widoczna jedynie w naszym skrypcie czy te? dla ca?ej "zawarto?ci" skrypterskiej. Odr??niamy dwa zasi?gi : "Lokalny", "Globalny".
Zasi?g Lokalny :
Niestety w ?wie?ym silniku nie mo?e by? przyk?adu tych zmiennych poniewa? jak sama nazwa wskazuje ich zasi?g czyli widoczno?? jest ograniczona do miejsca gdzie zosta?a wywo?ana. Deklaracja tych zmiennych polega na poprzedzeniu nazwy s?owem kluczowym "local". Trzeba zaznaczy? i? zmienne te wywo?ane wewn?trz funkcji "gin?" razem z zako?czeniem dzia?alno?ci funkcji.
PHP:
local Norbi = 2
local Doda = 'Piosenkarka'
local Kasyno = False
Zasi?g Globalny :
Przyk?adem zmiennych globalnych s? np : "NORTH", "COMBAT_DEATHDAMAGE", "SHIELD_WHITEYELLOW" i wiele wiele innych. Globalny zasi?g oznacza to nic innego jak to i? dana zmienna mo?e by? u?yta w ka?dej funkcji i b?dzie posiada?a warto?ci. Deklaracja tego typu zmiennej nie wymaga ?adnego wysi?ku z naszej strony. Piszemy poprostu jej nazw? i przypisujemy warto??. Rygorystyka nazewnictwa tego typu zmiennych jest taka sama jak zmiennych lokalnych. Cho? w?r?d programist?w na ?wiecie przyje?o si? pisanie ich z wielkich b?d? samymi wielkimi literami. Zaznaczam i? zmienna zadeklarowana w funkcji b?dzie dalej istnie? nawet po zako?czeniu "matki" funkcji.
PHP:
NORBI = 2
DODA = 'Piosenkarka'
KASYNO = False
..:: Uwaga ::..
Zmienna lokalna zadeklarowana w ciele funkcji jest wa?niejsza od zmiennej globalnej ! Dlatego te? unikaj powt?rze? nazewnictwa. Miejcie r?wniez na uwadze i? lua odr??nia wielko?? liter. Dlatego zmienna Global oznacza co innego ni? global.
I.IV Typy zmiennych
Wiem w poprzednich podrozdzia?ach pisa?em i? Lua nie posiada rygorystyki je?eli chodzi o zmienne. Faktycznie tak jest jednak musimy pamieta? i? ka?da zadeklarowana zmienna mo?e tak naprawd? posiada? wewn?trz siebie jaki? typ. Dlatego przyda?o by si? je zna? tymbardziej i? s? do?? proste.
- Warto?? liczbowa ( ka?da liczba nie zale?nie czy z u?amkiem czy bez, dodatnia czy ujemna )
- Warto?? logiczna ( prawda b?d? fa?sz... True / False )
- ?a?cuch znak?w ( ci?g znak?w np 'ola', "tomeczek", 'Ima121' )
- Tablica ( dowiesz si? p??niej o tym typie zmiennych )
- Nil ( pusty typ wyst?puje przy pustej deklaracji np local Ola, OLA czy local ola = nil )
I.V Sprawdzanie typ?w
Mimo i? Lua dba o prostot? i by programista nie musia? martwi? si? o zgodno?? typ?w. Udost?pniana jest funkcja j?zyka kt?ra zwraca nam ?a?cuch znak?w kt?ry informuje o tym jakiego typu jest zmienna. Oto przyk?ad u?ycia funkcji i jej mo?liwe zwr?cone warto?ci.
PHP:
local Temp = 2 -- Deklaracja zmiennej liczbowej
Temp = type( Temp ) -- Przypisanie zmiennej `Temp` warto?ci jak? zwraca sprawdzenie zmiennej `Temp`
--[[
Mo?liwe warto?ci jakie zwr?ci funkcja [b]type()[/b]
- liczba -> 'number'
- ?a?cuch -> 'string'
- tabica -> 'table'
- logiczna -> nil
- Nil -> nil
]]--
I.VI ?a?cuchy znak?w
Jest to specyficzny typ zmiennych poniewa? przechowuje on wiele znak?w kt?re tworz? razem zdanie, s?owo itp jednak pojedy?cza litera r?wnie? jest nazywana ci?giem znak?w. Oto najproszczy przyk?ad deklaracji zmiennej z ci?giem znak?w.
PHP:
local Temp = 'Ciag znakow'
local Mobs = "Ciag znakow"
Jak ka?dy pewnie zauwa?y? zadeklarowa?em dwie zmienne na dwa troszeczk? inne sposoby. Na szcz??cie r??nica mi?dzy nimi jest minimalna i zaleca si? stosowanie ' ' zamiast " " poniewa? jest szybsza. Wcze?niej powiedzia?em i? jest to specyficzny typ zmiennej dlaczego ?, a no odwo?a? si? mo?na do ca?ego ci?gu znak?w b?d? do ka?dej litery z osobna. Jednak ten temat zostanie poruszony troszeczk? p??niej.
I.VII Tablice
{ Nie omawiam tutaj modu?u Table, jest on na tyle obszerny ?e aby to zrobi? dok?adnie b?dzie potrzebny zupe?nie odzielny temat }
Je?eli warto?? liczbowa czy warto?? logiczna jest do?? prosta do wyobra?enia sobie to ju? z tablicami tak prosto nie jest. Ja zawsze swoim znajomym t?umacz? i? tablica to tak naprawd? kartka papieru (je?eli chodzi o tablice 2 wymiarow?) poniewa? litery zawieraj?ce tekst s? podzielone wed?ug wiersza, kolumny co daje nam efekt [x][y]. Teraz zaprezentuje wam najpro?ciej wygl?daj?c? tablice :
PHP:
local Temp = {}
Prawda ?e proste. Jest to pusta tablica ja sobie nazywam j? dynamiczn? poniewa? nie okre?lam ile b?dzie mia?a element?w itp. Jednakowo? w Lua ka?da tablica jest tablic? dynamiczn? ! oznacza to i? mo?e powi?ksza? jak i pomniejsza? swoj? zawarto??. Lecz do tego dojdziecie z biegiem czasu sami. Nale?y jednak pami?ta? i? tablice domy?lnie s? numerowane od 1.
Aby otrzyma? ilo?? element?w jakie posiada tablica nale?y u?y? znaczka # przed nazw? zmiennej.
PHP:
local Temp = { 1, 3, 5 }
print ( #Temp ) -- Zwr?ci 3. Poniewa? mamy 3 elementy
Teraz zaprezentuj? jak zadeklarowa? tablice posiadaj?c? jeden element na trzy sposoby. Pierwszy b?dzie prost? deklaracj?, a drugi powi?kszeniem tablicy o 1 element w ostatnim sposobie poprostu sobie wstawimy warto?? o tak z pupala.
PHP:
local Temp = {}
local Gugu = {}
local Nobm = { 'Pojedy?czy element' } -- Zadeklarowanie zmiennej tablicowej z jedym elementem ?a?cuchowym
Gugu[1] = 'Pojedy?czy element' -- Je?eli element istnia?by to zosta?by zast?piony, tak tylko dodali?my nowy element
Table.insert(Temp, 'Pojedy?czy element') -- Wstawienie elementu na ko?cu tablicy, ta konstrukcja b?dzie p??niej omawiana dok?adnie
Uh Uh prawda i? programowanie jest banalne ? Ale w powy?szym przyk?adzie powiedzia?em i? zadeklarujemy tablice posiadaj?c? 1 element. Prawd? m?wi?c to troszeczk? was oszuka?em. Poniewa? w?a?nie mieli?my styczno?? z tablicami 2 wymiarowymi ! Pewnie ka?dy z was spyta si? jak to mo?liwe, a no bardzo prosto. Poniewa? ?a?cuch znak?w r?wnie? sam w sobie jest tablic? gdzie pojedy?czym elementem jest znak. Jednak rz?dzi si? on troszeczk? innymi prawami ni? normalne tablice.
Troszeczk? si? zagalopowali?my. Wi?c na chwile wr??my do deklaracji tablicy. Wyobra?my sobie i? dostali?my zadanie by zapisa? w tablicy ca?? nasz? klase (3 osoby). Mo?emy to uczyni? na oko?o 10 sposob?w jednak ja wybior? dwa naj?atwiejsze oto przyk?adowy ich zapis.
PHP:
local Class = { [1] = 'Monika Lis',
[2] = 'Sandra Kasandra',
[3] = 'Misia Bisia' }
local MyClass = { 'Monika Lis',
'Sandra Kasandra',
'Misia Bisia' }
W pierwszym sposobie przypisujemy na sztywno indeksy (te liczby w nawiasach jak si? odow?ujemy), a drugi spos?b polega na deklarowaniu tablicy poprzez dodawanie element?w jeden po drugim. Mam nadzieje i? jest to do?? przejrzyste je?eli nie to przedstawiam t? sam? deklaracje co ma zmienna Class jednak na inny spos?b.