• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!
  • Dies ist ein moderiertes Forum. Dein Beitrag ist für dich und andere erst sichtbar, wenn er von einem Teammitglied moderiert wurde! Wird dein Beitrag abgelehnt erhältst du eine Meldung. Bitte erstelle so lange keine neuen Beiträge! Die Freischaltung wird auch nicht durch Nachfragen bei einem Teammitglied beschleunigt.

Skript - Anfängertutorial

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
346
Minecraft
Malfrador
Mit diesem Thema möchte ich euch das Plugin Skript näherbringen. Skript ist ein Bukkit-/Spigot-Plugin, mit welchem es einem leicht und ohne Programmierkenntnisse möglich ist, seinen Server anzupassen und zu erweitern. Das Plugin bietet die Möglichkeit, seine Funktionalität mit AddOns zu erweitern und spätestens durch diese ist es möglich, alle Funktionen eines "echten Plugins" zu nutzen*.

Skripte (Dateiendung .sk) sind Textdateien, die du mit einem normalen Editor einfach bearbeiten kannst. Sie werden einfach im Ordner /plugins/Skript/scripts/ gespeichert und sind direkt von Skript benutzbar - mehr dazu unten.

Inhalt:
  1. Was brauche ich?
  2. Einführung
  3. "if" und "else" - das zweite Skript
  4. Ein Befehl, ein Befehl!
  5. Variablen
  6. (Loops) - Coming soon
  7. Weitere Infos/Dokumentation
*Je nach Umfang des Projektes ist es deutlich sinnvoller, ein normales Plugin zu nutzen. Grundsätzlich möglich ist aber durchaus fast alles.

Was brauche ich?
Skript (Minecraft 1.12+): https://github.com/SkriptLang/Skript/releases

(Empfohlen) Notepad++: https://notepad-plus-plus.org/download/v7.5.4.html
Einen Spigot/Paper-Server.
Grundlegende Kenntnisse der englischen Grammatik.
Skript-Systax (Dokumentation): https://skripthub.net/docs

Skript wurde von Njolbrim 2011 entwickelt. Leider hat er die Entwicklung für neuere Versionen 2014 eingestellt. Für alle Versionen ab 1.9 muss die oben verlinkte Version genutzt werden.

Ich empfehle sehr, Notepad++ als Editor zu benutzen. Es ist damit deutlich einfacher, die Übersicht zu behalten und die Skripte korrekt zu formatieren. Für fortgeschrittene Nutzer, die die Dokumentation oft nutzen & viele Addons nutzen, empfiehlt sich SkIDE (kostenlos, einfach nur auf "Download" klicken), das auch Features wie Autocomplete bietet, die von z.B. Eclipse oder Visual Studio bekannt sind.
 
Zuletzt bearbeitet:

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
346
Minecraft
Malfrador
Einführung
Code:
on place of stone:
  block below is grass
  message "Du hast das Gras getötet!" to player
Dies ist ein sehr einfaches Skript. Was sehen wir hier?
  • Zeile 1 ist, was passiert. Man nennt das ein Event. In diesem Fall wird ein Stein platziert.
  • Zeile 2 ist eine Bedingung. Was muss mit dem Stein passieren, damit der Skript weiterläuft? In unserem Skript: Der Block unter dem Stein muss Gras sein. Man nennt dies eine Condition.
  • Zeile 3 ist das, was passiert. Hier wird eine Nachricht (message) gesendet. An wen? Den Spieler, der das Event ausgelöst hat (to player). Die Nachricht muss immer in Anführungszeichen stehen (" "). Auch genannt Effect.
Das war es auch schon. Das schöne an Skript ist, das meist sehr einfach zu verstehen ist, was passiert.

Was nun? Der Skript, der dort oben nun so steht, bringt hier in einem Forum wenig. Um ihn auf dem Server zu nutzen, musst du noch etwas tun:
Erstelle im Ordner /plugins/scripts/ (dort sind einige Beispielskripte hinterlegt, wenn du das Plugin installierst) eine Datei. Nenne diese z.B. "totesGras.sk". Wichtig dabei ist, das das ".sk" die Dateiendung ist. Wenn du die Datei zum Beispiel mit FileZilla auf deinem Server anlegst, kannst du wenig falsch machen. Bei Windows musst du erst Dateiendungen aktivieren - hierbei hilft dir Google.

Kopiere mein Beispiel von oben nun in diese Datei und speichere sie. Nun nutze inGame den Befehl "/sk reload scripts". Dein Skript wird nun geladen und aktiviert. Solltest du Änderungen an ihm vornehmen, kannst du nur ein bestimmtes Skript mit zum Beispiel "/sk reload totesGras" neuladen.
 
