Wysłany: 2017-02-05, 21:38
marcin778
Krytyk serwerów MTA
Wiek: 24 Na forum: 4149 dni Posty: 2268
Nick w MP: Marcineg
Piwa : 4662
Witam, postaram si? w tej 'serii' poradnik?w wyt?umaczy? krok po kroku LUA. Jest wiele poradnik?w na temat lua i jego podstaw, ale w ka?dym autor od razu rzuca si? na g??bok? wod?. Ja wyt?umacz? wszystko od A do Z. Zacznijmy.
LUA jest w bardzo du?ym stopniu oparte o j?zyk angielski, je?li go znasz to na pewno sobie poradzisz.
Ka?dy kod si? musi jako? 'zacz??' Kod to rozpisane funkcje i zmienne oraz zdarzenia.
Stw?rzmy funkcj?, kt?ra stworzy pojazd o id 448 obok gracza.
Jak wy?ej napisa?em 'stw?rzmy funkcj?' czyli zaczynamy function tworzymyPojazd ( plr ) po function nadajemy tej funkcji nazw?, a w nawiasach podajemy argumenty. W tym przypadku 'plr' to argument gracza, kt?ry wpisze komend? /pojazd
Teraz gdy ju? mamy rozpocz?t? funkcj? kontynuujemy kod. Musimy u?y? teraz funkcji wbudowanej w mta, kieruj?c si? logik? skoro ma to by? tworzenie pojazdu obok gracza to musimy pobra? pozycj? tego gracza, czyli u?ywamy pobiera nasz? pozycj?, ka?da funkcja co? zwraca, w tym przypadku ta funkcja zwr?ci nam po przecinku trzy liczby, x,y,z czyli nasz? pozycje, x to boki, y prz?d/ty?, z wysoko??. W funkcji musimy uwzgl?dni? argument gracza, kt?rego t? pozycj? chcemy pobra?, czyli w tym wypadku 'plr'. Nasz? funkcje musimy jako? zdeklarowa?, tak jak wy?ej napisa?em funkcja zwraca nam trzy warto?ci to nasza zmienna te? musi by? z?o?ona z trzech warto?ci, na przyk?ad pos1,pos2,pos3, lecz zazwyczaj jest to x,y,z mo?emy j? zdeklarowa? jak chcemy. local p1 , p2 , p3 = getElementPosition ( plr ) przedrostek local powoduje, ?e zmienna od funkcji b?dzie dzia?a? tylko w tej funkcji 'stworzPojazd' Czyli je?li zrobimy drug? komend? na np pokazywanie pozycji gracz to nie mo?emy u?y? tej samej zmiennej je??i jej nie zdeklarujemy. Teraz kieruj?c si? logik? chce stworzy? pojazd to po angielsku b?dzie to
createVehicle ( 448. p1 , p2 + 2 , p3
Powy?sza funkcja stworzy nam pojazd o id 448 obok gracza. Przeanalizujmy sobie j?. p1,p2,p3 to nasza zmienna od pozycji. Dlaczego dajemy p2+2 ? Dlatego, ?e spowoduje to stworzenie pojazdu obok gracza a nie bezpo?rednio na nim. Ka?da funkcja ma argumenty wymagane oraz opcjonalne, o takich argumentach mo?emy si? dowiedzie? za pomoc? wikipedi MTA, s? w niej zawarte wszystkie funkcje wbudowane w mta oraz dok?adnie opisane. Dobrze, gdy ju? mamy stworzony pojazd obok gracza, wy?wietlmy mu informacj? o tym.
outputChatBox ( "Stworzy?e? pojazd :)" , plr , 255 , 255 , 255 )
W funkcji r?wnie? mamy argumenty, w nawiasach. Kolejno jest to w stringu czyli ci?g znak?w w cudzys?owie " ", czyli tre?? informacji, potem mamy 'plr' czyli gracz, kt?remu chcemy t? wiadomo?? wy?wietli?, nast?pnie s? to 255,255,255 czyli kolor r,g,b - red green blue. Po argumencie koloru jest boolean czyli true albo false jest to opcjonalny argument, true spowoduje, ?e mo?emy w informacji u?y? kodu HEX np #00FF00Witaj wy?wietli zielony tekst, wtedy kolor r,g,b nie ma znaczenia. Je?li nie chcemy tam mie? koloru HEX tylko rgb to nie musimy dawa? false, wystarczy, ?e nic tam nie damy. Po u?o?eniu funkcji musimy j? zako?czy? czyli
Teraz trzeba by jako? do tej funkcji podpi?? komend?, Czyli addCommandHandler ( "pojazd" , stworzPojazd )
w nawiasach mamy argumenty ponownie stringu, czyli komenda oraz funkcj? do kt?rej podpinamy komend?.
Ca?y kod wygl?da? b?dzie tak:
function stworzPojazd ( plr )
local p1 , p2 , p3 = getElementPosition ( plr )
createVehicle ( 448 , p1 , p2 + 2 , p3 )
outputChatBox ( "Stworzono pojazd :)" , plr , 255 , 255 , 255 )
end
addCommandHandler ( "pojazd" , stworzPojazd )
Wa?na jest te? kolejno?? kodu, nie mo?emy np doda? komendy nad funkcj? czyli
addCommandHandler ( "pojazd" , stworzPojazd )
function stworzPojazd ( plr ) Poniewa?, funkcja ta jest na dole, a nie nad wi?c kod nie b?dzie wiedzia? co to 'stw?rzPojazd'. Wy?ej napomkn??em o rodzaju zmiennych, 'local'. Przedrostek local spowoduje, dzia?anie zmiennej na danej funkcji /danym zdarzeniu a nie ca?y kodzie. Czyli na przyk?ad
function cos ( plr )
local x , y , z = getElementPosition ( plr )
createVehicle ( 506 , x , y , z )
end
addCommandHandler ( "auto" , cos )
function cos2 ( plr )
outputChatBox ( "Twoja pozycja to: " .. x .. "," .. y .. "," .. z .. "" , plr )
end
addCommandHandler ( "pos" , cos2 )
To taki kod nam nie zadzia?a, poniewa? skrypt nie b?dzie wiedzia? co to x y z w funkcji cos2. Musimy zdeklarowa? pozycj? tak?e w funkcji cos2
function cos2 ( plr )
local x , y , z = getElementPosition ( plr )
outputChatBox ( "Twoja pozycja to: " .. x .. "," .. y .. "," .. z .. "" , plr )
end
addCommandHandler ( "pos" , cos2 )
Jest jeszcze drugi rodzaj zmiennych, 'globalne', zmienna globalna to taka, kt?ra dzia?a na ca?y kod.
Przyk?adowo
obiect = createObject ( 2464 , 0 , 0 , 0 )
function de ()
destroyElement ( obiect )
end
addCommandHandler ( "ds" , de )
Nie musimy wtedy w funkcji de deklarowa? obiektu czyli co to jest obiect poniewa? mamy go zdeklarowanego na ca?y kod.
Mo?na te? zrobi?
local obiect = createObject ( 2464 , 0 , 0 , 0 )
function de ()
destroyElement ( obiect )
end
addCommandHandler ( "ds" , de )
Wtedy zadzia?a to tak samo, dlaczego, skoro jest local? Dlatego, ?e jest to nad funkcj? czyli te? dzia?a na ca?y kod.
Po napisaniu naszego kodu i zapisaniu go jako plik lua, musimy do niego stworzy? met? czyli plik meta z rozszerzeniem xml. meta.xml - Nie mo?e on si? inaczej nazywa?. W pliku tym definiujemy nasz plik jako zas?b.
< meta >
< script src = "naszplik.lua" type = "server" />
</ meta >
"naszplik.lua" to ?cie?ka do naszego pliku, 'type' to strona pliku client lub server. Je?li jest to client musimy da? 'type = "client" natomiast je?li to server nie musi dawa? type="server" poniewa?, wtedy meta automatycznie przypisze plikowi stron? serwer. Aczkolwiek, je?li chcemy to mo?emy to doda? dla porz?dku. Je?li chcemy 'zabezpieczy?' nasz plik client przed kradzie?? to w mecie ustawiamy jego cache na false. Dzia?a to tylko na plikach client, poniewa? pliki server nie pobieraj? si? na dysk gracza, natomiast client tak. Dajemy wtedy 'cache="false" ' czyli
< script src = "naszplikclient.lua" type = "client" cache = "false" />
Ustawienie cache na false, spowoduje, ?e plik nie pobierze si? na dysk gracza, aczkolwiek b?dzie on w pami?ci RAM. Uzyskanie dost?pu do takiego pliku jest mo?liwe, ale tylko dla zaawansowanych informatyk?w. Jakie? strony client/ server o co w og?le chodzi?! - Chodzi o to, ?e w mta s? wbudowane funkcje, kt?re dzia?aj? tylko na danej stronie client lub server, s? te? takie, kt?re dzia?aj? na obydwu czyli obustronne. Na wikipedii mta opisane jako 'Shared function'. Czym r??ni si? client od servera? Tym, ?e server wykonuje si? u wszystkich graczy, a client tylko u danego gracza na komputerze. Np. funkcja dzia?a tylko na stronie clienta, poniewa? pobiera ona 'lokalnego' gracza. Przyk?adowo zdarzenie wykona si? osobie, kt?ra klikn??a jaki? element gui a nie ka?demu na serwerze. Wi?kszo?? prac dorywczych w wi?kszo?ci jest pisane na stronie client, poniewa? dany gracz pracuje a nie ka?dy. Na stronie client graczem jest zawsze localPlayer, lub zmienna od getLocalPlayer, czyli tam nie ma takiego czego? jak np. plr. To nasza funkcja na tworzenie pojazdu na stronie client'a wygl?da?a by tak:
function stworzPojazd ()
local p1 , p2 , p3 = getElementPosition ( localPlayer )
createVehicle ( 448 , p1 , p2 + 2 , p3 )
outputChatBox ( "Stworzono pojazd :)" , 255 , 255 , 255 )
end
addCommandHandler ( "pojazd" , stworzPojazd ) W funkcji outputChatBox nie ma 'plr' poniewa?, wiadomo?? wy?wietli si? tylko graczowi, kt?ry wpisa? komend?.
Ja osobi?cie do pisania polecam program Notepad++, kt?rego sam u?ywam. Dla pocz?tkuj?cych przydatnym do notepada++ jest styl/plugin od AteX'a. Na kolorowanie funkcji tak jak na wikipedii MTA. Czerwone - client, Pomara?czowe - Server, Niebieskie - Obustronne/Shared Z??te/Br?zowe to funkcje/elementy domy?lne z LUA tj. end, break, pairs,ipairs,in,math,local,function itd.
Przydatne linki:
Notepad++ https://notepad-plus-plus.org/download/v7.3.1.html
Sublime Text https://www.sublimetext.com/3 -- Program inny ni? notepad++
Styl/Plugin od AteX'a koloruj?cy sk?adnie http://gtao.pl/multithefa...02114cf1617837d
Wikipedia MTA https://wiki.multitheftauto.com/wiki/Main_Page
Dokumentacja LUA https://www.lua.org/docs.html
Przydatna jest te? komenda /debugscript3 na serwerze, kt?ra pokazuje nam wszystkie b??dy, w jakim pliku, w kt?rej linijce i co jest nie tak w naszym kodzie.
My?l?, ?e jak na pierwszy poradnik wprowadzaj?cy by?oby to na tyle. Mi?ego uczenia si?, niebawem kolejne cz??ci.
Ostatnio zmieniony przez marcin778 2017-06-04, 19:55, w całości zmieniany 5 razy
Więcej szczegółów
Wystawiono 20 piw(a):xMaXeRx , ProsiaczekP , Virahh , STOPseba , switel1200 , Makay , Dawcio77 , PenkY , Mateusz87956 , kaksonek , Bolt , theoriginalspac , Mezo. , Kacperiusz , MrKewciu , NeXt2k20 , Kosma , Suchy1001 , Piesek67 , umiemsalto14
Wysłany: 2017-02-05, 21:55
polaczkos
Wiek: 25 Na forum: 4085 dni Posty: 168
Nick w MP: polaczkos
Piwa : 3
Bardzo dobry poradnik i przejrzysty
[lua] local p1,p2,p3 = getElementPosition(plr)[lua] nie wstawiles / w [lua]
Wysłany: 2017-02-06, 16:20
_Haze
Peace Yo!
Wiek: 24 Na forum: 4184 dni Posty: 1648
Nick w MP: Haze
Piwa : 2628
marcin778 , poda?e? a powinno by? + skoro to 1 poradnik dlaczego nie opisa?e? p?tl, break, local, nazywania funkcji typu funkcja = function(). Pokaza?e? jak si? robi jakie? pierwsze skrypty ale ta wiedza jest nie przydatna kiedy kto? nie wie jak pos?ugiwa? si? local albo p?tlami albo eventami kt?rych tu nie opisa?e?. Warto te? doda? ?e zmienne lokalne "local" ?le opisa?e? poniewa? zmienna local dzia?a tylko na plik a globalna mo?e dzia?a? ponad zas?b. Mam nadziej? ?e w przysz?ych poradnikach opiszesz "wi?cej" i pocz?tkuj?cym i tak si? przyda ten poradnik ale zach?cam te? do obczajenia innych poradnik?w kt?re uzupe?ni? t? wiedz?
Wysłany: 2017-02-06, 16:52
marcin778
Krytyk serwerów MTA
Wiek: 24 Na forum: 4149 dni Posty: 2268
Nick w MP: Marcineg
Piwa : 4662
Hazmudex , To nie jest m?j pierwszy poradnik, pierwszy poradnik nt. nauki lua. Co do p?tli etc to wszystko w nast?pnych cz??ciach, tutaj jest takie wyt?umaczenie jak stworzy? poprawnie funkcj?. Jednak?e dzi?ki za opinie.
Wysłany: 2017-02-06, 18:17
Dexnes_
Tiger
Wiek: 26 Na forum: 4401 dni Posty: 620
Nick w MP: Dexnes
Piwa : 1394
marcin778 , Jak dla mnie poradnik bardzo dobry , dobrze wszystko wyt?umaczy?e? .
Hazmudex , Ale to nie ma znaczenia czego uczy si? na pocz?tku nowy skrypter . Przecie? osoba , kt?ra przeczyta?a poradnik marcina i czego? si? dowiedzia?a , nie b?dzie pisa?a od razu profesjonalnych skrypt?w. Wszystkiego po woli si? nauczy , a kolejno?? moim zdaniem jak na razie nie jest taka wa?na.
Poradnik naprawd? ciekawy
[ Dodano : 2017-02-06, 18:19 ]
@edit , m?g?y? doda? jeszcze program "sublime", gdyby kto? wola? inny program ni? notepad++
Wysłany: 2017-02-06, 22:25
ProsiaczekP
Wiek: 30 Na forum: 3636 dni Posty: 4
Nick w MP: Prosiak
Bardzoo fajniuchy poradnik leci zimne piweczkoo
Wysłany: 2017-02-24, 21:03
MIKAELmta
Wiek: 24 Na forum: 3978 dni Posty: 311
Piwa : 10617
Poradnik jest niez?y. Bardzo przejrzysty i zawiera dobre informacje, akurat takie kt?re trzeba na pocz?tku umie?.
Wysłany: 2017-02-26, 22:47
Virahh
Weteran MTA
Wiek: 24 Na forum: 3466 dni Posty: 38
Nick w MP: Eszteban
Piwa : 1326
Więcej szczegółów
Wystawiono 1 piw(a):PenkY
Wysłany: 2017-04-03, 09:25
.RiV
Wiek: 25 Na forum: 3588 dni Posty: 554
Nick w MP: Split
Piwa : 2596
Nie wiem czy jest sens od?wie?a? temat ale pocz?tkuj?cy u?ytkownicy mog? mie? problemy z jedn? liter?wk? ot?? w:
< script src = "naszplikclient.lua" , type = "client" cache = "false" />
Pozdrawiam
Podpis
Autor OGRPG, na scenie MTA od 2012 roku.
Użytkownik: 08.08.2016
GTAO Member: 06.02.2017
Support-Team: 17.06.2017 & 01.06.2019 - 18.11.2019
Moderator: 14.01.2018 - 09.08.2018
Więcej szczegółów
Wystawiono 1 piw(a):luki123luki123
Wysłany: 2017-05-05, 01:02
Telsky
Wiek: 27 Na forum: 3390 dni Posty: 8
Nick w MP: Telsky
Mo?e i od?wie?am temat, ale dopiero si? ucz? lua i chcia?bym si? wypowiedzie?.
marcin778 , poradnik dla pocz?tkuj?cych jak np. dla mnie jest bardzo dobry, jeden z lepszych, kt?re przeczyta?em, a by?o ich naprawd? spor. Piwko dla ciebie i mam nadziej? na odpowied? na GG.
Ps. podasz mi jaki? poradnik dotycz?cy MySQL? Bo mam z tym wielkie problemy, nawet nie wiem jaki jest port, nazwa bazy i host (1shot1kill - jak kto? wie mo?e mi odpowiedzie?).
Pozdrawiam.
Wysłany: 2017-05-22, 16:03
Emm
***** ***
Wiek: 32 Na forum: 3880 dni Posty: 3191
Nick w MP: Emm
Piwa : 6162
Administrator: Admin ma zawsze rację | REGULAMIN FORUM | REKLAMA/VIP | .
Podpis
Użytkownik : 20.10.2015r
GTAO Member : 06.03.2016r
Support-Team : 20.01.2016r
Moderator : 30.03.2016r
Mod-Team : 08.10.2016r
Vice Admin : 04.05.2018r
Administrator : 03.05.2022r
[you]
! Koniecznie zapoznaj się z
regulaminem forum .
Pamiętaj, aby zawsze go przestrzegać, nie mniej ważne są również
regulaminy działów , w których się wypowiadasz!
Zamiast zakładać temat po kilka razy, bo jest usuwany przez
Administrację , przejrzyj regulamin i napisz poprawnie temat!
Sprawy z administracją możesz załatwiać anonimowo w
tym dziale .
Najważniejsze informacje od
Administracji możesz przeczytać
tutaj oraz
tutaj .
Wysłany: 2017-06-03, 23:09
switel1200
Uczeń LUA
Wiek: 25 Na forum: 3408 dni Posty: 37
Nick w MP: Switel12
Piwa : 7
Bardzo przydatny poradnik troche ju? wiem od ciebie o j?zyku lua.
Daje piwko i czekam na kolejny poradnik.
A i mam pytanie czy da sie np. ?e jak gracz raz wpisz? t? komende to drugi raz b?dzie m?g? u?y? po danym czasie?
Wysłany: 2017-08-16, 14:22
Risk
Wiek: 26 Na forum: 3225 dni Posty: 5
Nick w MP: Risk
Wysłany: 2017-08-16, 14:33
Luqas
.lua <3
Wiek: 25 Na forum: 3455 dni Posty: 84
Nick w MP: Luqas
Piwa : 10
Risk , pewnie stworzy?e? skrypt po stronie serwera, i kod nie wie czym jest "p2".
Musisz zrobi? tak:
function stworzPojazd ( player )
local p1 , p2 , p3 = getElementPosition ( player )
createVehicle ( 448 , p1 , p2 + 2 , p3 )
outputChatBox ( "Stworzono pojazd :)" , player , 255 , 255 , 255 )
end
addCommandHandler ( "pojazd" , stworzPojazd )
Napisz czy dzia?a
Podpis
Pomogłem? Postaw Piwo lub/i respekt ^^
Wysłany: 2017-08-21, 11:25
Pevo
Jabłko
Wiek: 23 Na forum: 3589 dni Posty: 356
Nick w MP: Pevo
Piwa : 1571
Om?w jeszcze triggery
Tagi: lua :: kurs :: lekcja :: nr.
Anonymous
Na forum: 245 dni
Posty: 1
Anonymous Koniecznie zajrzyj na: