Skocz do zawartości

Kormic

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

    11012
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    230

Treść opublikowana przez Kormic

  1. Kormic

    Vouchery z kodem

    Wydaje mi się, że najprościej będzie zapytać samego Zleceniodawcę co miał na myśli z tym, że kody mają być jednorazowe. @iYowee Prosiłbym o wyjaśnienie co oznacza ta jednorazowość kodu. Oznacza to, że nie mogą istnieć dwa takie same kody jednocześnie (co jest oczywiste), czy też tylko raz może zostać wygenerowany i już nigdy później nie może zostać ponownie wygenerowany (nieważne czy 5 dni, czy 10 lat). Obu Panów natomiast zapraszam do przeczytania moich wiadomości na czatboxie, bo dyskusja skupia się na czymś, co jest niejednoznaczne. Pozdrawiam.
  2. Kormic

    Poprawa skryptu

    Zlecenie zostało wykonane.
  3. Kormic

    Vouchery z kodem

    Zacznijmy od tego, że nie istnieje w Skript efekt generujący w taki sposób ciąg znaków, więc o ile powyższy skrypt nie wykorzystuje składni któregoś z dodatków, Skript zwróci błąd. Poniżej przykład jak można to zrobić. set {_code} to "" loop {@codeLength} times: set {_char} to random element of (alphanumeric characters between "0" and "z") # W sumie 62 możliwe znaki set {_code} to "%{_code}%%{_char}%" Co do samego procesu generowania kodu, autor kodu napisał, że prawdopodobieństwo wygenerowania tego samego kodu dwa jest pomijalnie małe i jest to prawda, bo wynosi ono: t - wygenerowanie kodu x P(t) = 1 / 36^6 t' - wygenerowanie tego samego kodu x dwa razy P(t') = 1 / (36^6)^2 = 1 / 36^12 ~= 2.11 * 10^-19 Zbiór znaków spełniających wyrażenie regularne "[0-9a-zA-Z]" co prawda wynosi 62, jednak z tego co wiem, Skript nie zwraca uwagi na wielkość liter (domyślnie), więc odjąłem 26 znaków alfabetu - nie ma znaczenia czy dużych, czy małych. Niemniej jednak, powyższe obliczenia mają sens gdy mamy do czynienia z generatorem znaków (a właściwie liczb, bo znaki mają reprezentację liczbową w tablicy ASCII) prawdziwie losowym. Niestety, do dyspozycji mamy generatory pseudolosowe, które mają tendencję do częstego wykorzystywania jednego fragmentu dziedziny liczb, więc prawdopodobieństwo rośnie. O ile? Nie wiem, ale na pewno jego rząd wielkości jest większy niż 10^-19. Być może nadal jest niewyobrażalnie małe, ale zawsze warto pisać taki kod, który zadziała poprawnie nieważne co się stanie. Dlatego też kod powinien być generowany przy pomocy pętli while, która działa tak długo aż wygenerowany kod nie jest unikalny. Całkowita zgoda. Jest to zaśmiecanie pliku variables.csv, a system zmiennych globalnych w Skript jest cóż... niewydajny. Abstrahując od powyższej dyskusji, miło Cię ponownie widzieć Knugi. Zarzut szerzej dotyczy samego "niesprzątania po sobie" i ryzyka nadpisania czyjegoś vouchera. Nikt nie wykorzysta wszystkich kodów, to oczywiste. Niemniej jednak, tłumaczenie się z nieczyszczenia zmiennych w ten sposób świadczy o pewnym niedbalstwie. EDIT: Teraz przeczytałem w treści zlecenia o tym, że każdy kod musi być jednorazowy. Mój błąd. Pozdrawiam.
  4. Można jaśniej? Nie rozumiem istoty problemy. Proszę szczegółowo wyjaśnić co się dzieje i co ma się dziać. Dodatkowo, chciałbym zapytać o plugin Plots. Rozumiem, że problem związany jest z tym pluginem, tak? Pozdrawiam.
  5. Kormic

    Skrypt na /reklama

    Proszę. command /reklama [<text>]: executable by: players cooldown: 30 minutes cooldown message: &6Możesz wykonywać tę komendę nie częściej niż co 30 minut. cooldown storage: {adBroadcast::%uuid of player%::cooldown} trigger: broadcast "&6[&eREKLAMA&6] &b%player% &7| &f%arg%" Pozdrawiam.
  6. Kormic

    /portfel - gui

    Głowiłem się przez 5 minut czego pytanie dotyczy i zrozumiałem, że jest to pytanie dotyczące całkiem innego skryptu. Tak, da się. Proszę użyć efektu 'add'. Pozdrawiam.
  7. Kormic

    /portfel - gui

    Jak najbardziej. Jedyna trudność jest taka, że nie istnieje jakakolwiek funkcja lub wyrażenie w Skript'cie pozwalające na to. Istnieje kilka rozwiązań, ja wymienię dwa. Stworzenie własnej funkcji w Skript'cie przetwarzającą formatowaną liczbę na jej reprezentację tekstową. Kod polegałby na zamianie liczby na tekst, dzieleniu jej na kropce, dopisywaniu zer lub ucinaniu części ułamkowej i składaniu wszystkiego z powrotem. Użycie dodatku skript-reflect w celu skorzystania z klasy java.text.DecimalFormat. import: java.text.DecimalFormat local function formatNumber(n: number, format: text) :: text: set {_df} to new DecimalFormat({_format}) return {_df}.format({_n}) Przykład użycia: command /formatnumber <number>: trigger: send formatNumber(arg, "0.00") # /formatnumber 3.581 -> 3.58 # /formatnumber 0.9 -> 0.90 Pozdrawiam.
  8. Kormic

    /portfel - gui

    Ale ja przecież przedstawiłem rozwiązanie na samym początku mojego postu. Proszę czytać ze zrozumieniem. Pozdrawiam.
  9. Kormic

    /portfel - gui

    Brak procentów obejmujących nazwę zmiennej jest powodem takiego działania. Jeżeli Skript ma przedstawić wartość zmiennej, a nie jej nazwę, należy użyć znaku procentu. Przykład poniżej. send "Ilość Twoich punktów: %{totalPoints::%player%}%" to player Mam również jedną uwagę co do wykorzystania listeneru zdarzenia 'on first join'. Zakładam, że istnieje już grupa graczy (wliczając Pana), która dołączyła do serwera przed załadowaniem tego skryptu, więc zdarzenie pierwszego dołączenia nie będzie dla nich wywołane, co w konsekwencji doprowadzi do wyświetlenia '<none>' w utworzonym GUI (ponieważ nie zostanie utworzona dla nich zmienna przechowująca ilość pieniędzy). Jak to naprawić? Na szczęście rozwiązanie jest banalnie proste. Wystarczy wykorzystać listener zdarzenia 'on join' i w nim sprawdzać czy istnieje zmienna przechowująca stan konta przypisana do gracza. Jeśli nie, ustawiamy jej wartość na 0. on join: {zmienna::%player%} is not set set {zmienna::%player%} to 0 Alternatywnym rozwiązaniem jest użycie sekcji 'variables', która będzie sprawdzała czy zmienna istnieje. Nie zalecam jednak z niej korzystać, ponieważ jej zakres użycia jest ograniczony - na przykład nie można w niej wykorzystać wyrażenia 'uuid of player', które jest zalecanym zamiennikiem wyrażenia 'player' w nazwie zmiennej. variables: {zmienna::%player%} = 0 Pozdrawiam.
  10. Teraz jest dobrze. Jedyne dwie uwagi jeszcze jakie mam to to, że w komendzie /kasa może Pan ustawić typ argumentu jako 'offlineplayer', aby było możliwe sprawdzenie stanu konta gracza nieobecnego na serwerze oraz to, że może Pan chcieć nieco przebudować funkcję 'drop' tak, aby gracz widział łączną sumę pieniędzy jaką dostanie. W tym momencie skrypt działa tak, że gracz może nic nie dostać lub dostać nawet 3.01 $, ale wiadomość 'title' i tak pokaże tylko 2 $, ponieważ zasłoni poprzednie wiadomości o otrzymaniu 0.01 $ i 1 $. Też wygląda dobrze, ale i tutaj mam dwie uwagi. Pierwsza dotyczy zmiennej {_t}, która jest niepotrzebna. Zmienna {_c} przechowuje przecież informację o tym samym bloku, więc ustawianie zmiennej {_t} i używanie jej jest niepotrzebne. Nie rozumiem. Typ 'offlineplayer' nie ma jakiegokolwiek związku z tym czy gracz korzysta z pirackiej wersji gry, czy też nie. Typ 'player' dotyczy gracza obecnego na serwerze, a typ 'offlineplayer' dotyczy dowolnego gracza - może, ale nie musi być na serwerze. Podawanie gracza offline nie ma sensu, ponieważ nie mamy możliwości wręczenia mu przedmiotu, dlatego warto zawęzić dziedzinę argumentu do graczy obecnych na serwerze. Ponadto, można zastosować tę samą modyfikację z domyślną wartością argumentu, którą zastosował Pan w skrypcie modyfikującym drop z kamienia. Pozdrawiam.
  11. Kormic

    Loop itemy w danym gui

    Proszę bardzo. on inventory close: name of event-inventory is "NazwaGUI" set {_items::*} to (all items in event-inventory) where [name of item input is "domek"] remove {_items::*} from event-inventory Pozdrawiam.
  12. No właśnie, nietestowana. Ponownie wkradły się błędy składniowe, czyli brak cudzysłowów domykających ciągi znaków w komendzie /kasa. Co więcej, ta poprawka objawiła Pana nieznajomość tworzenia funkcji. Zalecam zapoznać się z tym artykułem. Nie wiem dlaczego w kodzie 'all players' jest traktowane jak typ parametru funkcji jeżeli to jest wyrażenie. Poza tym, dlaczego Pan po prostu nie użyje 'all players' w środku funkcji w linijce z instrukcją 'send'? Przecież nikt Panu nie broni tak zrobić. Ponadto, w komendzie /kasa pojawił się ta sama niezrozumiała dla mnie rzecz co w komendzie /brush. Sprawa jest prosta. Niech Pan najpierw sprawdzi nazwę narzędzia gracza, a później niech Pan sprawdza dystans między graczem a klikniętym blokiem. Zmienna {_t} może być użyta, ale zanim Pan jej użyje, musi ona posiadać jakąś wartość. To oczywiste. Dodam, że sprawdzanie dystansu jest zbędne, może Pan skorzystać z wyrażenia 'clicked block', które zwraca kliknięty blok. Jeżeli jest on poza zasięgiem gracza, wyrażenie zwróci '<none>', a więc można to łatwo zweryfikować za pomocą warunku '[...] is set:'. Pozdrawiam.
  13. Kormic

    Skrypt na skrzynki

    @Xyntegi_ok A co z pluginem ExcellentCrates? Niestety nie podała Pani wersji serwera, więc jest to propozycja w ciemno, ale plugin z pewnością jest interesujący. Jeżeli i ten plugin nie zachęci, sugeruję sprawdzić inne strony takie jak Modrinth. Być może coś tam się znajdzie. W ostateczności można sięgnąć po skrypt. Sięgając pamięcią wstecz, na tym forum użytkownicy opublikowali co najmniej kilka skryptów na skrzynki, więc warto przejrzeć dział "Skript > Skrypty", a w szczególności dział z promowanymi skryptami. Pozdrawiam.
  14. Wystarczy więc podzielić ów placeholder przez 2. Zakładam jednak, że placeholder ten chce Pan wykorzystać w innym pluginie, co uniemożliwia bezpośrednią jego modyfikację. Pomocne tutaj okaże się rozszerzenie 'Math', które pozwala wykonywać operacje matematyczne na placeholderach zwracających dowolne liczby. Symbol dzielenia to '/', rozwiązanie jest trywialne. Proszę tylko pamiętać, że wyrażenie należy podać bez nawiasów ostrokątnych. Pozdrawiam.
  15. Kormic

    GOLEM Z NAZWA

    Proszę. Tak abstrahując, zalecam Panu dać informację odnośnie innych zleceń, które Pan umieścił na forum, aby można było oznaczyć je jako rozwiązane. Bez tego tworzy się wiele wątków, w których odpowiedzi nie wiadomo czy w ogóle przydały się autorowi pytania/zlecenia. command /golem [<text>]: executable by: players trigger: spawn golem at player: set display name of golem to "Golem" Pozdrawiam.
  16. Zlecenie zostało wykonane.
  17. Kormic

    /lobby

    Ten temat został przeniesiony.
  18. Kormic

    /lobby

    W porządku, już rozumiem. Nie rozumiem jednak dlaczego Pan nie zainstalował ajQueue na tych serwerach. Twórca pluginu napisał w sekcji "Setup" na stronie prezentującej plugin, że używanie komendy /queue (a więc też /move) na serwerach lobby wymaga instalacji ajQueue na nich. Proszę zrobić jak wyżej i sprawdzić czy serwery mają zarejestrowaną komendę /move oraz czy działa ona zgodnie z oczekiwaniami. Pozdrawiam.
  19. Nie wiem którego pluginu zarządzającego placeholderami pytanie dotyczy, ale śmiało mogę założyć, że mowa o PlaceholderAPI. Wszystkie dostępne placeholdery wraz z komendami do pobierania rozszerzeń są wypisane na wiki na Githubie. W tym przypadku będzie nam zależało na placeholderze %player_max_health%, który zwraca podwojoną liczbę serc. Jest on częścią rozszerzenia 'Player', które należy pobrać przed użyciem placeholderu. Pozdrawiam.
  20. Ten temat został przeniesiony.
  21. Kormic

    /lobby

    Nie ukrywam, że nie do końca rozumiem jaki jest Pana problem. Domyślnie ajQueue dołącza gracza do serwera w grupie, na którym jest najmniej graczy. Z treści problemu wynika, że Pan chce zmienić ten mechanizm tak, aby gracz był dołączany do losowego serwera, tak? Prosiłbym o wytłumaczenie co tak właściwie chce Pan osiągnąć. Pozdrawiam.
  22. Pytanie tylko czy stawianie wymogu korzystania z tego klienta jest sensowne gdy mówimy o 'abovename' składającym się z serduszek. Według mnie nie. Co do hologramu, mam w zwyczaju zachęcanie do gotowych rozwiązań, które są gruntownie przetestowane i zalecane. Nietrudno mi sobie wyobrazić, że ktoś napisze taki kod, który będzie działał niewydajnie lub hologramy będą się bugowały. Wtedy z jednego problemu robią się dwa. Pozdrawiam.
  23. Kormic

    KOLEJKA-NO MOVE

    Proszę. on player move: player is in world "kolejka" cancel event Pozdrawiam.
  24. @SkryptExpert Niestety, ale oba skrypty posiadają błędy, które omówię je poniżej. W mojej ocenie wygląda to tak jakby oba skrypty nie zostały nawet załadowane na serwer, ponieważ Skript wykryłby jeden z nich. Podam również co można poprawić w kodzie (oczywiście poza samymi błędami). Pierwszy skrypt, który wezmę na tapet to skrypt implementujący dodawanie pieniędzy przy kopaniu kamienia. Błędy w nim występujące są błędami czysto składniowymi. Fragment kodu, który mam na myśli to: options: # [...] title: &aGratulacje! subtitle: &8Udało ci się wykopać &c%{_k}% $ # [...] send title {@title} with subtitle {@subtitle} to {_p} # [...] Warto tutaj wytłumaczyć sposób działania sekcji 'options'. Żeby się nie rozwodzić, najprościej jest powiedzieć, że opcje są wstawiane bezpośrednio w miejsca w kodzie, w których zostały "wspomniane". Ludzie zaznajomieni z C pewnie powiedzieliby o analogii do instrukcji preprocesora '#define'. Drugi błąd dotyczy użycia dziwnego wyrażenia, w którego miejsce powinno być wstawione 'all players'. Fragment, o którym mówię, znajduje się poniżej. function d(c: number, k: number, p: player): # [...] # [...] all {_p}'s # [...] W pierwszym skrypcie należy dodatkowo poprawić: nazewnictwo funkcji globalnej - funkcja globalna zawsze powinna posiadać nazwę, która jasno określa jej działanie i gwarantuje małe prawdopodobieństwo kolizji nazw z innymi funkcjami, nazewnictwo zmiennych lokalnych - zmienne lokalne powinny mieć również mniej enigmatyczne nazwy, ponieważ pojawiają się w konfigurowalnych wiadomościach w sekcji 'options'. Do drugiego skryptu (czyli skrypt na "brush", który - jeśli dobrze rozumiem - ma niszczyć każdy blok poza bedrockiem zwykłym kliknięciem) natomiast wkradł się błąd logiczny. Jest on związany z użyciem zmiennej lokalnej {_t} w warunku sprawdzającym dystans, która nie posiada jakiejkolwiek wartości, ponieważ nigdzie nie jest ustawiana wcześniej w kodzie listenera zdarzenia. W drugim skrypcie należy jeszcze poprawić: typ argumentu funkcji - nie jesteśmy w stanie wręczyć przedmiotów graczowi nieobecnemu na serwerze, więc typ 'player' w zupełności wystarczy, wartość domyślna argumentu funkcji - zamiast sprawdzać czy argument jest ustawiony, można prościej: [<player=%player%>] Powyższa modyfikacja sugeruje dodatkowo, aby komendy nie mogła wykonywać konsola. Warto więc dodać pole 'executable by: players'. Pozdrawiam.
  25. Proszę. Pozwoliłem sobie nieco zmodyfikować zlecenie i przedmioty będą teleportowane do konkretnej lokalizacji ustawionej w sekcji 'options'. Jak najbardziej możliwe jest pobranie lokalizacji regionu, jednakże nie widzę sensu takiej operacji. Jedyna sytuacja, która wymagałaby takiego podejścia to wylosowanie lokalizacji w obrębie tego regionu. Przed użyciem skryptu należy skonfigurować nazwę i świat regionu, w którym ma nastąpić śmierć od voidu oraz lokalizację i świat miejsca, do którego mają być teleportowane przedmioty. options: sourceRegion: name: region_x world: world_x targetPlace: location: (100, 100, 100) world: world_y on death of player: damage cause is void "%regions at victim%" contains "{@sourceRegion.name} in world ""{@sourceRegion.world}""" set {_drops::*} to drops clear drops drop {_drops::*} at location at {@targetPlace.location} in world "{@targetPlace.world}" Pozdrawiam.
×
×
  • Dodaj nową pozycję...