Skocz do zawartości
  • 0

Komenda /repair [nick gracza] {naprawia mu przedmiot co trzyma w łapce}


Pytanie

7 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
command /repair [<text>]:
    permission: repair.use
    permission message: &cBrak uprawnień do użycia tej komendy.
    trigger:
        if player has permission "repair.use":
            if arg-1 is not set:
                send "&cMusisz podać nazwę gracza."
                stop
            if arg-1 is a player:
                if arg-1's tool is air:
                    send "&cGracz %{arg-1}% nie trzyma przedmiotu w ręce."
                    stop
                set durability of arg-1's tool to 0
                send "&aPrzedmiot gracza %{arg-1}% został naprawiony."
            else:
                send "&cGracz o nazwie %{arg-1}% nie jest online."
        else:
            send "&cNie masz uprawnień do użycia tej komendy."

 

Odnośnik do komentarza
https://skript.pl/temat/57442-komenda-repair-nick-gracza-naprawia-mu-przedmiot-co-trzyma-w-%C5%82apce/#findComment-342058
Udostępnij na innych stronach

  • 0

@Procix94

Pana kod zawiera wiele błędów, które czynią go bezużytecznym.

  1. Największym błędem w Pana kodzie jest przyrównywanie tekstu do gracza w 9. linijce. Tekst to po prostu tekst, gracz jest obiektem zawierającym wiele innych informacji. Zdecydowanie lepszym podejściem jest ustawienie typu argumentu pobieranego w komendzie jako 'player'. Dzięki temu od razu mamy pewność, że jest to gracz, który jest obecnie na serwerze.
    Jeśli Pan chciałby jednak trzymać się swojego rozwiązania, należałoby użyć wyrażenia 'parsed as'.
    arg-1 parsed as player

    Niemniej jednak jest to zwyczajne generowanie sobie problemów w kodzie, nie ma potrzeby wykorzystywania tak dziwnego rozwiązania.

  2. Drugim najważniejszym błędem jest próba wykorzystania argumentu w kodzie tak jakby był zmienną.

    %{arg-1}% - próba pobrania wartości zmiennej globalnej {arg-1}
    
    %arg-1% - pobieranie wartości pierwszego argumentu

    Rzecz jasna taka zmienna najprawdopodobniej nie istnieje, co skutkuje wyświetlaniem się "<none>" w miejscu nazwy gracza.

  3. Pan już ustawił w konfiguracji komendy wymaganą permisję, a więc warunek sprawdzający permisję wykonującego permisję jest redundantny.

  4. Ustawienie wytrzymałości przedmiotu gracza na 0 co prawda działa, jednak lepszym rozwiązaniem jest użycie efektu 'repair'.

  5. Pana kod zawiera wiele zagnieżdżonych warunków - taki sposób pisania kodu sprawia, że szybko staje się on nieczytelny. Zalecam używać odwróconych warunków wraz z instrukcją 'stop'. Przykład poniżej.

    if arg-1 is not set:
    	send "Podaj argument." to sender
    	stop
    # Dalszy kod...
12 godzin temu, asdasdasafasf napisał:

proszę potrzebuje tego jak najszybciej

Proszę bardzo. Skrypt oprócz sprawdzania czy gracz faktycznie trzyma coś w ręce, sprawdza również czy przedmiot jest możliwy do naprawy oraz czy jest uszkodzony.

command /repair <player>:
	permission: server.command.repair
	permission message: &cNie posiadasz wystarczających uprawnień do użycia tej komendy.
	usage: &c/repair <gracz>
	trigger:
		if arg's tool is air:
			send "&cGracz %arg% &cnie trzyma niczego w ręce." to sender
			stop
		if max durability of arg's tool is 0:
			send "&cGracz %arg% &ctrzyma w ręce przedmiot, który jest nienaprawialny." to sender
			stop
		if durability of arg's tool is 0:
			send "&cGracz %arg% &ctrzyma w ręce przedmiot, który nie wymaga naprawy." to sender
			stop
		repair arg's tool
		send "&aPrzedmiot gracza %arg% &azostał naprawiony." to sender

 

Odnośnik do komentarza
https://skript.pl/temat/57442-komenda-repair-nick-gracza-naprawia-mu-przedmiot-co-trzyma-w-%C5%82apce/#findComment-342061
Udostępnij na innych stronach

  • 0

bardzo dziękuje, skrypt działa tak jak chciałem lecz ten skrypt nie sprawdza czy przedmiot jest uszkodzony

W dniu 29.04.2024 o 16:11, Kormic napisał:

@Procix94

