Skip to content

API UO GetShopList de

Codex edited this page Sep 23, 2026 · 1 revision

UO.GetShopList

ClassicUO / Basic IDE

Home · API · Trading

Liest Artikel des zuletzt aktiven NPC-Händlerangebots, um Typ, Menge und Preis vor Kauf oder Verkauf zu prüfen.

Genaue Syntax

UO.GetShopList() -> Any

Parameter

Keine Parameter.

Rückgabewert

Array of String, Index ab 0: serial|graphic|hue|amount|price|name. Serial ist die Positions-ID, graphic der Typ, hue die Farbe; diese drei Felder sind hexadezimal mit 0x. Amount sind verfügbare Einheiten abzüglich Fensterentwurf, price der Stückpreis. Ohne Angebot ist das Array leer, kein Boolean. Nur die ersten fünf | trennen Felder; der restliche Text ist der Name und darf | enthalten.

Verhalten

  • Zuerst im Spiel Kauf oder Verkauf beim gewünschten NPC öffnen und sein Angebot abwarten. Die Befehle suchen keinen Händler, öffnen keinen Handel, setzen keine eigenen Händlerpreise und verschieben keine Containerartikel. Keine Händler-ID als Argument: das letzte Angebot gilt.
  • Der Manager hält Angebot und Entwurf auch ohne Grafik im Spielzustand. Erneutes Öffnen stellt die Ansicht wieder her. Schließen des Shops selbst, Antwort, Serverschließung oder Trennung entfernt das Angebot. Bad Newbie kann es durch automatischen Kauf/Verkauf schon vorher bearbeiten.
  • Lesen sendet keine Pakete. Die Daten sind eine Momentaufnahme, keine Bestandsgarantie. Amount zählt Einheiten, GetArrayLength(rows) Positionen. SendShopReply akzeptiert keinen Preis.
  • Eine explizite Liste ersetzt den Entwurf. Wiederholte IDs summieren Mengen bis zur gesamten angebotenen Menge. Unbekannte ID oder ungültige/nichtpositive Menge verwirft die ganze Antwort vor dem Senden und erhält das Angebot. Ohne Angebot meldet SendShopReply einen Fehler. "0" bricht nicht ab: "" verwenden.

Interne Funktionen: vom Aufruf zum Ergebnis

SessionShops prüft vollständige Listen/Preise und speichert das Angebot. Die Bridge arbeitet im Sitzungsthread. GetItems formatiert Zeilen, ParseSelection prüft die Auswahl, Reply sendet Kauf 0x3B oder Verkauf 0x9F und schließt das Angebot. ShopGump erhält Auswahl und Scrollposition beim Ablösen. Serverschließungen erzeugen keine erneute Antwort.

1. GetShopList

Zuerst im Spiel Kauf oder Verkauf beim gewünschten NPC öffnen und sein Angebot abwarten. Die Befehle suchen keinen Händler, öffnen keinen Handel, setzen keine eigenen Händlerpreise und verschieben keine Containerartikel. Keine Händler-ID als Argument: das letzte Angebot gilt.

Array of String, Index ab 0: serial|graphic|hue|amount|price|name. Serial ist die Positions-ID, graphic der Typ, hue die Farbe; diese drei Felder sind hexadezimal mit 0x. Amount sind verfügbare Einheiten abzüglich Fensterentwurf, price der Stückpreis. Ohne Angebot ist das Array leer, kein Boolean. Nur die ersten fünf | trennen Felder; der restliche Text ist der Name und darf | enthalten.

Projektquelle: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; Funktion GetShopList.

2. SessionShop.GetItems

Lesen sendet keine Pakete. Die Daten sind eine Momentaufnahme, keine Bestandsgarantie. Amount zählt Einheiten, GetArrayLength(rows) Positionen. SendShopReply akzeptiert keinen Preis.

Der Manager hält Angebot und Entwurf auch ohne Grafik im Spielzustand. Erneutes Öffnen stellt die Ansicht wieder her. Schließen des Shops selbst, Antwort, Serverschließung oder Trennung entfernt das Angebot. Bad Newbie kann es durch automatischen Kauf/Verkauf schon vorher bearbeiten.

Projektquelle: src/ClassicUO.Client/Game/Managers/SessionShops.cs; Funktion SessionShop.GetItems.

Lesen sendet keine Pakete. Die Daten sind eine Momentaufnahme, keine Bestandsgarantie. Amount zählt Einheiten, GetArrayLength(rows) Positionen. SendShopReply akzeptiert keinen Preis.

Beispiele

Erste Position auslesen

# Erste Position auslesen
#
# Liest Artikel des zuletzt aktiven NPC-Händlerangebots, um Typ, Menge und Preis vor Kauf oder
# Verkauf zu prüfen.
#
# Array of String, Index ab 0: serial|graphic|hue|amount|price|name. Serial ist die
# Positions-ID, graphic der Typ, hue die Farbe; diese drei Felder sind hexadezimal mit 0x.
# Amount sind verfügbare Einheiten abzüglich Fensterentwurf, price der Stückpreis. Ohne Angebot
# ist das Array leer, kein Boolean. Nur die ersten fünf | trennen Felder; der restliche Text ist
# der Name und darf | enthalten.

