Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Inne] Tablice w questach - czyli czym to się je


Rekomendowane odpowiedzi

Opublikowano

Quest świetny, mógłbyś zrobić tutorial o tablicach :)

No to lecimy z tym koksem :D

 

Tablice w questach - czyli czym to się je

 

Zacznijmy od tego, że nie znam się na fachowych terminach i jeśli zlamię coś w tym poradniku to nie bić mnie tylko zwrócić mi uwagę, a poprawię.

 

Podstawowe informacje

 

Tablice w questach są bardzo przydatne. Możemy dzięki nim pozbyć się 23489732 ifów i zastąpić je jedną tablicą w kilkoma rekordami, do których możemy się bardzo łatwo odwoływać, edytować je, a nawet usuwać. Warto dodać, że tablica może przechowywać liczby, wyrazy (lub zdania), lokalne a nawet wszystko to razem. Istnieje tylko jedna bardzo ważna zasada - należy używać przecinka po każdym rekordzie. Jeśli tego nie zrobimy to nasza tablica po prostu nie będzie działać o kompilator będzie szalał.

Na początek prezentacja wyglądu tablicy:

local tablica = {"Pierwszy rekord", "Drugi rekord", "Trzeci rekord"}

 

Mówiłem, że do tablic można się w bardzo prosty sposób odwoływać. Wyjaśnienie dla zielonych co to znaczy: oznacza to, że możemy sobie wybrać dowolny rekord z tej tablicy i wykonywać na nim akcje. Taki mały przykład:

local dni_tygodnia = {"Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"}
say("Podaj numerek dnia tygodnia a wyświetlę nazwę:")
local numerek = input()
say(dni_tygodnia[numerek])

 

Oczywiście pominąłem tutaj zabezpieczenia w stylu wyjście poza zakres czy wpisanie liter, ale narazie nie o tym. Jeśli wpiszemy liczbę 3 to wyświetli się nam trzeci rekord z tablicy, czyli "Środa". Wniosek z tego taki, że do określonego rekordu w tablicy odwołujemy się w następujący sposób:

nazwa_tablicy[rekord_ktory_chcemy_odczytac]

 


Zmiana kolejności w tabeli

 

Standardowa tablica zaczyna się od numeru 1, jednak możemy to w prosty sposób zmienić:

local bonusy = {
   [29] = "Odporność na miecze",
   [30] = "Odporność na dwurękę ",
   [31] = "Odporność na sztylety",
   [32] = "Odporność na dzwony",
   [33] = "Odporność na wachlarze",
   [34] = "Odporność na łuki",
}
local n = number(29, 34)
say("Wylosowany dla Ciebie bonus to "..bonusy[n])

Mamy tablicę zawierającą rekordy o przypisanych numerach, następnie losujemy liczbę z tego zakresu i wyświetlamy nazwę. Proste, prawda?

 


Tablice w połączeniu z pętlą for

 

Tablice bardzo często przydają się jeśli mamy wykonać jakąś czynność x razy. Przydaje się do tego również pętla for. Najlepszym tego przykładem jest quest give_basic_weapon. Większość osób robi to w następujący sposób:

pc.give_item2(123, 1)
pc.give_item2(124, 1)
pc.give_item2(125, 1)
pc.give_item2(126, 1)
...
pc.give_item2(243, 1)
pc.give_item2(34, 2)
pc.give_item2(354, 5)

 

A teraz pokażę wam questa z tablicą i pętlą for:

local itemy = {123, 234, 345, 45, 56, 223, 1235, 4934, 28456}
for i = 1, table.getn(itemy) do
   pc.give_item2(itemy[i], 1)
end

 

Na początku tworzymy sobie tablicę z id przedmiotów, które chcemy dać. Następnie zaczynamy pętlę for. Widać tam funkcję table.getn. Nie robi ona nic więcej jak zwraca nam ilość rekordów w tablicy. Tak więc pętla będzie się wykonywać od 1 (pierwszego rekordu) do długości tablicy (ostatniego rekordu). Następnie w pętli mamy funkcję dającą przedmiot, w którym mamy itemy. i jest to liczba, która rośnie nam za każdym wykonaniem pętli. Nie wiem co o tym więcej pisać, jest to najlepsze zastosowanie pętli i tablicy, w razie pytań pisać.

 

