[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!