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

Kurs Pisania Questów by JachuPL


Rekomendowane odpowiedzi

Opublikowano

No w sumie masz rację, to jest najkrótszy sposób zapisu w tym sposobie, ale napisz mi w ten sam sposób na więcej niż 4 przedmioty (nie ilość).. ;)

Hehe, wyżej już dali, dopiero teraz zauważyłem twój post.

Dodam swoje, bo jest jeszcze z ilością itemów :D

 

 

To jest ukryta treść, proszę

 

 

  • Odpowiedzi 76
  • Dodano
  • Ostatniej odpowiedzi

Top użytkownicy w tym temacie

Top użytkownicy w tym temacie

Opublikowano

@up

Nigdy nie miałem problemu z definiowaniem zmiennych po instrukcji warunkowej "if". Możesz bardziej przybliżyć problem?

Jedynym "problemem" jest porównywanie zmiennych. Przykładowo:

To jest ukryta treść, proszę

w tym momencie zmienna "ilosc" będzie miała nadal stan, który został zapisany przed rozpoczęciem instrukcji warunkowej "if", ponieważ taka wartość została tam zapisana, a nie AKTUALNA. 

 

Z innym przypadkiem "irracjonalnych efektów" się nie spotkałem.

 

I tak jak zostało napisane, możemy zatrzymać, a nawet wyłączyć timer.

 

cleartimer(nazwa_timera)

clear_server_timer(nazwa_timera)

Jeśli chcesz zmienić wartość zmiennej używasz znaku = (zmienna = zmienna+1).

W chacie gdzie sprawdzasz pozostałość przywołałeś starą wartość zmiennej, natomiast w qf`ie przydzieliłeś jedynie wartość do niego (nie są to zmienne dynamiczne, musisz od nowa ja zdefiniować).

Opublikowano (edytowane)

 

To jest ukryta treść, proszę

 

Bo trochę od dupy strony to napisałeś. Najpierw naliczasz kill, później deklarujesz zmienną i na kończu idzie IF.

 

To jest ukryta treść, proszę

 

@INk

Napisałem 5 linijek :D j/w

Ściągałeś! :D Edytowane przez Inkscape
Opublikowano (edytowane)

Jeśli chcesz zmienić wartość zmiennej używasz znaku = (zmienna = zmienna+1).

W chacie gdzie sprawdzasz pozostałość przywołałeś starą wartość zmiennej, natomiast w qf`ie przydzieliłeś jedynie wartość do niego (nie są to zmienne dynamiczne, musisz od nowa ja zdefiniować).

Ja o tym wiem, na prawdę ;) Po prostu chodziło mi o nakreślenie jedynego błędu, który mogłem zinterpretować podobnie do tego, co opisałeś. 

 

@Ink

Napisałem 5 linijek :D j/w

Edytowane przez z4z0l

 

umarł

Opublikowano

Mam kilka pytań bo nie jestem tak mocno doświadczony ;)

W dungeonach lepie stosować when x.kill czy lepiej when kill with npc.get_race? czy to nie robi różnicy.

Warto używać server_timer? słyszałem że jest z nim wiele kłopotów jak się źle nada, ch moga padac.

Opublikowano

Mam kilka pytań bo nie jestem tak mocno doświadczony ;)

W dungeonach lepie stosować when x.kill czy lepiej when kill with npc.get_race? czy to nie robi różnicy.

Warto używać server_timer? słyszałem że jest z nim wiele kłopotów jak się źle nada, ch moga padac.

 

Na pierwsze pytanie odpowiedź masz tutaj:

15. Bugi w MetinLua. Najczęściej popełniane błędy.

 

 

2. Niezaliczanie zabójstw w misjach

 

 

Są takie chwile, kiedy ręce opadają, a mózg krzyczy kuuuuuuu...rczę :) Problem niezaliczania zabójstw jest znany nawet na serwerach globalnych. Powoduje go fakt, że posiadamy dwa questy, w których poluje się na tego samego potwora. Wydarzenie w jednym z nich skonstruowane jest w następujący sposób

 

To jest ukryta treść, proszę
Dwa questy gryzą się przez to. Wystarczy obydwa warunki zmienić na

 

To jest ukryta treść, proszę
i można spać spokojnie

 

 

 

 

