Skocz do zawartości
  • 0

[ Funkcje ] Pytanie...


MaTrIS
 Udostępnij

Pytanie

Otóż napisałem kod skryptu, z  5 funkcjami 

ale nie wiem, czy są prawidłowe...

czy mógłby ktoś sprawdzić?

 jak napisałem, źle  to mógłby ktoś mi poprawić...?

Kod pod BungeeCord

 

Poprawka: zapomniałem funkcji pod portfel...

poprawny skrypt:

 

 

Jakby ktoś mógł to poprosze usunąć ten 1 link, bo ja niemoge....

 

+ funkcja na level+postęp....

 

mógłby ktoś sprawdzić...? i poprawić jak będą błędy?

Edytowane przez MaTrIS
Odnośnik do komentarza
Udostępnij na innych stronach

7 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Dobra, mniej więcej sobie przejrzałem twoje załączone skrypty i zauważyłem parę błędów:

1. W pierwszej funkcji lobby_scoreboard() nic złego raczej nie widzę (aczkolwiek niezbyt znam się na składni ze scoreboardów, więc może ktoś mnie poprawi), poza jednym małym szkopułem, w linijce 24 masz "else: stop",  lepiej gdybyś użył "else: exit 1 loop", gdyż podejrzewam, że chcesz tylko zakończyć pętlę, a nie zatrzymać całą funkcję (co zresztą i tak nie ma zbyt wielkiego sensu, tym bardziej, że jest na końcu funkcji). Dodatkowo, w linijkach kolejno 14 i 15 nie masz wywoływanych funkcji w procentach, daj je między procenty, w przeciwnym wypadku funkcja się nie wykona i będzie zwykłym tekstem.

2. W funkcji bungee_money_srt() masz "bungee_money_prt(player)", tymczasem tego nie możesz zrobić, ponieważ tam nie jesteś w stanie zdobyć playera, użyj playera zapisanego w {_p} z nadrzędnej funkcji.

3. W kolejnych funkcjach odwołujesz się do lokalnych zmiennych z poprzednich funkcji, czego nie możesz zrobić, ponieważ lokalne zmienne się nie zapisują, one służą tylko w danym fragmencie kodu (triggerze, funkcji itd.). Spróbuj wywołać następną funkcję w poprzedniej funkcji, której argumentami będą lokalne zmienne. Podam ci przykład z twojego kodu: masz lokalną zmienną {_m} w bungee_money_srt() i próbujesz jej użyć w bungee_money_prt(), zresztą w ogóle nie wiem po co ci funkcje bungee_money_prt() i bungee_portfel_btw(), one tylko próbują użyć lokalnej zmiennej z innego kodu, chociaż nawet słowo "próbują" jest lekką przesadą. Czy aby przypadkiem ta funkcja nie powinna zwracać jakiejś wartości czy coś?

4. Używasz funkcji bungee_money_prt() w kodzie funkcji lobby_scoreboard(), możliwe, że to nie zadziała, gdyż funkcje muszą być zdefiniowane w odpowiedniej kolejności (tutaj mogę się mylić, ale miałem kilkukrotnie problem z funkcjami w niewłaściwej kolejności),  w tym wypadku funkcja lobby_scoreboard() powinna być raczej na samym dole.

5. Jak zobaczyłem funkcję na level, to tak trochę omniemiałem, jestem pewien, że mógłbyś to o wiele optymalniej zrobić, np. na podstawie procentów i bez tylu warunków, a przynajmniej nie rób w jednej kolumnie 10 if statementów, tylko 1 niech będzie "if", a każdy kolejny "else if", dzięki temu jeżeli 1 warunek się nie spełni, to dopiero do kolejnego przechodzi, a tak jak masz teraz to wszystkie naraz warunki sprawdza.

Dobra, to chyba tyle, jakby coś jeszcze, to pytaj, ale od razu mówię, nie jestem dobrym skrypterem, więc nie myśl, że pomogę ci z wszystkim :P 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
10 godzin temu, Kormic napisał:

 

