Skocz do zawartości
  • 0

Lista GUI nie działa tak, jak oczekiwałem...


Pytanie

Spoiler
command /xsethome [<String>] [<String>]:
    trigger:
        if arg 1 is set:
            set {creative::database.%player%.homes::%arg 1%} to "%arg 1%"
            set {creative::database.%player%.homes.command::%arg 1%} to arg-1
            if arg 2 is set:
                set {creative::database.%player%.homes.icon::%arg 1%} to arg-2
            if arg 2 is not set:
                set {creative::database.%player%.homes.icon::%arg 1%} to Big Dripleaf
            
command /xunsethome [<String>]:
    trigger:
        if arg 1 is set:
            delete {creative::database.%player%.homes::home.%arg 1%}
            delete {creative::database.%player%.homes.command::perform.%arg 1%}
            delete {creative::database.%player%.homes.icon::icon.%arg 1%}
            
command /xtesthome [<text>] [<text>]:
    trigger:
        if arg 1 is set:
            send "/xtesthome %arg 1% - %arg 2%" to player
            
            

command /xhome [<text>] [<text>]:
    trigger:
        if arg 1 is not set:
            execute player command "/xhome xcd-erun:[folder=home]"
        if arg 1 is set:
            open chest with 6 rows named "&8Menadzer domow" to player
            wait 1 ticks
            format slot 1 of player with 1 of diamond named "x" with lore "" to run [send "./home bug get %player%" to player]
            if arg 1 is "list" or "xcd-erun:[folder=home]":
                set {_page} to arg 2 parsed as number
                if {_page} is not set:
                    set {_page} to 1
                set {_numberofrecords} to size of {creative::database.%player%.homes::*} and {creative::database.%player%.homes.command::*}
                set {_numberofpages} to ceil({_numberofrecords}/14)
                if {_numberofpages} is smaller than 1:
                    set {_numberofpages} to 1
                if {_page} is smaller than 1:
                    send "none"
                    stop
                if {_page} is greater than {_numberofpages}:
                    send "none"
                    stop
                if size of {creative::database.%player%.homes::*} is smaller than 1:
                    send "none"
                    stop
                loop {creative::database.%player%.homes::*}:
                    add loop-value to {_creative::database.%player%.homes::*}
                loop {creative::database.%player%.homes.command::*}:
                    add loop-value to {_creative::database.%player%.homes.command::*}
                loop {creative::database.%player%.homes.icon::*}:
                    add loop-value to {_creative::database.%player%.homes.icon::*}
                loop {_numberofrecords} times:
                    set {_list} to ({_page}-1)*14
                    add loop-number to {_list}
                    if {_creative::database.%player%.homes::%{_list}%} is not set:
                        stop
                    if loop-number is 14:
                        stop
                    format slot (18+{_list}) of player with 1 of {_creative::database.%player%.homes.icon::%{_list}%} named "&e&l%{_creative::database.%player%.homes::%{_list}%}%" with lore "" to run [send "./home %{_creative::database.%player%.homes.command::%{_list}%}% get %player%" to player]
                    send "&7ID --- Name --- Persorm --- Icon"
                    send "&a%{_list}% &f--- &b&l%{_creative::database.%player%.homes::%{_list}%}% &f--- &e&l%{_creative::database.%player%.homes.command::%{_list}%}% &f--- &c%{_creative::database.%player%.homes.icon::%{_list}%}% " to player

Hejka. Mam problem ze zrobieniem Interaktywnej Listy w GUI. Dziala perfekcyjnie jesli wyswietla się to jako tekst, to jednak gdy chce przeniesc wyświetlanie rekordów do slotow to pojawiaja sie bledy, a mianowicie:

format slot

- nie uzupełnia komendy o wartość zmiennej (to co jest w kwadratowych nawiasach celowo wcześniej podmieniłem na send dla testów) którą miałby wykonać, co rujnuje sens tworzenia gui, bo chce pewne rzeczy sobie zautomatyzować / uprościć. Przy kliknieciu nie wykonuje komendy, a zamiast argumentów i wartości z zmiennych pojawia się <none> w składni.