Zuletzt bearbeitet:

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
346
Minecraft
Malfrador
"if" und "else" - Das zweite Skript
Nun, das war einfach. Nun wird es schwie... Nein, nicht wirklich.
Nehmen wir erst einmal ein anderes Beispiel:
Code:
on place of stone:
  if player has permission "steini.der.stein":
    stop trigger
  else:
    message "Du darfst Steini nicht aussetzen!" to player
    cancel event
Nun noch einmal die Analyse Zeile für Zeile:

  • In Zeile 1 finden wir wieder das Event. Es ist gleichgeblieben. Laaaangweilig, weiter.
  • Zeile 2 ist spannender. Warum? Weil zwei Buchstaben aufgetaucht sind. "if" (Deutsch: "wenn") . Auch der Spieler (player) kommt wieder vor. Im weiteren Teil wird abgefragt, ob der Spieler eine Permission (in " " zu setzen, ansonsten kann es so gut wie alles sein) hat. Der Doppelpunkt am Ende der Zeile bedeutet, das nur wenn diese Bedingung erfüllt ist, der Skript an dieser Stelle weitermacht. Ansonsten überspringt er die nächste Zeile.
  • Zeile 3 steht weiter rechts. Das liegt weniger daran, das sie die AfD gewählt hat, als daran das sie nur ausgeführt wird, wenn die Bedingung eine Zeile höher erfüllt ist, also der Spieler die Berechtigung hat. In diesem Fall stehen hier nur zwei Worte "stop trigger". Als Trigger bezeichnet man den gesamten Ablauf. Der Skript wird an dieser Stelle also aufhören.
  • Zeile 4 ist wieder weiter links. "else" bedeutet "ansonsten". Also eeentweder hat der Spieler die Permission. Ooooder eben nicht, dann wird dieser Teil des Skript ausgeführt.
  • Zeile 5 ist wieder eine Nachricht. Die kennen wir ja schon.
  • Zeile 6 ist ein wenig spannender. "cancel event". Dies bricht das Event ab, also das platzieren des Steins. Für den Spieler ist es so, als würde er beispielsweise in einer mit WorldGuard gesicherten Region platzieren - geht nicht.
Es ist zu empfehlen, so gut wie immer wenn eine Condition genutzt wird, "if" und "else" zu benutzen und dem Spieler zum Beispiel eine solche Fehlermeldung zu schicken. Dies steigert das Verständnis sehr - und weniger werden merken, das es sich um einen Skript und nicht um ein Plugin handelt, alles wirkt professioneller.

Man kann endlos viele "if" und "else" in seinem Skript nutzen. Es ist auch möglich, mehrere "if"s parallel zueinander nutzen. Dies wird besonders bei Befehlen später wichtig. Der Skript rutscht mit jedem "if" und "else", das hintereinander genutzt wird, immer weiter nach rechts, in Richtung AfD.
 
Zuletzt bearbeitet:

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
346
Minecraft
Malfrador
Ein Befehl, ein Befehl!
Nun kommen wir zum von vielen wohl meistgenutzten Teil von Skript. Das Befehls-Event.
Code:
command /bier [<player>]:
  permission: ich.bin.ganz.sicher.über.16
  aliases: /ichhabdurst, /ischhabdurscht, /besaufen
  trigger:
    if arg 1 is not set:
      give 10 wheat to the player
      message "Machs selber!" to the player
      stop trigger
    else:
      give 10 wheat to arg 1
      message "Machs selber!" to arg 1
      stop trigger

Diesmal keine Analyse Zeile pro Zeile.

Das Event sieht hier ein wenig anders aus. es fehlt das "on", das die meisten anderen Events besitzen. Hinter dem command (/bier) werden die Argumente, also das was man dort angeben kann (wie bei /warp zum Beispiel der Name des Warps), aufgeführt. Argumente, die benötigt werden, sind in < > Zeichen eingefasst, also z.B. "<player>". Wenn sie optional sein sollen, also der Befehl auch ohne Argumente funktioniert, nimmt man eckige Klammern hinzu: "[<player>]"

"aliases": Sind Alternativen für den Befehl. So kann man "/besaufen FollTollerYouTubah" genauso nutzen wie "/bier FollTollerYouTubah". Oder nur "/bier", wenn man selber FollTollerYouTubah ist.

