Skocz do zawartości

Rekomendowane odpowiedzi

@SkryptExpert

Niestety, ale oba skrypty posiadają błędy, które omówię je poniżej. W mojej ocenie wygląda to tak jakby oba skrypty nie zostały nawet załadowane na serwer, ponieważ Skript wykryłby jeden z nich. Podam również co można poprawić w kodzie (oczywiście poza samymi błędami).

Pierwszy skrypt, który wezmę na tapet to skrypt implementujący dodawanie pieniędzy przy kopaniu kamienia. Błędy w nim występujące są błędami czysto składniowymi. Fragment kodu, który mam na myśli to:

options:
	# [...]
	title: &aGratulacje!
	subtitle: &8Udało ci się wykopać &c%{_k}% $

# [...]
send title {@title} with subtitle {@subtitle} to {_p}
# [...]

Warto tutaj wytłumaczyć sposób działania sekcji 'options'. Żeby się nie rozwodzić, najprościej jest powiedzieć, że opcje są wstawiane bezpośrednio w miejsca w kodzie, w których zostały "wspomniane". Ludzie zaznajomieni z C pewnie powiedzieliby o analogii do instrukcji preprocesora '#define'.

Drugi błąd dotyczy użycia dziwnego wyrażenia, w którego miejsce powinno być wstawione 'all players'. Fragment, o którym mówię, znajduje się poniżej.

function d(c: number, k: number, p: player):
# [...]
# [...] all {_p}'s
# [...]

W pierwszym skrypcie należy dodatkowo poprawić:

  • nazewnictwo funkcji globalnej - funkcja globalna zawsze powinna posiadać nazwę, która jasno określa jej działanie i gwarantuje małe prawdopodobieństwo kolizji nazw z innymi funkcjami,
  • nazewnictwo zmiennych lokalnych - zmienne lokalne powinny mieć również mniej enigmatyczne nazwy, ponieważ pojawiają się w konfigurowalnych wiadomościach w sekcji 'options'.

Do drugiego skryptu (czyli skrypt na "brush", który - jeśli dobrze rozumiem - ma niszczyć każdy blok poza bedrockiem zwykłym kliknięciem) natomiast wkradł się błąd logiczny. Jest on związany z użyciem zmiennej lokalnej {_t} w warunku sprawdzającym dystans, która nie posiada jakiejkolwiek wartości, ponieważ nigdzie nie jest ustawiana wcześniej w kodzie listenera zdarzenia.

W drugim skrypcie należy jeszcze poprawić:

  • typ argumentu funkcji - nie jesteśmy w stanie wręczyć przedmiotów graczowi nieobecnemu na serwerze, więc typ 'player' w zupełności wystarczy,
  • wartość domyślna argumentu funkcji - zamiast sprawdzać czy argument jest ustawiony, można prościej:
    [<player=%player%>]

    Powyższa modyfikacja sugeruje dodatkowo, aby komendy nie mogła wykonywać konsola. Warto więc dodać pole 'executable by: players'.

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57847-skrypty-do-cashblock/#findComment-343788
Udostępnij na innych stronach

20 godzin temu, Kormic napisał:

@SkryptExpert

Niestety, ale oba skrypty posiadają błędy, które omówię je poniżej. W mojej ocenie wygląda to tak jakby oba skrypty nie zostały nawet załadowane na serwer, ponieważ Skript wykryłby jeden z nich. Podam również co można poprawić w kodzie (oczywiście poza samymi błędami).

Pierwszy skrypt, który wezmę na tapet to skrypt implementujący dodawanie pieniędzy przy kopaniu kamienia. Błędy w nim występujące są błędami czysto składniowymi. Fragment kodu, który mam na myśli to:

options:
	# [...]
	title: &aGratulacje!
	subtitle: &8Udało ci się wykopać &c%{_k}% $

# [...]
send title {@title} with subtitle {@subtitle} to {_p}
# [...]

Warto tutaj wytłumaczyć sposób działania sekcji 'options'. Żeby się nie rozwodzić, najprościej jest powiedzieć, że opcje są wstawiane bezpośrednio w miejsca w kodzie, w których zostały "wspomniane". Ludzie zaznajomieni z C pewnie powiedzieliby o analogii do instrukcji preprocesora '#define'.

