Skripte im Client und roter Bildschirmrand
Mit dem heutigen Client-Update bekommt Schattenwelt zwei Neuerungen: Skripte
Startet das Spiel wie immer über den Launcher
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
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.
Das Skript-Fenster
Gebt im Spiel .script
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).
- 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).
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.
- 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.
- 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.
- 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.
- 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. - 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.
- 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. - Ö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.
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:Die Aufnahme: Skripte ohne Programmieren
Ein Skript auf eine Taste legen
Die Bibliothek: Skripte anderer Spieler
Ein eigenes Skript teilen
Was Skripte können: die wichtigsten Befehle
Alle Befehle beginnen mit API.
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.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:
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!