Na drugie dokładnie tutaj:

8. Funkcje i ich wykorzystanie

 

 

Pracę nad tym zagadnieniem postanowiłem zacząć trochę wcześniej niż pisanie poradnika. Dam Wam tabelkę, którą po krótce omówię, a zacznę od kolumn:

Funkcja - znajduje się tutaj pełna nazwa funkcji. Jeśli kilka funkcji ma takie samo działanie, zostały one rozdzielone slashem (/).

Opis - znajduje się tutaj opis działania funkcji.

Zwracana wartośc typu - Typ jaki zwraca wartość. Jeśli funkcja zwraca wartość, możemy przypisać ją do zmiennej.

Kolumny od D do S (nazwy wydarzen) - pokazują dla jakich wydarzen zastosowanie funkcji ma logiczny sens lub jest poprawne i nie obciąża systemu.

Argument # - w tych kolumnach znajdują się argumenty, które należy podać, by prawidłowo wywołać funkcję.

 

Znaczenie kolorów

Zielony - Użycie funkcji w tym wypadku ma swoje logiczne zastosowanie

Żółty - Użycie funkcji w tym wypadku ma nieznaczne zastosowanie lub wymaga zestawienia z inną funkcją

Czerwony - Użycie funkcji w tym wypadku nie ma logicznego zastosowania lub funkcja jest niespawna

Czarny - Funkcja jest przestarzała, działa wadliwie lub ma zamiennik o tym samym zastosowaniu, który działa poprawnie

Niebieski - Funkcja nie działa, nie można było ustalić jej zastosowania, wywołania lub zwracanych parametrów

 

Przypominam, że kolory nie są przypisane na sztywno - oznacza to, że mogłem gdzieś pominąć jakieś zastosowanie, lub wkradł się błąd. Całość przygotowywałem przez kilka dni i nocy, więc fajnie by było, gdyby ktoś bardziej doświadczony zareagował na błąd.

plik z funkcjami i ich opisami zamieszczam na swoim hostingu

To jest ukryta treść, proszę
Do otwarcia wymagany jest Excel w wersji 2007+

 

 

Nie wszystkie funkcje mogą występować w server_timer. Na dungeonach jak najbardziej warto ich używać, by uniknąć pewnych bugów. :)

Opublikowano (edytowane)

Mam kilka pytań bo nie jestem tak mocno doświadczony ;)

W dungeonach lepie stosować when x.kill czy lepiej when kill with npc.get_race? czy to nie robi różnicy.

Warto używać server_timer? słyszałem że jest z nim wiele kłopotów jak się źle nada, ch moga padac.

Jeżeli chodzi o dungeony, trzeba wziąć pod uwagę kilka panujących tam zasad.

 

1. index mapy zmienia się na dungeonie. Na przykładzie: rozpoczynamy dungeon poprzez d.join(71), gdzie 71 to index mapy. Aby sprawdzić, czy jesteśmy na dungeonie możemy użyć dwóch form:

To jest ukryta treść, proszę
To jest ukryta treść, proszę

2. Zaleca się używanie funkcji z przedrostkiem "d.". Powierzchowny opis:

To jest ukryta treść, proszę

3. Zastanów się, czy warto używać samego timera(który działa de facto na jednego gracza), czy server_timer, który działa jak sama nazwa wskazuje na serwer, a mogąca posiadać funkcję "globalną" lub "indexową". Kawałek kodu ode mnie z komnaty smoka:

To jest ukryta treść, proszę

Kod zadziała jak najbardziej poprawnie, ale... co w momencie, gdy osoba, która zabije potwora o ID 2493 WYLOGUJE SIĘ? Timer nie wyrzuci wszystkich z dungeonu.

 

Pewnie znalazłoby się tego więcej, ale MPCshit to nie miejsce na udostępnianie takich rzeczy. 

PS. nie czepiać się mojej terminologii i mojego nazewnictwa. Jeżeli coś jest niejasne, mogę wytłumaczyć na przykładzie etc.

PS2. Jachu - OpenOffice również radzi sobie z tym pliczkiem od funkcji.

Edytowane przez z4z0l

 

umarł

Opublikowano

 

 

Jeżeli chodzi o dungeony, trzeba wziąć pod uwagę kilka panujących tam zasad.

 