2. W funkcji bungee_money_srt() masz "bungee_money_prt(player)", tymczasem tego nie możesz zrobić, ponieważ tam nie jesteś w stanie zdobyć playera, użyj playera zapisanego w {_p} z nadrzędnej funkcji.

 

tylko, że ja mam {_p} tam...

 

set the text of id "LOBBY-%{_p}%Slot8" to " &2&7Monet: &ebungee_money_prt({_p})"		
set the text of id "LOBBY-%{_p}%Slot8" to " &2&7Portfel: &ebungee_portfel_msf({_p})"	

 

A na numery slotów nie patrz  potem jak będzie wszystko jasne, to ponumeruje dokładnie... bo dodałem z 6 linijek... 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Cytat

 

Dodatkowo, w linijkach kolejno 14 i 15 nie masz wywoływanych funkcji w procentach, daj je między procenty, w przeciwnym wypadku funkcja się nie wykona i będzie zwykłym tekstem.

 

no właśnie zauważyłem, że powinno być w %bungee_money_prt({_p})%  oraz %bungee_portfel_msf({_p})%

tak? oto ci chodzi...? em, jakby co, to na te 2 pierwsze linki nie patrz ... tylko na tą trzecią!

 

+ zauważyłem, na serverze testowym, że niewyświetla się nic.... nawet Postęp: ( ale to raczej dlatego, że nie ponumerowałem odpowiednio...

ale już ponumerowałem... "" jak zrobię all poprawki, to sprawdzę czy działa.... jak tak to dziękuję """

Edytowane przez MaTrIS
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
11 godzin temu, Kormic napisał:

Dobra, mniej więcej sobie przejrzałem twoje załączone skrypty i zauważyłem parę błędów:

1. W pierwszej funkcji lobby_scoreboard() nic złego raczej nie widzę (aczkolwiek niezbyt znam się na składni ze scoreboardów, więc może ktoś mnie poprawi), poza jednym małym szkopułem, w linijce 24 masz "else: stop",  lepiej gdybyś użył "else: exit 1 loop", gdyż podejrzewam, że chcesz tylko zakończyć pętlę, a nie zatrzymać całą funkcję (co zresztą i tak nie ma zbyt wielkiego sensu, tym bardziej, że jest na końcu funkcji). Dodatkowo, w linijkach kolejno 14 i 15 nie masz wywoływanych funkcji w procentach, daj je między procenty, w przeciwnym wypadku funkcja się nie wykona i będzie zwykłym tekstem.

2. W funkcji bungee_money_srt() masz "bungee_money_prt(player)", tymczasem tego nie możesz zrobić, ponieważ tam nie jesteś w stanie zdobyć playera, użyj playera zapisanego w {_p} z nadrzędnej funkcji.

3. W kolejnych funkcjach odwołujesz się do lokalnych zmiennych z poprzednich funkcji, czego nie możesz zrobić, ponieważ lokalne zmienne się nie zapisują, one służą tylko w danym fragmencie kodu (triggerze, funkcji itd.). Spróbuj wywołać następną funkcję w poprzedniej funkcji, której argumentami będą lokalne zmienne. Podam ci przykład z twojego kodu: masz lokalną zmienną {_m} w bungee_money_srt() i próbujesz jej użyć w bungee_money_prt(), zresztą w ogóle nie wiem po co ci funkcje bungee_money_prt() i bungee_portfel_btw(), one tylko próbują użyć lokalnej zmiennej z innego kodu, chociaż nawet słowo "próbują" jest lekką przesadą. Czy aby przypadkiem ta funkcja nie powinna zwracać jakiejś wartości czy coś?

4. Używasz funkcji bungee_money_prt() w kodzie funkcji lobby_scoreboard(), możliwe, że to nie zadziała, gdyż funkcje muszą być zdefiniowane w odpowiedniej kolejności (tutaj mogę się mylić, ale miałem kilkukrotnie problem z funkcjami w niewłaściwej kolejności),  w tym wypadku funkcja lobby_scoreboard() powinna być raczej na samym dole.

5. Jak zobaczyłem funkcję na level, to tak trochę omniemiałem, jestem pewien, że mógłbyś to o wiele optymalniej zrobić, np. na podstawie procentów i bez tylu warunków, a przynajmniej nie rób w jednej kolumnie 10 if statementów, tylko 1 niech będzie "if", a każdy kolejny "else if", dzięki temu jeżeli 1 warunek się nie spełni, to dopiero do kolejnego przechodzi, a tak jak masz teraz to wszystkie naraz warunki sprawdza.

Dobra, to chyba tyle, jakby coś jeszcze, to pytaj, ale od razu mówię, nie jestem dobrym skrypterem, więc nie myśl, że pomogę ci z wszystkim :P 

okej, 

3. W kolejnych funkcjach odwołujesz się do lokalnych zmiennych z poprzednich funkcji, czego nie możesz zrobić, ponieważ lokalne zmienne się nie zapisują, one służą tylko w danym fragmencie kodu (triggerze, funkcji itd.). Spróbuj wywołać następną funkcję w poprzedniej funkcji, której argumentami będą lokalne zmienne. Podam ci przykład z twojego kodu: masz lokalną zmienną {_m} w bungee_money_srt() i próbujesz jej użyć w bungee_money_prt(), zresztą w ogóle nie wiem po co ci funkcje bungee_money_prt() i bungee_portfel_btw(), one tylko próbują użyć lokalnej zmiennej z innego kodu, chociaż nawet słowo "próbują" jest lekką przesadą. Czy aby przypadkiem ta funkcja nie powinna zwracać jakiejś wartości czy coś?

4. Używasz funkcji bungee_money_prt() w kodzie funkcji lobby_scoreboard(), możliwe, że to nie zadziała, gdyż funkcje muszą być zdefiniowane w odpowiedniej kolejności (tutaj mogę się mylić, ale miałem kilkukrotnie problem z funkcjami w niewłaściwej kolejności),  w tym wypadku funkcja lobby_scoreboard() powinna być raczej na samym dole.

5. Jak zobaczyłem funkcję na level, to tak trochę omniemiałem, jestem pewien, że mógłbyś to o wiele optymalniej zrobić, np. na podstawie procentów i bez tylu warunków, a przynajmniej nie rób w jednej kolumnie 10 if statementów, tylko 1 niech będzie "if", a każdy kolejny "else if", dzięki temu jeżeli 1 warunek się nie spełni, to dopiero do kolejnego przechodzi, a tak jak masz teraz to wszystkie naraz warunki sprawdza.

no to, spróbuję to skrócić, +dodać może jakieś inne funkcje do levela, +do monet i portfela, dodam funkcję, która będzie też, 

Cytat

Czy aby przypadkiem ta funkcja nie powinna zwracać jakiejś wartości czy coś?

no właśnie... 

napiszę odnowa funkcję z monetami+portfelem, żeby zwracała wartości... 

a czy np. %loop-number% lub %loop-value% jak będzie w tym.... czyli np:

to cały skrypt...

 

 

btw, ja jak pisałem te funkcje na monety + portfel.... napisałem:

set {_p} >= o              ( liczbe o zamiast 0 ) ....

 

emm... 

Cytat

 

poza jednym małym szkopułem, w linijce 24 masz "else: stop",  lepiej gdybyś użył "else: exit 1 loop", gdyż podejrzewam, że chcesz tylko zakończyć pętlę, a nie zatrzymać całą funkcję (co zresztą i tak nie ma zbyt wielkiego sensu, tym bardziej, że jest na końcu funkcji). 

 

ale ... a widziałeś, wyżej, do czego jest to podpięte...?

if {_p}'s world is "world":







else:
	stop

czyli, jeżeli gracz jest w danym świecie, a jeżeli nie, to żeby zatrzymało całą funkcję dla tego graczy ponieważ nie jest w danym świecie...

a jak będzie w tym danym świecie, to funkcja się odnowa włączy...

 

em.... jest jakiś błąd,

log z konsoli:

 

ss scoreboardu:

 

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

 

z tego co widzę, to za dużo jest linijek scoreboardu.... czyli statystyki usunę, jedynie to, wygrane i zabójstwa zostawię... 

 

Edytowane przez MaTrIS
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Dobra, a więc odniosę się do mojej wypowiedzi.

1. Faktycznie, te "else:" jest podpięte pod if statementa, więc mój błąd.

2. Co do playera w argumencie funkcji wywoływanej w innej funkcji, było to błędem, ale widzę, że usunąłeś tę funkcję, więc mniejsza o to.

Dobra, teraz co do twojego nowego skryptu:

Początek skryptu jest dobry, nic złego nie widzę, lecz co do optymalizacji... Używasz w funkcji tp_lobby() dwukrotnie składni od komend przez konsolę, lepiej zrób to poprzez playera np. execute player command "mvtp %{_p}% world" as op

Co do on chat:, powinieneś tam przynajmniej dodać warunek sprawdzający, czy gracz jest wyciszony, bo tak to każdy będzie mógł pisać niezależnie od tego, czy ma mute'a, czy też nie.

Co do funkcji, po pierwsze, funkcje na górze kodu! Po drugie, funkcja nie może zwracać czegoś takiego jak loop-value, ustaw loop-value do argumentu funkcji, to samo tyczy się typu zwracanej wartości, nie ma czegoś takiego jak loop-number.

W linijce 65 masz procent w niewłaściwym miejscu w zmiennej, powinien być przed klamrą. Linijka 66, brak zamykającej klamry. Linijka 67, brak zamykającej klamry.

Procentów używa się tylko w tekście i kiedy potrzebujesz jednej zmiennej w drugiej, same procenty nic nie dają.

Wszystkie funkcje (poza funkcją od scoreboarda) do solidnej poprawy.

Linijka 94, brak zamykającego nawiasu + niepotrzebny loop-number.

Na górze kodu powinieneś zrobić variables: i tam do zmiennych takich jak {bridge.stats.wins::%{_uuid}%} przypisać 0, czyli variables: {bridge.stats.wins::%{_uuid}%} = 0 {bridge.stats.goals::%{_uuid}%} = 0 itd.

Oraz na koniec, w zmiennych lepiej używać podwójnych dwukropków niż kropek. Dzięki temu zamiast czyścić {bridge.stats.goals::*} możesz zrobić  clear {bridge:stats::*}.

I tutaj też pojawia się kolejny problem, w tych zmiennych uuid powinno być przed konkretną statystyką, czyli {bridge::stats::%{_uuid}%::goals}, dzięki czemu możesz zrobić clear {bridge::stats::%{_uuid}%::*} i tak właśnie możesz wyczyścić jednemu graczowi wszystkie statystyki.

To tyle ode mnie, popraw co masz do poprawy i do dzieła!

EDIT: Co do błędów w konsoli, masz do poprawy wytabowanie/wcięcia w funkcji level_bossbar() od linijki 73, po prostu cofnij wszystko od tej linijki + ją samą o 1 tab w lewo. Właśnie dlatego masz warna z 72 linijki "[Skript] Empty configuration section! You might want to indent one or more of the subsequent lines to make them belong to this section or remove the colon at the end of the line if you don't want this line to start a section. (stuff.sk, line 72: if {_ps} is set:')". A funkcje wywalają błędy, bo źle zrobiłeś zwracanie wartości.

Edytowane przez Kormic
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Okej dziękuję za odpowiedź...

Jutro postaram się poprawic błędy...

+ na serverze na scoreboardzie pisze...

<none> ...

Jak poprawie wszystko, i będzie dobrze to niebędzie tego <none> tylko poprawna treść... 

To wtedy może być wątek zamknięty...

Jakby co, to się na priv odezwe 

@Kormic

Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

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

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