Skocz do zawartości

Tworzenie GUI w Skript - Poradnik


Rekomendowane odpowiedzi

GUI w Skript

Czym jest GUI?
Jest to skrzynia z wcześniej ustalonymi przedmiotami,
z której nie możesz wyciągać przedmiotów,
lecz możesz np. przenieść się na inny
serwer klikając w odpowiedni przedmiot.
Przykładowe GUI:

le9En4e.png


Dlaczego nie powinieneś korzystać
z SkQuery do tworzenia GUI?

SkQuery posiada sporo błędów, jednym
z nich jest ukryta możliwość wyciągania
przedmiotów 
z GUI robionego za
pomocą tego addonu.


Jakie addony są potrzebne
do zrobienia GUI?

Nie potrzebujesz żadnych addonów,
wystarczy sam Skript.

 

Jak zrobić GUI w Skripcie?
Jak w każdym skrypcie, na początku musi być jakiś event. W przykładzie użyję komendę: (Zapamiętaj, że przy dodawaniu komendy zawsze musi być 'trigger' w następnej linijce.)

command /gui [<text>]:
	trigger:

Gdy już masz komendę, musisz stworzyć swoje GUI. Robisz to w ten sposób: (3 to ilość linijek, "Nazwa" to nazwa twojego gui.)

set {_gui} to chest inventory with 3 rows named "Nazwa"

Teraz musisz ustawić slot. Pamiętaj, że są one liczone od 0. Żeby ustawić pierwszy slot w swoim GUI, zrób to:

set slot 0 of {_gui} to diamond

Twoje GUI jest już gotowe! Najwyższy czas je otworzyć dla gracza, który wykonał komendę:

open {_gui} to player


Cały kod powinien wyglądać tak:

command /gui [<text>]:
	trigger:
		set {_gui} to chest inventory with 3 rows named "Nazwa"
		set slot 0 of {_gui} to diamond
		open {_gui} to player

 

Aktualnie z twojego GUI można wyciągać
przedmioty i nic się nie dzieje, jak to zmienić?


Przyda ci się event 'on inventory click':

on inventory click:

Sprawdzaj czy naciśnięty slot nie jest ekwipunkiem gracza:
 

event-inventory is not player's inventory

Teraz musisz sprawdzić nazwę GUI:

if name of event-inventory is "Nazwa":

Jeśli chcesz zablokować wyciąganie przedmiotów, dodaj teraz 'cancel event':

cancel event

Sprawdź kliknięty slot:

if clicked slot is 0:

I wykonaj co chcesz wykonać:

add diamond to player's inventory


Cały kod powinien wyglądać tak:

on inventory click:
	event-inventory is not player's inventory
	if name of event-inventory is "Nazwa":
		cancel event
		if clicked slot is 0:
			add diamond to player's inventory


Teraz połącz te dwa kody i przeładuj skrypt.
Gratulacje! Zrobiłeś swoje pierwsze GUI w Skripcie!

Edytowane przez Helios1993
Odnośnik do komentarza
https://skript.pl/temat/44829-tworzenie-gui-w-skript-poradnik/
Udostępnij na innych stronach

20 minut temu, Helios1993 napisał:

SkQuery posiada sporo błędów, jednym
z nich jest ukryta możliwość wyciągania
przedmiotów 
z GUI robionego za
pomocą tego addonu.

Należy tutaj jeszcze dorzucić o wiele mniejszą funkcjonalność niż inne formatowania GUI (nie licząc tego w WildSkript), gdyż ograniczasz się do używania lambd przy formatowaniu slotu i niemożliwym jest zastosowanie warunków. Niektórzy jeszcze robią to w tak śmieciowy sposób, że execute'ują komendę przez gracza, w której jest zawarte co ma robić dany slot.

22 minuty temu, Helios1993 napisał:

Nie potrzebujesz żadnych addonów,
wystarczy sam Skript.

Warto dodać, że wymagana wersja to minimum 2.2-dev34, a najlepiej użyć 2.2 lub nowszej.

24 minuty temu, Helios1993 napisał:

Gdy już masz komendę, musisz stworzyć swoje GUI. Robisz to w ten sposób: (3 to ilość linijek, "Nazwa" to nazwa twojego gui.)


set {_gui} to chest inventory with 3 rows named "Nazwa"

Można również otworzyć od razu graczowi GUI, a następnie odwoływać się do niego poprzez 'player's current inventory'.

open chest inventory with 3 rows named "Nazwa" to player
set slot 0 of player's current inventory to stone
# I tak dalej...

Twoje rozwiązanie stosuję jedynie w przypadku bardziej złożonych GUI, gdzie czas tworzenia go może być nieco dłuższy niż zwykle ma to miejsce.

28 minut temu, Helios1993 napisał:

Aktualnie z twojego GUI można wyciągać
przedmioty i nic się nie dzieje, jak to zmienić?

Dobrze byłoby wspomnieć o tym, że można zablokować jedynie samo GUI bez blokowania ekwipunku.

if clicked inventory is not player's inventory:

Powyższy warunek należy wstawić tuż po sprawdzeniu nazwy GUI.

Mimo wszystko dobry poradnik, trzeba ludziom wybić z łbów SkQuery i inne syfy.

Odnośnik do komentarza
https://skript.pl/temat/44829-tworzenie-gui-w-skript-poradnik/#findComment-281604
Udostępnij na innych stronach

