Skocz do zawartości
  • 0

Błąd z "on inventory click"


Pytanie

Cześć! Mam ostatnio problem z moim skryptem

command /pun [<player>]:
    trigger:
        set {_gui} to chest inventory with 5 rows named "&9Panel Gracza: %argument 1%"
        set slot 20 of {_gui} to paper named "&cZbanuj %argument 1% za: Złamanie regulaminu" with lore ""
        open {_gui} to player
        on inventory click:
            if clicked slot is 0:
                execute player command "ban %argument 1%"

jest problem taki ze pisze bład CwnruOL.png

Prosze pomozcie
           

Odnośnik do komentarza
https://skript.pl/temat/57487-b%C5%82%C4%85d-z-on-inventory-click/
Udostępnij na innych stronach

12 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
25 minut temu, HvgoY napisał:

Cześć! Mam ostatnio problem z moim skryptem

Problem leży w tym, że linijka otwierająca listener zdarzenia 'on inventory click:" znalazła się w wyzwalaczu (ang. trigger) komendy. Listener ten powinien być całkowicie niezależny od komendy, to znaczy całkowicie poza jej kodem.

Odsyłam do dokumentacji Skript i polecam zobaczyć skrypty w dziale Skript > Skrypty. Co prawda to drugie nie zawsze jest wiarygodnym źródłem, ale trzeba od czegoś zacząć.

 

Odnośnik do komentarza
https://skript.pl/temat/57487-b%C5%82%C4%85d-z-on-inventory-click/#findComment-342314
Udostępnij na innych stronach

  • 0
12 minut temu, HvgoY napisał:

Czyli gdzie powinien sie znajdować bo troche jestem nowy w te rzeczy 😉

Gdziekolwiek w tym pliku (może być nawet w innym skrypcie), byleby poza kodem komendy.

Jeśli chodzi o dokumentację Skript, można ją znaleźć tutaj.

Co do przykładowych kodów - można je znaleźć w dziale Skript > Skrypty. Co prawda znajdują się tam kody zawierające złe praktyki, ale wystarczy, że Pan znajdzie jakiś prosty implementujący w sobie listener zdarzenia 'on inventory click'.

Odnośnik do komentarza
https://skript.pl/temat/57487-b%C5%82%C4%85d-z-on-inventory-click/#findComment-342332
Udostępnij na innych stronach

  • 0
47 minut temu, HvgoY napisał:

czyli poza trigerem

Dokładnie tak. Pokażę przykład, aby rozwiać wszelkie wątpliwości.

command /testcommand:
	trigger:
		# Kod komendy otwierający GUI...
		
on inventory click:
	# Kod wyzwalany przy kliknięciu w dowolnym GUI...

Proszę zwrócić uwagę na to, że listener jest wywoływany przy każdym kliknięciu w dowolne GUI. Należy więc sprawdzić nazwę GUI, w które gracz klika.
Nie chcemy przecież sytuacji, aby przy kliknięciu slotu 0 w dowolnym GUI ktoś był banowany na serwerze.

if name of clicked inventory is "&6Nazwa GUI":
	# Dalszy kod...

Dodam, że porównywanie klikniętego slotu do liczby nie zawsze musi działać. Sugeruję tutaj użycie wyrażenia 'index of clicked slot'.

if index of clicked slot is 0:
	# Dalszy kod...

Dzięki tej niewielkiej zmianie Skript będzie miał absolutną pewność, że pytamy o indeks (numer) slotu, nie o jego zawartość.

39 minut temu, HvgoY napisał:

ej bo jeszcze mam problem chce ustawic ze po kliknieciu na slot 20 wykonywała sie komenda "ban <gracz ktorego podasz w komendzie>" jak to zrobic?

 

Można co prawda wstawić instrukcję wykonywania komendy w listenerze zdarzenia 'on inventory click' (po uprzednim sprawdzeniu czy to jest odpowiednie GUI oraz czy został kliknięty odpowiedni slot), jednakże istnieje lepsze rozwiązanie.
Może Pan skorzystać z efektu 'ban', który znajduje się w samym Skript. Jeśli Pan chce widzieć w konsoli gdy ktoś kogoś banuje w owym GUI, może Pan wysłać wiadomość do konsoli.

send "Gracz %{_banned}% został zbanowany przez %player%." to console

Pojawia się tu jeszcze problem związany z koniecznością wiedzy o jakiego gracza chodzi przy klikaniu w GUI. Musi Pan więc zapisać graczowi, który użył komendy /pun zmienną przechowującą gracza, którego chce zbanować. Tutaj również pokażę przykład.

command /pun <player>:
	trigger:
		# Otwieranie GUI...
		set {punishingPlayer::%uuid of player%} to arg
		
on inventory click:
	# Sprawdzanie GUI i indeksu slotu...
	ban {punishingPlayer::%uuid of player%} due to "Złe zachowanie."

Jeśli Pan czuje taką potrzebę, przy zamknięciu tego GUI (listener zdarzenia 'on inventory close' i sprawdzenie nazwy GUI) może Pan czyścić zmienną przechowującą karanego gracza.