arg 1 ist Argument 1, also das erste Argument. Dieser Befehl besitzt nur eines.
Interessant wird es noch in der letzten Zeile. Eine Nachricht kann nicht nur zu dem Spieler gesendet werden, der den Befehl nutzt, sondern auch zu anderen. arg 1 ist hier der Spieler, den man im Befehl angibt - "FollTollerYouTubah".
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
346
Minecraft
Malfrador
Weitere Infos / Dokumentation:
Alle Events, Conditions und weiteres findest du auf http://skunity.com/.
Dies schließt aber alle Addons mit ein, man sieht aber gut was mit Skript alles möglich ist. Zu vielen Einträgen gibt es Beispiele, so das man leicht versteht wie man das jeweilige Event/Condition/Effect nutzt.

Der Vollständigkeit halber: http://njol.ch/projects/skript/doc/ ist die originale Dokumentation. Sie ist aber teils veraltet, ich würde immer die skUnity nutzen.

Tabulatoren (Die Taste über Capslock, unter "^", die genau den Abstand erzeugt, den man zum Beispiel bei "if" und "else" braucht) können genutzt werden. Tabulatoren und Leerzeichen (vier an der Zahl für den gleichen Abstand) können aber nicht durcheinander im selben Skript genutzt werden! Immer darauf achten, wenn man irgendwo Teile eines Skripts in sein eigenes kopiert!

Skript gibt bei einem Reload eines Skripts Fehlermeldungen (Mit Zeilenangabe, "in line: 123") aus, die gut verständlich sind. Achte darauf, das in deinem fertigen Skript keine mehr vorkommen.
 
Zuletzt bearbeitet:

tobimori

Minecrafter
Registriert
13 Dezember 2014
Beiträge
8
Diamanten
200
Minecraft
UnscriptedCode
Für alle 1.8 Nutzer würde ich die Version von Mirreducki empfehlen. Diese enthält viele Bugfixes für 1.8 Nutzer. 1.7 Nutzer sollten trotzdem die 2.1.2 verwenden. Außerdem solltet ihr euch für Versionen ab 1.8 eine neue Aliases Datei herunterladen, da diese nur bis zur 1.7 geht. Ich empfehle diese hier.
 

Toni5422

Schafhirte
Registriert
14 Februar 2018
Beiträge
136
Diamanten
271
Minecraft
Tonersen
Paar kleine unnötige Sachen dabei und man könnte manche Sachen ein wenig professioneller schreiben, sonst aber ganz in Ordnung.

Liebe Grüße
Toni
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
346
Minecraft
Malfrador

Toni5422

Schafhirte
Registriert
14 Februar 2018
Beiträge
136
Diamanten
271
Minecraft
Tonersen
Variablen
Mit Erlaubnis des Themenerstellers schreibe ich hier mal das nächste Thema. Hier geht es um Variablen. Variablen werden alle in { } diesen Klammern geschrieben. In Skript unterscheiden wir drei verschiedene Typen von Variablen:

1. "normalen" Variablen
"Normale" Variablen sind, wie der Name schon sagt, nichts besonderes. Sie speichern einen Wert und dieser kann beliebig weiter verwendet haben. Dieser Typ von Variablen wird am meisten genutzt.
Beispiel:
Wir möchten, dass unser Skript jeden abgebauten Block mitzählt und uns im Chat anzeigt, bei dem wievielten wir sind.
Code:
on break:
    add 1 to {minedblocks.%player%}
    message "Du hast %{minedblocks.%player%}% Blöcke abgebaut"

Gehen wir den Code mal Stück für Stück durch:
Zeile 1: Hier nutzen wir das "on break" Event, ergo "Wenn etwas abgebaut wird"
Zeile 2: Hier sind wir schon bei unser ersten Variable. Das "add 1 to" sagt schlicht und ergreifend, dass wir 1 zu unsrer Variable aufaddieren. Das "minedblocks" beschreibt nur unsere Variable, sodass wirspäter immernoch wissen, für was die da ist. Wir können die auch einfach "x" oder "Bimbo" nennen, jedoch bringt das nur Verwirrung mitsich. Der Punkt ist nur ein Trennzeichen; das ist vorallem bei komplexeren Skripts hilfreich, da wir da manche Variablen genauer bennen müssen (Beispiel: {minedblocks.stone.%player%}). Zum Schluss haben wir noch das "%player% da stehen, das gibt an, dass jeder Spieler "seine eigene" Variable hat, also das die Blöcke bei jeden einzeln gezählt werden. Wichtig ist nur, das wir das "player" zwischen zwei "%" Zeichen setzen. (Anmerkung: Bei anderen Beispielen kann da auch "%arg-1%" etc. hinkommen, jedoch nicht hier im Beispiel).
Zeile 3: Hier geben wir noch unsere Variable in einer Chat-Nachrichten an den jeweiligen Spieler aus. Variablen gibt man ganz stumpf aus, indem man einfach die Variable zwischen zwei % setzt.