Pana kod zawiera wiele błędów, które czynią go bezużytecznym.

  1. Największym błędem w Pana kodzie jest przyrównywanie tekstu do gracza w 9. linijce. Tekst to po prostu tekst, gracz jest obiektem zawierającym wiele innych informacji. Zdecydowanie lepszym podejściem jest ustawienie typu argumentu pobieranego w komendzie jako 'player'. Dzięki temu od razu mamy pewność, że jest to gracz, który jest obecnie na serwerze.
    Jeśli Pan chciałby jednak trzymać się swojego rozwiązania, należałoby użyć wyrażenia 'parsed as'.
    arg-1 parsed as player

    Niemniej jednak jest to zwyczajne generowanie sobie problemów w kodzie, nie ma potrzeby wykorzystywania tak dziwnego rozwiązania.

  2. Drugim najważniejszym błędem jest próba wykorzystania argumentu w kodzie tak jakby był zmienną.

    %{arg-1}% - próba pobrania wartości zmiennej globalnej {arg-1}
    
    %arg-1% - pobieranie wartości pierwszego argumentu

    Rzecz jasna taka zmienna najprawdopodobniej nie istnieje, co skutkuje wyświetlaniem się "<none>" w miejscu nazwy gracza.

  3. Pan już ustawił w konfiguracji komendy wymaganą permisję, a więc warunek sprawdzający permisję wykonującego permisję jest redundantny.

  4. Ustawienie wytrzymałości przedmiotu gracza na 0 co prawda działa, jednak lepszym rozwiązaniem jest użycie efektu 'repair'.

  5. Pana kod zawiera wiele zagnieżdżonych warunków - taki sposób pisania kodu sprawia, że szybko staje się on nieczytelny. Zalecam używać odwróconych warunków wraz z instrukcją 'stop'. Przykład poniżej.

    if arg-1 is not set:
    	send "Podaj argument." to sender
    	stop
    # Dalszy kod...

Proszę bardzo. Skrypt oprócz sprawdzania czy gracz faktycznie trzyma coś w ręce, sprawdza również czy przedmiot jest możliwy do naprawy oraz czy jest uszkodzony.

command /repair <player>:
	permission: server.command.repair
	permission message: &cNie posiadasz wystarczających uprawnień do użycia tej komendy.
	usage: &c/repair <gracz>
	trigger:
		if arg's tool is air:
			send "&cGracz %arg% &cnie trzyma niczego w ręce." to sender
			stop
		if max durability of arg's tool is 0:
			send "&cGracz %arg% &ctrzyma w ręce przedmiot, który jest nienaprawialny." to sender
			stop
		if durability of arg's tool is 0:
			send "&cGracz %arg% &ctrzyma w ręce przedmiot, który nie wymaga naprawy." to sender
			stop
		repair arg's tool
		send "&aPrzedmiot gracza %arg% &azostał naprawiony." to sender

 

 

 

Odnośnik do komentarza
https://skript.pl/temat/57442-komenda-repair-nick-gracza-naprawia-mu-przedmiot-co-trzyma-w-%C5%82apce/#findComment-342104
Udostępnij na innych stronach

  • 0
33 minuty temu, asdasdasafasf napisał:

bardzo dziękuje, skrypt działa tak jak chciałem lecz ten skrypt nie sprawdza czy przedmiot jest uszkodzony

Zanim udostępniłem Panu ten skrypt, sprawdziłem jego działanie pod kątem każdego warunku i nie wykryłem jakichkolwiek nieprawidłowości. Wedle mojej wiedzy wytrzymałość przedmiotu w Skript (jak i zawsze to miało miejsce w Bukkit API) zaczyna się w zerze i wzrasta aż nie osiągnie maksymalnej wytrzymałości - wtedy przedmiot się niszczy.

Niemniej jednak mogło coś się zmienić ostatnio, nie neguję tego. Przyznam, że jakiś czas nie pisałem skryptów, więc kod przetestowałem na nieco starszym serwerze. Podam Panu nowy kod, którym może Pan sprawdzić jak to u Pana działa.

command /repair <player>:
	permission: server.command.repair
	permission message: &cNie posiadasz wystarczających uprawnień do użycia tej komendy.
	usage: &c/repair <gracz>
	trigger:
		if arg's tool is air:
			send "&cGracz %arg% &cnie trzyma niczego w ręce." to sender
			stop
		if max durability of arg's tool is 0:
			send "&cGracz %arg% &ctrzyma w ręce przedmiot, który jest nienaprawialny." to sender
			stop
		if durability of arg's tool is 0:
			send "&cGracz %arg% &ctrzyma w ręce przedmiot, który nie wymaga naprawy." to sender
			stop
		send "Wytrzymałość = %durability of arg's tool%" to sender
		repair arg's tool
		send "&aPrzedmiot gracza %arg% &azostał naprawiony." to sender

Dodałem jedną linijkę, ściślej mówiąc, linijkę 15. Niech Pan sprawdzi jaka wyświetla się wartość wytrzymałości przy próbie naprawy nieuszkodzonego przedmiotu dowolnego gracza.
Jeśli na czacie wyświetli się "Wytrzymałość = 0", znaczy to, że Skript na Pana serwerze szwankuje. Jeśli jednak na czacie wyświetli się wartość różna od zera (na przykład 1562 dla diamentowego miecza), proszę zamienić linijkę 12. na poniższy warunek.