1. index mapy zmienia się na dungeonie. Na przykładzie: rozpoczynamy dungeon poprzez d.join(71), gdzie 71 to index mapy. Aby sprawdzić, czy jesteśmy na dungeonie możemy użyć dwóch form:

To jest ukryta treść, proszę
To jest ukryta treść, proszę

2. Zaleca się używanie funkcji z przedrostkiem "d.". Powierzchowny opis:

To jest ukryta treść, proszę

3. Zastanów się, czy warto używać samego timera(który działa de facto na jednego gracza), czy server_timer, który działa jak sama nazwa wskazuje na serwer, a mogąca posiadać funkcję "globalną" lub "indexową". Kawałek kodu ode mnie z komnaty smoka:

To jest ukryta treść, proszę

Kod zadziała jak najbardziej poprawnie, ale... co w momencie, gdy osoba, która zabije potwora o ID 2493 WYLOGUJE SIĘ? Timer nie wyrzuci wszystkich z dungeonu.

 

Pewnie znalazłoby się tego więcej, ale MPCshit to nie miejsce na udostępnianie takich rzeczy. 

PS. nie czepiać się mojej terminologii i mojego nazewnictwa. Jeżeli coś jest niejasne, mogę wytłumaczyć na przykładzie etc.

PS2. Jachu - OpenOffice również radzi sobie z tym pliczkiem od funkcji.

 

 

Masz rację, co do mobków i ich zaliczania 2x up to nie będzie problemu, bo moje moby są od dungeonu każdy set mobów przypada na 1 dungeon więc jest tylko 1 wydarzenie zabicia ich w dungeonie.

No  w sumie to lepiej server_timer ale jest 1 problem. Ch padają gdy ich używam i aktualnie badam to.. Ten kawałek kodu co dał jachupl z server_timer notice nie działa. a notice_all działa. 

Opublikowano

Do sprawdzania indywidualnego dungeonu polecam zrobienie sobie funkcji wewnętrznej, która będzie sprawdzała czy jesteśmy w dungeonie i czy index mapy się zgadza a ponadto możemy dodać warunki jak ilość osób w pt, etc. To o wiele bardziej praktyczne, bo wystarczy do whena dopisać funkcję a zmian dokonujemy jedynie w tamtym kawałku kodu a nie w całym quescie.

Opublikowano (edytowane)

Do sprawdzania indywidualnego dungeonu polecam zrobienie sobie funkcji wewnętrznej, która będzie sprawdzała czy jesteśmy w dungeonie i czy index mapy się zgadza a ponadto możemy dodać warunki jak ilość osób w pt, etc. To o wiele bardziej praktyczne, bo wystarczy do whena dopisać funkcję a zmian dokonujemy jedynie w tamtym kawałku kodu a nie w całym quescie.

To noproblemo, zajarz to:

To jest ukryta treść, proszę

Mam to ciągle gdy używam server_timer..

 

A używam go normalnie:

To jest ukryta treść, proszę

I potem pod timerem żeby działał:

To jest ukryta treść, proszę

Wie ktoś gdzie jest błąd? Za Każdym razem pada ch.

Widzę że w tym xlsx jest w d.getf że funkcja server_timer jest na czerwono.. Zaraz przetestuje. 

 

@d

trochę zmodyfikowałem i teraz jest:

 

To jest ukryta treść, proszę

Czyszczę server_timer po każdym uruchomieniu więc co moze być źle? 

Edytowane przez ac_1
Opublikowano (edytowane)

Do sprawdzania indywidualnego dungeonu polecam zrobienie sobie funkcji wewnętrznej, która będzie sprawdzała czy jesteśmy w dungeonie i czy index mapy się zgadza a ponadto możemy dodać warunki jak ilość osób w pt, etc. To o wiele bardziej praktyczne, bo wystarczy do whena dopisać funkcję a zmian dokonujemy jedynie w tamtym kawałku kodu a nie w całym quescie.

Można pisać "całe" questy na funkcjach, ale to już zależy jak komu wygodniej. Ja sposób, jaki ukazałem u góry stosuję od jakiegoś czasu i jestem zadowolony, nie potrzebuję żadnych funkcji ;)

 

@up

Pokaż cały quest, bo chyba nie tutaj leży problem.

 