2. lokale Variablen
Lokale Variablen sind durch einen Unterstrick gekennzeichnet (Beispiel: {_player}). Das besondere an diesen Variablen ist, dass die mehrfach verschieden in einem Skript genutzt werden können, da dasie an das Event gebunden sind und da eben nur lokal vorkommen. (Normale Variablen sind können nur einmal existieren und nicht doppelt verwendet werden, auch wenn es sich um unterschiedliche Events handelt!!!).
Das besondere an lokalen Variablen ist, dass diese gelöscht werden, wenn sie nicht mehr benötigt werden (Der Wert der Variable). (Achtung: Bei Server neu- und restart wird der Wert der Variablen auch gelöscht).
Beispiel:
Wir möchten, dass unser Skript jedes mal eine Nachricht sendet, wenn jemand den Server betritt
Code:
on join:
    set join message to ""
    set {_player} to player
    broadcast  "[+] %{_player}%"

Zeile 1: Hier nutzen wir das "on join" Event, ergo "Wenn jemand den Server betritt"
Zeile 2: Hier setzen wir die Nachricht die normalerweiße beim Betreten des Servers kommt zu nichts.
Zeile 3: Hier weisen wir der lokalen Variable {_player} den zu letzt beigetretenen Spieler zu.
Zeile 4: Hier geben wir die Variable als Rundruf wieder aus.

3. Optionen
Optionen sind keine richtigen Variablen, jedoch kann man die hier mit ganz gut einordnen.
Optionen können überall im Skript verwendet werden, denn es wird eins-zu-eins deren Wert eingesetzt. Optionen müssen vorher festgelegt werden:
Code:
options:
    System: Server

Das Wort links vom Doppelpunkt ist der Name unser Variable und das Wort rechts (kann auch eine Zahl etc. sein) ist der Wert.
Das besondere an Optionen ist, dass man diese auch über eine config.yml Datei festlegen kann.
Optionen sind vor allem für einen sich immer wiederholenden Text geeignet, sodass man nicht den Text selbst immer wieder neu mit Farbcodes schreiben muss. Zudem sind Änderungen so sehr einfach und weniger fehleranfällig.
Beispiel:
Unser Plugin soll jedes mal, wenn ein Spieler eine gewisse Anzahl an Kills hat ohne dazwischen zu sterben (Killstreak) eine Nachricht an alle Spieler senden.
Code:
options:
    System: &7[&5Server&7]
on death:
    set {killstreak.%victim%} to 0
    add 1 to {deaths.%victim%}
    add 1 to {kills.%attacker%}
    add 1 to {killstreak.%attacker%}
    if {killstreak.%attacker%} is 5:
        broadcast "{@System} %attacker% hat eine Killstreak von 5!"
    if {killstreak.%attacker%} is 10:
        broadcast "{@System} %attacker% hat eine Killstreak von 10!"

Zeile 1: Hier kommen unsere ganzen Optionen hin.
Zeile 2: Hier weisen wir der Option namens "System" einen Wert zu (und ersellen die Variable {@System})
Zeile 3: Hier nutzen wir das "on death" - Event, ergo "Wenn jemand stirbt"
Zeile 4: Die Variable {killstreak.%victim%} wird auf 0 gesetzt. (Also die von dem gestorbenen Spieler).
Zeile 5: Wir addieren 1 auf die Todes-Variable des Opfers.
Zeile 6: Wir addieren hier 1 zu den Kilss des Angreifers.
Zeile 7: Wir addieren 1 zu der Variable {killstreak.%attacker%}.
Zeile 8: Hier machen wir eine If-Abfrage, wenn die Variable {killstreak.%attacker%} gleich 5 ist
Zeile 9: Wenn die Bedingung für die If-Abfrage aus Zeile 8 erfüllt ist, dann wird ein Rundruf gesendet mit den Text "&7[&5Server&7] %attacker% hat eine Killstreak von 5!"

Die anderen beiden Zeilen sind dann denke ich selbst erklären.


Nachwort
Hier findet ihr Hilfe:
https://discord.gg/2B5Hve7
 
Zuletzt bearbeitet:
Oben