Drugi błąd dotyczy użycia dziwnego wyrażenia, w którego miejsce powinno być wstawione 'all players'. Fragment, o którym mówię, znajduje się poniżej.

function d(c: number, k: number, p: player):
# [...]
# [...] all {_p}'s
# [...]

W pierwszym skrypcie należy dodatkowo poprawić:

  • nazewnictwo funkcji globalnej - funkcja globalna zawsze powinna posiadać nazwę, która jasno określa jej działanie i gwarantuje małe prawdopodobieństwo kolizji nazw z innymi funkcjami,
  • nazewnictwo zmiennych lokalnych - zmienne lokalne powinny mieć również mniej enigmatyczne nazwy, ponieważ pojawiają się w konfigurowalnych wiadomościach w sekcji 'options'.

Do drugiego skryptu (czyli skrypt na "brush", który - jeśli dobrze rozumiem - ma niszczyć każdy blok poza bedrockiem zwykłym kliknięciem) natomiast wkradł się błąd logiczny. Jest on związany z użyciem zmiennej lokalnej {_t} w warunku sprawdzającym dystans, która nie posiada jakiejkolwiek wartości, ponieważ nigdzie nie jest ustawiana wcześniej w kodzie listenera zdarzenia.

W drugim skrypcie należy jeszcze poprawić:

  • typ argumentu funkcji - nie jesteśmy w stanie wręczyć przedmiotów graczowi nieobecnemu na serwerze, więc typ 'player' w zupełności wystarczy,
  • wartość domyślna argumentu funkcji - zamiast sprawdzać czy argument jest ustawiony, można prościej:
    [<player=%player%>]

    Powyższa modyfikacja sugeruje dodatkowo, aby komendy nie mogła wykonywać konsola. Warto więc dodać pole 'executable by: players'.

Pozdrawiam.

https://code.skript.pl/qoyS7tIh <- poprawiona wersja skryptu na Cashblock (nietestowana)

a jeśli chodzi o skrypt na brush to nie wiem jak to zrobić

Odnośnik do komentarza
https://skript.pl/temat/57847-skrypty-do-cashblock/#findComment-343815
Udostępnij na innych stronach

43 minuty temu, SkryptExpert napisał:

poprawiona wersja skryptu na Cashblock (nietestowana)

No właśnie, nietestowana. Ponownie wkradły się błędy składniowe, czyli brak cudzysłowów domykających ciągi znaków w komendzie /kasa. Co więcej, ta poprawka objawiła Pana nieznajomość tworzenia funkcji. Zalecam zapoznać się z tym artykułem. Nie wiem dlaczego w kodzie 'all players' jest traktowane jak typ parametru funkcji jeżeli to jest wyrażenie. Poza tym, dlaczego Pan po prostu nie użyje 'all players' w środku funkcji w linijce z instrukcją 'send'? Przecież nikt Panu nie broni tak zrobić.

Ponadto, w komendzie /kasa pojawił się ta sama niezrozumiała dla mnie rzecz co w komendzie /brush.

21 godzin temu, Kormic napisał:

W drugim skrypcie należy jeszcze poprawić:

  • typ argumentu funkcji - nie jesteśmy w stanie wręczyć przedmiotów graczowi nieobecnemu na serwerze, więc typ 'player' w zupełności wystarczy,
  • wartość domyślna argumentu funkcji - zamiast sprawdzać czy argument jest ustawiony, można prościej:
    [<player=%player%>]

    Powyższa modyfikacja sugeruje dodatkowo, aby komendy nie mogła wykonywać konsola. Warto więc dodać pole 'executable by: players'.

47 minut temu, SkryptExpert napisał:

a jeśli chodzi o skrypt na brush to nie wiem jak to zrobić

Sprawa jest prosta. Niech Pan najpierw sprawdzi nazwę narzędzia gracza, a później niech Pan sprawdza dystans między graczem a klikniętym blokiem. Zmienna {_t} może być użyta, ale zanim Pan jej użyje, musi ona posiadać jakąś wartość. To oczywiste.

