-
Ilość zawartości
11012 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
230
Treść opublikowana przez Kormic
-
Jak najbardziej, zapomniałem o tym. Zauważ jednak, że pojawia się tu pewna nieścisłość - listener nie określa w którym świecie znajduje się ten region, a trzeba pamiętać o tym, że możliwe jest utworzenie regionów o tych samych nazwach w różnych światach. WorldGuard wymaga jedynie, aby w danym świecie regiony posiadały unikalne nazwy, nie na całym serwerze. Niektórzy pewnie stwierdzą, że się czepiam, ale nietrudno wyobrazić sobie sytuację gdzie w wielu światach istnieją regiony identycznie nazwane "spawn" czy też "pvp". Mój sposób sprawdza jednocześnie nazwę regionu i świata, więc rozwiązujemy ten problem. Twój sposób również może to sprawdzać, ale należy wtedy sprawdzić dodatkowo w jakim świecie znajduje się gracz, co de facto sprowadza się do mojego sposobu. Mimo wszystko, nie pamiętałem o tym, więc dzięki kolego. W nagrodę masz pozytywną reakcję ode mnie . Pozdrawiam.
-
Zlecenie zostało wykonane.
-
Ten temat został przeniesiony.
-
Ten temat został przeniesiony.
-
Proszę więc spróbować z poniższym kodem. on right click: clicked block is tall grass player's tool is a block cancel event Pozdrawiam.
-
A to przepraszam, chyba doszło do nieporozumienia. Zrozumiałem na początku, że skrypt ma blokować przemianę trawy w ziemię po postawieniu na niej bloku. Czyli skrypt ma blokować stawianie bloków w miejsce wysokiej trawy, tak?
-
Proszę bardzo. Nie jestem pewien czy kod zadziała, ponieważ nie mam możliwości sprawdzenia czy opisane przez Pana zdarzenie zostanie przechwycone przez listener zdarzenia 'on form'. on form: former event-block is grass future event-block is dirt cancel event Jeżeli powyższy kod zawiedzie, proszę spróbować zamienić 'on form' na 'on physics'. Gdyby i to zawiodło, mam jeszcze pomysł, ale podzielę się nim dopiero po sprawdzeniu powyższego rozwiązania. Pozdrawiam.
-
Problem został rozwiązany.
-
Można to rozwiązać na kilka sposobów, ja podam dwa. Plugin TAB od NEZNAMY - konfiguracja pluginu jest bardzo bogata, przydaje się on również do tablist, scoreboardów, itp. Dodatek Skellett pozwala na tworzenie nametagów graczy. skUnity Docs | Documentation Jeżeli pojawią się pytania dotyczące tego jak użyć Skelletta, najprościej będzie wyszukać frazę "skript nametags", z pewnością coś wyskoczy. Opcjonalnie można do tego dorzucić słowo "skellett". Pozdrawiam.
-
Problem został rozwiązany.
-
Zlecenie zostało wykonane.
-
Skript sam w sobie nie pozwala na edycję permisji gracza. Jedyny dodatek modyfikujący permisje gracza jaki znam to SkQuery, choć nigdy nie byłem w stanie sprawić, aby zadziałała ona poprawnie. Być może jest to kwestia braku kompatybilności z LuckPerms, nie wiem. Dla niewtajemniczonych, LuckPerms to obecnie najpopularniejszy system zarządzania permisjami i grupami graczy. Grupy to grupy permisji, które można przypisać do graczy, swego rodzaju pakiet permisji. Nie rozumiem dlaczego pytanie zostało zadane w sekcji zleceń, ale najprościej będzie wykonać komendę z LuckPerms dodającą permisję graczom. Jest to leniwe, ale poprawne rozwiązanie. execute console command "lp [reszta komendy dodającej permisję]" Drugim, bardziej eleganckim, ale trudniejszym w implementacji rozwiązaniem będzie wykorzystanie LuckPerms API przy pomocy dodatku skript-reflect. Ten sposób wymaga wiedzy o Javie, ale pozwala na ładne wykorzystanie pluginu bez zbędnego wywoływania komend. Po więcej informacji odsyłam do wiki LuckPerms, które ma bogatą bazę wiedzy i szczegółowo objaśnia każdy aspekt pluginu. Pozdrawiam.
-
Ach tak, zapomniałem podmienić nazwy wstawionych opcji. Proszę zamienić w linijce 57. i 58. '{@fromWorld}' na '{@allRTP.fromWorld}', tak jak jest to widoczne w sekcji 'options'. Szczerze mówiąc, nie chce mi się już tego dodawać. Menu może Pan sobie tworzyć w dowolnym pluginie do tworzenia GUI, w którym można przypisać akcję wykonania komendy do danego slotu. Co do anulowania teleportacji przy poruszeniu się... cóż, będzie musiał się Pan bez niego obyć. Pozdrawiam.
-
Proszę zauważyć, że jeżeli argument typu 'text' nie jest ostatni to można go zapełnić jednym słowem, a jeżeli jest na końcu, wtedy ilość słów jaką może pomieścić, jest nieograniczona. Aby ograniczyć ilość słów w ostatnim argumencie typu 'text' do jednego, należy użyć wyrażenia 'split at' i sprawdzić ile elementów zwróci te wyrażenie. Najprościej będzie więc zapisać jego wynik do lokalnej listy zmiennych. Przykład poniżej. command /test <number> [<text="test">]: trigger: set {_arg2::*} to arg-2 split at " " if size of {_arg2::*} > 1: stop send "%arg-1% %arg-2%" to sender Łatwo zauważyć, że powyższy problem można sprowadzić do sprawdzenia czy drugi element listy istnieje i czy nie jest on tekstem postaci "". Co prawda podejrzewam, że Skript usuwa spacje na początkach i końcach argumentów, jednakże wymaga to sprawdzenia. # [...] set {_arg2::*} to arg-2 split at " " if: {_arg2::2} is set {_arg2::2} is not "" then: send "&6Argument nr 2 nie może składać się z więcej niż jednego słowa." to sender stop # [...] Pozdrawiam.
-
Zdecydowanie zbyt mało informacji. Jedyne co mogę powiedzieć to to, że skrypt nie mógł się przeładować poprawnie, ponieważ funkcje lokalne zostały dodane do Skripta w wersji 2.7. Mniejsza o to. Nadal nie wiem z czym tak właściwie ma Pan problem, ponieważ nie odpowiedział Pan na moje pytania. Jedyne co usłyszałem to to, że "nie działa" i Skript po przeładowaniu skryptu nie zwrócił jakichkolwiek błędów. Jeszcze raz proszę o odpowiedzi na wszystkie powyższe pytania. Jeżeli Pan nie ma motywacji aby jakkolwiek szczegółowo to opisać, ja również nie mam jej, aby pomóc. To działa w obie strony. Pozdrawiam.
-
Zlecenie zostało wykonane.
-
Tak jak napisałem, wystarczy wstawić wyrażenie objęte znakiem procentu do tekstu. Przykład z wykorzystaniem wyrażenia 'player' poniżej. send "&7Twoja nazwa to &a%player%&7." to player EDIT: Udostępniam przydatne źródła wiedzy o Skript'cie: dokumentacja Skript, wiki Skripta prowadzone przez te forum, całe forum skript.pl, szczególnie sekcje z poradnikami i promowanymi skryptami. Pozdrawiam.
-
No dobrze. Przykładowy kod implementujący opisany mechanizm mógłby wyglądać jak poniżej. Należy pamiętać o tym, że w Skript operujemy na ilości serc, nie ilości życia określanej poprzez ilość połówek serc. command /setmaxhearts [<integer = 10>]: trigger: set max health of all players to arg set {maxHealth::allPlayers} to arg send "&aMaksymalna ilość serc = &c%arg%" to sender on join: set player's max health to {maxHealth::allPlayers} Pozdrawiam.
-
Cóż, sposobów jest kilka. Niektórzy mogliby pomyśleć o tworzeniu hologramów "przyspawanych" do głowy gracza, inni skorzystaliby z gotowych rozwiązań. Ja postąpiłbym podobnie jak ta druga grupa, mianowicie użyłbym pluginu TAB od NEZNAMY, który pozwala na ustawianie 'abovename' graczom, które mogą przyjmować rozmaite placeholdery. Teraz pojawia się kwestia tego jak wyświetlić serduszka nad głową gracza jeżeli 'abovename' przyjmuje tylko tekst. Będąc szczerym, nie mam pojęcia jakie jest najlepsze rozwiązanie, ale podejrzewam, że twórcy serwera widocznego na zrzucie ekranu użyli w tym celu własnej paczki zasobów (resource pack), w którym jakieś trzy znaki (najlepiej takie w ogóle nieużywane) zostały podmienione na symbole serca pełnego, do połowy pełnego i pustego. Ten temat był już kilkukrotnie wałkowany na zagranicznych forach, zalecam poczytać i zapoznać się z tematem. Finalnie, możemy zarejestrować własny placeholder, który będzie zwracał napis stworzony z naszych serc (które, jak wcześniej wspomniałem, są jakimiś znakami zastąpionymi przez nie). Do tego przyda się dodatek skript-placeholders. Przykładowy kod może wyglądać jak poniżej: on placeholderapi placeholder request for prefix "status": identifier is "hearts" set result to buildHeartsString(player's health, player's max health) Funkcja buildHeartsString może wyglądać więc tak: local function buildHeartsString(hearts: number, maxHearts: number) :: text: set {_isHalfHeart} to true if floor({_hearts}) != {_hearts} set {_returnText} to "" set {_fullHeart} to "<znak pełnego serca>" set {_halfHeart} to "<znak do połowy pełnego serca>" set {_emptyHeart} to "<znak pustego serca>" loop floor({_hearts}) times: set {_returnText} to "%{_returnText}%%{_fullHeart}%" set {_returnText} to "%{_returnText}%%{_halfHeart}%" if {_isHalfHeart} is true loop ({_maxHearts} - ceil({_hearts})) times: set {_returnText} to "%{_returnText}%%{_emptyHeart}%" return {_returnText} Mając to wszystko, możemy użyć placeholderu %status_hearts% w pluginie TAB i powinien się nam ukazać pasek serduszek. Pozdrawiam.
-
Zauważyłem błąd po mojej stronie, mianowicie skrypt teleportuje nogi gracza w miejscu najwyżej znajdującego się bloku, a więc może on fizycznie przez niego spaść. Pewnie tu leży przyczyna problem z lodem. To pierwsze mogę spokojnie dodać. Rozumiem już również o co chodziło z Netherem i Kresem. O ile teleportacja do Kresu jest prosta, tak teleportacja do Netheru to tak właściwie teleportacja do wielkiej jaskini okazjonalnie wypełnionej lawą. Wymaga to więc sprawdzania całego słupa bloków, ale da się to zrobić. Obie zmiany dodam za jednym zamachem wraz z poprawką dotycząca przenikania przez blok, na którym gracz ma się pojawić. Proszę. Skrypt nie był testowany. Na górze skryptu dodałem bogatą sekcję konfiguracyjną. Myślę, że nazwy wszystkich opcji tłumaczą za co one odpowiadają. Proszę sobie zmienić nazwy światów, do których gracz ma być teleportowany, inaczej skrypt nie zadziała poprawnie. Komenda /rtp ma trzy możliwości działania: bez podania argumentu - teleportacja do świata normalRTP.toWorld, z podaniem argumentu "end" - teleportacja do świata endRTP.toWorld, z podaniem argumentu "nether" - teleportacja do świata netherRTP.toWorld. Jeszcze jedna uwaga co do godzin otwarcia światów - należy je ustawiać tak, aby godzina zamknięcia była przed północą. W razie jakichkolwiek problemów proszę dać znać. Pozdrawiam.
-
Jeżeli chodzi o limit serc, którego bezwzględnie nie można przekroczyć, odpowiedziałem na te pytanie wyżej. Jeżeli jednak pytanie dotyczy maksymalnej ilości serc wszystkich graczy, można to łatwo zrobić. Przykład poniżej. set max health of all players to 15 Oczywiście, powyższe ustawienie będzie dotyczyło jedynie graczy obecnych na serwerze w chwili wykonania instrukcji. Aby zmienić maksymalną ilość serc wszystkich graczy, można nasłuchiwać do zdarzenia 'on join' i w nim ustawiać maksymalną ilość serc gracza, który dołączył na serwer. Pozdrawiam.
-
Będzie działać, ale zapewne nie tak jak Pan by sobie tego zażyczył. Proszę zauważyć, że jedynie pierwsza wiadomość title będzie wysłana do wszystkich graczy. Następne trzy wiadomości zostaną wysłane tylko do gracza (ściślej mówiąc, wykonawcy komendy, bo nic nie powstrzyma konsoli przed wykonaniem jej), który wykonał komendę. Aby zezwolić jedynie graczom na wykonanie komendy, pomocna okaże się poniższa linijka, którą można dodać nad sekcją wyzwalacza (triggera). executable by: players Jeśli jednak taka była intencja przy pisaniu skryptu, aby tylko wiadomość title wyświetliła się wszystkim graczom, wszystko jest w porządku. Dodam, że pewnie chciał Pan, aby w miejscu frazy 'Nazwa_Gracza' pojawiła się nazwa gracza. W tym celu można użyć wyrażenia '%player%' lub '%player's name%'. Procenty są konieczne, aby Skript zrozumiał, że ma wstawić wartość tego wyrażenia do tekstu. Pozdrawiam.
-
Proszę bardzo. Skrypt nie był testowany. W sekcji 'options' możliwe jest ustawienie obszaru, do którego może być teleportowany gracz. Proszę to robić z głową, ponieważ jeżeli obszar będzie obejmował jedynie zbiornik wodny (lub w bardzo dużej części), pętla losująca koordynaty nigdy się nie zakończy, co doprowadzi do zatrzymania pracy serwera. Dodatkowo, w tej samej sekcji możliwe jest ustawienie nazwy świata, w którym gracz może użyć komendy /rtp (fromWorld) i nazwy świata, do którego gracz będzie teleportowany (toWorld). local function randomSafeLocation(minX: number, maxX: number, minZ: number, maxZ: number, w: world) :: location: set {_foundLocation} to false while {_foundLocation} is false: set {_x} to random integer between {_minX} and {_maxX} set {_y} to 0 set {_z} to random integer between {_minZ} and {_maxZ} set {_highestBlock} to highest block at location({_x}, {_y}, {_z}, {_w}) {_highestBlock} is not water or lava block above {_highestBlock} is not water or lava set {_foundLocation} to true return location of {_highestBlock} options: minX: -5000 maxX: 5000 minZ: -5000 maxZ: 5000 fromWorld: word toWorld: word1 command /rtp [<text>]: executable by: players trigger: if player isn't in world "{@fromWorld}": send "&6Możesz wykonać tę komendę jedynie w świecie &e{@fromWorld}&6." to player stop teleport player to randomSafeLocation({@minX}, {@maxX}, {@minZ}, {@maxZ}, world "{@toWorld}") send "&aZostałeś przeteleportowany do świata &b{@toWorld}&a." to player Mogę również dodać fragment z teleportacją do Netheru i Kresu, ale muszę mieć więcej informacji. W jaki sposób gracz może się do nich teleportować i w jakich godzinach? Pozdrawiam.
-
Ten temat został przeniesiony.
-
Problem został rozwiązany.
