Skocz do zawartości

Kormic

Zasłużony
  • Ilość zawartości

    11015
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    231

Treść opublikowana przez Kormic

  1. Kormic

    brush w regionie spawn

    To, że Pan anuluje zdarzenie w dowolnym miejscu w kodzie, nie znaczy, że wszelkie listenery nasłuchujące do niego nie mogą już go obsłużyć. Jeśli Pan chce, aby pędzel działał tylko gdy zdarzenie nie zostało anulowane, należy skorzystać z warunku 'event is not cancelled'. Warto również tutaj zastanowić się nad użyciem priorytetów listenerów zdarzenia. - informacja o nich znajduje się na samej górze tej strony. W wielkim skrócie, im wyższy jest priorytet listenera zdarzenia, tym później jest on obsługiwany. Pozwala to więc na nadpisanie działania wszystkich listenerów o niższym priorytecie. Niemniej jednak, najprostszym rozwiązaniem byłoby złączenie dwóch listenerów zdarzenia 'on right click' w Pana kodzie w jeden listener, co pozwoliłoby na sprawne zablokowanie używania pędzla na spawnie. Proszę również pamiętać, że Pan blokuje jedynie działanie pędzla poziomu 1. Pozdrawiam.
  2. Kormic

    skrypt na enchanty

    No dobrze proszę Pana, ale co to ma do rzeczy? Essentials to plugin z ogromem funkcji, więc nie rozumiem dlaczego Zleceniodawca miałby instalować go tylko dla tej jednej funkcji. Wiele serwerów z niego korzysta, ale nie znaczy to, że wszyscy z niego korzystają. Proszę uprzejmie. Skrypt nie był testowany. Wszystkie dostępne wartości typu 'enchantment' znajdzie Pan tutaj. command /enchantuj <enchantment> [<integer=1>]: executable by: players usage: &c/enchantuj <typ zaklęcia> [<poziom>] trigger: if player's tool is air: send "&cNie posiadasz jakiegokolwiek przedmiotu w ręce." to player stop if arg-2 is not between 1 and 255: send "&cPoziom zaklęcia musi być liczbą całkowitą między 1 a 255." to player stop enchant player's tool with "%arg-1% %arg-2%" parsed as enchantment type send "&aPomyślnie nałożono nowe zaklęcie na przedmiot trzymany w ręce." to player Pozdrawiam.
  3. Kormic

    patyk ogłuszający

    Proszę uprzejmie. Skrypt nie był testowany. options: stickItem: stick with custom model data 7 stickCooldown: 2 minutes function translateTimespan(t: timespan) :: text: set {_tText} to "%{_t}%" replace all " and" in {_tText} with "," replace all "minutes" and "minute" in {_tText} with "m" replace all "seconds" and "second" in {_tText} with "s" return {_tText} command /givepatyk: executable by: players trigger: if player is not op: send "&cNie posiadasz uprawnień do wykonania tej komendy." to player stop give player {@stickItem} on damage of player: attacker is a player attacker's tool is {@stick} if {stickEffect::cooldown::%attacker%} is set: set {_timeElapsed} to difference between {stickEffect::cooldown::%attacker%} and now {_timeElapsed} is less than {@stickCooldown} set {_timeLeft} to difference between {_timeElapsed} and {@stickCooldown} send "&fOdczekaj jeszcze &6%translateTimespan({_timeLeft})%&f." to attacker stop set {stickEffect::cooldown::%attacker%} to now apply potion of blindness of tier 255 to victim for 4 seconds apply potion of slowness of tier 255 to victim for 4 seconds send title "&6Ogłuszono!" to victim Pozdrawiam.
  4. Nie jest to możliwe dla wersji 1.18+, ponieważ w trybie przetrwania klient nie wysyła pakietu o takim typie kliknięcia do serwera. Jedynym wyjątkiem od tej zasady jest sytuacja, w której slot kursora (ang. 'cursor slot') nie jest pusty. Pozdrawiam.
  5. Kormic

    skrypt po relognięciu

    Proszę uprzejmie. Komenda /setspawn wymaga permisji do jej użycia. Może Pan zauważyć komentarz 'wait 1 tick'. Jeśli skrypt działa bez zarzutu, może Pan go usunąć. Jeśli jednak teleportacja nie będzie następowała, proszę usunąć znak "#" na początku tej linijki, przeładować skrypt i sprawdzić ponownie. on join: #wait 1 tick {serverLocations::spawn} is set teleport player to {serverLocations::spawn} command /setspawn: executable by: players permission: server.command.setspawn trigger: set {serverLocations::spawn} to player's location send "&aLokalizacja spawnu została zaktualizowana." to player Pozdrawiam.
  6. W ten sposób Pan nie ustawi nazwy przywołanego bytu (pillagera w tym przypadku). Należy najpierw przywołać go, a następnie ustawić jego nazwę ('name' lub 'display name', zależy czy ma być widoczna tylko przy najechaniu na byt, czy też niezależnie od tego). Może Pan to zrobić na dwa sposoby. # Sposób nr 1: spawn pillager at loop-player set display name of last spawned pillager to "&cPillager" # Sposób nr 2 (w mojej ocenie lepszy): spawn pillager at loop-player: set display name of pillager to "&cPillager" Różnica między nimi jest taka, że w przypadku pierwszego kodu nazwa jest ustawiana po pojawieniu się bytu, natomiast w przypadku drugiego kodu jest ona ustawiana przed pojawieniem się bytu. Jak może Pan zauważyć, napisałem, że druga wersja jest według mnie bardziej poprawna. Wynika to z następującego faktu - unikamy odwoływania się do ostatnio przywołanego bytu na serwerze. Co prawda takie odwoływanie się działa, jednakże jest ono mało eleganckie i czasem generuje wątpliwości dotyczące pewnych sytuacji (na przykład pojawienie się dwóch bytów jednocześnie, to znaczy w tym samym cyklu zegara gry). Pozdrawiam.
  7. No dobrze, więc tak... Niech Pan sprawdzi czy aby przypadkiem nie posiada Pan jakiegokolwiek innego skryptu zawierającego ten kod. Skript wskazuje jako winny plik "skrypt.sk". Proszę wykonać komendę "/sk reload all". Spowoduje to przeładowanie wszystkich skryptów i plików konfiguracyjnych. Jeśli nie poskutkują powyższe propozycje, proszę usunąć (uprzednio skopiować w bezpieczne miejsce rzecz jasna) na chwilę wszystkie skrypty jeśli to możliwe i sprawdzić czy problem nadal występuje. Jeśli problem ustąpi, może Pan rozpocząć wrzucanie skryptów z powrotem na serwer (jeden po jednym, nie wszystkie jednocześnie!). W ramach ostatecznego aktu rozpaczy proszę odinstalować wszystkie dodatki do Skripta (wystarczy wyciągnąć z folderu 'plugins') i uruchomić serwer z samym Skriptem, bez dodatków do niego. Następnie może Pan próbować uruchomić na serwerze (ciągle tylko Skript, bez dodatków) skrypty niewymagające dodatków. Jeśli wszystko będzie w normie, może Pan rozpocząć przywracanie dodatków i skryptów wymagających ich. W samym skrypcie rzecz jasna nie widzę jakiegokolwiek błędu, jednakże Pan pokazał tylko jego wycinek, więc nie wiem czy Pan na przykład nie patrzy na złą linijkę. Opcjonalnie proszę próbować dalej restartować serwer i sprawdzać konsolę w poszukiwaniu ewentualnych błędów zgłaszanych przez serwer i/lub Skript. Pozdrawiam.
  8. Kormic

    Strony w GUI

    Przy założeniu, że indeksy listy zmiennych {ItemyRynek::*} to liczby naturalne (0, 1, 2, ...), a jej zawartość to przedmioty wystawiane na rynku, funkcję można zmodyfikować w poniższy sposób. options: numberOfItemsPerPage: 45 function createGUIPage(page: number) :: inventory: set {_gui} to chest inventory with 6 rows named "&7Strona &b%{_page}%" loop {@numberOfItemsPerPage} times: # Ustawienie indeksu pobieranego przedmiotu z listy # Na przykład, dla page = 2 i trzeciego przedmiotu na stronie otrzymujemy: (2 - 1) * 45 + 3 = 48 <- to jest indeks pobieranego przedmiotu w liście set {_index} to ({_page} - 1) * {@numberOfItemsPerPage} + loop-number if {ItemyRynek::%{_index}%} is not set: exit loop set slot (loop-number - 1) of {_gui} to {ItemyRynek::%{_index}%} if {_page} > 1: set slot 45 of {_gui} to arrow named "&7Wróć na stronę &6%{_page} - 1%" set {_nextPageIndex} to {_page} * {@numberOfItemsPerPage} + 1 # Sprawdzenie czy istnieją jeszcze jakieś przedmioty, które można wyświetlić na kolejnych stronach if {ItemyRynek::%{_nextPageIndex}%} is set: set slot 53 of {_gui} to arrow named "&7Przejdź na stronę &6%{_page} + 1%" return {_gui} Jeśli pojawią się jakieś wątpliwości, proszę pytać. Pozdrawiam.
  9. W mojej pierwszej odpowiedzi przyjąłem standard NBT dla wersji 1.20.4 i niżej, stąd znacznik 'display' zamiast znacznika 'minecraft:custom_name'. Co do tej głowy, o którą Pan zapytał - poniżej znajduje się jej całe NBT dla wersji 1.20.5+. {[minecraft:custom_name='{"text":"Light Gray 1","color":"gold","underlined":true,"bold":true,"italic":false}',minecraft:lore=['{"text":"Custom Head ID: 10026","color":"gray","italic":false}','{"text":"www.minecraft-heads.com","color":"blue","italic":false}'],profile={id:[I;1617766936,-1189326977,-1693600819,841912852],properties:[{name:"textures",value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2FmMWIyODBjYWI1OWY0NDY5ZGFiOWYxYTJhZjc5MjdlZDk2YTgxZGYxZTI0ZDUwYThlMzk4NGFiZmU0MDQ0In19fQ=="}]}]} Może Pan sobie wstawić te NBT na stronie "upiększającej" (de facto czyniącej zapis bardziej czytelnym) format JSON, na przykład na tej. Oczywiście NBT i JSON to dwie różne rzeczy, jednakże do tego zadania ta strona jest wystarczająca. Proszę się nie przejmować tym, że strona uzupełnia NBT o niewielkie poprawki, gdyż Pan i tak używa jej jedynie w celu poprawy czytelności. Jak najbardziej można wkleić całe NBT (pamiętając o podwojeniu cudzysłowów) i wtedy wyżej wspomniane "upiększanie" jest zbędne, ale dla nas informacje o nazwie i lore są niepotrzebne, więc możemy je usunąć. Tak więc usuwamy wszystko poza znacznikiem 'profile' i jego zawartością. W rezultacie otrzymujemy poniższy wycinek NBT zawierający jedynie informacje o właścicielu i teksturze głowy. {profile={id:[I;1617766936,-1189326977,-1693600819,841912852],properties:[{name:""textures"",value:""eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2FmMWIyODBjYWI1OWY0NDY5ZGFiOWYxYTJhZjc5MjdlZDk2YTgxZGYxZTI0ZDUwYThlMzk4NGFiZmU0MDQ0In19fQ==""}]}} Pozdrawiam.
  10. Kormic

    Strony w GUI

    Poniżej udostępniam prosty przykład realizujący wspomniany przez Pana mechanizm. Skrypt tworzy kilkustronicowe GUI o numerach stron od 1 do 5. Wydaje mi się, że z dydaktycznego punktu widzenia jest to dobry skrypt, ponieważ nie zawiera niepotrzebnych urozmaiceń. Realizuje tylko tę jedną funkcjonalność. function createGUIPage(n: number) :: inventory: set {_gui} to chest inventory with 3 rows named "&7Strona &b%{_n}%" set slot (integers from 0 to 26) of {_gui} to black stained glass pane if {_n} > 1: set slot 18 of {_gui} to arrow named "&7Wróć na stronę &6%{_n} - 1%" if {_n} < 5: set slot 26 of {_gui} to arrow named "&7Przejdź na stronę &6%{_n} + 1%" return {_gui} command /multipagegui: executable by: players trigger: open createGUIPage(1) to player on inventory click: event-inventory is not player's inventory event-inventory's name contains "&7Strona &b" cancel event index of clicked slot is 18 or 26 type of clicked slot is arrow set {_split::*} to uncoloured name of event-inventory split at " " set {_page} to {_split::2} parsed as number if index of clicked slot is 18: open createGUIPage({_page} - 1) to player stop open createGUIPage({_page} + 1) to player W razie pytań proszę śmiało je zadawać. Pozdrawiam.
  11. Jak SkBee wskazuje, zapomniał Pan o nawiasie klamrowym na początku i końcu NBT. Niech Pan również usunie nawias kwadratowy obejmujący całe NBT (nie ma sensu w tworzeniu jednoelementowej listy) i powinno zadziałać.
  12. Może Pan zedytować wiadomość (wyrażenie 'message') za pomocą efektu 'replace'. Przykład poniżej. # Zamiana wszelkich spacji w wiadomości na znak "_" replace all " " in message with "_" W Pana przypadku wystarczy zamienić wszystkie znaki "@" na "". Jeśli Pan potrzebuje więcej przykładów, odsyłam do dokumentacji Skript. Wstawiłem wyżej linki do jej fragmentów, które powinny się przydać. Pozdrawiam.
  13. Kormic

    Top

    Pan złożył dwa tygodnie temu podobne zlecenie, więc proszę nie powielać wątków. Podjąłem się wykonania zlecenia i Pan nie odpowiedział na nie, więc założyłem, że wszystko działa jak należy. Już pominę fakt braku zwykłej wdzięczności z Pana strony za napisanie skryptu. Pozdrawiam.
  14. Proszę pokazać jak Pan wpisał NBT do skryptu. Proszę podać również wersję serwera i linki do stron z głowami, które chce Pan ustawić.
  15. Najlepszym rozwiązaniem będzie zdefiniowanie aliasu komendy w pliku commands.yml. Może Pan go znaleźć w folderze głównym serwera. Jak najbardziej można to rozwiązać poprzez dodanie aliasu w Skript (listener zdarzenia 'on command'), jednakże nie zalecam podchodzić do tego problemu w ten sposób. Jest to nieeleganckie i w dłuższej perspektywie czasu chęć dodania większej ilości aliasów komend będzie skutkowała niepotrzebnym tworzeniem ogromnych skryptów. Pozdrawiam.
  16. Kormic

    skrypt na miecz z efektami

    W takim razie proszę uprzejmie. Skrypt nie był testowany. Sekcję konfiguracyjna skryptu znajduje się na samej górze. Listę efektów mikstur dostępnych w Skript można znaleźć tutaj. Jeśli jest taka potrzeba, można dodać na końcu 26. linijki ('apply potion [...]') frazę 'replacing existing effect'. Dzięki temu nadany efekt nie nałoży się na istniejący już, a go zastąpi. options: # Typ przedmiotu (drewniany miecz, żelazna łopata, itd.) swordType: diamond sword # Nazwa przedmiotu swordName: "&6Miecz" # Lore przedmiotu swordLore: "&aLinijka nr 1", "&bLinijka nr 2" and "&cLinijka nr 3" # Cooldown nadawania efektu przy atakowaniu swordEffectCooldown: 25 seconds # Typ nadawanego efektu swordEffectType: poison # Poziom nadawanego efektu swordEffectTier: 2 # Długość trwania nadanego efektu swordEffectDuration: 10 seconds on damage of player: attacker is a player type of attacker's tool is {@swordType} name of attacker's tool is {@swordName} lore of attacker's tool is {@swordLore} if {swordEffect::cooldown::%attacker's uuid%} is set: difference between {swordEffect::cooldown::%attacker's uuid%} and now is smaller than {@swordEffectCooldown} stop set {swordEffect::cooldown::%attacker's uuid%} to now apply potion of {@swordEffectType} of tier {@swordEffectTier} to victim for {@swordEffectDuration} command /effectsword: executable by: players permission: server.command.effectsword permission message: &cNie posiadasz wystarczających uprawnień do wykonania tej komendy. trigger: give player {@swordType} named {@swordName} with lore {@swordLore} Pozdrawiam.
  17. Należy pamiętać, że lokalizacja gracza oprócz informacji o współrzędnych i świecie, przechowuje również informację o tym w jakim kierunku spogląda gracz (yaw i pitch). Jeśli Pan chce aby teleportacja następowała pomimo obracania się podczas odliczania, musi Pan sprawdzać jedynie koordynaty i świat. Może Pan to zrobić w poniższy sposób. set {tpa::position::%player%} to location at (x-loc of player, y-loc of player, z-loc of player) in player's world # ... # Sprawdzanie warunku teleportacji (porównanie lokalizacji) set {_teleportedPlayerLoc} to location at (x-loc of {_}, y-loc of {_}, z-loc of {_}) in {_}'s world if {_teleportedPlayerLoc} is not {tpa::position::%{_}%}: # Dalszy kod... Powiem jeszcze o kilku innych rzeczach, które przykuły moją uwagę. Dlaczego u Pana typ argumentu komendy (1. linijka) to 'gracz', a nie 'player'? Mam duże wątpliwości co do poprawności takiego zapisu. Dlaczego Pan zapisuje gracza podanego w argumencie komendy jako tekst do zmiennej, a nie jako obiekt gracza? Jest to dla mnie niezrozumiałe. Nie rozumiem również dlaczego Pan przyrównuje argument komendy do tekstu. Schludniejszym zapisem jest operowanie na obiekcie gracza. Jaki jest powód czyszczenia zawartości listy {tpa::*} przy każdorazowym wyjściu dowolnego gracza z serwera? Konsekwencją tego jest uniemożliwienie teleportacji wszystkim graczom na serwerze, ponieważ wszystkie zmienne z tej listy są czyszczone. Pan powinien cyklicznie sprawdzać przy teleportacji (na przykład co sekundę) czy gracz się poruszył. Lepiej od razu przerwać teleportację przy poruszeniu się i ją ponowić niż czekać aż upłynie 15 sekund (tak jak jest to ustalone w skrypcie). Pozdrawiam.
  18. Kormic

    skrypt na miecz z efektami

    Można prosić o więcej szczegółów? W jaki sposób i komu ma być nadawany ten efekt? Do czego ma być zastosowany cooldown 25-sekundowy?
  19. Rozumiem. W takim razie proszę uprzejmie, skrypt nie był testowany. Ponieważ Pan nie podał wersji serwera, przyjąłem założenie, że kod ma działać na wersji 1.20.5+. Za pomocą komendy /lightswand może Pan sobie dać różdżkę, która pozwala ustawiać sygnalizatory świetlne. Lewy przycisk myszy ustawia zielone sygnalizatory, a prawy czerwone. Jeśli Pan chce usunąć sygnalizator, wystarczy kliknąć ponownie, aby został on usunięty z listy danych sygnalizatorów. Co prawda kod mógłby być nieco krótszy poprzez zastosowanie funkcji, jednakże byłoby to przyczyną problemów z zapisaniem w niej wiadomości wysyłanych do gracza. Pozdrawiam.
  20. Kormic

    Kilof 3x3

    To dziwne. Jest Pan pewien, że użył Pan kilofa danego przez komendę /cuboidpickaxe? Proszę również pamiętać, że dodałem listener zdarzenia 'on mine'. Zdarzenie te jest wywoływane tylko jeśli z wykopanego bloku wypadną jakieś przedmioty, tak więc najlepiej to przetestować na przykład na kamieniu. Być może problem jest z warunkiem w linijce 15. po Pana stronie, trudno mi to ocenić. Dla świętego spokoju niech Pan spróbuje go zastąpić warunkiem 'loop-block is not bedrock' i sprawdzi czy skrypt już poprawnie działa. Pozdrawiam.
  21. Proszę uprzejmie. Skrypt nie był testowany. Jeśli jest taka potrzeba, można śmiało usunąć permisję z komendy wraz z wiadomością przy jej braku. options: fireworkName: "&bNieskończona fajerwerka" fireworkLore: "&7Fajerwerka, która nie zużywa się przy użyciu." command /fajerwerka: executable by: players permission: server.command.fajerwerka permission message: &cNie posiadasz uprawnień do użycia tej komendy. trigger: give player firework rocket named {@fireworkName} with lore {@fireworkLore} on right click: name of player's tool is {@fireworkName} lore of player's tool is {@fireworkLore} add 1 of player's tool to player's inventory Pozdrawiam.
  22. Jeśli arena PVP na Pana serwerze znajduje się w innym świecie, nie ma przeszkód w użyciu wbudowanej komendy /gamerule, ponieważ ustawia ona reguły gry osobno dla każdego świata. Zakładam jednak, że problem jest nieco bardziej złożony. Mianowicie, arena PVP znajduje się w tym samym świecie co strefy, w których gracze nie mają tracić przedmiotów w przypadku śmierci. Rozwiązań jest co prawda kilka, jednakże najprostszym wydaje się być utworzenie regionu obejmującego arenę PVP w pluginie "WorldGuard" i zainstalowanie pluginu "WorldGuard Extra Flags" pozwalającego na ustawienie wartości flagi 'keep-inventory' we wspomnianym regionie. Pozdrawiam.
  23. Niech Pan jasno określi czy jest to zlecenie, czy też prosi Pan o jakąś podpowiedź. Jeśli to drugie, może Pan to rozwiązać na dwa sposoby. Tworzymy trzy listy lokalizacji dla każdego światła (zielone, żółte i czerwone), a następnie przy podmianie sprawdzamy w której z list jest lokalizacja danej główki. W ten sposób jesteśmy w stanie jednoznacznie wskazać jaki ona reprezentuje kolor sygnalizatora świetlnego. Sprawdzamy przy podmianie świateł NBT główki i porównujemy (prawie) cały znacznik 'SkullOwner' z zapisanymi gdzieś ich wartościami. Innymi słowy, sprawdzamy w NBT jaką wartość ma tekstura główki, a więc sprawdzamy jakiego jest ona koloru. Mimo wszystko, nie wytłumaczył Pan dokładnej zasady działania tych sygnalizatorów świetlnych (jak zmieniają się kolory, itp.). Prosiłbym więc o taką informację. Pozdrawiam.
  24. W takim wypadku sugeruję zaktualizowanie pluginu Skript do możliwie najnowszej wersji. Jeśli jednak z jakichkolwiek powodów Pan nie może tego zrobić, jedynym wyjściem jest zapisanie alternatywy z użyciem zmiennej lokalnej, jak poniżej. set {_cond} to false if arg-1 is not set: set {_cond} to true if arg-1 is "on": set {_cond} to true if {_cond} is true: # Dalszy kod... % Identyczny kod, ale zapisany bardziej zwięźle: set {_cond} to false set {_cond} to true if arg-1 is not set set {_cond} to true if arg-1 is "on" if {_cond} is true: # Dalszy kod... Pozdrawiam.
  25. Są to dwa osobne warunki z punktu widzenia Skripta, należy więc je rozdzielić na dwa osobne warunki. Można je zapisać w poniższy sposób. if any: arg-1 is not set arg-1 is "on" then: # Dalszy kod... Źródło: https://docs.skriptlang.org/sections.html?search=#SecConditional Pozdrawiam.
×
×
  • Dodaj nową pozycję...