Tablice wielowymiarowe

 

Powyższy przykład ma jedną wadę - dajemy zawsze jedną sztukę przedmiotu. Aby wyeliminować ten problem istnieje coś takiego jak tablice wielowymiarowe. Wygląda to mniej więcej tak:

local tablica = {
   {"To pole to [1][1]", "To pole to [1][2]"},
   {"To pole to [2][1]", "To pole to [2][2]", "To pole to [2][3]"},
   {"To pole to [3][1]"},
}

 

Jak widać, teraz tablica jest bardziej rozbudowana. Posiada mniejsze tablice wbudowane w jedną, główną. Jak odczytać do którego elementu chcemy się odwołać? Dzięki logicznemu stosowaniu eneterów u mnie łatwo jest to oczytać. Każda kolejna linia oznacza następny element w tablicy "tablica" (jeśli chcemy się odwołać do tekstu "To pole to [2][2]" wystarczy wpisać "tablica[2][2]") i definiujemy to liczbą w pierwszym nawiasie kwadratowym, drugi nawias kwadratowy oznacza rekord w wybranym wcześniej elemencie. Teraz poprzedni przykład dawania itemów z zastosowaniem tablicy wielowymiarowej:

local itemy = {
   {123, 2},
   {34534, 200},
   {10, 1},
   {45, 4},
   {567, 12},
}
for i = 1, table.getn(itemy) do
   pc.give_item2(itemy[i][1], itemy[i][2])
end

 

Jak widać odwołujemy się najpierw do i-tego elementu w tablicy "itemy" a później wybieramy pierwszy rekord z tego elementu (id przedmiotu). Następnie znowu odwołujemy się do i-tego elementu z tablicy "itemy" ale tym razem wybieramy drugi rekord (ilość przedmiotu). Takie tablice możemy budować w nieskończoność, ilość tablic w tablicach zależy tylko i wyłącznie od nas.

 

Optymalizacja questów (zamiana kilku if na tablicę)

 

Skoro już wiemy jak budować tablice i do jakich celów możemy je stosować to stwórzmy prostego questa, niech będzie to sklep. Idziemy do npc, wybieramy z listy (select) przedmiot, cena jest ustalona, ilośc sztuk wybieramy sami. Napiszę tego questa dwoma metodami: pierwsza to będzie (jak ja to mówię) "na MPC" czyli wykonana na if'ach, a druga będzie na tablicy:

 

Przykład pierwszy z if'ami i przyznajmy szczerze, większość z was by to tak zrobiła:

 

quest sklep_z_itemami begin
   state start begin
       when 20011.chat."Sklep z przedmiotami" begin
           say_title("Nazwa npc:")
           say("Witaj, zajmuje się sprzedażą przedmiotów.")
           say("Oto co mogę Ci zaoferować:")
           local a = select("Czerwona Mikstura (D)", "Niebieska Mikstura (D)", "Zielona Mikstura (D)", "Anuluj")
           if a == 4 then
               return
           elseif a == 1 then
               say("Koszt zakupu jednej misktury to 50 Yang.")
               say("Chcesz kupić?")
               local b = select("Tak", "Nie")
               if b == 1 then
                   say("Wpisz ile sztuk chcesz kupić:")
                   local input = tonumber(input())
                   if input < 0 or input > 200 or not tonumber(input()) or input == "" then
                       say("Nie możesz mi psuć questa!")
                   elseif pc.get_gold() < input*50 then
                       say("Masz za mało yang!")
                   else
                       pc.give_item2(27003, input)
                       pc.change_gold(-input*50)
                   end
               end
           elseif a == 2 then
               say("Koszt zakupu jednej misktury to 80 Yang.")
               say("Chcesz kupić?")
               local b = select("Tak", "Nie")
               if b == 1 then
                   say("Wpisz ile sztuk chcesz kupić:")
                   local input = tonumber(input())
                   if input < 0 or input > 200 or not tonumber(input()) or input == "" then
                       say("Nie możesz mi psuć questa!")
                   elseif pc.get_gold() < input*80 then
                       say("Masz za mało yang!")
                   else
                       pc.give_item2(27006, input)
                       pc.change_gold(-input*80)
                   end
               end
           elseif a == 3 then
               say("Koszt zakupu jednej misktury to 200 Yang.")
               say("Chcesz kupić?")
               local b = select("Tak", "Nie")
               if b == 1 then
                   say("Wpisz ile sztuk chcesz kupić:")
                   local input = tonumber(input())
                   if input < 0 or input > 200 or not tonumber(input()) or input == "" then
                       say("Nie możesz mi psuć questa!")
                   elseif pc.get_gold() < input*200 then
                       say("Masz za mało yang!")
                   else
                       pc.give_item2(27102, input)
                       pc.change_gold(-input*200)
                   end
               end
           end
       end
   end
