Reklama
Pokazuje wyniki od 1 do 10 z 10

Temat: [Lua] Od zera do skryptera, czyli LUA: Pętle i tablice*

  1. #1
    Avatar Grim90
    Data rejestracji
    2007
    Położenie
    Toruń / Brzozówka
    Wiek
    34
    Posty
    586
    Siła reputacji
    17

    Domyślny [Lua] Od zera do skryptera, czyli LUA: Pętle i tablice*

    Witam
    Jest to mój drugi artykuł, w którym opiszę najważniejsze rzeczy na OTS:
    - pętle, które wykonują coś kilka razy
    - tablice, które mogą przechowywać wiele danych

    Pętle:
    Przyjmijmy, że chcesz wykonać coś kilka razy, np. robisz skrypt, gdzie musisz trzy razy wysłać graczowi wiadomość "test".
    Można to zrobić w ten sposób:
    Kod:
    	doPlayerSendTextMessage(cid, 22, "test")
    	doPlayerSendTextMessage(cid, 22, "test")
    	doPlayerSendTextMessage(cid, 22, "test")
    Ale równie dobrze i wydajniej zrobić to za pomocą banalnej pętli:

    Kod:
    	for i = 1, 3 do
    		doPlayerSendTextMessage(cid, 22, "test")
    	end
    Krótkie objaśnienie:
    Dla i równego 1 do 3 zrób
    wyślij graczowi CID wiadomość test
    zakończ

    'i' jest tu tymczasową zmienną wykorzystaną w kodzie, od razu deklarujemy ją na wartość 1 i uruchamiamy pętlę od 1 do 3.

    Można 'i' wykorzystać też w zawartości pętli np.

    Kod:
    	for wartosc = 1, 5 do
    		doPlayerSendTextMessage(cid, 22, wartosc)
    	end
    Wówczas gracz otrzyma takie coś:
    1
    2
    3
    4
    5

    Jednocześnie.

    Tablice:
    Jest to zbiór wartości np. nagrody. Przykładem tablicy jest jedzenie w tibii :) Każde ID żywności ma swój znacznik zapełnienia gracza oraz odgłos jedzenia.

    Ok, do rzeczy:

    Kod:
    	local tabelka = {2160,2464,2470}
    	doPlayerAddItem(cid, tabelka[1], 1)
    Prościutki skrypt, w tym przypadku da nam jeden, pierwszy item z tabelki, czyli 2160 :)

    Teraz pomieszajmy pętlę z tablicą:

    Kod:
    	local tabelka = {2160,2464,2470}
    	for petelka = 1, #tabelka do
    		doPlayerAddItem(cid, tabelka[petelka], 1)
    	end
    Już wyjaśniam: tabelka przechowuje w klamerkach ID przedmiotów, które np. są nagrodami.

    Uruchamiam następnie pętlę od 1 do #tabelka. Jeśli podasz nazwę tabelki poprzedzając #, efektem będzie wartość oznaczająca, ILE dana tabela ma wartości, w tym przypadku #tabelka = 3, czyli uruchamia pętlę od 1 do 3.
    Natomiast w samej pętli dodaje nam 1 item tabelka[petelka]. Brzmi tajemniczo?
    To nie jest takie trudne, petelka to jest nasza pętla, w tym przypadku jej konkretny obrót, jeśli będzie np. tabelka[1] to będzie chodzić o 2160, jeśli 2 to 2464 a 3 to 2470, proste? Chyba tak :)

    Można w podobny sposób dodać też ilość nagród:

    Kod:
    	local tabelka = {2160,2464,2470}
    	local ilosc = {1,1,1}
    	for petelka = 1, #tabelka do
    		doPlayerAddItem(cid, tabelka[petelka], ilosc[petelka])
    	end
    No i jeszcze jedno ciekawe wykorzystanie tablicy, a mianowicie:
    Kod:
    	local tabelka = 
    	{
    		[2160] = {1, 2},
    		[2464] = {5, 7},
    		[2470] = {11, 22}
    	}
    To jest przykład tablicy, która przechowuje jeszcze więcej wartości, konkretnie, wartość w tej tabelu 2160 przechowuje 1 i 2 itd.
    Można to wykorzystać tak:
    Kod:
    	local tabelka = 
    	{
    		[2160] = {1, 2},
    		[2464] = {5, 7},
    		[2470] = {11, 22}
    	}
    
    	doPlayerSendTextMessage(cid,22,#tabelka[2160])
    Tutaj otrzymamy odpowiedź 2. 2 ponieważ jest {1, 2}, są to dwie wartości, więc suma dwóch ofc. wynosi 2.

    Można jeszcze zrobić o, tak:

    Kod:
    	local tabelka = 
    	{
    		[2160] = {1, 2},
    		[2464] = {5, 7},
    		[2470] = {11, 22}
    	}
    
    	doPlayerSendTextMessage(cid,22,tabelka[2464][2])
    Wyświetli wtedy nam się komunikat o treści 7. Dlaczego 7? Ponieważ podaliśmy, że chodzi o 2464 oraz drugą wartość, banalne.
    Mam nadzieję, że ten artykuł pomoże niektórym, pozdrawiam!
    Ostatnio zmieniony przez Grim90 : 26-07-2009, 23:34
    Piszę skrypty do OTS. Chcesz mieć unikalny quest, lub skrypt na swoim serwerze? Pisz do mnie. Na pewno się dogadamy.
    Piszę skrypty PHP, strony oraz gotowe serwisy, jeśli jesteś zainteresowany, napisz.
    http://radeg.pl

    Masz facebooka? Zapraszamy do grupy: Grim OTS!
    http://www.facebook.com/?ref=logo#!/...07707075989449

  2. #2
    Takeo

    Domyślny

    No proszę, wreszcie zrozumiałem tablice i funkcje :)

    Dzięki wielkie, bo z tym miałem kłopoty.

  3. Reklama
  4. #3
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    31
    Posty
    915
    Siła reputacji
    19

    Domyślny

    Sugeruję, aby tą część poradnika wzbogacić o informacje zawarte tutaj. Możesz kopiować żywcem, bądź też ubrać to w swoje słowa - mi to nie przeszkadza :).

    Pozdrawiam
    Killavus

  5. #4
    Avatar StaraJaga
    Data rejestracji
    2009
    Położenie
    Bydgoszcz
    Wiek
    30
    Posty
    141
    Siła reputacji
    15

    Domyślny

    Nie wiem moze nie zrozumialem tego co napisales i dla tego nie wiem, gdzie to napisac to :
    doPlayerSendTextMessage(cid, 22, "test")
    doPlayerSendTextMessage(cid, 22, "test")
    doPlayerSendTextMessage(cid, 22, "test")
    itd?

  6. #5
    Avatar Dziarecki
    Data rejestracji
    2007
    Położenie
    Szczecin
    Posty
    374
    Siła reputacji
    17

    Domyślny

    czy można tutaj wykorzystać s randa, tak jak w języku c++, aby dodało losowy item z podanych kilku?

  7. #6
    Avatar Grim90
    Data rejestracji
    2007
    Położenie
    Toruń / Brzozówka
    Wiek
    34
    Posty
    586
    Siła reputacji
    17

    Domyślny

    Cytuj Killavus napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Sugeruję, aby tą część poradnika wzbogacić o informacje zawarte tutaj. Możesz kopiować żywcem, bądź też ubrać to w swoje słowa - mi to nie przeszkadza :).

    Pozdrawiam
    Killavus
    Dzięki, dodam, gdy znajdę trochę czasu, owinę to we własne słowa.

    Btw. napisałeś to już jakiś czas temu, dopiero teraz zauważyłem...

    Cytuj StaraJaga napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Nie wiem moze nie zrozumialem tego co napisales i dla tego nie wiem, gdzie to napisac to :

    itd?
    Jak to gdzie? W skrypcie.

    Cytuj Dziarecki napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    czy można tutaj wykorzystać s randa, tak jak w języku c++, aby dodało losowy item z podanych kilku?
    Kod:
    local zmienna = math.random(zakres od, zakres do)
    if zmienna == ileś then
    	cośtam
    end
    Ostatnio zmieniony przez Grim90 : 29-06-2010, 02:42 Powód: dopiero teraz zauważyłem, że dałem jeden = w ifie
    Piszę skrypty do OTS. Chcesz mieć unikalny quest, lub skrypt na swoim serwerze? Pisz do mnie. Na pewno się dogadamy.
    Piszę skrypty PHP, strony oraz gotowe serwisy, jeśli jesteś zainteresowany, napisz.
    http://radeg.pl

    Masz facebooka? Zapraszamy do grupy: Grim OTS!
    http://www.facebook.com/?ref=logo#!/...07707075989449

  8. #7
    zjadlemszarancze

    Domyślny

    Ladnie ladnie bardzo mi pomogl dziekuje

  9. #8
    Avatar Qbee
    Data rejestracji
    2007
    Położenie
    W dużym kartonie Posty: 784
    Posty
    75
    Siła reputacji
    17

    Domyślny

    Cytuj Dziarecki napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    czy można tutaj wykorzystać s randa, tak jak w języku c++, aby dodało losowy item z podanych kilku?
    O to chodzi?
    [code]local tabelka = {2160,2464,2470}
    local rand = math.random(1, #tabelka)
    doPlayerAddItem(cid, tabelka[rand], 1)

  10. #9

    Data rejestracji
    2009
    Posty
    129
    Siła reputacji
    15

    Domyślny

    za duzo pisałeś
    ProstE?
    a tak to dobry poradnik
    7/10

  11. #10
    Sideth

    Domyślny

    Dobry poradnik, lecz za bardzo ogólny.
    Daje 6/10

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 2 użytkowników przegląda ten temat. (0 użytkowników i 2 gości)

Podobne tematy

  1. Tablice wzorów i stałych fizycznych.
    Przez Bubsztron w dziale Szkoła i nauka
    Odpowiedzi: 1
    Ostatni post: 01-05-2014, 20:39
  2. [C] tablice
    Przez Terr w dziale Programowanie
    Odpowiedzi: 8
    Ostatni post: 13-02-2014, 19:48
  3. [JAVA] Tablice - podstawowe operacje
    Przez Chrill w dziale Programowanie
    Odpowiedzi: 6
    Ostatni post: 18-10-2013, 12:58
  4. [C++,LUA,XML] Jak zacząć od zera programowanie ?
    Przez | Nurgiel | w dziale Strefa developerska
    Odpowiedzi: 3
    Ostatni post: 27-05-2011, 10:18
  5. [Lua] Od zera do skryptera, czyli LUA: PODSTAWY i Actions*
    Przez Grim90 w dziale Artykuły developerskie
    Odpowiedzi: 7
    Ostatni post: 02-08-2009, 01:05

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •