Informationen
Bibliothek
Spielwelt
Medien
Account

Skripte im Client und roter Bildschirmrand

Verfasst von Vasilas am 15.10.2026 00:24

Neu im Client: Skripte und roter Bildschirmrand

Mit dem heutigen Client-Update bekommt Schattenwelt zwei Neuerungen: Skripte, mit denen ihr wiederkehrende Abläufe im Spiel automatisieren könnt, und einen roten Bildschirmrand, der euch zeigt, wie schwer ihr verletzt seid. Hier steht ausführlich, wie beides funktioniert.

Startet das Spiel wie immer über den Launcher, dann ist der neue Client automatisch dabei.

Teil 1: Skripte

Was ist ein Skript?
Ein Skript ist eine kleine Textdatei mit Anweisungen, die der Client für euch ausführt. Zum Beispiel: "Wenn mein Leben unter 60 % fällt, benutze eine Bandage auf mich selbst." Oder: "Stelle 50 Mal hintereinander dasselbe Werkzeug her." Skripte sind in Python geschrieben, einer verbreiteten und gut lesbaren Programmiersprache. Ihr müsst aber nicht programmieren können: Die Aufnahme schreibt Skripte für euch, und in der Bibliothek liegen fertige Skripte anderer Spieler.

Die Regeln
Skripte sollen euch lästige Klickarbeit abnehmen, aber keinen unfairen Vorteil verschaffen. Deshalb gelten für jedes Skript feste Regeln, die im Client eingebaut sind und sich nicht abschalten lassen:
    • Höchstens eine Aktion pro Sekunde, über alle laufenden Skripte zusammen. Aktionen sind Benutzen, Bewegen von Gegenständen, Anziehen, Zaubern, Skills, Angriff, Zielen, Sprechen und Antworten auf Server-Fenster.
    • Keine Eingabe seit 10 Minuten: Dann pausieren alle Skripte, bis ihr wieder Maus oder Tastatur benutzt. Unbeaufsichtigtes Makro-Farmen über Stunden ist damit nicht möglich.
    • Andere Spieler: Skripte dürfen andere Spieler nicht angreifen und nicht feindlich anvisieren.
    • Kein Zugriff auf eure Dateien, das Internet oder andere Programme. Ein Skript kann nur im Spiel handeln.
    • Der Server sieht, wie viele Skripte bei euch laufen.
    • Bis zu 15 Skripte können gleichzeitig laufen.
Darüber hinaus gelten natürlich die normalen Serverregeln. Was ohne Skript verboten ist, ist auch mit Skript verboten.

Das Skript-Fenster
Gebt im Spiel .script ein. Es öffnet sich das Fenster "Skripte".
Oben findet ihr diese Knöpfe:
    • Ordner öffnen: öffnet den Ordner Scripts neben eurem Client. Dort liegen eure Skripte als Dateien mit der Endung .py.
    • Neu einlesen: liest den Ordner neu ein, nachdem ihr eine Datei hinzugefügt oder umbenannt habt.
    • Alle stoppen: beendet alle laufenden Skripte sofort.
    • Aufnahme starten / Aufnahme beenden: schreibt eure Aktionen als neues Skript mit (siehe unten).
    • Bibliothek (SWPedia): zeigt die Skripte, die andere Spieler in der SWPedia geteilt haben (siehe unten).
Darunter steht jedes Skript aus eurem Ordner in einer eigenen Zeile. Laufende Skripte sind farbig markiert. In jeder Zeile gibt es drei Knöpfe:
    • Start / Stopp: startet das Skript oder hält es an.
    • Taste: legt das Skript auf eine Taste (siehe unten).
    • Auto: schaltet um zwischen aus, Char (startet automatisch, wenn sich dieser Charakter einloggt) und alle (startet bei jedem eurer Charaktere auf diesem Rechner).
Was ein Skript mit print(...) ausgibt, erscheint im Journal mit dem Skriptnamen davor. Fehler erscheinen rot im Journal, mit der Zeile, in der das Problem liegt.

Ohne Fenster geht es auch über Befehle:
    • .script name startet das Skript "name.py" oder stoppt es, wenn es schon läuft.
    • .script stop stoppt alle Skripte.
    • .script aufnahme startet oder beendet die Aufnahme.
Schritt für Schritt: euer erstes Skript
  • Gebt .script ein und klickt auf Ordner öffnen.
  • Legt im Ordner eine neue Textdatei an und nennt sie zum Beispiel hallo.py. Achtet darauf, dass die Endung wirklich .py ist und nicht .py.txt. In Windows hilft dabei "Ansicht > Dateinamenerweiterungen".
  • Öffnet die Datei mit einem Texteditor (zum Beispiel dem Windows-Editor oder Notepad++) und schreibt hinein:
    API.SysMsg("Hallo, " + API.Player.Name + "!")
    print("Du hast", API.Player.Hits, "von", API.Player.HitsMax, "Leben.")
  • Speichert die Datei, klickt im Skript-Fenster auf Neu einlesen und dann bei "hallo" auf Start.
  • Im Journal erscheinen eure Begrüßung und eure Lebenspunkte. Das Skript ist danach von selbst fertig.
Ein Skript, das dauerhaft läuft, braucht eine Schleife und Pausen. Dieses Beispiel verbindet euch mit Bandagen, sobald euer Leben unter 60 % fällt:
while True:
    if API.Player.Hits < API.Player.HitsMax * 0.6:
        if API.UseType(0x0E21):
            if API.WaitForTarget():
                API.TargetSelf()
            API.Pause(8)
    API.Pause(1)
while True: heißt "immer wieder", API.Pause(1) wartet eine Sekunde. In Python zählen die Einrückungen: Alles, was unter einer Zeile mit Doppelpunkt eingerückt ist, gehört zu ihr. Ein solches Skript läuft, bis ihr es stoppt.

Die Aufnahme: Skripte ohne Programmieren
  • Klickt im Skript-Fenster auf Aufnahme starten.
  • Spielt den Ablauf einmal ganz normal: Werkzeug doppelklicken, im Handwerksmenü auswählen, Ziel anklicken und so weiter.
  • Klickt auf Aufnahme beenden. Im Ordner liegt jetzt eine Datei aufnahme_Datum_Uhrzeit.py.
  • Startet sie, und der Client wiederholt eure Schritte, mit denselben Pausen.
Aufgenommen werden Benutzen, Gegenstände in Behälter legen, Anziehen, Zaubern, Skills, Angriff, Kampfmodus, Zielen, Sprechen und Antworten auf Server-Fenster. Laufen wird nicht aufgenommen. Gegenstände auf den Boden legen steht nur als Hinweis in der Datei. Tipp: Benennt die Datei danach um (zum Beispiel in schmieden.py) und setzt die Schritte in eine Schleife for i in range(50):, damit sie 50 Mal laufen.

Ein Skript auf eine Taste legen
  • Klickt in der Zeile des Skripts auf Taste.
  • Der Client legt ein Makro "Skript name" an und öffnet die Makro-Einstellungen.
  • Stellt dort wie bei jedem Makro die gewünschte Taste ein.
Ein Druck auf die Taste startet das Skript, ein zweiter Druck stoppt es. Im Makro-Editor heißt die Aktion RunScript. Ihr könnt sie auch selbst in andere Makros einbauen.

Die Bibliothek: Skripte anderer Spieler
  • Klickt im Skript-Fenster auf Bibliothek (SWPedia).
  • Ihr seht alle Skripte, die Spieler in der SWPedia geteilt haben, mit Name, letztem Bearbeiter, Datum und einer kurzen Beschreibung.
  • Wiki öffnet die Seite des Skripts im Browser. Dort könnt ihr den Code in Ruhe lesen.
  • Laden legt das Skript in euren Ordner. Gestartet wird es erst, wenn ihr selbst auf Start klickt.
Der Knopf zeigt euch auch den Stand: Update heißt, in der SWPedia gibt es eine neuere Fassung; Aktuell heißt, ihr habt die neueste. Name belegt heißt, ihr habt eine eigene Datei mit demselben Namen. Die wird nie überschrieben.

Wichtig: Die Skripte in der Bibliothek kommen von Spielern und werden vom Team nicht geprüft. Jeder kann eine Skriptseite bearbeiten. Lest den Code, bevor ihr ein Skript startet oder ein Update ladet. Eure geladenen Skripte ändern sich nie von selbst.

Ein eigenes Skript teilen
  • Legt in der SWPedia eine neue Seite an. Der Seitenname wird der Name des Skripts, zum Beispiel "Holzfällen am Baum".
  • Schreibt ganz oben: {{Skript|beschreibung=Was das Skript macht, in einem Satz.}}
  • Darunter erklärt ihr kurz, was man braucht, und setzt den Code zwischen <syntaxhighlight lang="python"> und </syntaxhighlight>.
  • Speichern. Das Skript steht sofort in der Bibliothek im Spiel.