end

 

 

Sposób drugi, z tablicą:

 

quest sklep_z_itemami begin
   state start begin
       when 20011.chat."Sklep z przedmiotami" begin
           local przedmioty = {
               {27003, 50},
               {27006, 80},
               {27102, 200},
           }
           say_title("Nazwa npc:")
           say("Witaj, zajmuje się sprzedażą przedmiotów.")
           say("Oto co mogę Ci zaoferować:")
           local a = select(item_name(przedmioty[1][1]), item_name(przedmioty[2][1]), item_name(przedmioty[3][1]), "Anuluj")
           if a == 4 then
               return
           end
           local koszt = przedmioty[a][2]
           say("Koszt zakupu jednej misktury to "..koszt.." Yang.")
           say("Chcesz kupić?")
           local b = select("Tak", "Nie")
           if b == 1 then
               say("Wpisz ile sztuk chcesz kupić:")
               local input = tonumber(input())
               if input < 0 or input > 200 or not tonumber(input()) or input == "" then
                   say("Nie możesz mi psuć questa!")
               elseif pc.get_gold() < input*koszt then
                   say("Masz za mało yang!")
               else
                   pc.give_item2(przedmioty[a][1], input)
                   pc.change_gold(-input*koszt)
               end
           end
       end
   end
end

 

 

Kilka pytań zapewne do tego będzie, a więc:

1. W select'cie zwracam sobie nazwy przedmiotów z bazy, przez co możemy zmieniać id w tablicy a nazwa sama się zmieni

2. Kod skrócił się o połowę i działa tak samo, a to wszystko dzięki tablicy

3. Po select'cie nie muszą być warunki (to takie info dla tych co nie wiedzą)

 

Tablica a select

 

Jednym z ciekawszych zastosowań tablic są select'y. Dzięki nim nie musimy wpisywać 5x danej nazwy w queście tylko możemy się do niej odwoływać poprzez wybrany numerek z select'u. Jak to działa?

quest testujemy_select begin
   state start begin
       when letter begin
           send_letter("Zabij potwory")
       end

       when button or info begin
           local tab = {101, 102, 103}
           say("Wybierz potwora z listy:")
           local a = select(mob_name(tab[1]), mob_name(tab[2]), mob_name(tab[3]), "Anuluj")
           if a == 4 then
               return
           end
           local wybrany_mob = tab[a]
           say("Wybrałeś potwora o nazwie "..mob_name(wybrany_mob)..".")
           say("Zabij 5 takich potworów by ukończyć misję.")
           say("")
           pc.setqf("potwor_do_zabicia", wybrany_mob)
           set_state(kill)
       end
   end

   state kill begin
       ...
   end
end

Darowałem sobie state z zabijaniem bo nie o to tu chodzi. Jak widać, mamy tablicę z trzema potworami. Funkcja mob_name() zamienia id potwora na nazwę z mob_proto. Każdy wybór z selecta zawiera tą funkcję i odwołanie do danego miejsca w tablicy (1, 2 i 3). W ten oto sposób mamy wyświetlenie nazwy potwora bez konieczności jej pisania. Po select'cie, przy wyborze czwartego pola robię returna, tak na wszelki. Następnie nie ma żadnych if'ów, ponieważ ta część questa działa dla każdego z wybranych elementów (czy to pierwszy, drugi czy trzeci). W zmiennej "wybrany_mob" przechowuję sobie id wybranego potwora. Pozwala mi to na wyświetlenie jego nazwy oraz ustawienie odpowiedniego qf. Spróbujcie zapisać sobie nazwę wybranego potwora i przerzucić ją do następnego state. Owszem, że się da, ale po co skoro można to zrobić na prostej tablicy, która tak bardzo ułatwia nam życie!

 