clear {punishingPlayer::%uuid of player%}

Na koniec dodam, że kwadratowe nawiasy przy argumencie oznaczają jego opcjonalność - bez jego podania komenda zadziała, a argument 1. przyjmie wartość '<none>'. Wtedy musi Pan sprawdzić czy argument jest ustawiony ('if arg-1 is set') i jakoś to obsłużyć.
Prościej jednak jest po prostu usunąć te kwadratowe nawiasy, wtedy podanie argumentu jest wymagane.

Pozdrawiam.

Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/57487-b%C5%82%C4%85d-z-on-inventory-click/#findComment-342335
Udostępnij na innych stronach

  • 0
7 minut temu, HvgoY napisał:

to nie dziala mam custom komende na banowanie i pisze mi ze poprawne uzycie to /ban <gracz> <powód>

wiec jak zrobić zeby wywolala sie komenda "ban <gracz> Złamanie regulaminu"?

Jeśli komenda pochodzi z pluginu, wystarczy zastąpić linijkę z efektem 'ban' linijką wykonującą instrukcję 'execute %command sender% command "/ban ..."'.

Na Pana miejscu zastąpiłbym wywoływanie komendy korzystaniem z metod zawartych w API pluginu, jednakże rozumiem, że nie jest to łatwa rzecz dla początkujących. Może więc Pan pozostać przy wywoływaniu komendy.

Na koniec dodam, że może Pan jako wykonawcę komendy (command sender) podać konsolę (console) lub gracza (player).

Odnośnik do komentarza
https://skript.pl/temat/57487-b%C5%82%C4%85d-z-on-inventory-click/#findComment-342356
Udostępnij na innych stronach

  • 0
Teraz, HvgoY napisał:

Nie moge tak zrobić bo to ma banowac gracza podanego w komendzie bo chce zrobic takie BAN GUI wiec ze wpisujesz /pun <gracz> i w menu masz akcje ktore mozesz zrobic z graczem

Ale dlaczego nie może Pan tak zrobić? Nie rozumiem z czym Pan się zmaga w tym momencie.

Mam wrażenie, że Pan nie przeczytał drugiej części mojego wczorajszego posta. Tam wyjaśniłem jak można przekazać informację o karanym graczu do listnera zdarzenia 'on inventory click:' - za pomocą zmiennych.

Odnośnik do komentarza
https://skript.pl/temat/57487-b%C5%82%C4%85d-z-on-inventory-click/#findComment-342359
Udostępnij na innych stronach

  • 0

to napisz kod co mam w tym zmienić by robił komende "ban <graczpodanywkomendzie> Złamanie regulaminu

tu kod:

variables:
    {gracz} = ""

command /pun [<player>]:
    trigger:
        set {gracz} to "%argument 1%"
        set {_gui} to chest inventory with 5 rows named "&cPanel Admina"
        set slot 20 of {_gui} to paper named "&cZbanuj %argument 1% za: Zlamanie regulaminu" with lore ""
        open {_gui} to player
on inventory click:
    if name of clicked inventory is "&cPanel Admina":
        if index of clicked slot is 20:
            execute player command "ban "


       

Odnośnik do komentarza
https://skript.pl/temat/57487-b%C5%82%C4%85d-z-on-inventory-click/#findComment-342360
Udostępnij na innych stronach

  • 0
23 godziny temu, HvgoY napisał:

to napisz kod co mam w tym zmienić by robił komende "ban <graczpodanywkomendzie> Złamanie regulaminu

No dobrze. Pokażę jak ja bym to zrobił.

command /pun <player>:
	usage: &c/pun <nazwa gracza na serwerze>
	executable by: players
	trigger:
		set {punishedPlayer::%player%} to arg 1
		set {_gui} to chest inventory with 5 rows named "&cPanel Admina"
		set slot 20 of {_gui} to paper named "&cZbanuj %arg 1% za: Zlamanie regulaminu" with lore ""
		open {_gui} to player
		
on inventory click:
	if name of clicked inventory is "&cPanel Admina":
		cancel event
		if index of clicked slot is 20:
			execute player command "ban %{punishedPlayer::%player%}%"
			close player's inventory
			clear {punishedPlayer::%player%}

Może Pan sobie porównać mój kod z tym co napisałem i zauważy Pan analogię. Jedyna różnica to to, że nie zaimplementowałem listenera zdarzenia 'on inventory close' - ręcznie w kodzie zamykam GUI po ukaraniu gracza i czyszczę zmienną.
Instrukcja 'cancel event' została dodana w celu zablokowania wyjmowania przedmiotów z panelu administratora.

Jeśli ma Pan pytania do konfiguracji komendy ('usage' oraz 'executable by'), odsyłam do artykułu napisanego przez mojego przyjaciela. Link poniżej.

 

Odnośnik do komentarza
https://skript.pl/temat/57487-b%C5%82%C4%85d-z-on-inventory-click/#findComment-342375
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ę...