@edit

Sprawdzaj syslog z kanału, tam możliwe że pokaże Ci więcej informacji na temat tego.

Edytowane przez z4z0l

 

umarł

Opublikowano

 

 

Można pisać "całe" questy na funkcjach, ale to już zależy jak komu wygodniej. Ja sposób, jaki ukazałem u góry stosuję od jakiegoś czasu i jestem zadowolony, nie potrzebuję żadnych funkcji ;)

 

@up

Pokaż cały quest, bo chyba nie tutaj leży problem.

 

@edit

Sprawdzaj syslog z kanału, tam możliwe że pokaże Ci więcej informacji na temat tego.

 

 

Tak sprawdziłem już wszystko, i ciągle pada mimo zmian.. Także ja nie polecam server_timer bo mogą być problemy z padaniem ch.

Cały dungeon na timer mi działa, zmiana na server timer nawet wdg tego poradnika powoduje padnięcie ch.

Jeszcze zaraz sprawdzę  zwykły jakiś mały quest z tym server_timer i zobaczę czy będzie to samo. (wszystko wdg poradnika) 

  • 8 miesięcy temu...
Opublikowano

A w jaki sposób zrobić odliczanie czasu tak jak to ma miejsce przy robieniu konia, bojowca, militara.

Czas ten jest pokazywany w oknie z misjami pod klawiszem b chyba :D

Z tego co pamiętam, to odpowiadały za to 2 funkcje q.set_clock() oraz q.start().

Opublikowano (edytowane)

Z tego co pamiętam, to odpowiadały za to 2 funkcje q.set_clock() oraz q.start().

W spisie funkcji znalazłem coś takiego:

To jest ukryta treść, proszę

 

 

 

napisałem takiego questa:

40929141935324481780.png

Poprawnie? Wiem że są błędy xD ale czy dobrze zadeklarowałem ten zegar

Edytowane przez baran860

8910814572903361049127.png

  • 6 miesięcy temu...
Opublikowano

Cześć ;) dla niektórych z Was może to być dobra wiadomość, dla niektórych nie. Otóż z powodu wakacyjnego lenistwa postanowiłem, że wszystkie części tego kursu nakręcę w formie wideoporadnika. Kolejne odsłony będą pojawiały się codziennie o 17:30 na moim kanale YouTube. Gdy opublikuję wszystkie odcinki to podepnę każdy pod odpowiedni dział w tym temacie. Póki co zapraszam:
Profil Facebook: https://www.facebook.com/jachuplofficial

Kanał YouTube: https://www.youtube.com/channel/UCT8ToWZzXeNmmRf6zE6Ah2w

Pozdrawiam ;)

57199140501148694665.png

Opublikowano (edytowane)

Cześć ;) dla niektórych z Was może to być dobra wiadomość, dla niektórych nie. Otóż z powodu wakacyjnego lenistwa postanowiłem, że wszystkie części tego kursu nakręcę w formie wideoporadnika. Kolejne odsłony będą pojawiały się codziennie o 17:30 na moim kanale YouTube. Gdy opublikuję wszystkie odcinki to podepnę każdy pod odpowiedni dział w tym temacie. Póki co zapraszam:

Profil Facebook: https://www.facebook.com/jachuplofficial

Kanał YouTube: https://www.youtube.com/channel/UCT8ToWZzXeNmmRf6zE6Ah2w

Pozdrawiam ;)

szacunek, czakem na serię ;) powodzenia

 

mam pytanie, po co w 2 odcinku mówiłeś o typach zmiennych przecież nie ważne czy do local "schowasz" liczbę czy napis, o ile dobrze rozumiem,

przykład:

To jest ukryta treść, proszę

nie ważne co wpiszemy w zmienną ona sama zdeklaruje swój typ, chyba xD

Pytam bo nie wiem czy dobrze rozumiem

Edytowane przez .Dynamic
Opublikowano

szacunek, czakem na serię ;) powodzenia

 

mam pytanie, po co w 2 odcinku mówiłeś o typach zmiennych przecież nie ważne czy do local "schowasz" liczbę czy napis, o ile dobrze rozumiem,

przykład:

To jest ukryta treść, proszę

nie ważne co wpiszemy w zmienną ona sama zdeklaruje swój typ, chyba xD