if durability of arg's tool is max durability of arg's tool

Gdy już Pan to zrobi, może Pan również usunąć linijkę, którą dodałem (linijka 15. wyświetlająca wartość wytrzymałości przedmiotu danego gracza).

Na koniec ostrzegam, że Skript jest wyczulony na wcięcia w kodzie. W razie "rozjechania się" kodu proszę go poprawiać tabulatorem (nie spacją!).

Odnośnik do komentarza
https://skript.pl/temat/57442-komenda-repair-nick-gracza-naprawia-mu-przedmiot-co-trzyma-w-%C5%82apce/#findComment-342105
Udostępnij na innych stronach

  • 0

teraz mam inny problem 

W dniu 30.04.2024 o 18:48, Kormic napisał:

Zanim udostępniłem Panu ten skrypt, sprawdziłem jego działanie pod kątem każdego warunku i nie wykryłem jakichkolwiek nieprawidłowości. Wedle mojej wiedzy wytrzymałość przedmiotu w Skript (jak i zawsze to miało miejsce w Bukkit API) zaczyna się w zerze i wzrasta aż nie osiągnie maksymalnej wytrzymałości - wtedy przedmiot się niszczy.

Niemniej jednak mogło coś się zmienić ostatnio, nie neguję tego. Przyznam, że jakiś czas nie pisałem skryptów, więc kod przetestowałem na nieco starszym serwerze. Podam Panu nowy kod, którym może Pan sprawdzić jak to u Pana działa.

command /repair <player>:
	permission: server.command.repair
	permission message: &cNie posiadasz wystarczających uprawnień do użycia tej komendy.
	usage: &c/repair <gracz>
	trigger:
		if arg's tool is air:
			send "&cGracz %arg% &cnie trzyma niczego w ręce." to sender
			stop
		if max durability of arg's tool is 0:
			send "&cGracz %arg% &ctrzyma w ręce przedmiot, który jest nienaprawialny." to sender
			stop
		if durability of arg's tool is 0:
			send "&cGracz %arg% &ctrzyma w ręce przedmiot, który nie wymaga naprawy." to sender
			stop
		send "Wytrzymałość = %durability of arg's tool%" to sender
		repair arg's tool
		send "&aPrzedmiot gracza %arg% &azostał naprawiony." to sender

Dodałem jedną linijkę, ściślej mówiąc, linijkę 15. Niech Pan sprawdzi jaka wyświetla się wartość wytrzymałości przy próbie naprawy nieuszkodzonego przedmiotu dowolnego gracza.
Jeśli na czacie wyświetli się "Wytrzymałość = 0", znaczy to, że Skript na Pana serwerze szwankuje. Jeśli jednak na czacie wyświetli się wartość różna od zera (na przykład 1562 dla diamentowego miecza), proszę zamienić linijkę 12. na poniższy warunek.

if durability of arg's tool is max durability of arg's tool

Gdy już Pan to zrobi, może Pan również usunąć linijkę, którą dodałem (linijka 15. wyświetlająca wartość wytrzymałości przedmiotu danego gracza).

Na koniec ostrzegam, że Skript jest wyczulony na wcięcia w kodzie. W razie "rozjechania się" kodu proszę go poprawiać tabulatorem (nie spacją!).

trzeba resetować skrypty co chwile aby skrypt dalej działał

jak mam to naprawić?

 

Odnośnik do komentarza
https://skript.pl/temat/57442-komenda-repair-nick-gracza-naprawia-mu-przedmiot-co-trzyma-w-%C5%82apce/#findComment-342567
Udostępnij na innych stronach

  • 0
8 godzin temu, asdasdasafasf napisał:

teraz mam inny problem 

trzeba resetować skrypty co chwile aby skrypt dalej działał

jak mam to naprawić?

 

Mój skrypt nie wykonuje jakichkolwiek złożonych operacji, więc trudno jest mi uwierzyć w to, że mógłby być przyczyną powstałych problemów.

Zalecam Panu przetestować skrypt na "czystym" serwerze jeśli to możliwe (minimum to wyłączenie na czas testów wszystkich skryptów, a później w razie dalszych problemów dodatków do Skript). Nie ukrywam jednak, że idealnymi warunkami byłoby przetestowanie skryptu na serwerze ze Skriptem jako jedynym pluginem na serwerze.

Jeśli skrypt będzie działał zgodnie z założeniami, oznacza to, że któryś z pluginów (lub skryptów) powoduje problemy. Tutaj już musi Pan na własną rękę doszukać się źródła niepoprawnego działania skryptu.

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57442-komenda-repair-nick-gracza-naprawia-mu-przedmiot-co-trzyma-w-%C5%82apce/#findComment-342572
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
Odpowiedz na pytanie...

×   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ę...