Dodam, że sprawdzanie dystansu jest zbędne, może Pan skorzystać z wyrażenia 'clicked block', które zwraca kliknięty blok. Jeżeli jest on poza zasięgiem gracza, wyrażenie zwróci '<none>', a więc można to łatwo zweryfikować za pomocą warunku '[...] is set:'.

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57847-skrypty-do-cashblock/#findComment-343817
Udostępnij na innych stronach

29 minut temu, Kormic napisał:

No właśnie, nietestowana. Ponownie wkradły się błędy składniowe, czyli brak cudzysłowów domykających ciągi znaków w komendzie /kasa. Co więcej, ta poprawka objawiła Pana nieznajomość tworzenia funkcji. Zalecam zapoznać się z tym artykułem. Nie wiem dlaczego w kodzie 'all players' jest traktowane jak typ parametru funkcji jeżeli to jest wyrażenie. Poza tym, dlaczego Pan po prostu nie użyje 'all players' w środku funkcji w linijce z instrukcją 'send'? Przecież nikt Panu nie broni tak zrobić.

Ponadto, w komendzie /kasa pojawił się ta sama niezrozumiała dla mnie rzecz co w komendzie /brush.

Sprawa jest prosta. Niech Pan najpierw sprawdzi nazwę narzędzia gracza, a później niech Pan sprawdza dystans między graczem a klikniętym blokiem. Zmienna {_t} może być użyta, ale zanim Pan jej użyje, musi ona posiadać jakąś wartość. To oczywiste.

Dodam, że sprawdzanie dystansu jest zbędne, może Pan skorzystać z wyrażenia 'clicked block', które zwraca kliknięty blok. Jeżeli jest on poza zasięgiem gracza, wyrażenie zwróci '<none>', a więc można to łatwo zweryfikować za pomocą warunku '[...] is set:'.

Pozdrawiam.

https://code.skript.pl/qoyS7tIh teraz dobrze? (cashblock)
https://code.skript.pl/7EyrlOsW/ Skrypt na brush

offlineplayer jest w brush tylko dlatego aby dawać go dla graczy non premium

Edytowane przez SkryptExpert
Odnośnik do komentarza
https://skript.pl/temat/57847-skrypty-do-cashblock/#findComment-343819
Udostępnij na innych stronach

Godzinę temu, SkryptExpert napisał:

teraz dobrze? (cashblock)

Teraz jest dobrze. Jedyne dwie uwagi jeszcze jakie mam to to, że w komendzie /kasa może Pan ustawić typ argumentu jako 'offlineplayer', aby było możliwe sprawdzenie stanu konta gracza nieobecnego na serwerze oraz to, że może Pan chcieć nieco przebudować funkcję 'drop' tak, aby gracz widział łączną sumę pieniędzy jaką dostanie. W tym momencie skrypt działa tak, że gracz może nic nie dostać lub dostać nawet 3.01 $, ale wiadomość 'title' i tak pokaże tylko 2 $, ponieważ zasłoni poprzednie wiadomości o otrzymaniu 0.01 $ i 1 $.

Godzinę temu, SkryptExpert napisał:

Skrypt na brush

Też wygląda dobrze, ale i tutaj mam dwie uwagi. Pierwsza dotyczy zmiennej {_t}, która jest niepotrzebna. Zmienna {_c} przechowuje przecież informację o tym samym bloku, więc ustawianie zmiennej {_t} i używanie jej jest niepotrzebne.

Godzinę temu, SkryptExpert napisał:

offlineplayer jest w brush tylko dlatego aby dawać go dla graczy non premium

Nie rozumiem. Typ 'offlineplayer' nie ma jakiegokolwiek związku z tym czy gracz korzysta z pirackiej wersji gry, czy też nie. Typ 'player' dotyczy gracza obecnego na serwerze, a typ 'offlineplayer' dotyczy dowolnego gracza - może, ale nie musi być na serwerze.

