-
Ilość zawartości
11012 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
230
Treść opublikowana przez Kormic
-
@Sergio_YT123 W normalnym przypadku (to znaczy takim, gdzie wystarczyłoby dodać alias bez nowej permisji) zaleciłbym edycję pliku 'commands.yml'. W tej sytuacji takie podejście byłoby niewystarczające. Proszę bardzo. Skrypt nie był testowany, ale strukturalnie jest na tyle prosty, że nie powinny wystąpić jakiekolwiek problemy. Proszę tylko pamiętać, że nadal wymagane są permisje z pluginu Head Database, aby gracz mógł używać komendy '/glowki'. command /glowki [<text>] [<text>]: permission: deskcraft.perm.adm.glowki permission message: &6Nie posiadasz wystarczających uprawnień do wykonania tej komendy. executable by: players trigger: if arg-1 is not set: make player execute command "hdb" stop if arg-1 is not "szukaj": send "&cPoprawne użycie:", "&6- &c/glowki" and "&6- &c/glowki szukaj <nazwa>" to player stop if arg-2 is not set: send "&cPoprawne użycie /glowki szukaj <nazwa>" to player stop make player execute command "hdb search %arg-2%" Pozdrawiam.
-
Ten temat został przeniesiony.
-
@Stilus__ Skript pozwala na skonfigurowanie komendy wedle swoich potrzeb. To samo tyczy się permisji. https://docs.skriptlang.org/structures.html?search=#StructCommand Ponieważ temat jest umieszczony w dziale "Skript > Zlecenia", przesyłam poniżej kod skrypt z permisją dodaną do komendy. Co więcej, poprawiłem kilka rzeczy w kodzie, aby skrypt działał lepiej. Permisję można edytować w polu 'permission'. Wiadomość wyświetlana przy braku jej posiadania jest ustawiana w polu 'permission message'. command /swieta [<text>]: executable by: players permission: server.command.swieta permission message: &6Nie posiadasz wystarczających uprawnień do wykonania tej komendy. trigger: set {_lastUsage} to {ostatniczasuzycia::%player%} if {_lastUsage} is set: difference between {_lastUsage} and now is smaller than 24 hours send "&cTej komendy mozesz uzywac co 24h!" to player stop send "&aDostales item!" to player give 1 dragon egg named "&5&lPuszka Pandory" to player set {ostatniczasuzycia::%player%} to now Pozdrawiam.
-
Problem został rozwiązany.
-
Proszę bardzo. Jedyną wadą poniższego skryptu jest to, że obrażenia od krzaków jagód, stalaktytów, stalagmitów, itp. będą również blokowane. on damage of player: damage cause is contact cancel event Pozdrawiam.
-
Oczywiście, nie ma problemu. Proszę bardzo. command /resetrozdaj [<text>]: permission: server.command.resetrozdaj permission message: &cNie posiadasz wystarczających uprawnień do wykonania tej komendy. executable by: players trigger: set {_player} to arg parsed as offline player if {_player} hasn't played before: send "&6Ten gracz nigdy wcześniej nie był na tym serwerze." to sender stop clear {rozdajCommand::cooldown::%uuid of {_player}%} send "&aPomyślnie zresetowano cooldown komendy &6/rozdaj &adla gracza &b%arg%&a." to sender Pozdrawiam.
-
Proszę bardzo. Skrypt nie był testowany. Dodam od siebie, że najprawdopodobniej jest możliwość, aby przy pomocy dodatku skript-reflect zastąpić wywoływanie komend przez konsolę instrukcjami z API pluginu zarządzającego skrzynkami. options: cooldownTime: 24 hours function formatTimespan(t: timespan) :: text: set {_tText} to "%{_t}%" replace all "and " with "" in {_tText} replace all ", " with " " in {_tText} replace all "days" with "d" in {_tText} replace all "hours" with "h" in {_tText} replace all "minutes" with "m" in {_tText} replace all "seconds" with "s" in {_tText} set {_split::*} to {_tText} split at " " loop (size of {_split::*}) times: if mod(loop-number, 2) is 1: add "%ceil({_split::%loop-number%} parsed as number)%" to {_timeNumbers::*} continue add {_split::%loop-number%} to {_timeUnits::*} set {_returnTimespan} to "" loop {_timeNumbers::*}: if (loop-index parsed as number) is 1: set {_returnTimespan} to "%loop-value%%{_timeUnits::%loop-index%}%" continue set {_returnTimespan} to "%{_returnTimespan}%, %loop-value%%{_timeUnits::%loop-index%}%" return {_returnTimespan} command /rozdaj: permission: deskcraft.perm.rozdaj permission message: &cNie posiadasz wystarczających uprawnień do wykonania tej komendy. executable by: players trigger: set {_lastUsageDate} to {rozdajCommand::cooldown::%uuid of player%} set {_cooldown} to {@cooldownTime} if {_lastUsageDate} is set: set {_timeElapsed} to difference between {_lastUsageDate} and now {_timeElapsed} is smaller than {_cooldown} set {_timeRemaining} to difference between {_timeElapsed} and {_cooldown} send "&6Odczekaj &e%formatTimespan({_timeRemaining})% &6przed ponownym wykonaniem tej komendy." to player stop set {rozdajCommand::cooldown::%uuid of player%} to now set {_rNum} to random integer between 1 and 3 if {_rNum} is 1: execute console command "case key giveall Rzadki_Klucz 3 " execute console command "case key giveall Legendarny_Klucz 1" else if {_rNum} is 2: execute console command "case key giveall Epicki_Klucz 2" execute console command "case key giveall Boski_Klucz 1" else if {_rNum} is 3: execute console command "case key giveall Rzadki_Klucz 3" execute console command "case key giveall Epicki_Klucz 1" Pozdrawiam.
-
FunnySkAddon - Plugin wspierający FunnyGuilds w skripcie
Kormic odpowiedział(a) na Peridot temat w Dodatki i narzędzia
Tak, jak najbardziej można pobrać tę informację. Proszę wykorzystać zdarzenie 'on points change' i nasłuchiwać do niego. Może Pan w nim pobrać informację o zmianie punktów za pomocą wyrażenia 'change' (czy też 'points change' dla tego przypadku). Dla pewności można również sprawdzić czy powodem tej zmiany jest "COMBAT". "%cause%" is "COMBAT" Co prawda dokumentacja FunnySkAddon nie wspomina o takim możliwym powodzie, ale po przejrzeniu kodu źródłowego dodatku, stwierdzam, że powinno to zadziałać. Pozdrawiam. -
Problem został rozwiązany.
-
Proszę bardzo. Skrypt był testowany. options: crownHelmet: netherite helmet named "&6Korona" on death of player: set {_playerItems::*} to slot (integers from 0 to 40) of victim's inventory {_playerItems::*} contains {@crownHelmet} set {giveCrownOnRespawn::%uuid of victim%} to true on respawn: {giveCrownOnRespawn::%uuid of player%} is set give player {@crownHelmet} clear {giveCrownOnRespawn::%uuid of player%} Pozdrawiam.
-
Komenda wyświetlana przy błędnym argumencie.
Kormic odpowiedział(a) na mimiwester pytanie w Pytania i problemy
Mowa jest o argumencie, a więc zakładam, że pytanie dotyczy sprawdzania poprawności argumentu komendy. Pokażę przy pomocy poniższego przykładu jak można to zrobić gdy posiadamy zmienną globalną (tutaj dla przykładu: {rozsypankaEvent::answer}) przechowującą poprawną odpowiedź. command /rozsypanka [<text>]: executable by: players trigger: # [...] if arg is not {rozsypankaEvent::answer}: send "&cTwoja odpowiedź jest niepoprawna." to player stop send "&aGratulujemy poprawnej odpowiedzi!" to player # [...] W miejscach trzech kropek znajduje się pozostały kod komendy - nad (przed) powyższym warunkiem mogą występować dodatkowe warunki sprawdzające chociażby czy argument został podany i czy wydarzenie (event) jest aktywne. Pod (po) powyższym warunku może znajdować się pozostały kod komendy wręczający graczom nagrodę za poprawną odpowiedź i dodatkowo kod kończący event. Gdyby pojawiły się jakieś pytania, proszę pytać śmiało. Pozdrawiam. -
Nie, wystarczy jedynie przeładować skrypt i wszystko powinno działać jak należy. Co do samego problemu, najprawdopodobniej w Pana skrypcie doszło do kolizji składni wyrażeń 'head [location] of %living entity%' i 'head of %offline player%'. Proszę zauważyć, że wyrażenie 'head of {_player}' (gdzie {_player} przechowuje informację o graczu, a więc również o żywym bycie) spełnia oba warianty składni, a więc kolizja jest nieunikniona. Najwidoczniej składnia tego pierwszego jest można powiedzieć, że "silniejsza" - możliwe, że jest rejestrowana po składni tego drugiego wyrażenia, a więc niejako ją nadpisuje. Niemniej jednak, to tylko dygresja, mało znacząca. Jeżeli po zapisaniu wartości zmiennej {_head} wyświetli sobie ją Pan na czacie, najprawdopodobniej ukaże się Panu '<none>', ponieważ Pan pobiera lokalizację głowy gracza (mnie) nieistniejącego na serwerze. Gdyby Pan natomiast wpisał siebie, wyświetliłaby się lokalizacja Pana głowy wraz z jej rotacją. Jak sobie z tym poradzić? Rozwiązanie jest banalnie proste - proszę zastąpić słowo 'head' słowem 'skull', ponieważ jest ono dozwolone przez składnię drugiego (tego) wyrażenia. Pozdrawiam.
-
Faktycznie, nie zwróciłem na to uwagi. Charakter postu utwierdził mnie w przekonaniu, że jesteśmy w dziale "Pytania i problemy", ale to nie jest istotne. Podam przykład jak można stworzyć główkę dowolnego gracza. set {_player} to "Kormic" parsed as offline player set {_head} to head of {_player} Pokażę również jak można stworzyć prostą komendę wręczającą wykonującemu komendę głowę dowolnego gracza. command /gethead [<text="Kormic">]: executable by: players trigger: set {_playerArg} to arg parsed as offline player set {_head} to head of {_playerArg} give player {_head} Przykład użycia: '/gethead Sashie'. Pozdrawiam.
-
Aby stworzyć głowę danego gracza, wystarczy sam Skript, gdyż oferuje on wyrażenie 'head of %offline player%'. Jeżeli potrzebuje Pan dowolnego gracza (może być na serwerze, ale nie musi, de facto nawet nigdy nie musiał do niego dołączać), warto skorzystać z wyrażenia '%text% parsed as offline player' (podałem przykład bardziej szczególny dla Pana problemu), który zwróci obiekt gracza, a ten obiekt można wykorzystać w wyrażeniu podanym wyżej ('head of...'). Korzystanie z dodatku SkBee w tej sytuacji jest niepotrzebne. Oczywiście można tak do tego podejść, ale dobrą praktyką jest ograniczenie liczby wykorzystywanych dodatków. Jedyny sens wykorzystywania go (SkBee) jest w przypadku posiadania jedynie tekstury głowy gracza. Pozdrawiam.
-
To nie pomoże, ponieważ Skript nie posiada instrukcji pozwalających na operowanie na placeholderach. Należy w tej sytuacji użyć dodatku skript-placeholders, co zresztą zostało powiedziane wyżej. Po błędzie mogę stwierdzić, że Pan powyższy kod wstawił w funkcję i użył wyrażenia 'player's balance'. Proszę pamiętać, że funkcja sama w sobie nie posiada wyrażenia 'player' - musi Pan je przesłać do niej w formie parametru i dalej wykorzystywać jako zmienną lokalną, na przykład '{_p}'s balance', gdzie zmienna {_p} przechowuje informację o graczu przesłaną wcześniej do funkcji. Po więcej informacji odsyłam do starego, ale nadal aktualnego poradnika dotyczącego funkcji autorstwa piratjsk. Jeżeli nadal będą występowały problemy, mogą one być spowodowane niepoprawnym podłączeniem się Skripta do Vaulta. Pozdrawiam.
-
Problem został rozwiązany.
-
Ten temat został przeniesiony.
-
Ten temat został przeniesiony do archiwum.
-
Ten temat został zamknięty.
-
Problem został rozwiązany.
-
Skript oferuje nasłuchiwanie do zdarzenia 'player trade'. Tak jak dokumentacja mówi, wymagany jest silnik Paper, wersja nie niższa niż 1.16.5. Nie wiem jednak ile informacji udostępnia te zdarzenie w Skript, możliwe, że pozwala ono na pobranie jedynie 'event-player' i 'event-entity'. W tej sytuacji może Pan chcieć nasłuchiwać do zdarzenia PlayerTradeEvent przy pomocy dodatku skript-reflect, które posiada wiele metod, co jest szczególnie widoczne w klasie PlayerPurchaseEvent (klasa PlayerTradeEvent dziedziczy po klasie PlayerPurchaseEvent). Pozdrawiam.
-
Problem został rozwiązany.
-
Sądzę, że najlepszym wyjściem będzie skonfigurowanie połączenia z MySQL'ową bazą danych na obu serwerach, tak aby łączyły się one z tą samą bazą. Może Pan to ustawić w pliku konfiguracyjnym Skripta (config.sk), domyślnie znajdzie Pan tę opcję w linijkach 252-257. # == MySQL configuration == host: localhost # Where the database server is located at, e.g. 'example.com', 'localhost', or '192.168.1.100' port: 3306 # 3306 is MySQL's default port, i.e. you likely won't need to change this value user: root password: pass database: skript # The database to use, the table will be created in this database. table: variables21 # The name of the table to create. 'variables21' is the default name, if this was to be omitted. # (If the table exists but is defined differently that how Skript expects it to be you'll get errors and no variables will be saved and/or loaded) Alternatywny sposób to, tak jak Kolega wyżej zasugerował, skorzystanie z dodatków wprowadzających zmienne sieciowe, na przykład Skungee. Wadą tego rozwiązania jest to, że Pan najprawdopodobniej nie będzie miał wpływu na to, do której dokładnie bazy są one zapisywane (no chyba że Skungee pobiera z pliku konfiguracyjnego Skripta informację o niej, ale jest to wątpliwe). Wniosek wyciągnięty na podstawie jednego z plików konfiguracyjnych Skungee o nazwie 'configuration.yml': network-variables: # The storage type to use. # The SkungeeAPI allows for registering custom storage systems. type: "CSV" backups: # If Skungee should backup the variables. enabled: true # The interval in minutes to backup the variables at. interval-minutes: 120 # If a message should be broadcasted to the console stating the variables were backed up. console-messages: true Pozdrawiam.
-
Jak najbardziej. Podpowiem Panu jak można to zrobić za pomocą pseudokodu, aby nie podawać odpowiedzi na srebrnej tacy. # [...] jeśli {zmienna::cooldown::%gracz%} jest ustawiona: jeśli różnica między {zmienna::cooldown::%gracz%} a teraz jest mniejsza niż <cooldown>: wyślij wiadomość "&cOdczekaj chwilę." do gracza stop ustaw wartość {zmienna::cooldown::%gracz%} na teraz # [...] (dalszy kod) A teraz opiszę po kolei co powyższy fragment kodu robi. Przy okazji będę dodawał załączniki, aby Pan mógł na bieżąco przechodzić do dokumentacji i widzieć o czym tak właściwie mówię. 'jeśli {zmienna::cooldown::%gracz%} jest ustawiona' - na początek sprawdzamy czy zmienna z ostatnim czasem wykonania danej czynności przez gracza posiada jakąkolwiek wartość. Dzięki temu obsługujemy przypadek gdy gracz po raz pierwszy na serwerze wykonuje ów czynność, ponieważ warunek nie jest spełniony, a więc nie ma sensu sprawdzać czy cooldown tego gracza się zakończył. 'jeśli różnica między {zmienna::cooldown::%gracz%} a teraz jest mniejsza niż <cooldown>' - myślę, że linijka jest na tyle szczegółowo opisana, że nie muszę tu zbyt wiele Panu tłumaczyć. Jest to po prostu sprawdzanie różnicy czasu między dwiema datami (czasem zapisanym w zmiennej i czasem obecnym). W miejsce cooldownu może Pan wstawić wartość (zmienna, literał) typu 'timespan', na przykład '10 seconds'. Te przykładowe 10 sekund to jest czas cooldownu. Pomijając linijkę z wysyłaniem wiadomości, gdyż jej sposób działania jest trywialny, dochodzimy do instrukcji 'stop'. Taka też instrukcja istnieje w Skript, więc nie musi Pan szukać jej odpowiednika. Jej rolą jest zakończenie wykonywania skryptu (ściślej mówiąc, triggera (wyzwalacza), w którym ta instrukcja się znajduje), aby kod następujący po niej nie został wykonany. 'ustaw wartość {zmienna::cooldown::%gracz%} na teraz' - ta linijka i cały kod następujący po niej (pod nią) wykonają się jedynie gdy albo gracz nigdy nie wykonał danej czynności, albo też cooldown dobiegł końca. W tej linijce zapisujemy do zmiennej gracza czas obecny, aby można było przy kolejnych wykonaniach czynności przez gracza weryfikować czy cooldown jest aktywny, czy też nie. Gdyby miał Pan jakieś pytania, śmiało. Pozdrawiam.