Die genaue Anleitung mit Beispiel steht in der SWPedia unter Hilfe:Skripte. Ihr findet sie links in der Navigation unter "Spielmechanik" > Client Scripts. Dort liegt auch die Liste aller Befehle (Hilfe:Skript-API) und das erste Beispielskript "Bandagen-Selbstheilung".

Was Skripte können: die wichtigsten Befehle
Alle Befehle beginnen mit API.. Die vollständige Liste steht in der SWPedia unter Hilfe:Skript-API. Eine Auswahl:
    • Nachrichten: SysMsg (nur für euch), Msg (sprechen), HeadMsg (Text über einem Objekt), Pause, Stop.
    • Euer Charakter: API.Player.Hits, Mana, Stam, Str, Dex, Int, Gewicht, Gold, Position, ob ihr tot, vergiftet, versteckt oder im Kampfmodus seid.
    • Suchen: FindType (Gegenstand nach Grafik suchen, im Rucksack oder in der Nähe), FindItem, FindLayer (getragene Ausrüstung), ItemsInContainer, GetItemsOnGround, FindMobile, NearestMobile, GetSkill.
    • Handeln: UseObject, UseType, MoveItem, EquipItem, CastSpell, UseSkill, Attack, SetWarMode.
    • Zielen: WaitForTarget, Target, TargetSelf, TargetLocation, CancelTarget.
    • Journal: InJournal prüft, ob ein Text im Journal stand, zum Beispiel "Du hast keine Erze mehr".
    • Server-Fenster: WaitForGump, ReplyGump, CloseGump, zum Beispiel für Handwerksmenüs.
    • Merken: SavePersistentVar und GetPersistentVar speichern Werte über einen Neustart hinaus, für diesen Charakter, das Konto, den Server oder alles auf diesem Rechner.
Die Befehle heißen wie im TazUO-Client. Viele Skripte, die für TazUO geschrieben wurden, laufen deshalb mit wenig Anpassung.

Eigene Fenster
Skripte können kleine Fenster mit Text, Knöpfen, Haken, Eingabefeldern und Bildern anzeigen, etwa eine Anzeige für eure Werte oder ein Bedienfeld mit Knöpfen. Ein Beispiel:
g = API.CreateGump()
g.SetRect(200, 200, 220, 80)
bg = API.CreateGumpColorBox(0.85, '#1a1a1a')
bg.SetRect(0, 0, 220, 80)
g.Add(bg)
info = API.CreateGumpLabel('')
info.SetPos(10, 10)
g.Add(info)
knopf = API.CreateSimpleButton('Heilen', 90, 22)
knopf.SetPos(10, 40)
g.Add(knopf)
API.AddGump(g)

while not g.IsDisposed:
    info.SetText(f'Leben: {API.Player.Hits} / {API.Player.HitsMax}')
    if knopf.HasBeenClicked():
        API.UseType(0x0E21)
    API.Pause(0.2)
Das Fenster lässt sich verschieben und mit einem Rechtsklick schließen; dann endet auch dieses Skript. Stoppt ihr ein Skript, schließen sich seine Fenster. Fenster senden nichts an den Server, sie sind nur für euch.

Teil 2: Roter Bildschirmrand bei Verletzung

Wenn ihr Lebenspunkte verliert, färbt sich der Rand des Spielfensters rot. Je weniger Leben ihr habt, desto breiter und kräftiger wird der Rand. So merkt ihr auch mitten im Kampf sofort, wenn es eng wird.

So schaltet ihr ihn ein:
  • Öffnet die Optionen des Clients.
  • Wählt links die Seite General und scrollt zum Abschnitt Miscellaneous.
  • Setzt den Haken bei Roter Bildschirmrand bei Verletzung.
  • Darunter stellt ihr ein, ab wie viel Prozent Leben der Rand erscheint (Standard 90 %) und wie breit er höchstens wird (Standard 20 Pixel).
  • Mit dem Knopf zum Übernehmen unten im Optionsfenster speichern.
Die Anzeige ist standardmäßig aus, damit sich für niemanden ungefragt etwas am Bild ändert.

Fragen und Fehler
Wenn ein Skript nicht tut, was es soll, hilft meist der rote Fehlertext im Journal: Er nennt die Zeile mit dem Problem. Fehler im Client selbst meldet bitte wie gewohnt im Forum oder über ein Ticket, am besten mit dem Skript und der Fehlermeldung.

Viel Spaß beim Ausprobieren und Teilen!