-
Ilość zawartości
11012 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
230
Treść opublikowana przez Kormic
-
Proszę uprzejmie. Skrypt był testowany. Należy mieć jedynie na uwadze to, że skrypt rejestruje jedynie stawianie, niszczenie i eksplodowanie TNT. Nie jest on w stanie chociażby wykryć usunięcia TNT za pomocą pluginu. function getChunkID(loc: location) :: text: set {_x} to floor(x-loc of {_loc} / 16) set {_z} to floor(z-loc of {_loc} / 16) set {_world} to world of {_loc} return "%{_x}%,%{_z}%,%{_world}%" on place of tnt: set {_chunkID} to getChunkID(event-location) if {numberOfPlacedTNT::%{_chunkID}%} is set: {numberOfPlacedTNT::%{_chunkID}%} >= 4 cancel event send "&cLimit TNT w jednym chunku wynosi 4." to player stop set {numberOfPlacedTNT::%{_chunkID}%} to 0 if {numberOfPlacedTNT::%{_chunkID}%} is not set add 1 to {numberOfPlacedTNT::%{_chunkID}%} on break of tnt: set {_chunkID} to getChunkID(event-location) {numberOfPlacedTNT::%{_chunkID}%} > 0 subtract 1 from {numberOfPlacedTNT::%{_chunkID}%} on explosion prime: event-entity is tnt set {_chunkID} to getChunkID(event-location) {numberOfPlacedTNT::%{_chunkID}%} > 0 subtract 1 from {numberOfPlacedTNT::%{_chunkID}%} Pozdrawiam.
-
Rozumiem. Nie ma najmniejszego problemu, aby wprowadzić taki mechanizm. Zdecydowałem, że najlepiej będzie sprzedawać kości z ekwipunku gracza przy podnoszeniu ich i zamykaniu ekwipunku. Na samej górze skryptu może Pan modyfikować mnożnik pieniędzy otrzymywanych za sprzedaż kości. options: moneyMultiplier: 10 on inventory close: set {_n} to amount of bone in player's inventory {_n} > 0 add {@moneyMultiplier} * {_n} to player's balance remove all bone from player's inventory send "&aZarobiłeś %{@moneyMultiplier} * {_n}%$." to player on pickup: event-item is bone cancel event set {_n} to item amount of event-item add {@moneyMultiplier} * {_n} to player's balance kill event-entity send "&aZarobiłeś %{@moneyMultiplier} * {_n}%$." to player Pozdrawiam.
-
Proszę uprzejmie. Skrypt nie był testowany. command /zamiana: executable by: players trigger: set {_n} to amount of bone in player's inventory if {_n} is 0: send "&cNie posiadasz kości w ekwipunku." to player stop add 10 * {_n} to player's balance remove all bone from player's inventory send "&aZarobiłeś %10 * {_n}%$." to player W razie ewentualnych problemów ze skryptem proszę dać znać. Pozdrawiam.
-
Można próbować ze sztuczną (nie)inteligencją (GPT, Claude, Gemini, itd.), jednakże trzeba liczyć się z tym, iż kod może zawierać błędy. Jest to konsekwencją tego, że są to dwa odległe od siebie języki (jeśli Skript można w ogóle nazwać językiem). Trzeba mieć również mieć na uwadze następujący fakt - wyżej wymienione boty nie mają dużego doświadczenia ze Skript. Jeśli jednak zależy nam na innym rozwiązaniu, zdaje się, że próżno takiego szukać. Pozdrawiam.
-
Komenda /repair [nick gracza] {naprawia mu przedmiot co trzyma w łapce}
Kormic odpowiedział(a) na asdasdasafasf pytanie w Zlecenia
Mój skrypt nie wykonuje jakichkolwiek złożonych operacji, więc trudno jest mi uwierzyć w to, że mógłby być przyczyną powstałych problemów. Zalecam Panu przetestować skrypt na "czystym" serwerze jeśli to możliwe (minimum to wyłączenie na czas testów wszystkich skryptów, a później w razie dalszych problemów dodatków do Skript). Nie ukrywam jednak, że idealnymi warunkami byłoby przetestowanie skryptu na serwerze ze Skriptem jako jedynym pluginem na serwerze. Jeśli skrypt będzie działał zgodnie z założeniami, oznacza to, że któryś z pluginów (lub skryptów) powoduje problemy. Tutaj już musi Pan na własną rękę doszukać się źródła niepoprawnego działania skryptu. Pozdrawiam. -
Proszę uprzejmie. Skrypt nie był testowany. Na górze skryptu można modyfikować typ, nazwę i lore kilofu. W komendzie można modyfikować wymaganą do niej permisję. options: pickaxeType: diamond pickaxe pickaxeName: "&bKilof &63x3" pickaxeLore: "&7Kilof wykopujący sześcian o boku równym 3" on mine: type of player's tool is {@pickaxeType} name of player's tool is {@pickaxeName} lore of player's tool is {@pickaxeLore} set {_loc1} and {_loc2} to location of event-block remove 1 from x-loc of {_loc1}, y-loc of {_loc1} and z-loc of {_loc1} add 1 to x-loc of {_loc2}, y-loc of {_loc2} and z-loc of {_loc2} loop blocks within {_loc1} and {_loc2}: loop-block is not event-block player's tool is preferred tool for loop-block break loop-block command /cuboidpickaxe: permission: server.command.cuboidpickaxe permission message: &cNie posiadasz uprawnień do użycia tej komendy. trigger: give player {@pickaxeType} named {@pickaxeName} with lore {@pickaxeLore} W razie ewentualnych problemów proszę dać znać. Pozdrawiam.
-
Wedle mojej wiedzy w plikach konfiguracyjnych Spigota i Papera nie istnieje możliwość ustawienia globalnie wartości etykiety "RequiredPlayerRange" (element block data). Jak nazwa wskazuje, odpowiada ona za zasięg, w którym gracz musi się znajdować, aby przywoływacz (spawner) bytów działał. Istnieją dwa rozwiązania tego problemu. Jedno jest szybsze, ale wymaga ustawiania osobno dla każdego spawnera. Drugie natomiast jest wolniejsze, ale gwarantuje, że każdy spawner będzie miał zwiększony zasięg, w jakim gracze muszą się znajdować, aby funkcjonował. Szybszy sposób - wykonanie dla każdego spawnera komendy '/data merge'. # Zwiększenie zasięgu (promienia sfery) działania do 30 kratek /data merge block <x> <y> <z> {RequiredPlayerRange:30} # Wariant ze współzędnymi względnymi - zmiana właściwości spawnera pod sobą przy wykonaniu komendy /data merge block ~ ~-1 ~ {RequiredPlayerRange:30} Wolniejszy sposób - stworzenie (bądź znalezienie) skryptu/pluginu zmieniającego zasięg działania każdego spawnera przy jego stawianiu. Pomocna tutaj będzie ta metoda. Można również rozważyć sprawdzanie bloków przy ładowaniu/generowaniu chunku w poszukiwaniu niezmodyfikowanych spawnerów (w przypadku wygenerowania chunku zawsze mamy do czynienia z niezmodyfikowanymi spawnerami). Pozdrawiam.
-
Z tego co widzę, proces rozwoju skryptu powoli postępuje w dobrym kierunku. Pomimo tego, mam kilka uwag i pytań, którymi chcę się z Panem podzielić. 1. Nie zastosował się Pan do moich uwag w moim pierwszym poście, gdyż nadal dostrzegam te same błędy i niezrozumiałe operacje. 2. Proszę pamiętać o tym, że wszelkie operacje mogące spowodować choćby chwilowe wstrzymanie pracy serwera, powinny być wykonywane poza głównym wątkiem serwera jeśli to tylko możliwe. Mowa oczywiście o pobieraniu tekstu ze strony internetowej, ponieważ Pan wykonuje ów kod synchronicznie. Rozwiązania tego problemu istnieją dwa: zastosowanie instrukcji '$ thread' pochodzącej z SkQuery, utworzenie sekcji i asynchroniczne wykonanie jej przy pomocy dodatku skript-reflect. 3. Zastanawiający jest dla mnie poniższy fragment kodu. on connect: if player is online: kick player due to "&{@Kolor błędu} Ten gracz jest już na tym serwerze!" Czy to działa jak należy? Podejrzewam, że niepoprawnym jest założenie iż dwóch graczy z tą samą nazwą to dokładnie te dwa same obiekty graczy. Na Pana miejscu raczej bym napisał tak jak poniżej. on connect: set {_p} to "%player%" parsed as player {_p} is online kick [...] Pytam, gdyż nigdy nie musiałem rozwiązywać tego typu problemów, ponieważ zdecydowanie lepiej jest mieć serwer działający w trybie online. Zresztą, nie wiadomo czy gracz obecny na serwerze jest wyrzucany już przy wyzwoleniu kodu zdarzenia 'on connect', czy też 'on join'. Jeśli przy tym pierwszym gracz obecny na serwerze jest rozłączany, Pan nie ma na to wpływu. 4. Drobna sugestia z mojej strony - może Pan zastąpić dwa warunki sprawdzające długość hasła jednym warunkiem. length of message is between {@minPassword} and {@maxPassword} # Dalszy kod... 5. Zalecam nie używać polskich znaków w skrypcie poza tekstem i komentarzami. Jest to naruszenie pewnych szeroko pojętych programistycznych konwencji, a poza tym nie wiadomo czy taki kod na pewno zawsze dobrze zadziała. Głównie chodzi o to pierwsze, ściślej mówiąc, schludność kodu. Pozdrawiam.
- 43 odpowiedzi
-
Wedle mojej wiedzy hash cracker polega na przygotowanej wcześniej skończonej bazie danych (tablicy) zawierającej najpopularniejsze hasła wraz z ich hashami. Jako wartość wejściową dla funkcji hash możemy podać dowolnie długi ciąg dowolnych znaków (w przypadku SHA-256 ograniczenie 2^64 - 1 bitów to bardzo, bardzo dużo), a więc praktycznie istnieje niemalże nieskończenie wiele możliwych wartości wejściowych. Unikalnych wartości wyjściowych (hashów) dla algorytmu SHA-256 istnieje natomiast 16^32, czyli 2^256, jednak jest to również wartość, której nie sposób pojąć przeciętnemu człowiekowi. Większość takich baz przechowuje zwykle ponad miliard haseł wraz z ich hashami, a ludzka wyobraźnia jest ograniczona. Niemniej jednak, pesymistyczny wariant 10 miliardów w obliczu 2^256 to właściwie nic.
- 43 odpowiedzi
-
Po primo, powinien Pan podwoić wszelkie cudzysłowy wewnątrz NBT, aby Skript zrozumiał, że są one częścią tego NBT. Zapomniał Pan również usunąć '1' na końcu NBT. Po secundo, może Pan usunąć wszelkie zbędne informacje z NBT, gdyż Pana interesuje tylko etykieta 'profile'. Jeśli ma Pan problem z uporządkowaniem NBT, sugeruję skorzystać z jakiejkolwiek strony "upiększającej" (de facto dodającej spacje i nowe linie) pod względem czytelności. Przykładową stronę znajdzie Pan tutaj. Proszę pamiętać o tym, że zaszły pewne zmiany w zapisie NBT w wersji 1.20.5. Tak więc jeśli Pan korzysta z najnowszej wersji, ten poradnik może się okazać przydatny. Dla starszych wersji może Pan skorzystać z poradnika wspomnianego wyżej. Udostępniam go jeszcze raz tutaj. Pozdrawiam.
-
AntyLogout Problem ActionBar oraz BossBar
Kormic odpowiedział(a) na MajstereQ123 pytanie w Pytania i problemy
Kod jest miejscami niechlujnie napisany, szczególnie fragment z 'loop 1000 times'. Nie rozumiem również dlaczego Pan stworzył komendę /czas zamiast stworzyć kod pętli w listenerze zdarzenia 'on damage'. Co do samego kodu wysyłającego wiadomość na action bar gracza, mam tylko zastrzeżenie w postaci tego, że Pan wysyła ją do 'player', nie do 'arg-1'. Mogłoby to mieć jeszcze sens w przypadku gdy gracz wykonuje komendę, ale w Pana kodzie konsola jako jedyna może wykonać komendę. Zapewne jest to również przyczyna braku wyświetlania wiadomości na action bar. W przypadku wysyłania wiadomości na bossbar, Skript nie wspiera takiej operacji. Musi się Pan którymś z dodatków do Skript, na przykład SkBee. Poradnik dotyczący tworzenia pasków bossów w SkBee może Pan znaleźć tutaj. Pozdrawiam. -
Zapomniałem, że w wersji 1.14+ inwentarze nie posiadają nazw. Prawdopodobnie właśnie to jest przyczyną. Proszę pod linijką 36. dodać poniższy warunek. event-inventory is not player's inventory # Można również spróbować: type of event-inventory is not player inventory Pozdrawiam.
-
Rozumiem, że Pan klika na szybę z diamentami w slocie kursora lewym lub prawym przyciskiem myszy, tak? Dla potwierdzenia może Pan wysłać jakieś nagranie, nawet GIF na stronie imgur się nada. Jeśli Pan rzeczywiście tak robi, przyczyna musi leżeć w samej wersji Pana pluginu Skript, bądź w jakimś pluginie, który nadzoruje wszelkie GUI. Pozdrawiam.
-
Proszę uprzejmie. Skrypt był testowany. Zmienna {diamondGathering::turboDrop} informuje o tym czy TurboDrop jest aktywny. Może Pan więc ją wykorzystać do zwiększenia ilości wyrzucanych przedmiotów, na przykład podczas kopania. Pozdrawiam.
-
Przyczyną błędu jest źle dodane wcięcie w kodzie przed linijką wskazaną przez Skript. Proszę dodać wcięcie (tabulacja, x spacji - zależy od tego jakiej konwencji Pan się trzyma w reszcie skryptu) przed tą linijką. Wtedy skrypt powinien zadziałać (nie sprawdziłem reszty kodu pod kątem chociażby błędów logiki w sensie kolokwialnym, nie matematycznym). Pozdrawiam.
-
Podam przykład dla tej głowy. Może Pan na jej stronie znaleźć komendę /give podpisaną jako "Give Code". /give @p minecraft:player_head{display:{Name:'{"text":"Jack O\' Lantern","color":"gold","underlined":true,"bold":true,"italic":false}',Lore:['{"text":"Custom Head ID: 93775","color":"gray","italic":false}','{"text":"www.minecraft-heads.com","color":"blue","italic":false}']},SkullOwner:{Id:[I;474217116,1064518372,-1342689603,-1465485910],Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWQ4MWExZjRkOGI4NzJmMGY5MzljNWFmZWUyOWZhOWU2ZDMwMjg0MTM2ZTAwMDIxOWJkNTFlYzg2YWZhNjEyYyJ9fX0="}]}}} 1 W dużym uproszczeniu, NBT to wszystko to, co jest ujęte w nawias klamrowy. {display:{Name:'{"text":"Jack O\' Lantern","color":"gold","underlined":true,"bold":true,"italic":false}',Lore:['{"text":"Custom Head ID: 93775","color":"gray","italic":false}','{"text":"www.minecraft-heads.com","color":"blue","italic":false}']},SkullOwner:{Id:[I;474217116,1064518372,-1342689603,-1465485910],Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWQ4MWExZjRkOGI4NzJmMGY5MzljNWFmZWUyOWZhOWU2ZDMwMjg0MTM2ZTAwMDIxOWJkNTFlYzg2YWZhNjEyYyJ9fX0="}]}}} Możemy pozbyć się całej części 'display', gdyż odpowiada ona za nazwę i lore przedmiotu. {SkullOwner:{Id:[I;474217116,1064518372,-1342689603,-1465485910],Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWQ4MWExZjRkOGI4NzJmMGY5MzljNWFmZWUyOWZhOWU2ZDMwMjg0MTM2ZTAwMDIxOWJkNTFlYzg2YWZhNjEyYyJ9fX0="}]}}} Jest to nasze docelowe NBT zawierające jedynie informacje o właścicielu głowy (UUID gracza, którego ona przedstawia) i teksturze, określone poprzez tag "SkullOwner". Zachęcam do lektury artykułu o NBT, który można znaleźć tutaj. Wedle mojej wiedzy sam Skript nie udostępnia możliwości modyfikacji NBT. Może Pan co najwyżej napisać coś na kształt poniższego kodu powiązującego głowę z nazwą dowolnego gracza. set {_skullOwner} to "Kormic" parsed as offline player set {_item} to head of {_skullOwner} give {_item} to player Pozdrawiam.
-
Najprostszym rozwiązaniem będzie skorzystanie z dodatku SkBee, które pozwala na operowanie na NBT przedmiotów. set slot 0 of {_gui} to player head with nbt compound from "NBT" NBT może Pan znaleźć w komendzie /give na wyżej wspomnianej stronie. Pozdrawiam.
-
Jeśli ustawienie flagi regionu w WorldGuard nie przynosi jakiegokolwiek efektu, albo Pan to źle zrobił, albo jakiś listener zdarzenia 'on break' ma wyższy priorytet i odwołuje anulowanie zdarzenia. W tej sytuacji Skript niewiele pomoże, bo co prawda mogę ustawić priorytet listenera, ale takie rozwiązanie jest chwilowe i wprowadza swego rodzaju bałagan w relacjach między listenerami pluginów. Tak więc niech Pan sprawdzi co jest przyczyną i pomyślimy co dalej. Pozdrawiam.
-
Proszę skorzystać z tego poradnika: Jeśli to nie pomoże, istnieje również bardziej "manualna" opcja. Proszę pamiętać, że w przypadku dokonywania zmian w rejestrze należy uprzednio utworzyć kopię zapasową: Pozdrawiam.
-
Już widzę w czym problem. Kod nie bierze pod uwagę zmiennej {_chance}. Proszę więc poprawić poniższą linijkę: chance of {cashblock::drop::%loop-value%::chance}%: na: chance of {_chance}%: Niech Pan ma na uwadze to, że Pan podaje prawdopodobieństwo (szansę) wylosowania danego przedmiotu w procentach [0%; 100%], nie w przedziale [0; 1]. Dlatego też proszę pamiętać, że posiadanie mniej niż 5zł na koncie zwiększy prawdopodobieństwo o jedyne 0.3%, co jest wartością niewielką. W przypadku pominięcia znaku procenta byłoby to już 30%. Po więcej informacji odsyłam do dokumentacji. Pozdrawiam.
-
No dobrze. Proszę podmienić kod funkcji cashDrop na podany przeze mnie poniżej. Swoją drogą, muszę wspomnieć o jednym. Autor tego skryptu uczynił go niewydajnym poprzez zapis wszystkich danych w plikach YAML i kopiowanie ich do zmiennych, co skutkuje potrzebą częstego ich ładowania (load yaml) i rozładowywania (unload yaml). Przeczy to idei przyświecającej dodatkowi skript-yaml, którego główną zaletą jest ładowanie plików YAML i przechowywanie ich w pamięci zamiast ciągłego otwierania i przetwarzania ich, co generuje niepotrzebne obciążenie serwera. Niestety, kilka najpopularniejszych dodatków popełnia (bądź popełniało) ten błąd, na przykład SkQuery, SkUtilities i Skellett. function cashDrop(p: player): if {cashblock::config::drop-cash-from-stone} is true: loop {cashblock::drop-list::*}: set {_chance} to {cashblock::drop::%loop-value%::chance} if {_p}'s balance < 5: add 0.3 to {_chance} if {_p} have permission "cashblock.vip": add 0.0125 to {_chance} else if {_p} have permission "cashblock.svip": add 0.015 to {_chance} else if {_p} have permission "cashblock.sponsor": add 0.0175 to {_chance} else if {_p} have permission "cashblock.elita": add 0.02 to {_chance} chance of {cashblock::drop::%loop-value%::chance}%: add {cashblock::drop::%loop-value%::value} to {_p}'s account launch star coloured gold and yellow at {_p}'s location with duration 1 set {_title} to coloured {cashblock::messages::drop-cash-from-stone-title-message} set {_subtitle} to coloured {cashblock::messages::drop-cash-from-stone-subtitle-message} replace all "{CASH}" with "%{cashblock::drop::%loop-value%::value}%" in {_subtitle} replace all "{VAULT}" with "%{cashblock::config::cash-vault-format}%" in {_subtitle} send title "&a&lCASH&f&lMINE.PL" with subtitle "&fWlasnie wykopales &a%{cashblock::drop::%loop-value%::value}%zl! &fGratulacje! (/kasa)" to {_p} if {cashblock::config::drop-cash-from-stone-message-broadcast} is true: loop {cashblock::messages::drop-cash-from-stone-broadcast-message::*}: set {_msg} to coloured loop-value-2 replace all "{PLAYER}" with "%{_p}%" in {_msg} replace all "{CASH}" with "%{cashblock::drop::%loop-value-1%::value}%" in {_msg} replace all "{VAULT}" with "%{cashblock::config::cash-vault-format}%" in {_msg} broadcast {_msg} stop Pozdrawiam.
-
Wystarczy, że Pan doda warunek sprawdzający czy stan konta gracza jest mniejszy niż 5. Jeśli tak, dodaje Pan do zmiennej {_chance} liczbę 0.3. Warunek ten może Pan (a nawet dobrze byłoby) dodać nad warunkiem w linijce 104. Pozdrawiam.
-
Do nasłuchiwania do zdarzenia niszczenia bloków należy użyć listenera zdarzenia 'on break'. Może Pan w nim sprawdzić narzędzie gracza. Mimo wszystko jeśli Pan używa regionów z WorldGuard, sugeruję ustawienie w nim flagi blokującej niszczenie bloków. Pozdrawiam.
-
Prosiłem, aby Pan poprawił poprzedni post i zamiast tamtego kodu wstawił link. No ale dobrze, mniejsza o to. Linijki te pobierają wartości zapisane w zmiennych: {cashblock::config::drop-cash-from-stone-message-type}, {cashblock::messages::drop-cash-from-stone-title-message}, {cashblock::messages::drop-cash-from-stone-subtitle-message}. Zawierają one odpowiednio wartości z pliku YAML: ? (nie mogę znaleźć w skrypcie gdzie jest zapisywana wartość pierwszej zmiennej przechowującej typ wiadomości) {cashblock::messages::drop-cash-from-stone-title-message} {cashblock::messages::drop-cash-from-stone-subtitle-message} Pominąłem zmienną zawierającą format z Vaulta, gdyż jest ona pomijalna dla tego problemu. Jeśli Pan pokazał mi cały skrypt, brak odczytu wartości typu wiadomości (w pliku YAML: "drop-cash-from-stone-message-type") jest najpewniej powodem niepoprawnego działania skryptu, ponieważ zmienna ta zwraca <none>. Musiałby Pan dodać w sekcji 'on load' i funkcji przeładowującej konfigurację skryptu poniższą linijkę (oczywiście w sekcji gdzie jest załadowany odpowiedni plik konfiguracyjny). set {cashblock::config::drop-cash-from-stone-message-type} to yaml value "drop-cash-from-stone-message-type" from "cashblock-drop.config" W razie dalszych problemów będziemy się zastanawiać. Pozdrawiam.
-
Zakładam, że serwer działał wcześniej w trybie offline, więc nie ma mowy o weryfikacji użytkownika na podstawie UUID, gdyż jest ono generowane właśnie na podstawie jego nazwy. Jeśli Pan zmienił nazwę, serwer postrzega Pana już jako całkowicie innego gracza. W takiej sytuacji musi Pan odszukać swój plik w folderze playerdata, jego nazwą będzie Pana poprzednie UUID na serwerze. Należy zmienić nazwę pliku na Pana obecne UUID, wtedy wszystko powinno wrócić do normy. Pan nie ma prawa pamiętać swojego UUID, więc może Pan skorzystać z dowolnej strony generującej UUID na podstawie nazwy gracza. Przykładową stronę znajdzie Pan tutaj. Pozdrawiam.