Pytam bo nie wiem czy dobrze rozumiem

W Lua tak. Coś tam o cpp piszesz to np int Ci raczej nie przechowa "korwinkrul'.

 

Opublikowano

W Lua tak. Coś tam o cpp piszesz to np int Ci raczej nie przechowa "korwinkrul'.

Wlasnie to napisalem xD dlatego pytam po co o tym mowi w 2. Filmie xD
Opublikowano

szacunek, czakem na serię ;) powodzenia

 

mam pytanie, po co w 2 odcinku mówiłeś o typach zmiennych przecież nie ważne czy do local "schowasz" liczbę czy napis, o ile dobrze rozumiem,

przykład:

To jest ukryta treść, proszę

nie ważne co wpiszemy w zmienną ona sama zdeklaruje swój typ, chyba xD

Pytam bo nie wiem czy dobrze rozumiem

 

masz rację, zmienna w Lua sama przyjmuje określony typ, jednak zdecydowałem się wspomnieć o typach zmiennych z dwóch powodów:

1. Ktoś może chcieć przesiąść się na C++ / uczy się go równolegle / przesiada się z innego języka programowania i jest to dla niego jakaś nowość ;)

2. W Lua niekompatybilność typów powoduje wiele błędów, które czasem ciężko wykryć. Jeśli spróbujesz zadeklarować

 

To jest ukryta treść, proszę

to będziesz mógł to zrobić, ba, taki quest nawet skompiluje się pomyślnie! Tylko, że dostaniesz piękny błąd "attempt to perform arithmetic on a string value" - "próba dokonania operacji arytmetycznej na łańcuchu znaków" i na takim etapie quest zakończy pracę bez wykonania linijek po tej deklaracji.

 

Co do samych typów, zapomniałem to powiedzieć, ale umieszczę to w opisie filmu:

Mamy bezpośrednią możliwość sprawdzenia jakiego typu jest zmienna. Rzućcie okiem na poniższego screena

 

 

49479143712341794665.jpeg

 

 

 

Jak widzicie posłużyłem się instrukcją type(zmienna), która zwróciła mi odpowiedni napis. Zatem możemy używać konstrukcji if type(5) == "number" then, czy jakiejkolwiek jej mutacji. Oczywiście takie wyrażenie jest prawdziwe. Ale to tak na marginesie, taka tam ciekawostka ;)

57199140501148694665.png

Opublikowano (edytowane)

masz rację, zmienna w Lua sama przyjmuje określony typ, jednak zdecydowałem się wspomnieć o typach zmiennych z dwóch powodów:

1. Ktoś może chcieć przesiąść się na C++ / uczy się go równolegle / przesiada się z innego języka programowania i jest to dla niego jakaś nowość ;)

2. W Lua niekompatybilność typów powoduje wiele błędów, które czasem ciężko wykryć. Jeśli spróbujesz zadeklarować

To jest ukryta treść, proszę

to będziesz mógł to zrobić, ba, taki quest nawet skompiluje się pomyślnie! Tylko, że dostaniesz piękny błąd "attempt to perform arithmetic on a string value" - "próba dokonania operacji arytmetycznej na łańcuchu znaków" i na takim etapie quest zakończy pracę bez wykonania linijek po tej deklaracji.

 

Co do samych typów, zapomniałem to powiedzieć, ale umieszczę to w opisie filmu:

Mamy bezpośrednią możliwość sprawdzenia jakiego typu jest zmienna. Rzućcie okiem na poniższego screena

 

 

49479143712341794665.jpeg

 

 

 

Jak widzicie posłużyłem się instrukcją type(zmienna), która zwróciła mi odpowiedni napis. Zatem możemy używać konstrukcji if type(5) == "number" then, czy jakiejkolwiek jej mutacji. Oczywiście takie wyrażenie jest prawdziwe. Ale to tak na marginesie, taka tam ciekawostka ;)

 

Sprawdzisz zadanie z filmu 4? bo w grze coś nie działa ;/

To jest ukryta treść, proszę

po wpisaniu czegokolwiek się wyłącza xD quest xD próbowałem też zapis local d = input()

ten zadziała xD:

To jest ukryta treść, proszę
Edytowane przez .Dynamic

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...