-
Ilość zawartości
529 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
7
Treść opublikowana przez 3meraldK
-
Prosba o napisanie skryptu wyrzucajacego na ziemie nadmiar danego itemu
3meraldK odpowiedział(a) na siemasiema pytanie w Zlecenia
musiałbyś użyć wielu eventów żeby wszystko było kontrolowane ale jest to możliwe, dopisz wiadomość jak wywali lód graczowi -
Prosba o napisanie skryptu wyrzucajacego na ziemie nadmiar danego itemu
3meraldK odpowiedział(a) na siemasiema pytanie w Zlecenia
every second: loop all players: loop-player has 65 ice drop (amount of ice in loop-player's inventory) - 64 of ice at loop-player remove (amount of ice in loop-player's inventory) - 64 of ice from loop-player -
on consume of golden apple: add 1 to {koxy::%player%} if {koxy::%player%} != -1 if {koxy::%player%} > 3: give enchanted golden apple to player set {koxy::%player%} to -1 on death of player: add 1 to {kill::%attacker%} if {kill::%attacker%} != -1 add 1 to {smierc::%victim%} if {smierc::%victim%} != -1 if {kill::%attacker%} > 3: give enchanted golden apple to attacker set {kill::%attacker%} to -1 if {smierc::%victim%} > 3: give enchanted golden apple to victim set {smierc::%victim%} to -1
-
mine of stone: chance of 50% cancel drops drop book at block
-
https://skript.pl/temat/12918-młot-thora-skrypt-na-młot-thora/ https://www.mpcforum.pl/topic/1408428-skrypt-excalibur-amulety-itp/ https://skript.pl/temat/7554-mzbroja-skrypt-na-magiczną-zbroje/
-
on rightclick on beehive: set {miod::%event-block%} to 0 if {miod::%event-block%} isn't set if {miod::%event-block%} < 100: set {miod::%event-block%} to {miod::%event-block%} + 10 send "Wydobyto %{miod::%event-block%}%%% miodu" else: delete {miod::%event-block%} give player honeycomb
-
Sk - Rzut kostki 1.17.1 pod komende /kostka
3meraldK odpowiedział(a) na Luumen1337 pytanie w Zlecenia
command kostka: trigger: broadcast random integer between 1 and 6 -
options: kod : "123789" command /give-brush <text>: permission: x trigger: if arg 1 is set: if arg 1 is {@kod}: give 1 of blaze rod named "&6&lBrush 4x4x1" to player send "&c&lBrush dla cb" else: send "&4Podano zly kod" else: send "&4Nie podales kodu!" on leftclick holding blaze rod: player's tool's name is "&6&lBrush 4x4x1": targeted block is not bedrock: targeted block is stone: set targeted block to air drop 1 of cobblestone at location of targeted block targeted block is grass: set targeted block to air drop 1 of dirt at location of targeted block targeted block is dirt: set targeted block to air drop 1 of dirt at location of targeted block block right targeted block is not bedrock: block right targeted block is stone: set block right targeted block to air drop 1 of cobblestone at location of targeted block block right targeted block is dirt: set block right targeted block to air drop 1 of dirt at location of targeted block block left targeted block is not bedrock: block left targeted block is stone: set block left targeted block to air drop 1 of cobblestone at location of targeted block block left targeted block is dirt: set block left targeted block to air drop 1 of dirt at location of targeted block block behind targeted block is not bedrock: block behind targeted block is stone: set block behind targeted block to air drop 1 of cobblestone at location of targeted block block behind targeted block is dirt: set block behind targeted block to air drop 1 of dirt at location of targeted block block forward targeted block is not bedrock: block forward targeted block is stone: set block forward targeted block to air drop 1 of cobblestone at location of targeted block block forward targeted block is dirt: set block forward targeted block to air drop 1 of dirt at location of targeted block
-
command /kanal <text>: trigger: if arg-1 is "vip": set {chatvip::%player%} to true if arg-1 is "lobby": delete {chatvip::%player%} on chat: {chatvip::%player%} is true cancel event send "[VIP] %player% >> %message%" to all players where [input has permission "vip.chat"]
-
Wygląda na to że kilofy z nazwą nie triggerują eventu, nie wiem dlaczego, pozbądź się player's tool's name is "kilof". Najpewniej błąd w Skripcie, który później ktoś naprawi
-
Uwaga Umiejętności zaprezentowane w tym poradniku wymagają odpowiedniej znajomości języka Java (małej, wystarczy wiedzieć, co to klasy, interfejsy, katalogi, pola, konstruktory i inne pierdoły), a także w pewnym stopniu wtyczki skript-reflect. Tu jest PORADNIK do skript-reflect: https://tpgamesnl.gitbook.io/skript-reflect albo tu https://skript.pl/temat/34737-skript-reflect-java-w-skrypcie Omawiane protokoły działają tylko i wyłącznie na wersjach 1.17.X (opcjonalnie 1.16.X, w sumie to nie pamiętam). Definicja pakietów się zmieniała na przestrzeni wielu wersji Minecraft, np. przed wersją 1.16, klasy były nazwane inaczej, oraz były rozlokowane w katalogu net/minecraft/server. Jest to też pierwsza część mojej serii poradników do zaawansowanego Skripta. Definicja pakietu i NMS Pakiety (albo protokoły) w Minecraft są to pakiety danych wysyłane przez serwer do klienta lub vice versa. Klient oznacza gracza, a serwer oznacza (...) Każdy pakiet jest nazwany odpowiednio: PacketPlayXY, gdzie X może oznaczać In (od incoming, czyli pakiet klient -> serwer), lub może oznaczać Out (od outcoming, klient <- serwer); natomiast Y to nazwa danego pakietu (przykład: PacketPlayInUpdateSign, pakiet, który wysyła klient do serwera w momencie, kiedy skończy pisać na tabliczce). Klasy pakietów, które serwer używa do wysyłania informacji lub jej odbierania, znajdują się w pliku /cache/patched_x.x.x.jar w katalogu net/minecraft/network/protocol/game, więc nie jest już to popularne "nms" od net/minecraft/server. Mogą one służyć do wysyłania wybranym graczom informacji, których serwer nie posiada np. wyrenderować komuś blok nieistniejący na serwerze. NMS to skrót od net.minecraft.server, spopularyzowanego katalogu pliku .jar, który jest wymagany do uruchomienia serwera. Uprzednio, w tym katalogu znajdowały się wszystkie pakiety, które można było wysyłać i odbierać, obecnie natomiast, pakiety są rozlokowane w innej części pliku, więc nms jest technicznie rzecz biorąc pojęciem nieaktualnym, aczkolwiek wiele osób używa tego terminu do dziś, i teoretycznie można o nim mówić dalej. Pakiety w Skript Jest wiele sposobów na użycie pakietów, np. używanie przestarzałych i niedziałających na nowsze wersje wtyczek typu ThatPacketAddon natomiast dla mnie najbardziej odpowiadającym jest użycie wtyczki skript-reflect, która posiada wiele rozmaitych i wspaniałych możliwości. Przed prowadzonymi eksperymentami z pakietami jest wymagane nauczyć się używania wspomnianego dodatku. Odsyłacze są na dole poradnika. Dodatkowo, niektóre pakiety można wysyłać za pośrednictwem niczego innego niż Spigot API (Player#sendBlockChange(), Player#sendChunkChange() <- przestarzałe, Player#sendSignChange(), Player#sendBlockDamage()) ale jak widać jest ich za mało, by móc się w pełni bawić pakietami. Wysyłanie pakietów do klienta gry Aby wysłać pakiet do klienta, należy go najpierw skonstruować, bo każdy pakiet wychodzący ma konstruktor w swojej klasie. Żeby go znać, można zdekompilować (np. programem jd-gui) wspomniany w początkowej sekcji plik .jar, i dojść do danego pakietu, albo można skorzystać z tej strony: https://wiki.vg/Protocol. W tym przykładzie wyślę do klienta trudny do skonstruowania pakiet PacketPlayOutExplosion, tworzący eksplozje widoczne dla jednego klienta, a jest trudny, bo wymaga wykorzystania innych klas w tym pliku .jar. Pierwsze co należy zrobić, to zaimportować klasę pakietu. Naprawdę polecam skorzystać z dekompilatora. PO PIERWSZE, na wspomnianej stronie jest kilka błędów. PO DRUGIE, rzeczy związane z tym popularnym "nms" są bardzo słabo udokumentowane, częściowo zaszyfrowane i nie kompilują się między wersjami. Poniższy screen pokazuje konstruktor pakietu. Jak widać, wymagane jest podać 6 parametrów. Pierwsze 3 argumenty definiują miejsce efektu eksplozji. Następny argument określa jaki typ cząsteczki wygeneruje eksplozja, np. liczba większa od 2.0 wygeneruje "minecraft:explosion_emitter", a w przeciwnym wypadku "minecraft:explosion". Następny parametr to lista obiektów BlockPosition.class (a nie mówiłem, że trzeba umieć trochę Javy) określających bloki które mają być zastąpione powietrzem. Ostatni to niby opcjonalny, ale jak się go nie wpisze to się popsuje skrypt, czyli wektor o jaki ma zostać popchnięty gracz. Definicja 4 pierwszych będzie banalnie prosta. Dwa ostatnie parametry wymagają użycia klas z tego samego pliku .jar. Wystarczy trochę długo poszukać i dostanie się sposób na zapisanie parametrów. Protip: na górze klasy pakietu są importowane inne potrzebne klasy, więc tam są podpowiedzi jak dostać się do jej kodu. Tworzymy najpierw grupową zmienną obiektów BlockPosition.class. Później trzeba trochę pomyśleć jak to wszystko skleić ze sobą w całość. W końcu został ostatni parametr, łatwo go skonstruować, wystarczy podać 3 liczby i tyle. Cała komenda będzie wyglądać następująco: import: net.minecraft.network.protocol.game.PacketPlayOutExplosion net.minecraft.core.BlockPosition java.util.Arrays net.minecraft.world.phys.Vec3D command /eksplozja: trigger: set {_loc} to target block loop all blocks in radius 3 of {_loc}: add new BlockPosition(loop-block's x-coord, loop-block's y-coord, loop-block's z-coord) to {_lista::*} set {_pakiet} to new PacketPlayOutExplosion({_loc}'s x-coord, {_loc}'s y-coord, {_loc}'s z-coord, 3.0, Arrays.asList([{_lista::*} as BlockPosition]), new Vec3D(0, 2, 0)) W KOŃCU, tyle paplaniny żeby skonstruować jakiś pakiecik, ale jak go teraz wysłać? Oczywiście do tego służy metoda CraftPlayer#getHandle() <- tzw. "zcastowanie" klasy CraftBukkitowej klasy gracza do klasy nms, EntityPlayer#b <- pole klasy PlayerConnection, PlayerConnection#sendPacket() <- wysłanie pakietu. player.getHandle().b.sendPacket({_pakiet}) Odbieranie pakietów klienta Dobra, odbieranie pakietów to ostatnia rzecz która pozwala zarządzać tymi całymi pakietami. Pakietów przychodzących (klient -> serwer) nie można modyfikować i konstruować, należy je jedynie odbierać i przetwarzać ich dane. Aby nasłuchiwać pakietów, trzeba mieć ze sobą oddzielny, bardzo długi skrypt na nasłuchiwanie, ale na szczęście ktoś bardzo mądry stworzył tzw. snippet, czyli kawałek kodu, który możemy sobie wykorzystać do słuchania pakietów klient-serwer. Nie jest on oczywiście mojego autorstwa Jak to zwykle robimy, to ten skrypt wczytujemy w oddzielnym pliku. Teraz powinniśmy się zrelogować, żeby całość działała poprawnie. JAK NASŁUCHIWAĆ PAKIETÓW? Na przykład wtedy, kiedy klient zakończy edytowanie tabliczki, czyli kliknie "Done" lub "Gotowe"? import: net.minecraft.network.protocol.game.PacketPlayInUpdateSign on nmspacket PacketPlayInUpdateSign: send "Pakiet %event-string%: W pierwszej linii napisałeś: %nmspacket.c()[0]%" to event-player Bardzo proste! Każdy pakiet ma ze sobą jakieś dane, np. ten ma dane na temat linii tabliczki i jej koordynaty (tylko klient widzi tę tabliczkę). nmspacket.c() to jest to samo co naprzykład event-block, ale kod który można sobie zdekompilować jest częściowo zaszyfrowany, dlatego są jakieś literki, zamiast fajnych nazw metod. WARTO również wspomnieć że w eventach pakietowych zawsze jest coś typu event-player i event-string (nazwa pakietu). Pakiety przychodzące można anulować efektem cancel event. W niżej pokazanej klasie interesują nas metody rozpoczynające się od b(). Aby otrzymać dane pakietu klient-serwer trzeba napisać wspomniane nmspacket.c() czyli w tym przypadku chcę otrzymać tekst na tabliczce. [0] oznacza, że chcę otrzymać pierwszą linię tabliczki. A na przykład b() da nam lokalizację tabliczki. Kolejny przykład Jakieś linki i dokumentacje https://wiki.vg/Protocol#Explosion (przykład, który zrobiłem, żeby wysłać klientowi pakiet. W artykule są skategoryzowane przeróżne protokoły) https://papermc.io/javadocs/paper/1.17 (przydatna dokumentacja do PaperSpigot 1.17) http://java-decompiler.github.io/ (bardzo przydatny dekompilator, który jest najwiarygodniejszym źródłem, wystarczy przeciągnąć plik .jar do otwartego programu) https://skript.pl/temat/34737-skript-reflect-java-w-skrypcie (poradnik autorstwa xAxee jak używać skript-reflect) https://skript.pl/temat/35344-skript-reflect-własne-efekty-warunki-wyrażenia-i-eventy (dodatek tego samego autora o własnych efektach, eventach, kondycjach i wyrażeniach) https://wiki.skript.pl/Skript-mirror (artykuł na forumowej wiki)
-
imo średnie, powinieneś wzmocnić "pozycję" skript-reflecta jako że to jest najlepszy dodatek. Dokumentacje do mappingów w przypadku bawienia się pakietami nms czy jakieś javadocsy Papera.
- 10 odpowiedzi
-
Zrób sobie samemu bo niewiadomo jakiego skompilowanego pluginu na topki potrzebujesz, każdy ma inne potrzeby więc najlepiej zrobić samemu. Nawet nie podałeś bardziej precyzyjnych informacji typu jaki plugin na PvP i tak dalej.
-
Czasowy block dodaje zamiast usuwać gracza to po pierwsze. Po drugie po evencie on right click nie możesz sprawdzić czy skrzynka x zawiera x więc musisz przytwierdzić właściciela skrzynki do lokalizacji skrzynki za każdym razem jak właściciel postawi tę skrzynkę albo usunąć zmienną jeśli zniszczy
-
(pokaż kod) ale ogólnie to pewnie masz ustawione default zmienne w sekcji "variables:", chociaż nie wiem.
-
Jak chcesz wstawić zmienną do tekstu to musisz dać między nią znak procentu i napisać ją normalnie jak jest
-
Twórz interfejsy bez żadnych dodatków, czysty Skript jest do tego najlepszy. Poczytaj tutoriale jak zrobić GUI, są wszędzie
-
spawn ender crystal at location(0,0,0, world "world") musisz podać lokalizację przywołania bytu, w moim przykładzie z domyślnej funkcji
- 1 odpowiedź
-
- endcrystal
- skript
-
(i 1 więcej)
Oznaczone tagami:
-
opinie wielkich ekspektów od Skript są podzielone ja natomiast uważam że to jest najzwyklejszy skrypt ale jedynie pod naukę pisania w tym "języku programowania", dodatkowo cały kod można skrócić o więcej niż połowę.
-
options: klucz: tripwire hook of unbreaking 10 named "&eKlucz" portal: location(-0, 74, 3, world "world") # centrum portalu blokiportalu: location(-1, 74, 3, world "world"), location(-1, 75, 3, world "world"), location(-1, 76, 3, world "world"), location(-2, 74, 3, world "world"), location(-2, 75, 3, world "world"), location(-2, 76, 3, world "world"), location(0, 74, 3, world "world"), location(0, 75, 3, world "world"), location(0, 76, 3, world "world") # wszystkie lokacje bloków portalu on rightclick: player is holding {@klucz} distance between {@portal} and player is less than 10 block at first element of {@blokiportalu} isn't nether portal remove 1 of player's tool from player's inventory loop {@blokiportalu}: set block at loop-value to nether portal wait 10 seconds loop {@blokiportalu}: set block at loop-value to air on portal enter: distance between {@portal} and player is less than 5 block at player is nether portal teleport player to {dungeon1} command klucz: permission: admin.klucz trigger: give {@klucz} to player
-
najprawdopodobniej to musisz użyć Google API. pooglądaj sobie tutoriale
-
kick all players due to a ja oceniam ten "skrypt" na solidne 2/10, bo działać działa, ale jest bardzo złej jakości
-
ustawiasz zmienną grupową na tekst rozdzielony między wszystkimi "||" loopujesz zmienną i dodajesz iterowaną wartość do lore'a.
-
on death of player: "%attacker's type%" is "player" send title "&5&lZabiles &d&l%victim%" to attacker play sound "ENTITY_WITHER_DEATH" at victim's location zostałem wyprzedzony w napisaniu skryptu
-
***** chłopie naucz się szukać po forum rzeczy, już takie skrypty były pisane, skonfiguruj sobie trochę i masz
