1. Wpisz w gogle sys req 2. Wejdz w pierwszy link. 3. Wyszukaj Portal 2 w liscie. 4. Kliknij "can you run it". 5. Wybierasz punkt "Automatic Detection".
every 6 seconds: loop all players: loop-player is in "nazwa twojego świata": set {_msg} to "&c&lMy&f&lLobby" loop 20 times: add 1 to {sczas} display board named "&c%{online}%" to loop-player make score "%{_msg}%" in board of loop-player to 60 make score "&aBlitzSg" in board of loop-player to 5 make score "&aOitc" in board of loop-player to 4 move display of loop-player to sidebar set {_msg} to " %{_msg}%" wait 0.3 second
Poznaj historię krainy Eos... “Życie tutaj nie zawsze było takie ponure. Dawniej nasza kraina tętniła życiem... lasy były bardziej zielone, w wodach pływały stada wielkich ryb, a mieszkańcy cieszyli się życiem... aż do tego felernego dnia... Do Meadland przybyła wróżbitka. Wśród ludności rozbrzmiewały plotki o jej nieomylności. Gdy wiadomość o przybyciu wyroczni trafiły do króla, postanowił wybrać się do niej i zapytać ją o dalsze losy królestwa. Ona wręczyła mu talizman..."
...stań się jej częścią... “...od tego czasu umysł Tenebrisa ogarniał mrok. Nie widzał krzywdy, którą wyrządzał swoim poddanym.... Opętany władca wyruszył w podróż, podczas której stracił dwustu najlepszych wojów zasilając tym samym martwe oddziały Shadow of Graves, w zamian za kryształ, który niegdyś wspaniałego władcę zmienił w bestię. Od tego momentu talizman dzierżony przez króla zdobił nie jeden, a dwa kamienie. Mrok całkowicie zawładnął jego umysłem. Władca, któremu ślubowaliśmy posłuszność odszedł..."
...rozpocznij przygodę jako niezdarny Poszukiwacz Przygód... "...dla każdego początki są trudne. Wyglądasz mi jednak na takiego, który nie podda się bez walki... Mam rację?..."
...wybierz profesję... "...musimy nauczyć Cię czegoś konkretnego, nie możesz przecież machać drewnianym mieczem do końca życia!..."
...Czarodzieja... "...wielu przed Tobą próbowało zgłębić tajniki magii, nie wielu jednak zdołało. Widzę w Tobie jednak coś, dzięki czemu może Ci się to udać..."
...Wojownika... "...dzierżenie miecza jest odpowiedzialnością. Broń służy do obrony niewinnych, nie zabijania ich. Musisz to zapamiętać... jedyną mocą wojownika jest jego dobro..."
...lub Strzelca... "...każdy strzelec musi być zwinny i szybki... im szybciej pokonasz wroga tym lepiej..."
...zdobywaj specjalizacje... "...w różnych częściach naszej krainy napotkasz na swojej drodze mistyczne kamienie. Dawniej Wielcy Bohaterowie zamieniali swe dusze w kamień, aby szukać godnych sobie następców. Jeżeli jeden z Wielkich zobaczy w Tobie to, co ja ujrzałem, jestem pewny, że pozwoli Ci okiełznać swą potęgę..."
...zwiedzaj krainy... "...u wybrzeży Meadland zacumował statek. Ludzie na nim mówią, że przybyli z Calidus Island i że szukają bohatera... To Twój czas, biegnij!..."
...i zapisz się na kartach historii jako największy Bohater! "...ludzie boją się o życie swoje i swoich bliskich. Radość zmieniła się w strach, łzy szczęścia w łzy rozpaczy... Potrzebujemy kogoś o czystym sercu i rozumie... potrzebujemy kogoś, kto nie będzie bał stanąć oko w oko z mrocznymi mocami kryjącymi się pośród drzew... potrzbujemy kogoś takiego jak Ty..."
Cześć. Istnieje mało serwerów rpg, a jaśli istnieją to słabe lub mało urozmaicone. Jak wiecie lub nie prawie w każdej grze RPG jest mana. Teraz podam najkrótszy skrypt jaki mi się udało zrobić.
Początek: on xp spawn: cancel event Ta linijka jest potrzebna jesli nasza mana ma być nie do zdobycia z moba. Rozwiniecie: every 2 second: loop all players: if level of loop-player is greater than 0: stop else: chance of 100%: drop 1 xp at location of loop-player chance of 10%: drop 2 xp at location of loop-player Co 2 sekundy ... Zapetla wszystkich graczy Jesli poziom (Xp) gracza jest wiekszy niż 0 czyli 1 ... Zatrzymaj Natomiast Szansa 100% na Przyzwij 1 xp w miejscu gdzie stoi gracz (Nie wymagane) Szansa 10% na Przyzwij 2 xp w miejscu gdzie stoi gracz To na tyle. Wiem poradnik krótki ale to jest mój pierwszy tut. Niedługo dodam więcej!
Witam,
Jako że większość "świeżych" skrypterów ma często problemy ze skryptami, wynikające z niezrozumienia błędów, postanowiłem napisać ten poradnik, aby łatwiej było wam zrozumieć jakie błędy popełniliście oraz jak łatwo je naprawić
1. Gdzie jest błąd?
Często największym problemem w wykryciu błędu potrafi być sam fakt, że egzystuje, a zaraz po nim - miejsce, w którym się znajduje. Pomocna przy tym jest opcja przeładowania(/sk reload nazwa/all). Po jej użyciu wyświetli nam się informacja czy skrypt ma błędy czy nie.
a) Zlokalizuj błąd
Najważniejsza jest lokalizacja błędu, co zrobi za nas komenda /sk reload. Po przeładowaniu skryptu używając nazwy, musimy sprawdzić w której linijce znajduje się błąd. W tym celu czytamy nasz błąd aż do momentu
line: <jakaś liczba>
To właśnie linijka, w której znajduje się nasz błąd. Teraz w skrypcie musimy ją tylko znaleźć i zastosować się do poniższych punktów.
To samo w wypadku komendy
/sk reload all
z tym, że musimy również przeczytać nazwę pliku - również mieści się w opisie błędu i zakończona jest
.sk
Nie będzie więc problemu z jej znalezieniem
b) Upewnij się, że poprawnie wpisałeś polecenie
Wiele błędów wynika z błędnego wpisania polecenia. Najczęściej jest to literówka, ale często też błędna interpretacja dokumentacji (z której notabene należy korzystać; jeśli jesteście prawie pewni składni, to wpiszcie jej fragment do wyszukiwarki, a na pewno znajdziecie poprawną wersję). Jedne z częstszych błędów:
[on] (step|walk)[ing] (on|over) %*item types%
Jak widzimy mamy wyraźnie zaznaczone rzeczy obowiązkowe i/lub opcjonalne.
Rzecz obowiązkowa znajduje się w nawiasie okrągłym - "()", gdy można jej użyć na różne sposoby lub w ogóle nie nie jest objęta nawiasem. Rzecz opcjonalna to tekst w kwadratowym nawiasie(tu: [on], [ing], etc.). Warto również pamiętać, że znaku "%" używamy tylko w tekście. Nigdy nie używamy więc ich w poleceniach. Należy również wspomnieć o pewnej zależności - jeśli coś jest obowiązkowe, to pominięcie zawsze wyrzuci nam błąd. Nie ważne, że reszta polecenia jest poprawna...
Powyższy wyciąg z dokumentacji możemy rozbić na kilka sposobów działających tak samo!
on step over dirt:
on step on dirt:
on steping on dirt:
on steping over dirt:
step over dirt:
step on dirt:
steping over dirt:
steping on dirt:
on walk over dirt:
on walk on dirt:
on walking on dirt:
on walking over dirt:
walk over dirt:
walk on dirt:
walking over dirt:
walking on dirt:
błędne sposoby:
on walking:
on steping:
on walking on %dirt%:
on steping over %dirt%:
c) Upewnij się, że nie jest to wina braku dodatku
Ludzie często popełniają błędy używając poleceń znajdujących się w dodatkach do Skript takich jak WildSkript czy SkQuery. Musimy mieć 100% pewność, że owe dodatki są zainstalowane i w pełni działają. Pomocna jest tutaj komenda
/plugins
pokazująca nam pełną listę wtyczek. Gdy wtyczka jest wyłączona, jej nazwa wyświetla się na czerwono, dzięki czemu możemy stwierdzić, czy nasz dodatek "chodzi".
Przydatne informacje:
Do wyrażenia
money
potrzebny jest Vault. Bez niego pojawią się błędy!
Wydarzenia
on region enter/leave
wymagają regionów np. z WorldGuard. Nie współpracują z regionami innymi niż te z listy pod owym wydarzeniem w dokumentacji!
d) Jeśli nic nie pomaga, przeinstaluj pliki
Częstym problemem jest niedziałający Skript lub jego dodatek, lub niezgodne wersje serwera z wtyczkami, które na nim są. Np. błędna wersja Skript/WildSkript/Vault/SkQuery/etc. Dla starszych wersji trzeba trochę szperać za zgodnymi wtyczkami (np. WS 1.7, Skript 2.1.2, Bukkit pod 1.7.10); nowsze są załatwione za nas - wystarczy sprawdzić na Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! pod jaki build Skripta utworzony został dodatek.
2. Odstępy
Może wiecznie zastanawiasz się, czemu ludzie piszą ci "Tylko sobie wytabuj", "Musisz tylko wytabować" itd. Bardzo częstym błędem skryptów, spowodowanym niedopatrzeniem jest "błąd wcięć". W konsoli/po przeładowaniu skryptu pierwszymi słowami, które go opisują są
Indentation error
Jednym z błędów, który często wynika z błędnego 'wytabowania' jest również
Empty configuration section
Mamy również informacje o tym, czego Skript "oczekuje", a co napotkał:
expected <ilość> <typ wcięcia> but found <ilość> <typ wcięcia>
np.
expected 1 tab but found 4 spaces
Oznacza to, że 4 spacje powinniśmy zamienić na jeden tab.
Warto pamiętać o tym, że wcięcia muszą się zgadzać tylko w danej sekcji, tj. pod jednym wydarzeniem wcięcia muszą być równe po każdym dwukropku.
Nic nie stoi na przeszkodzie, aby pod różnymi wydarzeniami były inne odstępy
Musimy też wiedzieć, że dwukropek rozpoczyna nową sekcję konfiguracyjną (ale nie pełną sekcję). Oznacza to, że po dwukropku odstępy są obowiązkowe. Jeżeli go nie użyjemy, to efekt wpisujemy linijkę pod nim, ale musimy pamiętać, że jeżeli go wstawimy, to bez dodatkowego odstępu się nie obejdzie.
---->Bledne
wydarzenie:
warunek:
warunek:
efekt
---->Prawidlowe
wydarzenie:
warunek:
warunek
efekt
Należy nadmienić, że powyższy błędny kod nie jest błędny per se. Tak długo jak odstępy są identyczne, puste sekcje konfiguracyjne mogą istnieć i nie powodować większych problemów. Efekt będzie wywołany bezpośrednio po wydarzeniu, bez uprzedniego sprawdzenia warunków - to zaś mija się z celem generowania warunków. Warto o tym pamiętać.
3. Co dwa znaki to nie jeden! Ale liczy się też pole do popisu!
W Skripcie istnieją trzy znaki specjalne, które są używane bardzo często i bardzo łatwo jest spowodować błąd, gdy je zapisujemy. Są to cudzysłów ("), klamry "{}" i procent "%", a także znak ":" przy tworzeniu list zmiennych. Owe znaki zawsze muszą mieć parę, ponadto muszą zostać użyte we właściwym miejscu. Błędy z cudzysłowem poprzedzone są
Invalid use of quotes
błędy z klamrą najczęściej są opisywane niemożliwością zrozumienia wyrażenia
Can't understand expression
Użycie "%" w wydarzeniu/efekcie spowoduje błąd
Can't understand this condition/effect
natomiast nieodpowiednie oprocentowanie w cudzysłowie wywali:
The percent sign is used for expressions (e.g. %player%). To insert a '%' type it twice: %%
Przykłady:
send "%{maslo::*}% to player
Błędne, bo brakuje cudzysłowa zamykającego 1 spację przed słowem "to"
send "%{maslo::*%" to player
Błędne, bo brakuje klamry zamykającej zmienną
send "%{maslo::*}" to player
Błędne, bo brakuje "%" potrzebnego do odczytania zmiennej
send "%{maslo:*}% to player
Błędne, bo w zmiennej występuje tylko jeden ":"
send "%{maslo::*}%" to player
100% poprawny zapis
4. Co ja robię tu?
Bardzo częstym błędem są braki danego wyrażenia/typu/obiektu w warunku/efekcie którego użyliśmy. jest to m. in. używanie
player
w wydarzeniach okresowych takich jak pętla
every %timespan% [in %world%]
gdzie najpierw graczy musimy zapętlić,
loop all players [in %world%]
a potem odwołać się do zapętlonego gracza
loop-player
lub w innych wydarzeniach, w których gracza nie ma (lub występuje pod inną postacią). Np.
command /mleko:
executable by: console
trigger:
send "maslo" to player
on spawn of zombie:
send "Obok ciebie zespawnowal sie zombie!" to player
every 3 seconds:
send "debug!" to player
on damage:
set {attacked::%player%} to true
Oczywiście tyczy to również bloków jak i innych bytów (zarówno zombie jak i ramka muszą być zapętlone w wydarzeniu, w którym chcemy ich użyć, gdy same w nim nie występują). Jest to bardzo ważne. Charakterystyczne błędy powiedzą nam:
There's no <tu wyrażenie, którego użyliśmy> in <typ wydarzenia> event[s]
lub w rozszerzonej formie
There's no <tu wyrażenie, którego użyliśmy> in <typ wydarzenia> event[s] if no <typ wyrażenia> is given in the event (e.g. like 'przykład wydarzenia z dodatkowym typem')
np.
There's no player in periodic events
There's no world in periodic event if no world is given in the event (e.g. like 'every hour in "world"')
oraz
Use 'coś', 'coś', ..., and/or 'coś' in <typ wydarzenia> events
np.
use 'victim' and/or 'attacker' in damage events
Szczególnym przypadkiem tego błędu, jest błąd występujący w pętlach:
There's no loop that matches 'loop-<typ>'
np.
There's no loop-that matches 'loop-player'
wystąpi on na przykład w tym kodzie:
loop {zmienna::*}:
loop-player is sneaking:
...
Łatwo go naprawić; wystarczy pamiętać, jakie wartości są charakterystyczne dla pętli:
loop {zmienna::*}:
send "%{zmienna::%loop-index%}% to %loop-value%"
send "%loop-index% to wartość porządkowa (najczęściej numer)"
loop blocks in radius 5 of {_loc}:
send "%loop-block% to zapętlony blok!"
loop players in radius 5 of {_g}:
send "%loop-player% to zapętlony gracz"
loop zombies where [zombie input is named "Kappa"]:
send "%loop-zombie% to %loop-entity%, a to z kolei jest zapętlony zombiak!"
loop 5 times:
send "%loop-number% to raz, który już wykonywana jest pętla; najpierw będzie 1, potem 2 i tak aż do numeru w definicji pętli"
Prawie ostatnim już błędem (który ponadto mówi jak się rozwiązać) jest błąd:
There are multiple loops that match 'loop-<typ>'
np.
There are multiple loops that match 'loop-player'
Wystarczy to załatwić, poprzez numerowanie, zależnie od pętli, którą chcemy:
loop all players: #PĘTLA NR 1
loop-player's helmet slot is leather cap named "&aCzapka niewidka": #Tu nie musimy numerować, bo narazie jest jedna pętla
loop players in radius 10 of loop-player: #PĘTLA NR 2
loop-player-2 doesn't have permission "niewidka.zobacz": #Sprawdza graczy z pętli nr 2
hide loop-player-1 from loop-player-2 #Ukrywa gracza z pętli nr 1 przed graczami z pętli nr 2
Przedostatni już błąd na tej liście, to linijka wyjęta z kontekstu - nie występuje pod żadną sekcją ani wydarzeniem
invalid line - all code has to be put into triggers
"Last stander" punktu czwartego to
'else' has to be placed just after an 'if' or 'else if' section
charakterystyczny, jeżeli, tak jak w treści, else wstawiamy po warunku, który nie jest ani "ifem", ani "else ifem"...
5. Konflikty występują nawet w tekstach, czyli sprzeczka pobratymców.
Bardzo często dostajemy informację
Possible name conflict of variables
Później informacja jakie to zmienne. Skąd to się bierze? Technicznie nie jest to błąd, ale informacja ostrzegawcza, że gdzieś może coś się zepsuć (nie jest to błąd techniczny, ale może być błędem praktycznym). Załóżmy, że ktoś tworzy mini grę o nazwie BigBubblesAttack, zmienną zapisuje w ten sposób:
on join:
set {bigBubblesAttack::%player%} to true
No i wszystko spoko. Do czasu, bo gdy ta sama osoba robi np. zmienną grupową dotyczącą rozpoczęcia gry i nazywa ją tak:
command /start:
trigger:
set {bigBubblesAttack::rozpoczeto} to true
to całość może się sypnąć przed wpisaniem komendy. Jak? Wystarczy, że zanim jakaś osoba wpisze /start, na serwer wejdzie gracz o nicku "rozpoczeto". Dlatego najprostszym sposobem są dodatkowe dopiski w komendach.
Zamiast
{bigBubblesAttack::%player%}
użyj
{bigBubblesAttack::lista::%player%}
A zamiast
{bigBubblesAttack::rozpoczeto}
użyj
{bigBubblesAttack::status::rozpoczeto}
i konflikt zmiennych zażegnany!
6. Porównanie to ważny środek artystyczny
Równie popularnym co poprzednicy błędem jest
can't compare <typ> with <częśc kodu>
czasem rozszerzone o powód
can't compare <typ> with <częśc kodu> because the latter is not an object
"Compare", to z angielskiego "porównywać"; skrypt nie widzi danego typu w zastosowanej składni, np.
can't compare player with "Edward"
Wynika to z różnicy w typach; w dokumentacji zauważamy, że warunki, wydarzenia i efekty mają ściśle określoną składnie (dodatkowy powód oznacza, że to czego użyliśmy nie pasuje do żadnej składni, którą kojarzą Skript lub dodatki). Nie możemy od tak sobie zamienić ich kolejnością. Tam, gdzie jest
%player%
musimy użyć gracza; tam gzie jest
%world%
użyć świata itd. Bardzo często wystarczy użyć parse'a na stringu: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!
05.07.2017 Poradnik edytowany; poprawione błędy w stylu, dodana miniaturka poradnika wykonana przez @Norbi oraz dodano punkt 6. 29.12.2019 Poradnik edytowany; poprawione błędy w stylu, wprowadzone drobne poprawki merytoryczne, usunięto powtarzające się fragmenty
Cześć!
Wpadłem na pomysł by napisać skrypt na niesamowite moce. I takowy powstał.
Komendy:
/ap pomoc - Pomoc do skryptu.
/ap lista - Pokazuje liste zestawów mocy.
/ap wybierz - Włącza daną moc.
/ap wylacz - Wyłącza moc.
/ap autor - Wyświetla autora skryptu.
Możliwosci:
- Wybór zestawu mocy.
Bugi:
- Nie znalazłem żadnego buga. Jeśli jakiś znajdziecie pisze.
W przyszłosci:
+ Możliwość robienia własnych zestawów mocy.
+ Możliwość robienia mocy nie tylko przez efekty.
Skrypt:
Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!
Dodano:
+ Możliwość wyłączania wszystkich mocy 1 komendą!
+ Moc FireMan dostała skill. Po klinięciu PPM na ziemie wszystie moby w obrębie 5 kratek zostaną podpaleni.
Autor:
filipuer12
Tester:
Saw
Jestem w trakcie dodawania mocy.
Propozyjce na moce składajcie w komętarzach.
Cześć!
Wpadłem na pomysł by napisać skrypt na niesamowite moce. I takowy powstał.
Komendy:
/ap pomoc - Pomoc do skryptu.
/ap lista - Pokazuje liste zestawów mocy.
/ap wybierz - Włącza daną moc.
/ap wylacz - Wyłącza moc.
/ap autor - Wyświetla autora skryptu.
Możliwosci:
- Wybór zestawu mocy.
Bugi:
- Nie znalazłem żadnego buga. Jeśli jakiś znajdziecie pisze.
W przyszłosci:
+ Możliwość robienia własnych zestawów mocy.
+ Możliwość robienia mocy nie tylko przez efekty.
Skrypt:
Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!
Dodano:
+ Możliwość wyłączania wszystkich mocy 1 komendą!
+ Moc FireMan dostała skill. Po klinięciu PPM na ziemie wszystie moby w obrębie 5 kratek zostaną podpaleni.
Autor:
filipuer12
Tester:
Saw
Jestem w trakcie dodawania mocy.
Propozyjce na moce składajcie w komętarzach.