Skip to content

API UO GetShopList fr

Codex edited this page Sep 23, 2026 · 1 revision

UO.GetShopList

ClassicUO / Basic IDE

Home · API · Trading

Lit les articles de la dernière offre active d’un vendeur PNJ pour vérifier type, quantité et prix avant achat ou vente.

Syntaxe exacte

UO.GetShopList() -> Any

Paramètres

Aucun paramètre.

Retour

Array of String, indices depuis 0 : serial|graphic|hue|amount|price|name. Serial identifie la ligne, graphic le type, hue la couleur ; ces trois champs utilisent 0x. Amount est la quantité disponible moins le brouillon de la fenêtre, price le prix unitaire. Sans offre, tableau vide, pas Boolean. Seuls les cinq premiers | délimitent les champs ; le reste est le nom, qui peut contenir |.

Comportement

  • Ouvrir d’abord l’achat ou la vente auprès du PNJ voulu et attendre son offre. Ces commandes ne cherchent pas le vendeur, n’ouvrent pas le commerce, ne fixent pas les prix d’un vendeur personnel et ne déplacent pas les objets entre coffres. Aucun argument ID de vendeur : la dernière offre est utilisée.
  • Le gestionnaire garde offre et brouillon dans la session sans affichage. Rouvrir restaure la fenêtre. Fermer le magasin lui-même, répondre, fermeture serveur ou déconnexion supprime l’offre. L’achat/vente automatique Bad Newbie peut la traiter avant le script.
  • La lecture n’envoie aucun paquet. C’est un instantané reçu, pas une garantie du stock. Amount compte les unités ; GetArrayLength(rows) compte les lignes. SendShopReply ne reçoit pas de prix.
  • Une liste explicite remplace le brouillon. Les ID répétés additionnent les quantités, limitées à la quantité totale proposée. ID inconnu, quantité invalide ou non positive rejette toute la réponse sans envoi et conserve l’offre. Sans offre, SendShopReply signale une erreur. "0" n’annule pas : utiliser "".

Fonctions internes : de l’appel au résultat

SessionShops valide les listes/prix complets et garde l’offre. Le bridge utilise le thread de session. GetItems forme les lignes, ParseSelection valide la sélection, Reply envoie achat 0x3B ou vente 0x9F puis ferme. ShopGump conserve sélection et défilement au détachement. Une fermeture serveur ne renvoie pas de réponse.

1. GetShopList

Ouvrir d’abord l’achat ou la vente auprès du PNJ voulu et attendre son offre. Ces commandes ne cherchent pas le vendeur, n’ouvrent pas le commerce, ne fixent pas les prix d’un vendeur personnel et ne déplacent pas les objets entre coffres. Aucun argument ID de vendeur : la dernière offre est utilisée.

Array of String, indices depuis 0 : serial|graphic|hue|amount|price|name. Serial identifie la ligne, graphic le type, hue la couleur ; ces trois champs utilisent 0x. Amount est la quantité disponible moins le brouillon de la fenêtre, price le prix unitaire. Sans offre, tableau vide, pas Boolean. Seuls les cinq premiers | délimitent les champs ; le reste est le nom, qui peut contenir |.

Source du projet: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; fonction GetShopList.

2. SessionShop.GetItems

La lecture n’envoie aucun paquet. C’est un instantané reçu, pas une garantie du stock. Amount compte les unités ; GetArrayLength(rows) compte les lignes. SendShopReply ne reçoit pas de prix.

Le gestionnaire garde offre et brouillon dans la session sans affichage. Rouvrir restaure la fenêtre. Fermer le magasin lui-même, répondre, fermeture serveur ou déconnexion supprime l’offre. L’achat/vente automatique Bad Newbie peut la traiter avant le script.

Source du projet: src/ClassicUO.Client/Game/Managers/SessionShops.cs; fonction SessionShop.GetItems.

La lecture n’envoie aucun paquet. C’est un instantané reçu, pas une garantie du stock. Amount compte les unités ; GetArrayLength(rows) compte les lignes. SendShopReply ne reçoit pas de prix.

Exemples

Lire les champs de la première ligne

# Lire les champs de la première ligne
#
# Lit les articles de la dernière offre active d’un vendeur PNJ pour vérifier type, quantité et
# prix avant achat ou vente.
#
# Array of String, indices depuis 0 : serial|graphic|hue|amount|price|name. Serial identifie la
# ligne, graphic le type, hue la couleur ; ces trois champs utilisent 0x. Amount est la quantité
# disponible moins le brouillon de la fenêtre, price le prix unitaire. Sans offre, tableau vide,
# pas Boolean. Seuls les cinq premiers | délimitent les champs ; le reste est le nom, qui peut
# contenir |.

SUB Main()
    # GetWord : 0 serial, 1 graphic, 2 hue, 3 quantité, 4 prix. Vérifier la taille avant rows[0].

    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

Explication des paramètres et du déroulement:

  • GetWord : 0 serial, 1 graphic, 2 hue, 3 quantité, 4 prix. Vérifier la taille avant rows[0].

Acheter dix bandages au plus avec plafond de prix

# Acheter dix bandages au plus avec plafond de prix
#
# Lit les articles de la dernière offre active d’un vendeur PNJ pour vérifier type, quantité et
# prix avant achat ou vente.
#
# Array of String, indices depuis 0 : serial|graphic|hue|amount|price|name. Serial identifie la
# ligne, graphic le type, hue la couleur ; ces trois champs utilisent 0x. Amount est la quantité
# disponible moins le brouillon de la fenêtre, price le prix unitaire. Sans offre, tableau vide,
# pas Boolean. Seuls les cinq premiers | délimitent les champs ; le reste est le nom, qui peut
# contenir |.

SUB Main()
    # Offre d’ACHAT déjà ouverte uniquement : 0x0E21 bandages, prix maximal 5, quantité maximale 10.
    # Première ligne correspondante, avec son vrai serial.

    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

Explication des paramètres et du déroulement:

  • Offre d’ACHAT déjà ouverte uniquement : 0x0E21 bandages, prix maximal 5, quantité maximale 10. Première ligne correspondante, avec son vrai serial.

Compter le stock d’un type

# Compter le stock d’un type
#
# Lit les articles de la dernière offre active d’un vendeur PNJ pour vérifier type, quantité et
# prix avant achat ou vente.
#
# Array of String, indices depuis 0 : serial|graphic|hue|amount|price|name. Serial identifie la
# ligne, graphic le type, hue la couleur ; ces trois champs utilisent 0x. Amount est la quantité
# disponible moins le brouillon de la fenêtre, price le prix unitaire. Sans offre, tableau vide,
# pas Boolean. Seuls les cinq premiers | délimitent les champs ; le reste est le nom, qui peut
# contenir |.

SUB Main()
    # Fonction complète : somme de amount pour le type demandé ; offre vide = 0. Ce sont des unités
    # disponibles, pas des créatures ni des objets portés.

    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

Explication des paramètres et du déroulement:

  • Fonction complète : somme de amount pour le type demandé ; offre vide = 0. Ce sont des unités disponibles, pas des créatures ni des objets portés.

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

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

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

Clone this wiki locally