Hilfe:Skript-API: Unterschied zwischen den Versionen
Skript-Bibliothek |
Eigene-Fenster |
||
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
Alle Befehle, die ein Skript im Schattenwelt-Client benutzen kann. Skripte sind Python 3 (über ''pocketpy''); die Namen folgen der Legion-API von TazUO, viele TazUO-Skripte laufen deshalb mit wenig Anpassung. Benutzung, Regeln und Teilen: [[Hilfe:Skripte]]. | |||
== Grundlagen == | == Grundlagen == | ||
| Zeile 141: | Zeile 141: | ||
API.SavePersistentVar("Runden", anzahl) | API.SavePersistentVar("Runden", anzahl) | ||
print(f"Skript lief schon {anzahl} Mal") | print(f"Skript lief schon {anzahl} Mal") | ||
</syntaxhighlight> | |||
== Eigene Fenster == | |||
Skripte können eigene Fenster bauen, zum Beispiel eine Anzeige oder ein kleines Bedienfeld mit Knöpfen. Die Fenster gehören zum Skript: Stoppt das Skript, schließen sie. Ein Rechtsklick schließt ein Fenster ebenfalls. Höchstens 20 offene Fenster und 3000 Elemente pro Skript. Fenster senden nichts an den Server. | |||
{| class="wikitable" | |||
! Befehl !! Ergebnis | |||
|- | |||
| <code>CreateGump(acceptMouseInput=True, canMove=True)</code> || leeres Fenster | |||
|- | |||
| <code>AddGump(fenster)</code> || Fenster anzeigen (nach dem Befüllen) | |||
|- | |||
| <code>CreateGumpLabel(text, hue=996)</code> || Text | |||
|- | |||
| <code>CreateGumpColorBox(opacity=0.7, color='#000000')</code> || farbige Fläche (Hintergrund) | |||
|- | |||
| <code>CreateSimpleButton(text, breite, höhe)</code> || einfacher Knopf | |||
|- | |||
| <code>CreateGumpButton(text='', hue=996, normal=0x00EF, pressed=0x00F0, hover=0x00EE)</code> || Knopf aus Gump-Grafiken | |||
|- | |||
| <code>CreateGumpCheckbox(text='', hue=0, isChecked=False)</code> || Haken | |||
|- | |||
| <code>CreateGumpRadioButton(text='', group=0, inactive=0x00D0, active=0x00D1, hue=0xFFFF, isChecked=False)</code> || Auswahlknopf, einer pro Gruppe | |||
|- | |||
| <code>CreateGumpTextBox(text='', width=200, height=30, multiline=False)</code> || Eingabefeld | |||
|- | |||
| <code>CreateGumpPic(graphic, x=0, y=0, hue=0)</code> || Gump-Grafik | |||
|- | |||
| <code>CreateGumpItemPic(graphic, width=0, height=0, hue=0)</code> || Item-Grafik (Originalgröße) | |||
|- | |||
| <code>CreateGumpScrollArea(x, y, width, height)</code> || Bereich mit Bildlaufleiste | |||
|- | |||
| <code>AddControlOnClick(element, funktion)</code> || Funktion bei Linksklick | |||
|- | |||
| <code>AddControlOnDisposed(element, funktion)</code> || Funktion, wenn das Fenster geschlossen wurde | |||
|- | |||
| <code>ProcessCallbacks()</code> || gemerkte Klicks und Schließen jetzt ausführen (regelmäßig aufrufen) | |||
|} | |||
Dieselben Befehle gibt es auch als <code>API.Gumps.<Name></code> (wie in TazUO). | |||
Jedes Element kann: <code>Add(kind)</code>, <code>SetPos(x, y)</code>, <code>SetX</code>, <code>SetY</code>, <code>SetWidth</code>, <code>SetHeight</code>, <code>SetRect(x, y, breite, höhe)</code>, <code>GetX</code>, <code>GetY</code>, <code>GetWidth</code>, <code>GetHeight</code>, <code>SetAlpha</code>, <code>GetAlpha</code>, <code>SetVisible</code>, <code>SetTooltip</code>, <code>ClearTooltip</code>, <code>SetAcceptMouseInput</code>, <code>SetText</code>, <code>GetText</code>, <code>SetHue</code>, <code>GetIsChecked</code>, <code>SetIsChecked</code>, <code>SetFocus</code> (Eingabefeld), <code>HasBeenClicked()</code> (einmal <code>True</code> pro Klick), <code>Dispose()</code>, dazu die Werte <code>Text</code>, <code>IsChecked</code> und <code>IsDisposed</code>. Fenster zusätzlich: <code>CenterXInScreen</code>, <code>CenterYInScreen</code>, <code>CenterInScreen</code>, <code>SetInScreen</code>, <code>SetCanMove</code>. | |||
<syntaxhighlight lang="python"> | |||
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) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Aktuelle Version vom 14. Oktober 2026, 22:06 Uhr
Alle Befehle, die ein Skript im Schattenwelt-Client benutzen kann. Skripte sind Python 3 (über pocketpy); die Namen folgen der Legion-API von TazUO, viele TazUO-Skripte laufen deshalb mit wenig Anpassung. Benutzung, Regeln und Teilen: Hilfe:Skripte.
Grundlagen
- Alle Befehle liegen im Modul
API, das ohneimportverfügbar ist. - Serials, Grafiken und Farben sind Zahlen, z. B.
0x0EED. print(...)schreibt mit dem Skriptnamen ins Journal, Fehler erscheinen rot.- Eigene Hilfsmodule im Ordner
Scriptslassen sich mitimportladen. .script <name>startet oder stoppt ein Skript,.script stopstoppt alle. Bis zu 15 Skripte laufen gleichzeitig.- Höchstens eine Aktion pro Sekunde über alle Skripte. Aktionen sind Benutzen, Bewegen, Ausrüsten, Zaubern, Skills, Angriff, Ziele, Sprechen und Gump-Antworten.
Nachrichten und Ablauf
| Befehl | Beschreibung |
|---|---|
SysMsg(msg, hue=946) |
Systemnachricht, nur für dich |
Msg(msg) |
sprechen |
EmoteMsg(msg) |
Emote |
HeadMsg(msg, serial, hue=946) |
Text über einem Objekt, nur für dich |
Pause(sekunden) |
warten (bis 600 s) |
Stop() |
Skript beenden |
Spieler
API.Player liefert immer aktuelle Werte: Serial, Name, Hits, HitsMax, Mana, ManaMax, Stam, StamMax, Str, Dex, Int, Weight, WeightMax, Gold, X, Y, Z, IsDead, IsPoisoned, InWarMode, IsHidden.
API.Backpack ist die Serial deines Rucksacks.
Suchen
| Befehl | Ergebnis |
|---|---|
FindItem(serial) |
Item oder None
|
FindType(grafik, container=None, range=None, hue=None, minamount=0) |
erstes passendes Item oder None
|
FindTypeAll(grafik, container=None, range=None, hue=None, minamount=0) |
Liste von Items |
FindLayer(layer, serial=None) |
getragenes Item auf einem Layer |
ItemsInContainer(container, recursive=False) |
Liste von Items |
Contents(container) |
Anzahl Items im Behälter |
GetItemsOnGround(distance=2, graphic=None) |
Items am Boden in der Nähe |
FindMobile(serial) |
Mobile oder None
|
GetAllMobiles(distance=18) |
Liste von Mobiles |
NearestMobile(distance=10) |
nächstes lebendes Mobile oder None
|
GetSkill(name_oder_nummer) |
Skillwert als Zahl |
Ein Item hat Serial, Graphic, Hue, Amount, Name, Container, Layer, X, Y, Z, Distance, OnGround, IsCorpse. Ein Mobile hat Serial, Graphic, Hue, Name, X, Y, Z, Distance, Hits, HitsMax, Notoriety, IsDead, IsHuman, IsPet, IsYou. Diese Werte sind ein Schnappschuss zum Zeitpunkt des Aufrufs.
Handeln
| Befehl | Beschreibung |
|---|---|
UseObject(serial) |
Doppelklick |
UseType(grafik, hue=None, container=None) |
erstes passendes Item benutzen, True/False
|
ClickObject(serial) |
Einfachklick |
MoveItem(serial, ziel, amount=0) |
Item in einen Behälter legen (0 = ganzer Stapel) |
EquipItem(serial) |
anziehen |
CastSpell(name_oder_nummer) |
zaubern |
UseSkill(name_oder_nummer) |
Fertigkeit benutzen |
Attack(serial) |
angreifen (keine Spieler) |
SetWarMode(True/False) |
Kampfmodus |
Ziele
| Befehl | Beschreibung |
|---|---|
HasTarget(type='any') |
gibt es gerade einen Zielcursor? (any, harmful, beneficial, neutral)
|
WaitForTarget(type='any', timeout=5) |
auf Zielcursor warten, True/False
|
Target(serial) |
Objekt anvisieren |
TargetSelf() |
sich selbst anvisieren |
TargetLocation(x, y, z, graphic=None) |
Boden oder Static anvisieren |
CancelTarget() |
Zielcursor abbrechen |
Journal
| Befehl | Beschreibung |
|---|---|
InJournal(text, clear=False) |
kam der Text seit Skriptstart im Journal vor? Mit $ am Anfang ist es ein regulärer Ausdruck
|
InJournalAny(liste, clear=False) |
einer der Texte |
ClearJournal() |
gemerkte Zeilen leeren |
Gumps (Server-Fenster)
| Befehl | Beschreibung |
|---|---|
HasGump(gumpid=None) |
ist ein Server-Gump offen? |
WaitForGump(gumpid=None, timeout=5) |
warten, True/False
|
ReplyGump(button, gumpid=None) |
Knopf drücken |
CloseGump(gumpid=None) |
schließen |
Gespeicherte Variablen
Werte, die ein Skript über einen Neustart hinaus behalten soll. Sie sind immer Text (Zahlen werden umgewandelt).
| Befehl | Beschreibung |
|---|---|
SavePersistentVar(name, wert, scope=API.PersistentVar.Char) |
speichern |
GetPersistentVar(name, default='', scope=API.PersistentVar.Char) |
lesen, default wenn nicht vorhanden
|
RemovePersistentVar(name, scope=API.PersistentVar.Char) |
löschen, True/False
|
Bereiche: API.PersistentVar.Char (dieser Charakter), Account (alle Charaktere des Kontos), Server (alle Konten auf diesem Server), Global (alles auf diesem Rechner).
anzahl = int(API.GetPersistentVar("Runden", "0")) + 1
API.SavePersistentVar("Runden", anzahl)
print(f"Skript lief schon {anzahl} Mal")
Eigene Fenster
Skripte können eigene Fenster bauen, zum Beispiel eine Anzeige oder ein kleines Bedienfeld mit Knöpfen. Die Fenster gehören zum Skript: Stoppt das Skript, schließen sie. Ein Rechtsklick schließt ein Fenster ebenfalls. Höchstens 20 offene Fenster und 3000 Elemente pro Skript. Fenster senden nichts an den Server.
| Befehl | Ergebnis |
|---|---|
CreateGump(acceptMouseInput=True, canMove=True) |
leeres Fenster |
AddGump(fenster) |
Fenster anzeigen (nach dem Befüllen) |
CreateGumpLabel(text, hue=996) |
Text |
CreateGumpColorBox(opacity=0.7, color='#000000') |
farbige Fläche (Hintergrund) |
CreateSimpleButton(text, breite, höhe) |
einfacher Knopf |
CreateGumpButton(text=, hue=996, normal=0x00EF, pressed=0x00F0, hover=0x00EE) |
Knopf aus Gump-Grafiken |
CreateGumpCheckbox(text=, hue=0, isChecked=False) |
Haken |
CreateGumpRadioButton(text=, group=0, inactive=0x00D0, active=0x00D1, hue=0xFFFF, isChecked=False) |
Auswahlknopf, einer pro Gruppe |
CreateGumpTextBox(text=, width=200, height=30, multiline=False) |
Eingabefeld |
CreateGumpPic(graphic, x=0, y=0, hue=0) |
Gump-Grafik |
CreateGumpItemPic(graphic, width=0, height=0, hue=0) |
Item-Grafik (Originalgröße) |
CreateGumpScrollArea(x, y, width, height) |
Bereich mit Bildlaufleiste |
AddControlOnClick(element, funktion) |
Funktion bei Linksklick |
AddControlOnDisposed(element, funktion) |
Funktion, wenn das Fenster geschlossen wurde |
ProcessCallbacks() |
gemerkte Klicks und Schließen jetzt ausführen (regelmäßig aufrufen) |
Dieselben Befehle gibt es auch als API.Gumps.<Name> (wie in TazUO).
Jedes Element kann: Add(kind), SetPos(x, y), SetX, SetY, SetWidth, SetHeight, SetRect(x, y, breite, höhe), GetX, GetY, GetWidth, GetHeight, SetAlpha, GetAlpha, SetVisible, SetTooltip, ClearTooltip, SetAcceptMouseInput, SetText, GetText, SetHue, GetIsChecked, SetIsChecked, SetFocus (Eingabefeld), HasBeenClicked() (einmal True pro Klick), Dispose(), dazu die Werte Text, IsChecked und IsDisposed. Fenster zusätzlich: CenterXInScreen, CenterYInScreen, CenterInScreen, SetInScreen, SetCanMove.
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)
Beispiel
while True:
if API.Player.Hits < API.Player.HitsMax * 0.6:
if API.UseType(0x0E21): # Bandage
if API.WaitForTarget():
API.TargetSelf()
API.Pause(8)
API.Pause(1)