table.insert i table.remove

 

Nasze tablice nie muszą być stałe, możemy je rozszerzać, a także zmniejszać w trakcie questa. Na początek opis argumentów jakie przyjmuje table.insert() (są 2 opcje):

- table.insert(nazwa_tablicy, wartosc) - w tym przypadku wartosc doda się na koniec tablicy

- table.insert(nazwa_tablicy, miejsce, wartosc) - w tym przypadku wartosc doda się w podane miejsce w danej tablicy.

 

Jeśli chodzi o drugi przykład to warto nadmienić pewną rzecz, którą zaprezentuję opisowo:

tablica = {1, 2, 3, 4}
table.insert(tablica, 3, 10)
----------------------------
wynik końcowy:
tablica = {1, 2, 10, 3, 4}

 

Jak widać, table.insert nie zamienia nam danego miejsca w tablicy lecz wpycha w podane miejsce daną wartość. Aby zamienić liczbę w danym miejscu należy tak to rozwiązać:

TO MUSI KTOŚ PRZETESTOWAĆ!!!
tablica = {1, 2, 3, 4}
tablica[3] = 10
---------------
wynik:
tablica = {1, 2, 10, 4}

lub tak:

tablica = {1, 2, 3, 4}
table.remove(tablica, 3)
table.insert(tablica, 3, 10)
---------------
wynik:
tablica = {1, 2, 10, 4}

 

W powyższym przykładzie zastosowałem table.remove więc raczej każdy załapie jak się tego używa.

 

Aby unaocznić wam praktyczne zastosowanie table.insert to na koniec mała prezentacja jak można tego używać:

quest table_insert begin
   state start begin
       when 9003.chat."Wylosuj mi kilka liczb" begin
           say("Podaj ile liczb mam wylosować:")
           local ilosc = tonumber(input())
           say("Podaj maksymalną liczbę jaką mogę wylosować:")
           local max = tonumber(input())

           local tablica = {} -- przed petla tablica jest pusta
           for i = 1, ilosc do -- petla bedzie sie wykonywac od 1 do podanej ilosci
               local n = number(1, max) -- losowanie liczby od 1 do podanej max
               table.insert(tablica, n) -- umieszczenie w tablicy wylosowanej liczby
           end

           for i = 1, ilosc do
               say("Liczba z tablicy nr "..i.." to: "..tablica[i]..".")
           end
       end
   end
end

 

Jak widać, na początku zdefiniowałem sobie zmienną tablica i "utworzyłem" w niej tablicę. Dzięki temu zabiegowi mogę odwołać się do tej tablicy poza pętlą a także w niej. Myślę, że komentarze które podopisywałem są wystarczająco i wyjaśniają jak to można ładnie połączyć. Ta ostatnia pętla ma na celu jedynie wyświetlenie naszych liczb z tablicy (dowód na to, że wszystko działa)

 

Słowem podsumowania...

 

Poradnik będę ciągle uzupełniał (jeśli tylko przyjdzie mi coś do głowy). Dnia 18.12.2012r. został poprawiony wygląd i dodane 2 końcowe podpunkty (tablica a select, table.insert i table.remove)

 

W razie pytań i błędów jak zwykle pisać w temacie, propozycje też są mile widziane.

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

Ło jezu ile pisania.

 

Gz :D

Gdyby ludzie rozmawiali tylko o tym, co rozumieją, zapadłaby nad światem wielka cisza

Albert Einstein

Opublikowano

Dzięki wielkie Sun :)

Mógłbyś jeszcze wyjaśnić jak np: dodać tablicę do selecta, zamiast:

s = select("Item1",Item2...)

to

s = select(rekordy z tablicy)

Bardzo by mi to pomogło przy systemie achievementów ;)

ePc0b.jpg

mcn_cc.pl - banda złodziei

;)

Piszę questy na zamówienie - Zostanę questerem na serwerze dedykowanym - Na zlecenie napiszę questy - Zakoduję stronę HTML5/CSS3

Opublikowano