SUB Main()
    # GetWord: 0 serial, 1 graphic, 2 hue, 3 Menge, 4 Preis. Vor rows[0] Arraylänge prüfen.

    VAR rows = UO.GetShopList()
    IF GetArrayLength(rows) = 0 THEN
        RETURN
    END IF
    VAR serial = GetWord(rows[0], 0, "|")
    VAR itemType = GetWord(rows[0], 1, "|")
    VAR amount = CInt(GetWord(rows[0], 3, "|"))
    VAR price = CDbl(GetWord(rows[0], 4, "|"))
    UO.Print(serial + " / " + itemType + " / " + CStr(amount) + " / " + CStr(price))
END SUB

Erläuterung der Parameter und Ausführung:

  • GetWord: 0 serial, 1 graphic, 2 hue, 3 Menge, 4 Preis. Vor rows[0] Arraylänge prüfen.

Bis zu zehn Bandagen mit Preisgrenze kaufen

# Bis zu zehn Bandagen mit Preisgrenze kaufen
#
# Liest Artikel des zuletzt aktiven NPC-Händlerangebots, um Typ, Menge und Preis vor Kauf oder
# Verkauf zu prüfen.
#
# Array of String, Index ab 0: serial|graphic|hue|amount|price|name. Serial ist die
# Positions-ID, graphic der Typ, hue die Farbe; diese drei Felder sind hexadezimal mit 0x.
# Amount sind verfügbare Einheiten abzüglich Fensterentwurf, price der Stückpreis. Ohne Angebot
# ist das Array leer, kein Boolean. Nur die ersten fünf | trennen Felder; der restliche Text ist
# der Name und darf | enthalten.

SUB Main()
    # Nur ein bereits geöffnetes KAUF-Angebot: 0x0E21 Bandagen, Stückpreis höchstens 5, Menge
    # höchstens 10. Verwendet die erste passende Position und deren echte ID.

    VAR rows = UO.GetShopList()
    FOR VAR i = 0 TO GetArrayLength(rows) - 1
        VAR row = rows[i]
        IF GetWord(row, 1, "|") = "0x0E21" THEN
            VAR price = CDbl(GetWord(row, 4, "|"))
            VAR amount = CInt(GetWord(row, 3, "|"))
            IF price > 0 AND price <= 5 AND amount > 0 THEN
                IF amount > 10 THEN
                    amount = 10
                END IF
                UO.SendShopReply(GetWord(row, 0, "|") + ":" + CStr(amount))
                RETURN
            END IF
        END IF
    NEXT
END SUB

Erläuterung der Parameter und Ausführung:

  • Nur ein bereits geöffnetes KAUF-Angebot: 0x0E21 Bandagen, Stückpreis höchstens 5, Menge höchstens 10. Verwendet die erste passende Position und deren echte ID.

Bestand eines Typs zählen

# Bestand eines Typs zählen
#
# Liest Artikel des zuletzt aktiven NPC-Händlerangebots, um Typ, Menge und Preis vor Kauf oder
# Verkauf zu prüfen.
#
# Array of String, Index ab 0: serial|graphic|hue|amount|price|name. Serial ist die
# Positions-ID, graphic der Typ, hue die Farbe; diese drei Felder sind hexadezimal mit 0x.
# Amount sind verfügbare Einheiten abzüglich Fensterentwurf, price der Stückpreis. Ohne Angebot
# ist das Array leer, kein Boolean. Nur die ersten fünf | trennen Felder; der restliche Text ist
# der Name und darf | enthalten.

SUB Main()
    # Die vollständige Hilfsfunktion summiert amount aller passenden Typen, bei leerem Angebot 0. Es
    # sind verfügbare Einheiten, keine Kreaturen oder getragenen Gegenstände.

    VAR available = CountOfferedType("0x0E21")
    IF available < 10 THEN
        UO.Print("Bandage stock below 10: " + CStr(available))
    END IF
END SUB

FUNCTION CountOfferedType(itemType)
    VAR total = 0
    VAR rows = UO.GetShopList()
    FOR VAR i = 0 TO GetArrayLength(rows) - 1
        IF GetWord(rows[i], 1, "|") = itemType THEN
            total = total + CInt(GetWord(rows[i], 3, "|"))
        END IF
    NEXT
    RETURN total
END FUNCTION

Erläuterung der Parameter und Ausführung:

  • Die vollständige Hilfsfunktion summiert amount aller passenden Typen, bei leerem Angebot 0. Es sind verfügbare Einheiten, keine Kreaturen oder getragenen Gegenstände.

Shop lists / Списки покупки и продажи

Shop lists / Списки покупки и продажи

Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Clone this wiki locally