Zauważyłem pewną niespójność z tym związaną albo to ja robię coś źle.

kp3Sbr5.png

Nie ważne czy kliknę w przedmiot w sklepie czy w 1 slot w ekwipunku, zawsze dostaje ten komunikat.

Zna ktoś może rozwiązanie? @Kormic, @CoFFeIN04, @Helios1993

Oczywiście robię to w ten sposób:

on inventory click:
	if name of player's current inventory is "Sklep":
		cancel event
		if clicked slot is 0:

Przepraszam za pisanie pod tematem, ale poniekąd odwołuje się do jednego problemu być może występującego po dodaniu kodu z tego poradnika.

Edytowane przez V4T3
Odnośnik do komentarza
https://skript.pl/temat/44829-tworzenie-gui-w-skript-poradnik/#findComment-281633
Udostępnij na innych stronach

12 minut temu, V4T3 napisał:

Zauważyłem pewną niespójność z tym związaną albo to ja robię coś źle.

Kormic napisał co zrobić, dodam to do poradnika.

EDIT: Dodałem.

Edytowane przez Helios1993
Odnośnik do komentarza
https://skript.pl/temat/44829-tworzenie-gui-w-skript-poradnik/#findComment-281634
Udostępnij na innych stronach

2 minuty temu, V4T3 napisał:

Nie ważne czy kliknę w przedmiot w sklepie czy w 1 slot w ekwipunku, zawsze dostaje ten komunikat.

Napisałem o tym w moim poście, dokładniej to na samym końcu.

Odnośnik do komentarza
https://skript.pl/temat/44829-tworzenie-gui-w-skript-poradnik/#findComment-281635
Udostępnij na innych stronach

Ja osobiście dodaję jeszcze 2 warunki:

clicked slot is set

w celu sprawdzenia czy ktoś nie kliknął poza GUI (dodałem ten warunek bo przechwytywało mi klikanie poza polem GUI (np. tam gdzie jest kursor na screenie niżej), nie wiem czy to błąd czy o co chodzi) 

Spoiler

SgHz2zd.png

oraz:

clicked slot is not air

ale to tylko w przypadku gdy chcę pozwolić na klikanie tylko zajętych slotów

 

jeśli ktoś sprawdza np. clicked slot is 1 to te warunki są w sumie zbędne, ale gdy ktoś nie sprawdza po kolei każdego numeru to warto dodać te warunki 

Edytowane przez CoFFeIN04
Odnośnik do komentarza
https://skript.pl/temat/44829-tworzenie-gui-w-skript-poradnik/#findComment-281640
Udostępnij na innych stronach

  • 2 tygodnie później...
22 minuty temu, PanMaruda napisał:

a mi z kolei brakuje jeszcze informacji o

  • inventory type
  • inventory action
  • cursor slot
  • click type
  • oraz tworzeniu gui w metadatach jako alternatywy dla zmiennych :)

 

To już byłoby zdecydowanie prędzej w ramach drugiej części dla nieco bardziej zaawansowanych, a już nie wspominam o tym ostatnim. Chciałbyś zapisać metadatę w graczu, tak?

Warto byłoby również wspomnieć o 'hotbar button' przydatne po sprawdzeniu czy 'click type' to 'number key'.

Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/44829-tworzenie-gui-w-skript-poradnik/#findComment-285951
Udostępnij na innych stronach

  • 1 miesiąc temu...
10 minut temu, Bartek200219 napisał:

Nie skquerry jest zbugowane tylko twój sposób, bo twoim sposobem można wyciągać itemy z gui używając shifta

Nie są to prawdziwe przedmioty, nic z nimi nie zrobisz. Jedynie gdy masz jakieś tam uprawnienia to możesz je używać, zabierz sobie wszystkie uprawnienia i spróbuj ponownie.

Odnośnik do komentarza
https://skript.pl/temat/44829-tworzenie-gui-w-skript-poradnik/#findComment-298342
Udostępnij na innych stronach

2 godziny temu, Helios1993 napisał:

Nie są to prawdziwe przedmioty, nic z nimi nie zrobisz. Jedynie gdy masz jakieś tam uprawnienia to możesz je używać, zabierz sobie wszystkie uprawnienia i spróbuj ponownie.

Uprawnienia nic nie zmieniają, bug występuje gdy wykonuje komendę jako gracz i zamykam inventory

czyli np.:

on inventory click:
	event-inventory is not player's inventory
	if name of event-inventory is "Nazwa":
		cancel event
		if clicked slot is 0:
			close player's inventory
			execute player command "/pomoc" 

Film z pokazanym bugiem :)

 

 

Edytowane przez Bartek200219
Dodanie filmu
Odnośnik do komentarza
https://skript.pl/temat/44829-tworzenie-gui-w-skript-poradnik/#findComment-298347
Udostępnij na innych stronach

W dniu 2.04.2021 o 19:35, Bartek200219 napisał:

event-inventory is not player's inventory

zamiast tego spróbuj:

if clicked inventory is not player's inventory:

 

W dniu 2.04.2021 o 19:35, Bartek200219 napisał:

if name of event-inventory is

tu też spróbuj:

name of player's current inventory 

 

Odnośnik do komentarza
https://skript.pl/temat/44829-tworzenie-gui-w-skript-poradnik/#findComment-298786
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ę...