Podawanie gracza offline nie ma sensu, ponieważ nie mamy możliwości wręczenia mu przedmiotu, dlatego warto zawęzić dziedzinę argumentu do graczy obecnych na serwerze. Ponadto, można zastosować tę samą modyfikację z domyślną wartością argumentu, którą zastosował Pan w skrypcie modyfikującym drop z kamienia.

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57847-skrypty-do-cashblock/#findComment-343822
Udostępnij na innych stronach

W dniu 13.07.2024 o 15:39, Kormic napisał:

Teraz jest dobrze. Jedyne dwie uwagi jeszcze jakie mam to to, że w komendzie /kasa może Pan ustawić typ argumentu jako 'offlineplayer', aby było możliwe sprawdzenie stanu konta gracza nieobecnego na serwerze oraz to, że może Pan chcieć nieco przebudować funkcję 'drop' tak, aby gracz widział łączną sumę pieniędzy jaką dostanie. W tym momencie skrypt działa tak, że gracz może nic nie dostać lub dostać nawet 3.01 $, ale wiadomość 'title' i tak pokaże tylko 2 $, ponieważ zasłoni poprzednie wiadomości o otrzymaniu 0.01 $ i 1 $.

Też wygląda dobrze, ale i tutaj mam dwie uwagi. Pierwsza dotyczy zmiennej {_t}, która jest niepotrzebna. Zmienna {_c} przechowuje przecież informację o tym samym bloku, więc ustawianie zmiennej {_t} i używanie jej jest niepotrzebne.

Nie rozumiem. Typ 'offlineplayer' nie ma jakiegokolwiek związku z tym czy gracz korzysta z pirackiej wersji gry, czy też nie. Typ 'player' dotyczy gracza obecnego na serwerze, a typ 'offlineplayer' dotyczy dowolnego gracza - może, ale nie musi być na serwerze.

Podawanie gracza offline nie ma sensu, ponieważ nie mamy możliwości wręczenia mu przedmiotu, dlatego warto zawęzić dziedzinę argumentu do graczy obecnych na serwerze. Ponadto, można zastosować tę samą modyfikację z domyślną wartością argumentu, którą zastosował Pan w skrypcie modyfikującym drop z kamienia.

Pozdrawiam.

Poprawiona wersja skryptu na cashblock https://code.skript.pl/qoyS7tIh, brush https://code.skript.pl/7EyrlOsW/

 

 

Odnośnik do komentarza
https://skript.pl/temat/57847-skrypty-do-cashblock/#findComment-343859
Udostępnij na innych stronach

  • 1 miesiąc temu...
W dniu 14.07.2024 o 16:08, SkryptExpert napisał:

Poprawiona wersja skryptu na cashblock https://code.skript.pl/qoyS7tIh, brush https://code.skript.pl/7EyrlOsW/

 

 

a możesz zrobić żeby dalo sie kopac brushem tylko w swiecie brush?

 

Odnośnik do komentarza
https://skript.pl/temat/57847-skrypty-do-cashblock/#findComment-345104
Udostępnij na innych stronach

W dniu 11.09.2024 o 21:42, rip_syn0nim napisał:

a możesz zrobić żeby dalo sie kopac brushem tylko w swiecie brush?

 

mozesz sprobowac dodac to na poczatku skrypt z brushem

if world name is "brush"
Odnośnik do komentarza
https://skript.pl/temat/57847-skrypty-do-cashblock/#findComment-345120
Udostępnij na innych stronach

  • 3 tygodnie później...
W dniu 12.07.2024 o 14:57, SkryptExpert napisał:

Przedstawiam wam dwa proste skrypty mojego wykonania

Drop kasy ze stonehttps://code.skript.pl/qoyS7tIh

Brush: https://code.skript.pl/7EyrlOsW

zachęcam do własnej opini

 

 

Aby zwiększyć użyteczność skryptu jak i powiększyć jego horyzonty polecił bym ci rozbudować brushe, aby była możliwość w różny sposób kopać daną ilość bloków. Czy np w formie okręgu

Odnośnik do komentarza
https://skript.pl/temat/57847-skrypty-do-cashblock/#findComment-345251
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...