Dzięki wielkie Sun :)

Mógłbyś jeszcze wyjaśnić jak np: dodać tablicę do selecta, zamiast:

s = select("Item1",Item2...)

to

s = select(rekordy z tablicy)

Bardzo by mi to pomogło przy systemie achievementów ;)

Zaglądnij do przykładu w którym przerabiałem quest z if'ami na quest z tablicą ;)

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

Nie wiem ile oni CI płacą, ale raczej sporo , bo się opisałeś za tydzień. Oczywiście limit dostałeś :D

nexi.png

 

CYTOWAĆ MOJE POSTY, JEŚLI LICZYCIE NA POMOC !!

Opublikowano

Jeden z niewielu coś dających tutorali ostatnimi czasami.

Co prawda coś tam z tego umiałem ale nie wszystko.

Dzięki!

Zapraszam serdecznie na moją  nową stronę: https://przeglad-internetu.pl. Znajdziesz tam sporo śmiesznych treści z internetu w celu zapewnienia Ci najlepszego contentu i zaoszczędzeniu czasu! 🙂

Opublikowano

Nie wiem ile oni CI płacą, ale raczej sporo , bo się opisałeś za tydzień. Oczywiście limit dostałeś :D

Chciałbym żeby mi za to płacili ;) Tutorial pisany z pały, znowu bez przesady że aż tyle treści przekazuje xD

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

Świetnie Sun. Jedyne co mnie irytuje to to, że często widzę coś tego typu:

 

if a == 4 then
   return
end

pytanie moje - w jakim celu?

 

umarł

Opublikowano

Świetnie Sun. Jedyne co mnie irytuje to to, że często widzę coś tego typu:

 

if a == 4 then
return
end

pytanie moje - w jakim celu?

Też tego nie łapię, przecież nieuwzględniony warunek tutaj zwraca coś jak return, może Sun chciał nam coś przekazać xD

ePc0b.jpg

mcn_cc.pl - banda złodziei

;)

Piszę questy na zamówienie - Zostanę questerem na serwerze dedykowanym - Na zlecenie napiszę questy - Zakoduję stronę HTML5/CSS3

Opublikowano

Też tego nie łapię, przecież nieuwzględniony warunek tutaj zwraca coś jak return, może Sun chciał nam coś przekazać xD

Właśnie o to mi chodzi. Pamiętam tylko, że problemy występowały przy kilku if'ach, gdy nie było postawionego return ale nigdy w select. Kiedyś sądziłem, że ten return 'wróci' do poprzedniego okienka (coś ala wait() tylko że powrotny :P) no ale dobra, czekam na zdanie Suna.

 

umarł

Opublikowano

return wychodzi z pętli/ifa i zwraca wartość, tu akurat nie ma on większego sensu. może ot, przyzwyczajenie.

 

co innego gdy jest np.

 

say("Podaj wartość, dostaniesz tyle yang! nie więcej niż 10k i nie mniej niż 5k!")
local c=input()
if c>10000 then
return
end
if c<5000 then
return
end
pc.changemoney(c)

może denny przykład, ale gdyby nie było tu returnów, to nie byłoby też limitu ;)


 

Opublikowano

Skoro zwraca wartość, to może w tym przypadku 0 biorąc na logikę :unsure:

 

Właśnie o to mi chodzi. Pamiętam tylko, że problemy występowały przy kilku if'ach, gdy nie było postawionego return ale nigdy w select. Kiedyś sądziłem, że ten return 'wróci' do poprzedniego okienka (coś ala wait() tylko że powrotny :P) no ale dobra, czekam na zdanie Suna.

No czy ja wiem. Np

if pc.money < 100 then

say("Nie masz 1000 yang, wykurwiaj")

end

Po co return? Co do Twojego wracania, to można dodać pętlę/funkcje, która ujęłaby selecta, coś w stylu