- jeśli użyje komendy /xsethome i dodam do niej drugi argument to slot wtedy nie ma wyświetlanej ikony, zwraca ten sam blad <none> (ma ikone wyswietlana normalnie jeśli drugiego argumentu nie wpisze i zastosuje domyślną odgórnie wartość.

Jeśli nie jest to wystarczająco zrozumiale opisane to najprościej samodzielnie przetestować kod aby pojąć w czym problem jest.

Silnik, Wersje Skripta i Addonow:

Spoiler
Wersja silnika: Purpur 1.18.2
Używam ostatnich wydanych wersji Buildu Skripta oraz Addonów, które są kompatybilne z 1.18.2. Używam obecnie dodatków: SkQuery, Skore, SKBee, Scacket, SkyRayFall.

 

Ogólnie różnych modyfikacji i prób już próbowałem to jednak za każdym razem jest to "fail" z tym samym rezultatem. Czy jest tutaj coś co zrobiłem źle (bądź pominąłem)? Ogólnie przyda mi się odpowiedź kogoś doświadczonego. Albo czy jest to błąd generowany przez Addon(y)?

 

@EDIT - Solution

Rozwiazanie: DynamicListGUI - Pastebin.com

 

Edytowane przez ShayeraHol
Odnośnik do komentarza
https://skript.pl/temat/52722-lista-gui-nie-dzia%C5%82a-tak-jak-oczekiwa%C5%82em/
Udostępnij na innych stronach

5 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Wyrażenie pochodzi z addona: SkyQuery. Oczywiscie jestem swiadomy ze gui mozna zrobic bez addona, bo sam skript je oferuje to jednak addon oferuje uproszczona skladnie i nie musze dla kazdego przypadku dopisywac dodatkowych linii pod "on inventory click". Ps. Dodawalem wiecej informacji w glownym poscie (). 

Edytowane przez ShayeraHol
Odnośnik do komentarza
https://skript.pl/temat/52722-lista-gui-nie-dzia%C5%82a-tak-jak-oczekiwa%C5%82em/#findComment-322061
Udostępnij na innych stronach

  • 0

Na telefonie ciężko cokolwiek przeczytać w tym kodzie, więc skorzystam jedynie z informacji, które napisałeś.

W dniu 25.05.2022 o 23:07, ShayeraHol napisał:

nie uzupełnia komendy o wartość zmiennej

Próbowałeś używać parseda?

W dniu 25.05.2022 o 23:07, ShayeraHol napisał:

jeśli użyje komendy /xsethome i dodam do niej drugi argument to slot wtedy nie ma wyświetlanej ikony

Tu zerknąłem do kodu i problemem jest właśnie zaproponowany wcześniej brak parseda/niepoprawny typ zmiennej. Możesz albo na początku komendy zamiast string wsadzić item type, albo parsowac string na item type w kodzie.

W dniu 25.05.2022 o 23:07, ShayeraHol napisał:

format slot

Jest to najbardziej zbugowana funkcja skquery, a do tego jest bardzo ograniczona w porównaniu ze zwykłym skriptem. Od wielu lat istnieje metoda wyciągania przedmiotów z gui robionego za pomocą tego addonu, więc jego używanie nie jest ani trochę bezpieczne dla ekonomii serwera. Jeśli chcesz by tworzenie gui w skripcie było bardziej podobne do skquery to możesz wykorzystać funkcje, wtedy też kod będzie czytelniejszy.

Odnośnik do komentarza
https://skript.pl/temat/52722-lista-gui-nie-dzia%C5%82a-tak-jak-oczekiwa%C5%82em/#findComment-322063
Udostępnij na innych stronach

  • 0

Eureka! Tak wiec dzieki za pomocne sugestie Helios. Akurat o tym zapomnialem i rozwiazalo problemy z egzekwowaniem itemu na slocie. Za twoja porada napisalem gui dzialajace niezaleznie od SkyQuery, poniewaz egzekwowanie procedury po kliknieciu na sloty tam sa zbugowane i nie zwraca prawidlowo loop'owanych wartosci ze zmiennych do nich. 

Ostatecznie przesiedzialem nad tym problemem dodatkowe pare godzin i znalazlem rozwiazanie:

Wiem ze to moze sie przydac tez innym osobom dlatego chetnie udostepnie kazdemu kod. Nie widzialem nigdzie niczego podobnego aby ktos udostepnil Dynamiczna Liste GUI dlatego ja chetnie to zrobie.  System moze rzecz jasna byc dostosowany do innych potrzeb np Friendsow, czy inne takie jesli komus cos przyjdzie ciekawego do glowy. 

Link: DynamicListGUI - Pastebin.com

W przypadku przerabiania kodu na wlasna potrzebe nie zalecam jedynie modyfikowac local variable'sow.

PS. Jesli chodzi o sam glitch ktore daje mozliwosc wyciagania itemow z gui zrobionego przy pomocy SkyQuery to chodzi ci pewnie rzecz jasna o double/triple/multi clicki? To akurat da sie bardzo latwo naprawic, wystarczy ze dodasz conajmniej wait 1 ticks ktory musi byc za (open chest ...) i przed (format slots...). Po za tym nie trzeba dzieki temu stosowac close then run "", wystarczy samo run "" aby mozna bylo sie przylaczac pomiedzy roznymi stronami / menami gui bez obawy ze ktos wyciagnie jakikolwiek item.

 

 

Edytowane przez ShayeraHol
Odnośnik do komentarza
https://skript.pl/temat/52722-lista-gui-nie-dzia%C5%82a-tak-jak-oczekiwa%C5%82em/#findComment-322109
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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