Zum Inhalt springen

Hilfe:Skript-API: Unterschied zwischen den Versionen

Aus SW Pedia
Skript-Bibliothek
Eigene-Fenster
 
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.&lt;Name&gt;</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 ohne import verfü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 Scripts lassen sich mit import laden.
  • .script <name> startet oder stoppt ein Skript, .script stop stoppt 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)