-
Ilość zawartości
1471 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
40
Treść opublikowana przez PanMaruda
-
faktycznie, nie zauważyłem. $ thread tak, działa tylko na kolejną linijkę i tak, ma to głównie zastosowanie w funkcjach ogólnie chodzi o to że gdy wykonamy taką bardziej wymagającą funkcję asynchronicznie to nie wpłynie ona aż tak mocno na serwer (tj. tps nie spadnie aż tak mocno, nie będzie laga, nie wyrzuci graczy z serwera bo główny wątek serwera nie będzie obciążony). Możesz sobie to sprawdzić na serwerze ze swoim skryptem - wywołaj tworzenie jakiegoś większego walca normalnie oraz asynchronicznie - w pierwszym przypadku lag będzie widoczny (nie wykonasz żadnej czynności póki funkcja nie zakończy pracy) - w drugim bez problemu zrobisz wszystko.
-
No dobra, skoro już temat na pw pociągnąłeś... zaokrąglanie współrzędnych jest tutaj naprawdę zbędne (jeszcze bym zrozumiał gdyby było wyrównane do środka bloku w którym gracz się znajduje) - przez zaokrąglanie do rogu bloku struktury mogą wyjść niesymetryczne co do generowania koła (pomijając sposób który ci wysłałem na pw) najlepiej byłoby to zrobić w taki sposób: mamy współrzędne środka, tworzymy sobie od niej dwie współrzędne przeciwległych boków kwadratu opisanego na kole o danym promieniu (czyli dla jednego dodajemy promień do X i Z środka, a dla drugiego odejmujemy) zapętlamy wszystkie bloki wewnątrz tego kwadratu sprawdzamy czy odległość pomiędzy środkiem, a blokiem z pętli jest mniejsza lub równa promieniowi jeżeli tak, dodajemy współrzędne bloku do listy ORAZ blok do drugiej listy robimy pętlę powtarzającą się wysokość-razy, a w niej kolejną pętlę z listą współrzędnych bloków dodajemy 1 do każdej współrzędnej Y z pętli i dodajemy blok na tych nowych współrzędnych do listy bloków po zakończeniu pętli, lista bloków będzie miała wszystkie bloki wypełnionego walca, ustawiamy je za pomocą efektu @noupdate::set (lista bloków) to (rodzaj bloku) wszystko powyższe robimy w funkcji, którą odpalamy w osobnym wątku - linijkę przed jej wywołaniem wpisujemy $ thread drawCylinder(coś tam) co do pustych w środku walców - wracamy do punkty trzeciego: sprawdzamy czy odległość pomiędzy środkiem, a blokiem z pętli ZAWIERA SIĘ POMIĘDZY PROMIENIEM A PROMIENIEM POMNIEJSZONYM O 1 pamiętaj żeby możliwie jak najbardziej ograniczać tworzenie zmiennych przy tak dużych pętlach zrób tak jak powyżej, a będziesz mógł usunąć te limity z posta
-
AxAutoUpdate - Skrypt ułatwiający automatyczną aktualizacje
PanMaruda odpowiedział(a) na xAxee temat w Promowane skrypty
function AxUpdate_getVersion(content: text) :: text: set {_start} to index of "##$" in {_content} set {_end} to index of "$##" in {_content} set {_version} to subtext of {_content} between character {_start} to {_end}-1 return {_version} wydaje mi się że lepiej byłoby zrobić to w postaci listy linijek (tak jak jest domyślnie w file contents) (dla powyższego kodu) załóżmy że skrypt będzie miał 30 linijek - okej, ujdzie. Ale jeżeli będzie to już powiedzmy 1030 linijek (a takie się zdarzają) to wtedy serwer złapie laga (może nawet kilkunastu sekundowego) a teraz jeżeli zrobimy w pętli (i dodatkowo doradzimy użytkownikom żeby wersję wpisywali na samej górze skryptu) - to nie ważne czy skrypt będzie miał 30 czy 1030 linijek - wtedy wszystko będzie trwało mniej więcej tyle samo function AxUpdate_getVersion(content: strings) :: text: loop {_content::*}: set {_start} to index of "##$" in loop-value set {_end} to (index of "$##" in loop-value) - 1 return (subtext of loop-value between character {_start} to {_end}) + weźmy pod uwagę że jeżeli nie będzie wpisanej wersji, to ta funkcja zwróci nulla (tak samo moja jak i twoja) a jeżeli zwróci nulla to i tak skrypt bez podanej wersji będzie uznany za nową wersję, bo przyrównujesz if {_ver1} is {_ver2}: #to zaaktualizuje skypt if "1.0.0" is "1.0.1": #ale to też go zaaktualizuje if "1.0.0" is null: Mam też propozycję dot. rozwoju skryptu (o ile taki przewidujesz) - byłoby fajnie gdyby gdzieś w folderze Skripta zapisywała się kopia starych wersji każdego skryptu (na wszelki wypadek) + do tego może jakaś komenda do przywracania tego starego skryptu- 7 odpowiedzi
-
- zarządzanie
- skript
-
(i 1 więcej)
Oznaczone tagami:
-
przybliż obraz \ powiększ tekst zwiększ jakość wideo (720 to za mało jak na filmiki z notatnika) naucz się pisać szybciej (odechciewa mi się to oglądać jak widzę tempo pojawiania się znaków) zainwestuj w mikrofon (lub jeżeli już go masz - to zacznij używać) tłumacz na bieżąco wszystko to, co wpisujesz na ekranie (wybacz, ale dla mnie to nie jest żaden poradnik, a jedynie nagranie powolnego pisania skryptów - dla początkującego twój film będzie wart tyle samo co pierwszy lepszy kod skryptu z tego forum)
-
czyli slot konwertowany na liczbę przyrównany do przedmiotu z nazwą... yes nie sprawdzałem czy jakieś addony to dodają, ale to co poniżej będzie ze skript-mirror / skript-reflect albo może najpierw zacznijmy od tego co zawiera 'clicked slot', otóż zawiera wszystkie informacje o danym slocie - numer, typ slotu oraz właściciela: %inventory slot% %integer% of %inventory holder% przykładowo: crafting slot 2 of inventory of player armour slot 1 of inventory of player jak pobrać numer slotu: inventory click: send "%event.getSlot()%" #to zwraca liczbę więc można przyrównywać z liczbami if event.getSlot() is between 0 and 10: send "kliknąłeś slot o numerze między 0 a 10" jak pobrać przedmiot ze slotu: inventory click: send "%event.getCurrentItem()%" #zwraca przedmiot więc można przyrównywać z przedmiotami: if event.getCurrentItem() is equal to potato item or carrot item: send "kliknąłeś kartofla lub marchew"
-
Nie wiem czy zadowoli cię taka odpowiedź, ale cóż... Tak, da się tak zrobić. Nie, nikt tego nie zrobi. Lepiej wyjdzie ci jak będziesz to robił ręcznie
-
i tej samodzielności chcesz uczyć podsuwając gotowy link do strony?
-
command thor: trigger: give 1 of iron axe named "&7Młot thora" on rightclick: if tool of player is iron axe: if name of tool of player is "&7Młot thora": if {cooldown::thor::%player%} is not set: set {cooldown::thor::%player%} to unix timestamp of now - 5.1 if unix timestamp of now - {cooldown::thor::%player%} < 5: send "cooldown 5 sekund" else: if targeted block is set: set {cooldown::thor::%player%} to unix timestamp of now loop 2 times: strike lightning at targeted block wait 5 tick else if targeted entity is set: set {cooldown::thor::%player%} to unix timestamp of now loop 2 times: strike lightning at targeted entity wait 2 tick command spiderman: trigger: give 1 of cobweb named "&f&lSpiderman" to player execute console command "/komenda zmieniająca nick na spidermana" on rightclick: if tool of player is cobweb: if name of tool of player is "&f&lSpiderman": if targeted block is set: if block above block above targeted block and block above targeted block is air: teleport player to block above targeted block on leftclick: loop all entities in radius 5 around event-location: push loop-entity upwards with speed 2.4
-
wpisujesz 'skript bensku github' w wyszukiwarkę, wchodzisz na pierwszą stronę i pobierasz pierwszy plik z rozszerzeniem .jar
-
on command: if command = "message" or "msg" or "m" or "r" or "reply" or "t" or "tell": if time played of player < 20 minutes: cancel event send "Pisać można dopiero 20 minutach spędzonych na serwerze, pozostało %(difference between 20 minutes and time played of player)%"
-
Super poradnik, twój post jest jednym z nielicznych które kiedyś uświadomiły mi jak przydatnym dodatkiem jest skript-mirror. Ostatnio przeglądając dokumentacje trafiłem na nowy dodatek - skript-reflect (jak się okazało jest to kontynuacja skript-mirrora). Dodaje wsparcie dla najnowszych wersji minecrafta, asynchronicznych eventów i kodu oraz nowych wersji javy. Ale co najważniejsze dla tego posta - można w nim tworzyć customowe eventy - myślę że warto dodać je do poradnika @xAxee
-
użyj 'on respawn'
-
nie pisz tego posta jeszcze raz w jaki sposób to ma zaważyć nad wyborem dodatku do gui skoro to nie ma z gui nic wspólnego? moim zdaniem prosty kod to raczej przejrzysty kod pod tym względem to gui w skripcie jest proste a formatowanie ze skquery i tuske skomplikowane i paskudne, bo wpychamy pierdyliard rzeczy w jednej linijce zwiększając szerokość kodu (czego robić się nie powinno) wytłumacz jakie znaczenie dla mnie (lub innych) ma mieć kilkuletnia wersja Proponuję aby wszyscy skończyli przyrównywać do czegokolwiek tuske i skquery bo obydwa są siebie warte, a zaczęli nawracać się na czystego Skripta oraz ten świeży dodatek: https://github.com/APickledWalrus/skript-gui/releases Amen
-
Chyba nadszedł czas na odświeżenie i dopieszczenie tego tematu... zatem: Jak zdefiniować komendę: każdą komendę musimy rozpocząć od początku nowej linijki pierwszym słowem w owej linijce zawsze jest 'command', po nim występuje opcjonalnie ukośnik a za nim nazwa naszej komendy na końcu danej linijki stawiamy dwukropek - jako rozpoczęcie nowej sekcji (w tym przypadku komendy) poniżej dwa przykłady tworzące komendę '/poradnik' command poradnik: command /poradnik: jak wiadomo - po każdym dwukropku następna linia musi być poprzedzona o jedno wcięcie więcej 'wcięcie' ustalamy zawsze w drugiej linijce każdego wydarzenia, funkcji czy tak jak w tym przypadku - komendy. Wcięcie składa się z dowolnej liczby spacji lub tabulatorów (przy czym najczęściej wykorzystywanym i najbardziej przejrzystym jest jeden tabulator (klawisz TAB). Wcięć nie wolno mieszać w pojedynczej sekcji skryptu - jeżeli w drugiej linijce użyliśmy jednego taba, tak we wszystkich kolejnych musi to być jeden tab (a nie powiedzmy 4 spacje) Każda komenda posiada konfigurację (ale o tym będzie później) - zakończeniem konfiguracji jest słowo 'trigger' (poprzedzone dwukropkiem) - oznacza ono część właściwą komendy - czyli wykonywany kod (+przykład użycia wcięcia - jednego taba) command /poradnik: [wcięcie] trigger: command /poradnik: trigger: po słowie trigger, możemy rozpocząć pisanie kodu, poniżej pokażę przykład z wysyłaniem wiadomości do gracza (lub konsoli), który wykonał komendę. Skorzystam z efektu 'send "wiadomość"' command /poradnik: [wcięcie] trigger: [wcięcie] [wcięcie] send "Pierwsza komenda" command /poradnik: trigger: send "Pierwsza komenda" Argumenty komendy - rodzaje, definiowanie: jak wiadomo - w większości komend możemy korzystać z argumentów - każdy argument (poza ostatnim) oddzielony jest od siebie (i nazwy komendy) spacjami aby do komendy dodać argument musimy w pierwszej linijce, zaraz po nazwie wpisać typ argumentu w nawiasach ostrych '<typ argumentu>' (przy korzystaniu z argumentów należy pamiętać o tym, że dwukropek wędruje na koniec linijki - za wszystkie argumenty) 'typy argumentów' - czyli wartości które przyjmuje argument rozpisane są w każdej dokumentacji w zakładce 'types'. Wymuszają one na graczu wprowadzenie odpowiedniej wartości - np. tekstu, liczby, nicku gracza lub koloru. Zazwyczaj korzystamy z czterech typów: string (lub text) - tekst number - liczba integer (lub int) - liczba całkowita player / offline player - nick gracza online lub offline w przykładzie poniżej podam komendę z jednym argumentem o typie 'string': command /poradnik <string>: powyżej nasz pierwszy argument jest jednocześnie ostatnim, zatem będzie zwracał wszystko co w nim wpiszemy dodawanie kolejnych argumentów jest proste - wystarczy postawić spację i wpisać kolejny typ: command /poradnik <string> <integer> <string>: powyżej mamy trzy argumenty - tekst, liczbę całkowitą oraz drugi tekst - należy pamiętać, że pierwszy tekst zwróci nam tylko jedno słowo, liczba tylko jedną liczbę, a ostatni argument wszystko pozostałe w powyższych przykładach stworzone argumenty są obowiązkowe do podania - gdy tego nie zrobimy - komenda zwróci błąd istnieje opcja tworzenia argumentów opcjonalnych - tj. takich, gdzie podanie argumentu nie jest potrzebne - wystarczy typ argumentu wpisać dodatkowo w nawiasy kwadratowe '[<typ argumentu>]' opcjonalne argumenty używamy z reguły na końcu - na początku wstawiamy te wymagane command /poradnik <string> <integer> [<string>] [<number>]: dla każdego argumentu możemy ustawić 'domyślną wartość' - należy jednak pamiętać by była ona zgodna z podanym typem po zdefiniowanym typie argumentu wstawiamy znak równości, a za nim naszą domyślną wartość '<typ argumentu=wartość>'- będzie ona używana w momencie gdy gracz wykona komendę nie podając danego argumentu, przykładowo: command /poradnik <integer=10>: liczbę całkowitą (oraz zwykłe liczby) zapisujemy bezpośrednio po znaku równości - zgodnie ze składnią skripta command /poradnik <string="domyślny tekst">: tekst w argumencie zapisujemy dodatkowo w cudzysłowach - zgodnie ze składnią skripta Argumenty komendy - użycie: myślę że warto zacząć od wyjaśnienia iż 'argument komendy' jest wyrażaniem ('expression') i można z niego korzystać tak jak ze wszystkich innych wyrażeń - tj. pobierać jego wartość, wykonywać na nim działania matematyczne itp. odwołujemy się do niego wpisując słowo 'argument' (w skrócie: arg) o ile argument jest jeden lub 'argument-numer' (w skrócie: arg-numer) gdy trzeba odnieść się do konkretnego argumentu stwórzmy zatem komendę z opcjonalnym argumentem tekstowym i wyślijmy jego treść do gracza po wpisaniu komendy command /poradnik [<string>]: trigger: send "%argument%" słowo 'argument' zostało umieszczone w procentach - co powoduje wyświetlenie wartości owego argumentu (wyrażenia) w tekście, który wysyłamy do gracza jeżeli w argumencie podamy wiadomość - zostanie ona do nas wysłana jeżeli jednak jej nie podamy - naszym oczom ukaże się błąd '<none>' '<none>' (czyli skriptowa wersja słowa 'null') oznacza iż nasz argument (nasze wyrażenie) jest puste - nie zawiera żadnej wartości (w tym przypadku - wysłaliśmy pustą komendę bez argumentu) można temu zapobiec ustawiając domyślną wartość argumentu: command /poradnik [<string="nie podałeś argumentu">]: trigger: send "%argument%" lub robiąc to ręcznie w kodzie używając warunku sprawdzającego czy wyrażenie (argument) ma wartość - 'argument is set' lub 'argument is not set': command /poradnik [<string>]: trigger: if argument is set: send "%argument%" else: send "nie podałeś argumentu" oczywiście jak już wyżej napisałem - na argumentach można dowolnie operować zróbmy więc komendę, która sprawdzi czy podany argument jest zgodny z daną wartością i wyślijmy odpowiednią wiadomość: niech komenda sprawdza kolor z pierwszego argumentu, i w tym kolorze wysyła liczbę z drugiego argumentu, jeżeli kolor nie będzie zgodny z dwoma wybranymi (powiedzmy zielony i czerwony) to wyślijmy poprawne użycie komendy: command /kolor [<string>] [<integer=10000>]: trigger: #sprawdzamy czy argument pierwszy został wpisany, jeżeli nie - wysyłamy wiadomość z odpowiednim użyciem if argument-1 is not set: send "poprawne użycie to /kolor <czerwony/zielony> <liczba>" else: #sprawdzamy czy argument pierwszy to "czerwony" if argument-1 is "czerwony": #wysyłamy liczbę z argumentu drugiego w kolorze czerownym send "&c %argument-2%" #sprawdzamy czy argument pierwszy to "zielony" else if argument-1 is "zielony": #wysyłamy zieloną liczbę send "&a %argument-2%" #jeżeli argument nie jest ani "czerwony" ani "zielony" to wysyłamy ponownie poprawne użycie else: send "poprawne użycie to /kolor <czerwony/zielony> <liczba>" Konfiguracja komendy: w każdej komendzie jak już wyżej wspomniałem możemy dodać konfigurację - czyli kilka opcji mieszczących się między 'pierwszą linijką komendy' a słowem 'trigger' każda opcja konfiguracyjna kończy się dwukropkiem a zaraz za nim wpisywana jest jej wartość poniżej wypiszę i objaśnię wszystkie opcje: 'aliases' - aliasy komend, czyli opcja dla tych, którzy chcą by jedna komenda mogła mieć kilka nazw, wypisujemy je po dwukropku oddzielając przecinkiem aliases: poradnik, poradniczek, help, pomoc 'permission' - permisja wymagana do użycia komendy - zaleca się, aby permisja była w formacie 'nazwa komendy.nazwa permisji' permission: poradnik.uzycie permission: poradnik.* 'permission message' - czyli wiadomość wysyłana do gracza, gdy komenda zostanie odrzucona z powodu braku powyższej permisji permission message: Potrzebujesz permisji 'poradnik.uzycie' aby skorzystać z tej komendy 'executable by' - opcja która narzuca kto może korzystać z komendy - tylko gracze; tylko konsola; gracze i konsola, dostępne wartości: 'players', 'players and console', 'console' executable by: players executable by: console executable by: players and console 'description' - opis komendy (wyświetlany m.in w domyślnym /help) description: Ta komenda wyświetla poradnik o pisaniu komend 'usage' - poprawne użycie komendy usage: /kolor <czerwony|zielony> [liczba] 'cooldown' - opóźnienie pomiędzy użyciami komendy (wymagane jest podanie typu timespan, np. '10 minutes' lub '1 day') cooldown: 10 minutes 'cooldown bypass' - permisja, która pozwala pominąć opóźnienie cooldown bypass: poradnik.cooldown.bypass 'cooldown message' - wiadomość jaką otrzyma gracz, gdy nie odczeka czasu ustawionego wyżej można korzystać z wyrażeń: 'remaining time' - pozostały czas do następnego użycia cooldown message: Kolejny raz komendy możesz użyć za %remaining time% 'elapsed time' - czas, który upłynął od ostatniego użycia cooldown message: Od ostatniego użycia minęło dopiero %elapsed time% 'last usage date' - data ostatniego użycia cooldown message: Ostatni raz użyłeś tej komendy %the last usage date% 'cooldown time' - czyli ustawiony wyżej czas pomiędzy użyciami cooldown message: Pomiędzy użyciami tej komendy musisz odczekać %cooldown time% 'bypass permission' - ustawiona wyżej permisja, która pozwala pominąć opóźnienie cooldown message: Nie posiadasz permisji %bypass permission%, musisz odczekać aż upłynie czas 'cooldown storage' - zmienna, w której przechowywana będzie data zakończenia cooldownu. Gdy ją ustawimy cooldown nie zresetuje się po wyłączeniu serwera. cooldown storage: {cooldown::poradnik::%name of player%} zbiorowe użycie w komendzie, przykładowo: command /poradnik <string="domyślna wiadomość">: executable by: players permission: poradnik.użycie permission message: Musisz posiadać permisję poradnik.użycie aby wykonać tą komendę cooldown: 15 seconds cooldown message: &cMusisz odczekać %cooldown time% pomiędzy użyciami tej komendy, pozostało jeszcze %remaining time% trigger: send argument Nasłuchiwanie komend: tworzenie własnych komend to nie wszystko, mamy przecież też masę innych dodawanych przez różne pluginy, skrypty czy silniki, poniżej znajduje się krótkie wyjaśnienie jak nasłuchiwać ich użycia, jak się do nich odwoływać i jak je blokować: zacznijmy zatem od najważniejszego - event (wydarzenie) 'on command' wykonuje się ono z momencie wysłania przez gracza (lub konsolę) komendy aby go użyć zaczynamy od początku nowej linii wpisujemy jego nazwę i stawiamy dwukropek otwierając nową sekcję on command: możemy z tego wydarzenia pobrać trzy wyrażenia: 'sender' - czyli gracz lub konsola, który wykonał komendę 'command' - czyli nazwę komendy która została wykonana (!jeżeli komenda została użyta poprzez alias, to wyrażenie zwróci nam alias, a nie główną komendę) 'arguments' - czyli wpisane argumenty komendy lub '<none>' gdy ich nie będzie 'full command' - czyli cała wpisana wartość (komenda + argumenty) można przerwać wykonywanie komendy (tj. anulując wydarzenie) wpisując 'cancel event' przykładowe użycie - blokujemy używanie komendy /poradnik wszystkim graczom on command: #sprawdzamy czy komenda to "poradnik" if command is "poradnik": #sprawdzamy czy wysyłający komendę to gracz - jeżeli tak - blokujemy komendę if sender is a player: #blokujemy komendę cancel event and may the Skript be with You...
-
'mocno obciążyć serwer' XD? ten skrypt go zniszczy doszczętnie już przy ładowaniu pierwszego chunka Ogólnie zależy jaki efekt chcesz uzyskać jeżeli chodzi o cheaty typy x-ray: rudy można ukryć poprzez fałszywe pakiety (najlepiej użyć do tego silnika paper spigot) - wtedy rudy pozostaną na mapie, ale nikt ich nie zobaczy poprzez inne bloki jeżeli chcesz całkiem pozbyć się rud z mapy to nie ma najmniejszego sensu korzystać ze skryptów (a już na pewno nie tego powyżej) - wygeneruj swoją mapę na nowo z odpowiednią konfiguracją - są pluginy (lub nawet generator na singlu) gdzie możemy ustawić sobie szanse na pojawienie się danych bloków na mapie (oraz rozmiary ich skupisk). Wystarczy przy wszystkich rudach ustawić wartość na 0 i na całej nowej mapie nie będzie ani jednej.
-
on break: if tool of player is diamond pickaxe: if velocity of player = vector(0, 0, 0): set block behind event-block to air set block behind block behind event-block to air drop 2 of redstone at event-block
-
możesz to zrobić w taki sposób: loop (integers from 0 to 26): set slot loop-integer of player to stone lub tak jak w poście powyżej, tylko że koniecznie ze spacją po loop-number (tzn. liczba z pętli pomniejszona o jeden) loop 26 times: set slot (loop-number - 1) of player to stone
-
nie da się, trzeba użyć: skripta set slot 0 of player to diamond lub skquery format slot 0 of player with diamond
-
A może by tak konkurs bez zapisów, niech udział biorą wszyscy którzy chcą w dowolnym momencie? A gdyby tak przyjmowanie prac trwało przez tydzień? A jakbyśmy jeszcze otrzymali bardziej rozbudowany temat konkursu? Powiedzmy zamiast jednego losowego słowa króciutki opis lub ewentualnie losowe słowo i 'kategorię skryptu' (dajmy na to: rozrywka; zarządzanie serwerem; dla gracza; dla admina; event) - może i utraci na tym ta śmieszna kreatywność, ale za to ocenianie skryptów będzie bardziej uczciwe jeżeli wszystkie 'dzieła' będą opierać się na podobnych fundamentach ( +prac będzie więcej jeżeli swoją uwagę ludzie poświęcą na pisanie kodu, aniżeli na główkowanie nad ciekawym pomysłem, który jeszcze nie został przewałkowany dwieście razy) A i na koniec - nie róbmy z tego wiernej kopii jakiegoś konkursu nie wiadomo skąd... SkriptJam
-
zaaktualizuj Skripta do najnowszej wersji https://github.com/SkriptLang/Skript/issues/2069 ale nie próbuj nawet tego kodu później używać - on był tylko do testu
-
on inventory click: send name of current inventory of player a czy nazwę ekwipunku masz na pewno poprawną? Musi być identyczna 1:1 razem z kolorami i całym formatowaniem zobacz czy gdy klikasz nie wysyła nic do konsoli
-
wszystko jest bagnem i nic nie jest bagnem wszystko zależy od tego w jaki sposób właściciel bagna go wykorzysta wszystko będzie dobrze, gdy tylko będzie się myśleć nad tym co się robi i jak się robi wszystko fajnie, ale nie obsypujmy gównem set slota i nie wychwalajmy tak tego TuSKe... zatrzymało się na wersji 1.10, sypie errorami do konsoli i tak naprawdę działa w nim tylko podstawowe formatowanie GUI (czyli jedynie jakieś 15-20% wszystkich jego funkcji) A teraz coś na temat kodu (od razu zaznaczam że nie jest to rozwiązanie problemu, a jedynie działania, które mogą pomóc eliminować błędy i bugi w przyszłości - chociaż niewykluczone że i z aktualnym sobie poradzą) ograniczajmy ilość operacji jaką musi wykonać procesor, wyrażenie 'name of inventory' zwraca tekst, więc można go od razu przyrównać do tekstu (nie trzeba go wstawiać do cudzysłowów i procentów). Można też opcjonalnie zaznaczyć ekwipunek do którego się odnosimy w nawiasy - wtedy skript będzie widział że ma się do tego odnieść jako do całości. źle if "%inventory name of player's current inventory%" is "&c&l» &f&LKOWAL &c&L&l«" : dobrze if (inventory name of player's current inventory) is "&c&l» &f&LKOWAL &c&L&l«" : żadnych zbędnych opóźnień, to że wszyscy pisali żeby je dodawać przy efektach ze SkQuery, nie znaczy że trzeba je pchać wszędzie... źle open chest (...) wait 1 tick set slot (...) dobrze open chest (...) set slot (...) zamiast otwierać graczowi puste GUI i pojedynczo wstawiać do niego przedmioty (co może się zbugować) robimy GUI w zmiennej, ustawiamy w nim przedmioty i potem to wypełnione GUI ze zmiennej otwieramy graczowi. jeżeli GUI, które robimy jest identyczne dla całego serwera (powiedzmy jakiś panel menu), to wtedy takie GUI tworzymy tylko raz przy starcie serwera i nie obciążamy procesora robiąc go za każdym razem gdy ktoś chce je otworzyć. źle open chest with 3 rows named "&c&l» &f&LKOWAL &c&L&l«" to player set player's current inventory's slot 0 to diamond helmet of protection 15 set player's current inventory's slot 1 to diamond chestplate of protection 15 set player's current inventory's slot 2 to diamond leggings of protection 15 dobrze set {_gui} to chest with 3 rows named "&c&l» &f&LKOWAL &c&L&l«" to player set slot 0 of {_gui} to diamond helmet of protection 15 set slot 1 of {_gui} to diamond chestplate of protection 15 set slot 2 of {_gui} to diamond leggings of protection 15 open {_gui} to player tak jak w pierwszym przykładzie: 'clicked slot' zwraca indeks klikniętego slotu (liczbę), więc należy go przyrównać do liczby, a nie zapisać jako tekst i przyrównać do liczby w tekście... źle if "%clicked slot%" is "18": dobrze if clicked slot is 18: kod trzeba zawsze pisać możliwie optymalnie i krótko kiedy tworzysz drzewko warunków, prowadzących do jednego rozwiązania i masz tylko jedną rzecz, którą wykonujesz gdy nie są spełnione, używaj efektu zatrzymującego kod (jest to pewna alternatywa dla 'else') lub połącz wszystkie warunki w jeden i skorzystaj z 'else' (ale tego nie polecam w takim przypadku jak w przykładzie) źle if player has 416 oak wood named "&eDab": if player has 288 162:0 named "&2Bambus": if player has 128 birch wood named "&rBrzuzka": if player has 96 162:1 named "&8Ciemny Dab": if player has 5 gold ore named "&6Zlota Kosodrzewina": (jakiś kod) else: close player's inventory send player title "&c&lKOWAL" with subtitle "&f&oNie posiadasz odpowiednich przedmiotow" else: close player's inventory send player title "&c&lKOWAL" with subtitle "&f&oNie posiadasz odpowiednich przedmiotow" else: close player's inventory send player title "&c&lKOWAL" with subtitle "&f&oNie posiadasz odpowiednich przedmiotow" else: close player's inventory send player title "&c&lKOWAL" with subtitle "&f&oNie posiadasz odpowiednich przedmiotow" else: close player's inventory send player title "&c&lKOWAL" with subtitle "&f&oNie posiadasz odpowiednich przedmiotow" dobrze if player has 416 oak wood named "&eDab": if player has 288 162:0 named "&2Bambus": if player has 128 birch wood named "&rBrzuzka": if player has 96 162:1 named "&8Ciemny Dab": if player has 5 gold ore named "&6Zlota Kosodrzewina": (jakiś kod) stop close player's inventory send player title "&c&lKOWAL" with subtitle "&f&oNie posiadasz odpowiednich przedmiotow" druga opcja (łączenie warunków, wyliczanie) if player has (416 oak wood named "&eDab"), (288 162:0 named "&2Bambus"), (has 128 birch wood named "&rBrzuzka"), (has 96 162:1 named "&8Ciemny Dab") and (5 gold ore named "&6Zlota Kosodrzewina"): (jakiś kod) else: close player's inventory send player title "&c&lKOWAL" with subtitle "&f&oNie posiadasz odpowiednich przedmiotow" jeżeli masz kilka warunków następujących po sobie (tak jak tutaj sprawdzanie indeksu slotu) - stawiaj na ich końcach 'stop' lub skorzystaj z 'else' albo 'else if'. Gdy tego nie zrobisz - skrypt pomimo że np. znajdzie potrzebny slot i wykona kod wciąż będzie sprawdzał pozostałe warunki źle if "%clicked slot%" is "1": (kod) if "%clicked slot%" is "2": (kod) if "%clicked slot%" is "3": (kod) if "%clicked slot%" is "4": (kod) dobrze if "%clicked slot%" is "1": (kod) stop if "%clicked slot%" is "2": (kod) stop if "%clicked slot%" is "3": (kod) stop if "%clicked slot%" is "4": (kod) stop A jeżeli chodzi ogólnie o bugi to można założyć że występują u ciebie ze względu na korzystanie ze starych lub niekompatybilnych ze sobą wersji silnika i pluginu.
-
Skrypt odpala się nieskończoność razy
PanMaruda odpowiedział(a) na WonSkk pytanie w Pytania i problemy
on entering region: if "%region at player%" contains "diamenty": event is not cancelled: if {pracadiament::%player%} is not true: set {paczkadamient::%player%} to true execute console command "give %player% diamond 1 name "&bDiament"" send "&aPodniosles diament." -
plugin TAB od neznamy