if select("Opcja","Wróć " == 2 then
local sel = select("Opcja", Wróć ")
end

ePc0b.jpg

mcn_cc.pl - banda złodziei

;)

Piszę questy na zamówienie - Zostanę questerem na serwerze dedykowanym - Na zlecenie napiszę questy - Zakoduję stronę HTML5/CSS3

Opublikowano

Świetnie Sun. Jedyne co mnie irytuje to to, że często widzę coś tego typu:

 

if a == 4 then
   return
end

pytanie moje - w jakim celu?

W zaprezentowanym queście nie ma najmniejszego sensu, niemniej jednak gdyby w pierwszym dialogu nie było odwołania do tablicy (jeśli odwołamy się do nieistniejącego rekordu to powinno zakończyć questa) to pojawiłby się tekst, a nie powinien (wybraliśmy opcję anuluj)

 

P.S. Ilość postów == mój rocznik, trolololo xD

edit. już nie :(

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

return wychodzi z pętli/ifa i zwraca wartość, tu akurat nie ma on większego sensu. może ot, przyzwyczajenie.

Czyli tak jak sądziłem. Tutaj return jest nie potrzebny :) Dzięki chłopaki

 

umarł

Opublikowano

Skoro zwraca wartość, to może w tym przypadku 0 biorąc na logikę :unsure:

 

 

No czy ja wiem. Np

if pc.money < 100 then

say("Nie masz 1000 yang, wykurwiaj")

end

Po co return? Co do Twojego wracania, to można dodać pętlę/funkcje, która ujęłaby selecta, coś w stylu

if select("Opcja","Wróć " == 2 then
local sel = select("Opcja", Wróć ")
end

 

pierdolisz.

 

w tym queście

say("Podaj wartość, dostaniesz tyle yang! nie więcej niż 10k i nie mniej niż 5k!")
local c=input()
if c>10000 then
return
end
if c<5000 then
return
end
pc.changemoney(c)

jest limit od 5 do 10k

 

a w tym

 

say("Podaj wartość, dostaniesz tyle yang! nie więcej niż 10k i nie mniej niż 5k!")
local c=input()
if c>10000 then
end
if c<5000 then
end
pc.changemoney(c)

nie ma. jeśli jest if i nie ma w nim returnu, to quest toczy się dalej i choćbyś wpisał 1000000, to tyle dostaniesz.


 

Opublikowano

No to chyba że. Nie ma co się spinać, nie jestem masterem w tej dziedzinie, w żadnej nie jestem. Btw, w quscie Suna jest zmienna 'input'. Nie jest tak, że zmienne nie mogą mieć nazw funkcji? Chyba, że to wyjątek dla metinowskich, mogę się mylić.

ePc0b.jpg

mcn_cc.pl - banda złodziei

;)

Piszę questy na zamówienie - Zostanę questerem na serwerze dedykowanym - Na zlecenie napiszę questy - Zakoduję stronę HTML5/CSS3

Opublikowano

 

 

pierdolisz.

 

w tym queście

say("Podaj wartość, dostaniesz tyle yang! nie więcej niż 10k i nie mniej niż 5k!")
local c=input()
if c>10000 then
return
end
if c<5000 then
return
end
pc.changemoney(c)

jest limit od 5 do 10k

 

a w tym

 

say("Podaj wartość, dostaniesz tyle yang! nie więcej niż 10k i nie mniej niż 5k!")
local c=input()
if c>10000 then
end
if c<5000 then
end
pc.changemoney(c)

nie ma. jeśli jest if i nie ma w nim returnu, to quest toczy się dalej i choćbyś wpisał 1000000, to tyle dostaniesz.

Prawda jest taka, że zamiast dwóch warunków mogłeś użyć jednego (if c > 10000 or c < 5000 then) ale pomińmy to :D W teorii i praktyce "return" coś nam zwraca i wyklucza resztę questa. Najlepiej to można zobaczyć w funkcjach:

function jakas_funkcja()
   if pc.get_level() > 50 then
       return "Poziom większy niż 50"
   end
   return "Poziom mniejszy niż 50"
end

Jeśli nasz poziom jest większy niż 50 to funkcja zwróci tekst zawarty w warunku po czym się zakończy, bo warunek został spełniony i funkcja zwróci daną wartość. Jeśli warunek się nie spełni to po prostu wykona się drugie zwrócenie.

 

No to chyba że. Nie ma co się spinać, nie jestem masterem w tej dziedzinie, w żadnej nie jestem. Btw, w quscie Suna jest zmienna 'input'. Nie jest tak, że zmienne nie mogą mieć nazw funkcji? Chyba, że to wyjątek dla metinowskich, mogę się mylić.

Nie powinno, nie ma tam żadnych nawiasów więc jest to traktowane jak każda inna lokalna

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

No to chyba że. Jeszcze powiedz, jak mam np:

{x, y},

{a, b}

To jak zrobić, żeby mi wylosowało [1] z tablicy? Np, jakbym za pomocy tego chciał dostać losowe KD.

ePc0b.jpg

mcn_cc.pl - banda złodziei

;)

Piszę questy na zamówienie - Zostanę questerem na serwerze dedykowanym - Na zlecenie napiszę questy - Zakoduję stronę HTML5/CSS3

Opublikowano

Prawda jest taka, że zamiast dwóch warunków mogłeś użyć jednego (if c > 10000 or c < 5000 then) ale pomińmy to :D W teorii i praktyce "return" coś nam zwraca i wyklucza resztę questa. Najlepiej to można zobaczyć w funkcjach:

function jakas_funkcja()
if pc.get_level() > 50 then
return "Poziom większy niż 50"
end
return "Poziom mniejszy niż 50"
end

Jeśli nasz poziom jest większy niż 50 to funkcja zwróci tekst zawarty w warunku po czym się zakończy, bo warunek został spełniony i funkcja zwróci daną wartość. Jeśli warunek się nie spełni to po prostu wykona się drugie zwrócenie.

 

 

Nie powinno, nie ma tam żadnych nawiasów więc jest to traktowane jak każda inna lokalna

 

wiem co mogłem, ale po prostu mi nie przyszedł mądrzejszy przykład do głowy. xD

 

zamiast

 

if a > b then
xxx
xxx
else
xxx2
xxx2
xxx2

możemy zrobić po prostu

if a>b then
xxx
xxx
xxx
return end
xxx2
xxx2
xxx2

 

return ma sporo możliwości i spore zastosowanie, choćby zwracanie z funkcji odpowiednich wartości.

 

 

 

 

@UP

Mając np. 5 elementów w tablicy, ponumerowanych od 1 do 5, możesz użyć

 

pc.give_item2(tablica[number(1,5)])

 

lub nie wiedząc o ilości elementów, lub wiedząc ale nie chcąc podawać ilości

 

pc.give_item2(tablica[number(1, table.getn(tablica)]))


 

Opublikowano

No to chyba że. Jeszcze powiedz, jak mam np:

{x, y},

{a, b}

To jak zrobić, żeby mi wylosowało [1] z tablicy? Np, jakbym za pomocy tego chciał dostać losowe KD.

Nie do końca rozumiem, możesz to wyjaśnić bardziej (może być nawet na pw co by nie było, że spam)?

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

Mam np:

local kd = {

{28430, 1},

{28431, 1}

(...)

}

I chcę dostać losowe kd. Jak to zrobić?

ePc0b.jpg

mcn_cc.pl - banda złodziei

;)

Piszę questy na zamówienie - Zostanę questerem na serwerze dedykowanym - Na zlecenie napiszę questy - Zakoduję stronę HTML5/CSS3

Opublikowano

Ano, rzeczywiście. Dzięki wielkie, warto by to dodać do tematu.

ePc0b.jpg

mcn_cc.pl - banda złodziei

;)

Piszę questy na zamówienie - Zostanę questerem na serwerze dedykowanym - Na zlecenie napiszę questy - Zakoduję stronę HTML5/CSS3

Opublikowano

Jeszcze pozostaje kwestia jeśli chce dać kilka takich samych kd a wiadomo, że nie da się ich łączyć w stacku (widzę, że stworzył tablicę wielowymiarową więc raczej będzie chciał to zrobić). Ja to bym zrobił tak:

local kd = {
   {id, ilosc},
   {id2, ilosc2}
}
local dlugosc = table.getn(kd)
local n = number(1, dlugosc)
local ilosc = kd[n][2]
for i = 1, ilosc do
   pc.give_item2(kd[n][1], 1)
end

Najpierw losuje liczbę n która oznacza tyle co rekord z tablicy kd, następnie wykonuje się pętla od 1 do ilości tych przedmiotów i nam je daje.

 

edit. Postwriter <3

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...