-
Ilość zawartości
11012 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
230
Treść opublikowana przez Kormic
-
Pan powiedział o spawnowaniu 'living horn coral plant', więc zrozumiałem to jako wyrzucanie przedmiotu na ziemi, stąd nieporozumienie. Muszę jednak powiedzieć, że dla bloków napisanie tego skryptu powinno być mniej skomplikowane. Co do komendy czyszczącej "bałagan" po poprzedniej wersji skryptu, znajdzie ją Pan na samym dole poniższego skryptu. Tylko niech sobie zmieni Pan permisję na taką jaka Panu odpowiada. Proszę najpierw dodać do pliku jedynie fragment z komendą i użyć jej, a dopiero później wrzucić cały skrypt. Wydaje mi się, że dodałem wszystko to czego Pan chciał. Proszę nie zwracać uwagi na podgląd skryptu, po prostu zedytowałem plik. Widocznie serwis jeszcze tego nie wdrożył. W razie problemów proszę dać znać.
-
Proszę uprzejmie. Informuję Pana jednak, że nie testowałem skryptu, więc ostrzegam, że niekoniecznie wszystko będzie poprawnie działało. Przed włączeniem skryptu proszę zmienić nazwę świata w linijce nr 7 na taką, która jest nazwą świata, w którym mają pojawiać się te koralowce. Wymagany jest dodatek skript-reflect. EDIT: Ewentualne problemy przewiduję, że mogą się pojawić w przypadku korzystania z UUID wyrzuconych na ziemię przedmiotów. Jeśli rzeczywiście to będzie powodem niepoprawnego działania skryptu, będzie trzeba skorzystać z tagów NBT, bądź PersistentDataHolder API.
-
W samym skrypcie nie widzę błędów poza niektórymi zbędnymi linijkami sprawdzającymi ekwipunek po anulowaniu zdarzenia 'on inventory click'. Tak jak mówiłem wcześniej, niech Pan zamieni wszędzie 'corals' na 'coral'. W pliku z aliasami jest opisane coś takiego jak 'living horn coral plant', nie 'living horn corals plant'. Po tej zmianie proszę wypróbować wszelkie opcje, które proponowałem wyżej. Jeśli nie poskutkuje, proszę dać znać, pomyślimy wspólnie.
-
Sprawdziłem jeszcze raz plik z aliasami w Skript na Githubie i ostatnie co mi przychodzi do głowy to użycie frazy 'living horn coral plant'. Proszę dać znać czy działa.
-
@Jowiszek Zakładam, że Pan ma wersję serwera 1.13+. Jeśli moje założenie jest poprawne, Skript powinien zrozumieć owe warunki. Niech Pan po każdej ilości tego koralowca doda słowo 'of' i spróbuje ponownie, być może to jest dla niego problemem. Podam przykład. player has 250 living horn coral: # Dalszy kod... # Proszę zamienić na: player has 250 of living horn coral: # Dalszy kod... W przypadku gdyby i to nie pomogło, proszę spróbować tak. if player's inventory contains 250 of living horn coral: # Dalszy kod...
-
Skript wyrzuca błędy, gdyż wymaga on określenia czy mówimy o żywych, czy też martwych koralowcach. Zakładam, że autor miał na myśli żywe koralowce, a więc wystarczy zamienić każde wystąpienie frazy 'horn coral' na 'living horn coral'. W razie gdyby to nie pomogło, sugeruję zmianę liczby mnogiej na liczbę pojedynczą ('corals' zamienić na 'coral').
-
Najlepszym rozwiązaniem jest dodanie do owych komend permisji w pluginie zarządzającym permisjami (zapewne w Pana przypadku jest to LuckPerms), której nie będą posiadali gracze. Wtedy nie będą w stanie dopełniać ich tabem. Inna możliwa opcja to instalacja przeznaczonego do tego celu pluginu. Przykładowy plugin znajdzie Pan tutaj. Jeśli jednak Pan koniecznie naciska na rozwiązanie w Skript, proszę uprzejmie. on send command list: set {_blockedCommands::*} to "komenda1", "komenda2" and "komenda3" remove {_blockedCommands::*} from command list Wymagany Skript 2.8+.
-
Z początku stwierdziłem, że nie będę odpowiadał Zleceniodawcy, ponieważ pogrubionym tekstem w moim poście napisałem, że do działania skryptu wymagany jest dodatek skript-reflect. Jednak Pan swoim postem sprawił, że mam chęć odpowiedzieć, ale tylko na Pana post. Proszę pamiętać, że dodatek skript-mirror już dawno odszedł w zapomnienie. Nawet na wersji 1.8.8 (notabene uwielbianej przez wielu graczy) jest możliwość zainstalowania Skript 2.5 autorstwa Matocolotoe, a następnie zainstalowania dodatku skript-reflect na serwerze. Naprostuję pewną rzecz. Generalnie napisał Pan prawdę, że jest on potrzebny do pobierania głównie klas z Bukkit API (rozumiem, że taki był tutaj zastosowany skrót myślowy), jednakże w tym przypadku użyłem go w celu podłączenia się do API pluginu ProtectionStones.
-
Z tego co widzę, Pan nie jest jedyną osobą z tym problemem. Zauważyłem również, że co prawda autor pluginu poinformował, że będzie starał się odpowiadać na wszelkie pytania, ale tak nie jest. Jeśli Pan się upewnił, że w pliku konfiguracyjnym niczego nie brakuje, a skrzynia została poprawnie utworzona i zapełniona przedmiotami, sugeruję zmianę pluginu na inny. Mimo wszystko, dla pewności niech Pan przejrzy ponownie przykładowy plik konfiguracyjny na stronie prezentującej plugin na stronie Spigota oraz skromne wiki na Githubie. Niestety nie podał Pan konfiguracji pluginu oraz to jak skrzynka jest utworzona, więc nie jestem w stanie nic więcej powiedzieć.
-
Na ten moment najszybsze rozwiązanie jakie przychodzi mi do głowy to napisanie listenera zdarzenia 'on place:', w którym Pan sprawdzi czy narzędzie gracza to ta głowa. Jeśli tak, anuluje Pan ów zdarzenie.
-
Taki skrypt najprościej będzie napisać w listenerze zdarzenia 'on death:' po sprawdzeniu czy atakujący jest graczem (a więc 'attacker is a player:'). Naturalnie, należy sprawdzić czy zaatakowany również jest graczem (tę informację można zawrzeć w pierwszej linijce listenera). Do wręczenia atakującemu głowy zabitego może Pan użyć efektu 'give', w którym głowę zaatakowanego może Pan pobrać za pomocą tego wyrażenia.
-
Komenda /repair [nick gracza] {naprawia mu przedmiot co trzyma w łapce}
Kormic odpowiedział(a) na asdasdasafasf pytanie w Zlecenia
Zanim udostępniłem Panu ten skrypt, sprawdziłem jego działanie pod kątem każdego warunku i nie wykryłem jakichkolwiek nieprawidłowości. Wedle mojej wiedzy wytrzymałość przedmiotu w Skript (jak i zawsze to miało miejsce w Bukkit API) zaczyna się w zerze i wzrasta aż nie osiągnie maksymalnej wytrzymałości - wtedy przedmiot się niszczy. Niemniej jednak mogło coś się zmienić ostatnio, nie neguję tego. Przyznam, że jakiś czas nie pisałem skryptów, więc kod przetestowałem na nieco starszym serwerze. Podam Panu nowy kod, którym może Pan sprawdzić jak to u Pana działa. command /repair <player>: permission: server.command.repair permission message: &cNie posiadasz wystarczających uprawnień do użycia tej komendy. usage: &c/repair <gracz> trigger: if arg's tool is air: send "&cGracz %arg% &cnie trzyma niczego w ręce." to sender stop if max durability of arg's tool is 0: send "&cGracz %arg% &ctrzyma w ręce przedmiot, który jest nienaprawialny." to sender stop if durability of arg's tool is 0: send "&cGracz %arg% &ctrzyma w ręce przedmiot, który nie wymaga naprawy." to sender stop send "Wytrzymałość = %durability of arg's tool%" to sender repair arg's tool send "&aPrzedmiot gracza %arg% &azostał naprawiony." to sender Dodałem jedną linijkę, ściślej mówiąc, linijkę 15. Niech Pan sprawdzi jaka wyświetla się wartość wytrzymałości przy próbie naprawy nieuszkodzonego przedmiotu dowolnego gracza. Jeśli na czacie wyświetli się "Wytrzymałość = 0", znaczy to, że Skript na Pana serwerze szwankuje. Jeśli jednak na czacie wyświetli się wartość różna od zera (na przykład 1562 dla diamentowego miecza), proszę zamienić linijkę 12. na poniższy warunek. if durability of arg's tool is max durability of arg's tool Gdy już Pan to zrobi, może Pan również usunąć linijkę, którą dodałem (linijka 15. wyświetlająca wartość wytrzymałości przedmiotu danego gracza). Na koniec ostrzegam, że Skript jest wyczulony na wcięcia w kodzie. W razie "rozjechania się" kodu proszę go poprawiać tabulatorem (nie spacją!). -
Czy dało by się zrobić, żeby skrypt odczytywał czas
Kormic odpowiedział(a) na micmit123 pytanie w Pytania i problemy
Pan nie podał błędu, ale nie widzę żadnego w instrukcji wyświetlania title na ekranach wszystkich graczy. Skript zapewne buntuje się przez podwójny dwukropek występujący przy formatowaniu czasu. Dodam, że Pan nadal nie sprawdza minuty, a w tym przypadku efekt będzie taki, że warunek nigdy nie zostanie spełniony. Tak więc w trzeciej linijce należy poprawić "12:00" na "12:00:00". -
Czy dało by się zrobić, żeby skrypt odczytywał czas
Kormic odpowiedział(a) na micmit123 pytanie w Pytania i problemy
Co prawda znak '#' został poprawnie podwojony, aczkolwiek zakładam, że Pan nie usunął podwojonego cudzysłowu na początku i końcu. -
Czy dało by się zrobić, żeby skrypt odczytywał czas
Kormic odpowiedział(a) na micmit123 pytanie w Pytania i problemy
Błąd ten może nieco wprowadzać w błąd, ale należy pamiętać o tym, że znak '#' rozpoczyna komentarz w kodzie. Jeśli Pan chce zawrzeć hash w kodzie, należy go podwoić, aby Skript zinterpretował go według Pana intencji. -
Czy dało by się zrobić, żeby skrypt odczytywał czas
Kormic odpowiedział(a) na micmit123 pytanie w Pytania i problemy
Pan wyżej już podał Panu linijkę wyświetlającą title wraz z subtitle na ekranie danego gracza i jest ona dobrze napisana (według dokumentacji), więc problem musi występować po Pana stronie. Ja odniosę się do poważnego problemu w Pana kodzie. Proszę zauważyć, że Pan sprawdza jedynie godzinę i sekundę, a Pan powinien również sprawdzać minutę. W związku z tym Pana kod może wykonać się do 60 razy na minutę, gdyż warunek spełnia np. godzina "12:01:00", "12:02:00", itd. -
Panu powinny wystarczyć dwa wyrażenia: 'display name', 'tablist name'. Zwracam uwagę, że w ten sposób może Pan jedynie próbować zmienić swoją nazwę w grze, jednakże nie jest w stanie zmienić swojej prawdziwej nazwy. Dodam, że jeśli Pan chciałby zmienić również nazwę wyświetlaną nad Pana głową, należałoby zmienić name tag gracza. Wedle mojej wiedzy Skript sam w sobie tego nie oferuje, trzeba posiłkować się dodatkami. Można albo zainstalować jakiś dodatek zdolny do obsługi pakietów i spróbować samemu coś wyczarować (w internecie znajdzie Pan wiele poradników na ten temat), albo też pobrać któryś z dodatków do Skripta oferujący możliwość zmiany nazwy nad głową gracza (np. Skellett). Kończąc mój post, warto sprawdzić opcję ze samym scoreboardem w Minecraft. Jestem pewien, że pozwala na zmianę prefixu i suffixu gracza. Nie wiem jednak czy pozwala na całą zmianę name tagu, to już Pan musi samemu znaleźć odpowiedź na te pytanie.
-
Aby otrzymać dany przedmiot z konkretną wartością CustomModelData, należy użyć wyrażenia '%item type% with [custom] model data'. Załącznik przenosi do fragmentu dokumentacji, w którym można znaleźć również przykłady. Gdy już mamy ten przedmiot, możemy go wstawić do jakiegokolwiek ekwipunku (skrzynia, ekwipunek gracza, itd.). Podam przykład. set {_item} to diamond sword with custom model data 10 set slot 9 of player's inventory to {_item} # Lub zwięźlej: set slot 9 of player's inventory to diamond sword with custom model data 10 Jestem świadom tego, że Pan zadał pytanie w dziale "Skript > Zlecenia", jednakże próżno się tu doszukiwać jakiegokolwiek zlecenia. Dlatego też odpowiadam tak, aby nakierować Pana na poprawną odpowiedź.
-
Czy dało by się zrobić, żeby skrypt odczytywał czas
Kormic odpowiedział(a) na micmit123 pytanie w Pytania i problemy
Pan sprawdza czy godzina to na przykład "12:00:00", tak? Dziwnym zjawiskiem jest w takim razie to, że gracze dostają 2-3 klucze. Gdyby Pan mógł pokazać kod, byłbym w stanie więcej wywnioskować. -
Dlaczego więc Pan sugeruje takie rozwiązanie? Co prawda nie mówi Pan tak wprost i szkodliwość jest znikoma, jednakże lakoniczność Pana postów może wprowadzić innych w błąd. Rozumiem co Pana motywowało do takiego działania, ale zwracam uwagę, że Pana odpowiedzi były bliższe nabijaniu sobie postów niż próbie nakierowania na poprawną odpowiedź. Wartość merytoryczna była zerowa. Jeśli Pan chce skłonić kogoś do refleksji, najlepiej po prostu nie odpowiadać pomimo prób kontaktu lub oznajmić, że pomocy Pan nie udzieli, gdyż autor ma się sam natrudzić. To wtedy jest dobre i faktycznie unikamy szeroko rozumianego "spoonfeedingu". Proszę nie odbierać mojej odpowiedzi jakobym miał do Pana negatywne nastawienie. Po prostu uważam, że zabrakło podpowiedzi o na przykład wyżej przeze mnie pokazanym rozszerzeniu Math lub jakimkolwiek innym narzędziu, które ułatwiłoby znalezienie rozwiązania autorowi wątku. Pozdrawiam.
-
Waluta używana w tym pluginie (jak i wielu innych) jest zależna od zainstalowanego pluginu obsługującego ekonomię serwera. Jednym z pluginów, który może Panu pomóc, jest ten plugin wprowadzający handel za pomocą złota. Po jego zainstalowaniu wystarczy ustawić w pliku konfiguracyjnym AuctionHouse co należy i gotowe.
-
Komenda /repair [nick gracza] {naprawia mu przedmiot co trzyma w łapce}
Kormic odpowiedział(a) na asdasdasafasf pytanie w Zlecenia
@Procix94 Pana kod zawiera wiele błędów, które czynią go bezużytecznym. Największym błędem w Pana kodzie jest przyrównywanie tekstu do gracza w 9. linijce. Tekst to po prostu tekst, gracz jest obiektem zawierającym wiele innych informacji. Zdecydowanie lepszym podejściem jest ustawienie typu argumentu pobieranego w komendzie jako 'player'. Dzięki temu od razu mamy pewność, że jest to gracz, który jest obecnie na serwerze. Jeśli Pan chciałby jednak trzymać się swojego rozwiązania, należałoby użyć wyrażenia 'parsed as'. arg-1 parsed as player Niemniej jednak jest to zwyczajne generowanie sobie problemów w kodzie, nie ma potrzeby wykorzystywania tak dziwnego rozwiązania. Drugim najważniejszym błędem jest próba wykorzystania argumentu w kodzie tak jakby był zmienną. %{arg-1}% - próba pobrania wartości zmiennej globalnej {arg-1} %arg-1% - pobieranie wartości pierwszego argumentu Rzecz jasna taka zmienna najprawdopodobniej nie istnieje, co skutkuje wyświetlaniem się "<none>" w miejscu nazwy gracza. Pan już ustawił w konfiguracji komendy wymaganą permisję, a więc warunek sprawdzający permisję wykonującego permisję jest redundantny. Ustawienie wytrzymałości przedmiotu gracza na 0 co prawda działa, jednak lepszym rozwiązaniem jest użycie efektu 'repair'. Pana kod zawiera wiele zagnieżdżonych warunków - taki sposób pisania kodu sprawia, że szybko staje się on nieczytelny. Zalecam używać odwróconych warunków wraz z instrukcją 'stop'. Przykład poniżej. if arg-1 is not set: send "Podaj argument." to sender stop # Dalszy kod... Proszę bardzo. Skrypt oprócz sprawdzania czy gracz faktycznie trzyma coś w ręce, sprawdza również czy przedmiot jest możliwy do naprawy oraz czy jest uszkodzony. command /repair <player>: permission: server.command.repair permission message: &cNie posiadasz wystarczających uprawnień do użycia tej komendy. usage: &c/repair <gracz> trigger: if arg's tool is air: send "&cGracz %arg% &cnie trzyma niczego w ręce." to sender stop if max durability of arg's tool is 0: send "&cGracz %arg% &ctrzyma w ręce przedmiot, który jest nienaprawialny." to sender stop if durability of arg's tool is 0: send "&cGracz %arg% &ctrzyma w ręce przedmiot, który nie wymaga naprawy." to sender stop repair arg's tool send "&aPrzedmiot gracza %arg% &azostał naprawiony." to sender -
Niech Pan usunie te nawiasy ostrokątne "<>" i spróbuje jeszcze raz. Powinno zadziałać.
-
Właśnie natknął się Pan na jedną z dziwnych rzeczy w Skript. Mianowicie, jeśli dany przedmiot został uszkodzony, nie można porównywać całego (poprzez całego mam na myśli nazwę, lore, itd.) przedmiotu, gdyż warunek już nie będzie spełniony. Na Pana szczęście obejście tego problemu nie jest trudne. Wystarczy sprawdzić w osobnej linijce lore zbroi i wszystko będzie działało jak należy. victim's chestplate is diamond chestplate lore of victim's chestplate is "Lore." # Dalszy kod...
-
Wolałbym jednak kontynuować rozmowę na forum. Proszę wrzucić zrzut ekranu na jakiś darmowy hosting (np. imgur) i wkleić tutaj link. Powinien się on wkleić od razu jako zrzut.
