DE UO Topic shops vendors - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Kauf, Verkauf, Store-Einträge, Verzögerungen und persönliche Händlerpreise. AllPrice und MassPriceMove verwenden das type des Elements, sofern in ihren Optionen angegeben.
Vollständigen Katalog und Beispiele öffnen
| Thema | Befehle und Erklärungen |
|---|---|
| Buy | UO.Buy |
| Sell | UO.Sell |
| AutoBuy | UO.AutoBuy |
| AutoSell | UO.AutoSell |
| Shop List | UO.GetShopList · UO.ClearShopList · UO.Shop |
| Prices | UO.GetPrice · UO.AllPrice · UO.MassPriceMove |
| VendorMenu | UO.VendorMenu |
| SendShopReply | UO.SendShopReply |
UO.Buy · UO.Sell · UO.AutoBuy · UO.AutoBuyEx · UO.AutoSell · UO.Shop · UO.GetShopList · UO.ClearShopList · UO.VendorMenu · UO.SendShopReply
UO.GetPrice · UO.AllPrice · UO.MassPriceMove
UO.GetAutoBuyDelay · UO.GetAutoSellDelay · UO.SetAutoBuyDelay · UO.SetAutoSellDelay
Jede Befehlskarte verfügt über mehrere unabhängige Szenarien: Direktcode, Funktionen und Klassen. Nachfolgend finden Sie ausgewählte kurze Szenarien; Einschränkungen und eine vollständige Analyse sind geplant.
Parameter, Ergebnis und alle Szenarien
UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");Parameter, Ergebnis und alle Szenarien
UO.MassPriceMove(350, 50, 0, 125);
UO.Print("Drag one complete stack into your vendor bag");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AllPrice();
void UO.AllPrice(object? price);
void UO.AllPrice(object? price, object? @type);Ermöglicht die automatische Preiseingabe, nachdem ein Artikel in den Bestand Ihres Lieferanten aufgenommen wurde. Das Team trägt selbst keine Gegenstände. Schalten Sie zuerst den Modus ein und ziehen Sie dann das Element. Der Preis wird erst nach einer entsprechenden Serveranfrage versendet. Der zweite Parameter filtert den TYPE des Elements.
-
price– Der erste Parameter ist der Gesamtpreis für den gesamten ausgestellten Artikel/Stapel, von 0 bis 2147483647. 125 bedeutet Preis 125. 0 – eindeutig Nullpreis (kostenlos, wenn der Server dies zulässt), kein Herunterfahren. Ein negativer Wert schaltet den Modus aus; UO.AllPrice() ohne Argumente wird empfohlen. -
type– Der zweite optionale Parameter ist TYPE/Grafik von 0 bis 65535, eine Zahl oder eine Hexadezimalzeichenfolge, zum Beispiel 0x0EED. 0 oder Abwesenheit – alle Arten. Artikelserie und Objektname sind nicht geeignet. Farbe wird nicht gefiltert.
void: kein Wert. Aktivieren AllPrice meldet Aktivierung. Die gesendete Preiszeile zeigt an, dass die Antwort gesendet wurde, nicht die Annahme des vom Server bestätigten Preises.
- Der Modus gilt für nachfolgende Übertragungen, bis er ausgeschaltet wird. Eine Preisanfrage, die bereits vor der Aufnahme/Übertragung anhängig war, wird nicht automatisch erfüllt. Reagiert nicht auf Umbenennungsanfragen von Anbietern/Geschäften.
- Erfordert, dass der Container zu einem anderen Charakter/NPC gehört, der dem Client bekannt ist. Die Berechtigung zur Verwaltung des Anbieters und die Angemessenheit des Preises werden vom Server überprüft. Der normale Rucksack, die Truhe auf dem Boden und das Land des Charakters erhalten keinen automatischen Preis.
- Bei einem Standardanbieter wird die Preisanfrage von cliloc 1043303 unabhängig von der Sprache des Kunden erkannt. Systemtextaufforderungen, die mit „Preis eingeben“, „Preis eingeben“, „Preis eingeben“, „Preis eingeben“ oder „Preis eingeben“ beginnen, werden ebenfalls unterstützt. Es wird eine unbekannte Einladung zur manuellen Beantwortung hinterlassen.
- ASCII- und Unicode-Serverabfragen werden unterstützt. Wenn die Einladung nicht innerhalb von 10 Sekunden eintrifft, wird die verzögerte Antwort abgebrochen. Bei einem Massentransfer stoppt auch die Warteschlange. Bereits gesendete Antworten werden nicht zurückgerufen.
- Der andere TYPE-Artikel erhält keinen Preis. Wenn MassMove aktiviert ist, wartet die nächste Einreichung auf die Bearbeitung der Preisanfrage; Eine unbekannte oder unangemessene Anfrage stoppt die Warteschlange, um eine Verwechslung von Elementen zu vermeiden.
- AllPrice() löscht ausstehende Preise und schaltet den Modus aus. TerminateAll(), Aufgeben, Sterben oder Kartenwechsel setzt auch den automatischen Preis zurück. Dieser Befehl ändert nicht die Preise bereits gelisteter Produkte.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.AllPrice");
UO.AllPrice();Parameter und Ablauf:
- preis=125 – der Gesamtpreis jedes Artikels. type fehlt: alle Typen sind geeignet.
- Fügen Sie den Artikel nach dem Start manuell zum Inventar Ihres Lieferanten hinzu. Auf eine Preisanfrage antwortet der Kunde mit 125. Jeder weitere Artikel erhält bis zur Abschaltung den gleichen Preis.
- Print ähnelt nur der Aktion; Dieser Vorgang selbst überträgt nichts.
UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");Parameter und Ablauf:
- salePrice wird als Preis=250 übertragen. itemType wird als type=0x0F7A übertragen, nicht als serial eines separaten Produkts.
- Der Preis 250 bezieht sich auf den gesamten angezeigten Stapel. Der Befehl multipliziert den Preis nicht mit der Anzahl der darin enthaltenen Einheiten.
- Andere Typen bleiben ohne automatische Reaktion. Geben Sie für diese den Preis manuell ein oder fügen Sie AllPrice mit einem anderen Filter hinzu.
return RunScenario();
object? RunScenario()
{
var itemType = "0x0F7A";
var salePrice = 250;
UO.AllPrice(salePrice, itemType);
return null;
}Parameter und Ablauf:
- preis=0 – Senden Sie die Zeichenfolge 0 als Preis an den Server. Dadurch wird der Dialog nicht abgebrochen oder beendet.
- type=0x0F7A begrenzt den kostenlosen Preis auf diesen Typ. Das Verhalten des kostenlosen Verkaufs hängt von den Serverregeln ab.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.AllPrice(0, "0x0F7A");
return null;
}
}Parameter und Ablauf:
- Keine Argumente: Der Modus ist deaktiviert und ausstehende Antworten werden gelöscht.
- Der vom Server bereits festgelegte Preis ändert sich nicht. Die nächste Preisanfrage füllt der Nutzer selbst aus.
Shop Listen / Kauf- und Verkaufslisten
UO.AllPrice();C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AllPrice:bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1, arguments.Length > 1 ? ResolveType(arguments[1]) : 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
Interner Implementierungscode; kein eigenständiges Skript.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;Parameter: price (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AllPrice:bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1, arguments.Length > 1 ? ResolveType(arguments[1]) : 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
Interner Implementierungscode; kein eigenständiges Skript.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;Parameter: price (Any), type (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AllPrice:bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1, arguments.Length > 1 ? ResolveType(arguments[1]) : 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
Interner Implementierungscode; kein eigenständiges Skript.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AutoBuy(object? itemType, object? itemColor, object? quantity);Erstellt, aktualisiert oder löscht eine automatische Kaufregel in der Hauptstandardliste des aktuellen Bad Newbie-Profils. Der Befehl konfiguriert die zukünftige Verarbeitung des Angebots des NPC-Verkäufers; sagt nicht „Kaufen/Verkaufen“, eröffnet kein Geschäft und bestätigt die Transaktion nicht. Vollständiger Vorgang: Einträge speichern.
-
itemType– Grafisches Produkt 0..65535: zum Beispiel 0x0F7A – Black Pearl, 0x0F51 – Dolch. Dies ist nicht das serial des Verkäufers/Artikels und nicht das body des Charakters. Eine negative Zahl oder eine Zahl größer als 65535 wird abgelehnt. Hier ist 0xFFFF ein spezifisches graphic, keine Maske aller Güter. -
itemColor– Produktfarbton: negative Zahl oder 0xFFFF – beliebig; 0 – nur unlackierte Artikel. Für präzises hue verwenden Sie 0..65534. Verwenden Sie keine Farben außerhalb dieses Bereichs: Ein positiver Wert wird in ushort umgewandelt. Erforderlich. -
quantity– Die Anzahl der Wareneinheiten pro erhaltenem Ladenangebot, nicht die Anzahl der Stapel und nicht das gewünschte Guthaben im Rucksack. Das Positive ist auf 65535 begrenzt. 0/negative entfernt die Übereinstimmungsregel type+color aus der Standardeinstellung; es ist nicht „die ganze Menge“. Erforderlich.
void – kein Wert. Rufen Sie auf einer separaten Leitung an, ohne var result = und ohne if. Das Ende des Anrufs bedeutet das Ende der Einrichtung, nicht eine erfolgreiche Transaktion. Wenn kein Profil vorhanden oder ungültig graphic ist, wird die Regel nicht erstellt; Es gibt kein numerisches Ergebnis des Fehlers. Überprüfen Sie die tatsächliche Transaktion anhand des Inhalts des Rucksacks, des Goldes und der Serverantwort.
- Alle 3-Argumente sind erforderlich. Dies ist eine Regeleinstellung, keine Wartefunktion.
- Der Regelschlüssel ist graphic und die Maske hue im Standard. Der wiederholte Aufruf ersetzt die Menge und andere Felder dieser Regel; Es wird kein weiteres Limit zum vorherigen hinzugefügt. Ohne Preis/Name werden die bisherigen Einschränkungen für diese Felder aufgehoben.
- Neue/aktualisierte Regel „Enabled=true“. Der allgemeine Kauf-/Verkaufsschalter wird basierend auf dem Vorhandensein von Regeln eingestellt und das Profil wird gespeichert. Die deaktivierte Standardliste selbst ist nicht automatisch aktiviert: Sowohl der allgemeine Modus als auch die Liste müssen in den Einstellungen aktiviert sein. Andere benannte Listen werden nicht geändert.
- Die Bearbeitung beginnt mit dem Eintreffen einer Warenliste. Das Limit wird insgesamt für die Zeilen ausgegeben, die einer Regel entsprechen. Für jede Position wird die erste passende aktivierte Regel verwendet. Durch die Wiedereröffnung des Geschäfts erhalten Sie ein neues Angebot und ein neues Limit, solange die Regel aktiv ist.
- Arbeitet bei Full mit Bad Newbie; In Classic ist diese Automatisierung deaktiviert. Ersetzen Sie nicht den Namen NPC oder den Namen der gespeicherten Liste in den Parametern. AutoBuyEx fügt Preis-/Namensfilter beim Kauf hinzu; ClearShopList setzt beide Automatisierungen vollständig zurück.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.AutoBuy");
UO.AutoBuy(0x0F7A, -1, 1);Parameter und Ablauf:
- 0x0F7A – graphic Reagenz, nicht ID NPC. Menge – 1; Farbe - beliebig. In diesem Formular ist keine Preisobergrenze angegeben. Das Skript selbst sagt nichts und öffnet den Store nicht. Die Regel gilt weiterhin für nachfolgende Sätze, bis Sie sie ändern/deaktivieren.
UO.AutoBuy(0x0F7A, -1, 1);Parameter und Ablauf:
- 20 - in maximal einer Antwort des Ladens und nicht „Bring die Menge mit“. 20». U AutoBuy Es gibt keine Preis- und Namensargumente. Wenn Sie sie brauchen, verwenden Sie AutoBuyEx; Das vollständige Beispiel finden Sie unter dem folgenden Link. Mangel an Waren, Geld und Serverregeln bestimmen den Ausgang.
return RunScenario();
object? RunScenario()
{
UO.AutoBuy(0x0F7A, 0, 20);
return null;
}Parameter und Ablauf:
- Der Assistent akzeptiert graphic. Nur Standardregeln mit AnyHue werden gelöscht; die einzelnen Regeln hue=0 bleiben erhalten. Dadurch wird ein bereits an den Server gesendeter Deal nicht storniert. Um eine exakte Farbe zu entfernen, übergeben Sie dasselbe hue, mit dem die Regel erstellt wurde.
Shop Listen / Kauf- und Verkaufslisten
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
DisableReagentRule(0x0F7A);
DisableReagentRule(0x0F84);
return null;
}
void DisableReagentRule(dynamic itemType)
{
UO.AutoBuy(itemType, -1, 0);
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: itemType (Any), itemColor (Any), quantity (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), 0, string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "autobuy":
bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), 0, string.Empty); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AutoBuyEx(object? itemType, object? itemColor, object? quantity, object? price, object? name);Erstellt, aktualisiert oder löscht eine automatische Kaufregel in der Hauptstandardliste des aktuellen Bad Newbie-Profils. Der Befehl konfiguriert die zukünftige Verarbeitung des Angebots des NPC-Verkäufers; sagt nicht „Kaufen/Verkaufen“, eröffnet kein Geschäft und bestätigt die Transaktion nicht. Vollständiger Vorgang: Einträge speichern.
-
itemType– Grafisches Produkt 0..65535: zum Beispiel 0x0F7A – Black Pearl, 0x0F51 – Dolch. Dies ist nicht das serial des Verkäufers/Artikels und nicht das body des Charakters. Eine negative Zahl oder eine Zahl größer als 65535 wird abgelehnt. Hier ist 0xFFFF ein spezifisches graphic, keine Maske aller Güter. -
itemColor– Produktfarbton: negative Zahl oder 0xFFFF – beliebig; 0 – nur unlackierte Artikel. Für präzises hue verwenden Sie 0..65534. Verwenden Sie keine Farben außerhalb dieses Bereichs: Ein positiver Wert wird in ushort umgewandelt. Erforderlich. -
quantity– Die Anzahl der Wareneinheiten pro erhaltenem Ladenangebot, nicht die Anzahl der Stapel und nicht das gewünschte Guthaben im Rucksack. Das Positive ist auf 65535 begrenzt. 0/negative entfernt die Übereinstimmungsregel type+color aus der Standardeinstellung; es ist nicht „die ganze Menge“. Erforderlich. -
price– Maximaler Preis EINER Einheit, nicht der gesamten Transaktion. 0/negativ – keine Preisobergrenze. Produkte, die teurer sind als der positive Grenzwert, werden durchgelassen. Der Preis wird auf dem Server nicht gehandelt oder geändert. Erforderlich. -
name– Teilzeichenfolge des PRODUKT-Namens, Groß- und Kleinschreibung wird nicht beachtet; Randräume werden entfernt, leere Zeile – kein Filter. Dabei handelt es sich nicht um den Namen des Verkäufers oder des Angebots. Beispielsweise prüft „Black Pearl“ den Text der Filialposition, ob der Server genau einen solchen Namen gesendet hat. Erforderlich.
void – kein Wert. Rufen Sie auf einer separaten Leitung an, ohne var result = und ohne if. Das Ende des Anrufs bedeutet das Ende der Einrichtung, nicht eine erfolgreiche Transaktion. Wenn kein Profil vorhanden oder ungültig graphic ist, wird die Regel nicht erstellt; Es gibt kein numerisches Ergebnis des Fehlers. Überprüfen Sie die tatsächliche Transaktion anhand des Inhalts des Rucksacks, des Goldes und der Serverantwort.
- Alle 5-Argumente sind erforderlich. Dies ist eine Regeleinstellung, keine Wartefunktion.
- Der Regelschlüssel ist graphic und die Maske hue im Standard. Der wiederholte Aufruf ersetzt die Menge und andere Felder dieser Regel; Es wird kein weiteres Limit zum vorherigen hinzugefügt. Ohne Preis/Name werden die bisherigen Einschränkungen für diese Felder aufgehoben.
- Neue/aktualisierte Regel „Enabled=true“. Der allgemeine Kauf-/Verkaufsschalter wird basierend auf dem Vorhandensein von Regeln eingestellt und das Profil wird gespeichert. Die deaktivierte Standardliste selbst ist nicht automatisch aktiviert: Sowohl der allgemeine Modus als auch die Liste müssen in den Einstellungen aktiviert sein. Andere benannte Listen werden nicht geändert.
- Die Bearbeitung beginnt mit dem Eintreffen einer Warenliste. Das Limit wird insgesamt für die Zeilen ausgegeben, die einer Regel entsprechen. Für jede Position wird die erste passende aktivierte Regel verwendet. Durch die Wiedereröffnung des Geschäfts erhalten Sie ein neues Angebot und ein neues Limit, solange die Regel aktiv ist.
- Arbeitet bei Full mit Bad Newbie; In Classic ist diese Automatisierung deaktiviert. Ersetzen Sie nicht den Namen NPC oder den Namen der gespeicherten Liste in den Parametern. AutoBuyEx fügt Preis-/Namensfilter beim Kauf hinzu; ClearShopList setzt beide Automatisierungen vollständig zurück.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.AutoBuyEx");
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");Parameter und Ablauf:
- 0x0F7A – graphic Reagenz, nicht ID NPC. Menge – 1; Farbe - beliebig. Preisobergrenze 5 pro Einheit. Das Skript selbst sagt nichts und öffnet den Store nicht. Die Regel gilt weiterhin für nachfolgende Sätze, bis Sie sie ändern/deaktivieren.
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");Parameter und Ablauf:
- 20 – maximale Antwort in einer Filiale und nicht „Menge auf 20 bringen“. 5 – Preis pro Einheit, „Black Pearl“ – Teilzeichenfolge des Produktnamens. Wenn der Server das Reagenz anders aufruft, ändern Sie den Filter oder übergeben Sie „“. Mangel an Waren, Geld und Serverregeln bestimmen den Ausgang.
return RunScenario();
object? RunScenario()
{
UO.AutoBuyEx(0x0F7A, 0, 20, 5, "Black Pearl");
return null;
}Parameter und Ablauf:
- Der Assistent akzeptiert graphic. Nur Standardregeln mit AnyHue werden gelöscht; die einzelnen Regeln hue=0 bleiben erhalten. Dadurch wird ein bereits an den Server gesendeter Deal nicht storniert. Um eine exakte Farbe zu entfernen, übergeben Sie dasselbe hue, mit dem die Regel erstellt wurde.
Shop Listen / Kauf- und Verkaufslisten
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
DisableReagentRule(0x0F7A);
DisableReagentRule(0x0F84);
return null;
}
void DisableReagentRule(dynamic itemType)
{
UO.AutoBuyEx(itemType, -1, 0, 0, "");
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: itemType (Any), itemColor (Any), quantity (Any), price (Any), name (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), Arg(3), Text(4)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(4).
Interner Implementierungscode; kein eigenständiges Skript.
case "autobuyex":
bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), Arg(3), Text(4)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AutoSell(object? itemType, object? itemColor, object? quantity);Erstellt, aktualisiert oder löscht eine automatische Verkaufsregel in der Hauptstandardliste des aktuellen Bad Newbie-Profils. Der Befehl konfiguriert die zukünftige Verarbeitung des Angebots des NPC-Verkäufers; sagt nicht „Kaufen/Verkaufen“, eröffnet kein Geschäft und bestätigt die Transaktion nicht. Vollständiger Vorgang: Einträge speichern.
-
itemType– Grafisches Produkt 0..65535: zum Beispiel 0x0F7A – Black Pearl, 0x0F51 – Dolch. Dies ist nicht das serial des Verkäufers/Artikels und nicht das body des Charakters. Eine negative Zahl oder eine Zahl größer als 65535 wird abgelehnt. Hier ist 0xFFFF ein spezifisches graphic, keine Maske aller Güter. -
itemColor– Produktfarbton: negative Zahl oder 0xFFFF – beliebig; 0 – nur unlackierte Artikel. Für präzises hue verwenden Sie 0..65534. Verwenden Sie keine Farben außerhalb dieses Bereichs: Ein positiver Wert wird in ushort umgewandelt. Erforderlich. -
quantity– Die Anzahl der Wareneinheiten pro erhaltenem Ladenangebot, nicht die Anzahl der Stapel und nicht das gewünschte Guthaben im Rucksack. Das Positive ist auf 65535 begrenzt. 0/negative entfernt die Übereinstimmungsregel type+color aus der Standardeinstellung; es ist nicht „die ganze Menge“. Erforderlich.
void – kein Wert. Rufen Sie auf einer separaten Leitung an, ohne var result = und ohne if. Das Ende des Anrufs bedeutet das Ende der Einrichtung, nicht eine erfolgreiche Transaktion. Wenn kein Profil vorhanden oder ungültig graphic ist, wird die Regel nicht erstellt; Es gibt kein numerisches Ergebnis des Fehlers. Überprüfen Sie die tatsächliche Transaktion anhand des Inhalts des Rucksacks, des Goldes und der Serverantwort.
- Alle 3-Argumente sind erforderlich. Dies ist eine Regeleinstellung, keine Wartefunktion.
- Der Regelschlüssel ist graphic und die Maske hue im Standard. Der wiederholte Aufruf ersetzt die Menge und andere Felder dieser Regel; Es wird kein weiteres Limit zum vorherigen hinzugefügt. Ohne Preis/Name werden die bisherigen Einschränkungen für diese Felder aufgehoben.
- Neue/aktualisierte Regel „Enabled=true“. Der allgemeine Kauf-/Verkaufsschalter wird basierend auf dem Vorhandensein von Regeln eingestellt und das Profil wird gespeichert. Die deaktivierte Standardliste selbst ist nicht automatisch aktiviert: Sowohl der allgemeine Modus als auch die Liste müssen in den Einstellungen aktiviert sein. Andere benannte Listen werden nicht geändert.
- Die Bearbeitung beginnt mit dem Eintreffen einer Warenliste. Das Limit wird insgesamt für die Zeilen ausgegeben, die einer Regel entsprechen. Für jede Position wird die erste passende aktivierte Regel verwendet. Durch die Wiedereröffnung des Geschäfts erhalten Sie ein neues Angebot und ein neues Limit, solange die Regel aktiv ist.
- Arbeitet bei Full mit Bad Newbie; In Classic ist diese Automatisierung deaktiviert. Ersetzen Sie nicht den Namen NPC oder den Namen der gespeicherten Liste in den Parametern. AutoBuyEx fügt Preis-/Namensfilter beim Kauf hinzu; ClearShopList setzt beide Automatisierungen vollständig zurück.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.AutoSell");
UO.AutoSell(0x0F51, -1, 1);Parameter und Ablauf:
- 0x0F51 – graphic Dolch, beliebig hue, 1 – einer pro Satz. Das Team wählt kein bestimmtes serial aus und testet nicht die Nützlichkeit/den Wert des Gegenstands. Wählen Sie die genaue type/Farbe Ihres Artikels aus.
UO.AutoSell(0x0F51, -1, 1);Parameter und Ablauf:
- 0x1F03 ist ein Beispiel für eine Standardrobe graphic, 0x0044 ist ein Beispiel für hue. Ersetzen Sie beides durch Ihr Produkt. 5 – Einheiten, nicht Preis; Die Mindestpreis- und Namensparameter Sell/AutoSell werden nicht akzeptiert. Der Server muss den Artikel in das Verkaufsangebot aufnehmen.
return RunScenario();
object? RunScenario()
{
UO.AutoSell(0x1F03, 0x0044, 5);
return null;
}Parameter und Ablauf:
- Der Prozedurname ist willkürlich; itemType und hue sind seine Parameter. Andere Regeln, Einkäufe und benutzerdefinierte benannte Listen bleiben erhalten. Wenn eine andere aktivierte Liste diese Artikel ebenfalls verkauft, deaktivieren Sie die entsprechende Regel darin über die Einstellungen.
Shop Listen / Kauf- und Verkaufslisten
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
RemoveSaleRule(0x0F51, -1);
RemoveSaleRule(0x1F03, 0x0044);
return null;
}
void RemoveSaleRule(dynamic itemType, dynamic hue)
{
UO.AutoSell(itemType, hue, 0);
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: itemType (Any), itemColor (Any), quantity (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "autosell":
bridge.SetAutoSellRule(Arg(0), Arg(1), Arg(2)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Buy(object? @type);
void UO.Buy(object? @type, object? color);
void UO.Buy(object? @type, object? color, object? quantity);
void UO.Buy(object? @type, object? color, object? quantity, object? maxPrice);
void UO.Buy(object? @type, object? color, object? quantity, object? maxPrice, object? name);Erstellt, aktualisiert oder löscht eine automatische Kaufregel in der Hauptstandardliste des aktuellen Bad Newbie-Profils. Der Befehl konfiguriert die zukünftige Verarbeitung des Angebots des NPC-Verkäufers; sagt nicht „Kaufen/Verkaufen“, eröffnet kein Geschäft und bestätigt die Transaktion nicht. Vollständiger Vorgang: Einträge speichern.
-
type– Grafisches Produkt 0..65535: zum Beispiel 0x0F7A – Black Pearl, 0x0F51 – Dolch. Dies ist nicht das serial des Verkäufers/Artikels und nicht das body des Charakters. Eine negative Zahl oder eine Zahl größer als 65535 wird abgelehnt. Hier ist 0xFFFF ein spezifisches graphic, keine Maske aller Güter. -
color– Produktfarbton: negative Zahl oder 0xFFFF – beliebig; 0 – nur unlackierte Artikel. Für präzises hue verwenden Sie 0..65534. Verwenden Sie keine Farben außerhalb dieses Bereichs: Ein positiver Wert wird in ushort umgewandelt. Der Standardwert ist 1. -
quantity– Die Anzahl der Wareneinheiten pro erhaltenem Ladenangebot, nicht die Anzahl der Stapel und nicht das gewünschte Guthaben im Rucksack. Das Positive ist auf 65535 begrenzt. 0/negative entfernt die Übereinstimmungsregel type+color aus der Standardeinstellung; es ist nicht „die ganze Menge“. Der Standardwert ist 1. -
maxPrice– Maximaler Preis EINER Einheit, nicht der gesamten Transaktion. 0/negativ – keine Preisobergrenze. Produkte, die teurer sind als der positive Grenzwert, werden durchgelassen. Der Preis wird auf dem Server nicht gehandelt oder geändert. Der Standardwert ist 0. -
name– Teilzeichenfolge des PRODUKT-Namens, Groß- und Kleinschreibung wird nicht beachtet; Randräume werden entfernt, leere Zeile – kein Filter. Dabei handelt es sich nicht um den Namen des Verkäufers oder des Angebots. Beispielsweise prüft „Black Pearl“ den Text der Filialposition, ob der Server genau einen solchen Namen gesendet hat. Der Standardwert ist eine leere Zeichenfolge.
void – kein Wert. Rufen Sie auf einer separaten Leitung an, ohne var result = und ohne if. Das Ende des Anrufs bedeutet das Ende der Einrichtung, nicht eine erfolgreiche Transaktion. Wenn kein Profil vorhanden oder ungültig graphic ist, wird die Regel nicht erstellt; Es gibt kein numerisches Ergebnis des Fehlers. Überprüfen Sie die tatsächliche Transaktion anhand des Inhalts des Rucksacks, des Goldes und der Serverantwort.
- Buy übernimmt die Argumente 1 bis 5; rechts fehlt Farbe=-1, Menge=1, maxPrice=0, Name="".
- Der Regelschlüssel ist graphic und die Maske hue im Standard. Der wiederholte Aufruf ersetzt die Menge und andere Felder dieser Regel; Es wird kein weiteres Limit zum vorherigen hinzugefügt. Ohne Preis/Name werden die bisherigen Einschränkungen für diese Felder aufgehoben.
- Neue/aktualisierte Regel „Enabled=true“. Der allgemeine Kauf-/Verkaufsschalter wird basierend auf dem Vorhandensein von Regeln eingestellt und das Profil wird gespeichert. Die deaktivierte Standardliste selbst ist nicht automatisch aktiviert: Sowohl der allgemeine Modus als auch die Liste müssen in den Einstellungen aktiviert sein. Andere benannte Listen werden nicht geändert.
- Die Bearbeitung beginnt mit dem Eintreffen einer Warenliste. Das Limit wird insgesamt für die Zeilen ausgegeben, die einer Regel entsprechen. Für jede Position wird die erste passende aktivierte Regel verwendet. Durch die Wiedereröffnung des Geschäfts erhalten Sie ein neues Angebot und ein neues Limit, solange die Regel aktiv ist.
- Arbeitet bei Full mit Bad Newbie; In Classic ist diese Automatisierung deaktiviert. Ersetzen Sie nicht den Namen NPC oder den Namen der gespeicherten Liste in den Parametern. AutoBuyEx fügt Preis-/Namensfilter beim Kauf hinzu; ClearShopList setzt beide Automatisierungen vollständig zurück.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.Buy");
UO.Buy(0x0F7A);Parameter und Ablauf:
- 0x0F7A – graphic Reagenz, nicht ID NPC. Menge – 1; Farbe - beliebig. In diesem Formular ist keine Preisobergrenze angegeben. Das Skript selbst sagt nichts und öffnet den Store nicht. Die Regel gilt weiterhin für nachfolgende Sätze, bis Sie sie ändern/deaktivieren.
UO.Buy(0x0F7A);Parameter und Ablauf:
- 20 – maximale Antwort in einer Filiale und nicht „Menge auf 20 bringen“. 5 – Preis pro Einheit, „Black Pearl“ – Teilzeichenfolge des Produktnamens. Wenn der Server das Reagenz anders aufruft, ändern Sie den Filter oder übergeben Sie „“. Mangel an Waren, Geld und Serverregeln bestimmen den Ausgang.
return RunScenario();
object? RunScenario()
{
UO.Buy(0x0F7A, 0, 20, 5, "Black Pearl");
return null;
}Parameter und Ablauf:
- Der Assistent akzeptiert graphic. Nur Standardregeln mit AnyHue werden gelöscht; die einzelnen Regeln hue=0 bleiben erhalten. Dadurch wird ein bereits an den Server gesendeter Deal nicht storniert. Um eine exakte Farbe zu entfernen, übergeben Sie dasselbe hue, mit dem die Regel erstellt wurde.
Shop Listen / Kauf- und Verkaufslisten
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
DisableReagentRule(0x0F7A);
DisableReagentRule(0x0F84);
return null;
}
void DisableReagentRule(dynamic itemType)
{
UO.Buy(itemType, -1, 0);
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: type (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
Interner Implementierungscode; kein eigenständiges Skript.
case "buy":
bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);
break;Parameter: type (Any), color (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
Interner Implementierungscode; kein eigenständiges Skript.
case "buy":
bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);
break;Parameter: type (Any), color (Any), quantity (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
Interner Implementierungscode; kein eigenständiges Skript.
case "buy":
bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);
break;Parameter: type (Any), color (Any), quantity (Any), maxPrice (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
Interner Implementierungscode; kein eigenständiges Skript.
case "buy":
bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);
break;Parameter: type (Any), color (Any), quantity (Any), maxPrice (Any), name (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
Interner Implementierungscode; kein eigenständiges Skript.
case "buy":
bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearShopList();Entfernt die Regeln für den automatischen Kauf und Verkauf des aktiven Profils.
Es gibt keine Parameter.
void – kein Rückgabewert.
- Löscht BackNewbieAutoBuyRules und BackNewbieAutoSellRules, deaktiviert die gemeinsame Nutzung von AutoBuy/AutoSell, aktualisiert OptionsGump und speichert das Profil. Die Liste der Beute ändert sich nicht; Das Fehlen eines Profils führt zu einer leeren Aktion.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.ClearShopList");
UO.ClearShopList();Parameter und Ablauf:
- Entfernt die Regeln für den automatischen Kauf und Verkauf des aktiven Profils.
UO.ClearShopList();Parameter und Ablauf:
- Entfernen Sie die Regel zum Kauf von Bandagen zusammen mit den übrigen Handelsregeln.
return RunScenario();
object? RunScenario()
{
UO.AutoBuy(0x0E21, -1, 10);
UO.ClearShopList();
return null;
}Parameter und Ablauf:
- Das Löschen eines leeren Satzes ist akzeptabel und erstellt keine neue Einstellung.
Shop Listen / Kauf- und Verkaufslisten
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.ClearShopList();
UO.ClearShopList();
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearAutoShopRules:bridge.ClearAutoShopRules().
Interner Implementierungscode; kein eigenständiges Skript.
case "clearshoplist":
bridge.ClearAutoShopRules(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetAutoBuyDelay();Liest die aktuelle automatische Kaufverzögerung aus dem Kundenprofil.
Es gibt keine Parameter.
int – aktuelle Verzögerung in Millisekunden. Die vom Setter geschriebenen Werte sind auf 0…65535 begrenzt. 0 bedeutet keine zusätzliche Verzögerung; Das ist kein Fehler. Wenn kein geladenes Profil vorhanden ist, wird 3 zurückgegeben. Beim Lesen wird weder die Artikelmenge zurückgegeben noch die Transaktion bestätigt.
- Die Einstellung gilt allgemein für das aktuelle Profil: Änderungen in einem anderen Skript oder UI sind beim nächsten Lesen sichtbar. Null ist eine gültige Einstellung, kein Zeichen fehlender Daten und kein Grund, den alten Skript-Cache zurückzugeben.
- Der Standardwert ist 3 ms. Nach dem Senden einer automatischen Operation legt der Manager die Zeit für die nächste erlaubte Operation fest. Früher eingetroffene Lieferantenlisten werden von diesem Durchlauf nicht verarbeitet; Der Getter löst keine Wartezeit aus und sendet selbst keinen Kauf/Verkauf.
- Hierbei handelt es sich nicht um Verzögerungs-MassMove, Drag/Drop oder manuellen Handel. Der neue Wert wird bei der Planung der nächsten Verzögerung angewendet; das bereits zugeordnete Moment wird nicht neu berechnet.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.
object? result = UO.GetAutoBuyDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente. Verzögerung – Zeit in Millisekunden.
- Der Wert spiegelt das Profil zum Zeitpunkt des Anrufs wider. Der gespeicherte var wird später nicht aktualisiert.
var delay = UO.GetAutoBuyDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));Parameter und Ablauf:
- Setter erhält 70000 ms; das zulässige Maximum beträgt 65535. Das Beispiel ändert die Profileinstellung.
- „actual“ muss 65535 enthalten, wenn das Profil geladen wird. Getter gibt den tatsächlichen eingeschränkten Wert zurück und nicht das ursprüngliche Argument 70000.
return RunScenario();
object? RunScenario()
{
UO.SetAutoBuyDelay(70000);
var actual = UO.GetAutoBuyDelay();
UO.Print(Convert.ToString(actual));
return null;
}Parameter und Ablauf:
- Null wird explizit geprüft. Dieses Beispiel ändert das Profil nicht.
- Null Latenz bedeutet nicht, dass der Vorgang abgeschlossen wurde. Überprüfen Sie die Spielobjekte, um das Ergebnis der Transaktion zu ermitteln.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var current = UO.GetAutoBuyDelay();
if (Truth(current == 0))
{
UO.Print("No additional delay");
}
else
{
UO.Print("Delay: " + Convert.ToString(current) + " ms");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAutoBuyDelay:bridge.GetAutoBuyDelay().
Interner Implementierungscode; kein eigenständiges Skript.
case "getautobuydelay":
return new InjectionValue(bridge.GetAutoBuyDelay());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetAutoSellDelay();Liest die aktuelle automatische Verkaufsverzögerung aus dem Kundenprofil.
Es gibt keine Parameter.
int – aktuelle Verzögerung in Millisekunden. Die vom Setter geschriebenen Werte sind auf 0…65535 begrenzt. 0 bedeutet keine zusätzliche Verzögerung; Das ist kein Fehler. Wenn kein geladenes Profil vorhanden ist, wird 3 zurückgegeben. Beim Lesen wird weder die Artikelmenge zurückgegeben noch die Transaktion bestätigt.
- Die Einstellung gilt allgemein für das aktuelle Profil: Änderungen in einem anderen Skript oder UI sind beim nächsten Lesen sichtbar. Null ist eine gültige Einstellung, kein Zeichen fehlender Daten und kein Grund, den alten Skript-Cache zurückzugeben.
- Der Standardwert ist 3 ms. Nach dem Senden einer automatischen Operation legt der Manager die Zeit für die nächste erlaubte Operation fest. Früher eingetroffene Lieferantenlisten werden von diesem Durchlauf nicht verarbeitet; Der Getter löst keine Wartezeit aus und sendet selbst keinen Kauf/Verkauf.
- Hierbei handelt es sich nicht um Verzögerungs-MassMove, Drag/Drop oder manuellen Handel. Der neue Wert wird bei der Planung der nächsten Verzögerung angewendet; das bereits zugeordnete Moment wird nicht neu berechnet.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.
object? result = UO.GetAutoSellDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente. Verzögerung – Zeit in Millisekunden.
- Der Wert spiegelt das Profil zum Zeitpunkt des Anrufs wider. Der gespeicherte var wird später nicht aktualisiert.
var delay = UO.GetAutoSellDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));Parameter und Ablauf:
- Setter erhält 70000 ms; das zulässige Maximum beträgt 65535. Das Beispiel ändert die Profileinstellung.
- „actual“ muss 65535 enthalten, wenn das Profil geladen wird. Getter gibt den tatsächlichen eingeschränkten Wert zurück und nicht das ursprüngliche Argument 70000.
return RunScenario();
object? RunScenario()
{
UO.SetAutoSellDelay(70000);
var actual = UO.GetAutoSellDelay();
UO.Print(Convert.ToString(actual));
return null;
}Parameter und Ablauf:
- Null wird explizit geprüft. Dieses Beispiel ändert das Profil nicht.
- Null Latenz bedeutet nicht, dass der Vorgang abgeschlossen wurde. Überprüfen Sie die Spielobjekte, um das Ergebnis der Transaktion zu ermitteln.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var current = UO.GetAutoSellDelay();
if (Truth(current == 0))
{
UO.Print("No additional delay");
}
else
{
UO.Print("Delay: " + Convert.ToString(current) + " ms");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAutoSellDelay:bridge.GetAutoSellDelay().
Interner Implementierungscode; kein eigenständiges Skript.
case "getautoselldelay":
return new InjectionValue(bridge.GetAutoSellDelay());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetPrice(object? objID);Liest den Item.Price, der dem Kunden für den serial-Artikel bekannt ist.
-
objID– Seriennummer des Objekts oder unterstützter Name von self/backpack/lasttarget/saved object; Numerische Zeichenfolgen und 0x-Zeichenfolgen werden zur Laufzeit aufgelöst.
int – ungeprüfte Konvertierung von uint Item.Price in int. Ein fehlendes Element ergibt 0; Preise über 2147483647 werden als negative int angezeigt.
- Das Team fordert keinen Anbietervorschlag an. Der Wert hängt von den zuvor vom Client empfangenen Daten ab. Null kann auf einen unbekannten/Null-Preis oder das Fehlen eines Artikels hinweisen; Um ein Objekt zu überprüfen, verwenden Sie Exists.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.
object? result = UO.GetPrice(UO.LastTarget());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Das Ergebnis ist ein zwischengespeicherter Item.Price.
var item = UO.LastTarget();
if (Truth(UO.Exists(item)))
{
var price = UO.GetPrice(item);
UO.Print(Convert.ToString(price));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Ein fehlendes Element ergibt 0.
return RunScenario();
object? RunScenario()
{
var price = UO.GetPrice(0);
UO.Print(Convert.ToString(price));
return null;
}Parameter und Ablauf:
- Nur ein neuer Aufruf liest das Modell erneut; Die Pause selbst verlangt keinen Preis.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var item = UO.LastTarget();
var before = UO.GetPrice(item);
await Delay(500);
var after = UO.GetPrice(item);
UO.Print(Convert.ToString(before) + " " + Convert.ToString(after));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: objID (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPrice:bridge.GetPrice(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "getprice":
return new InjectionValue(bridge.GetPrice(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetShopList();Liest die Produkte des letzten aktiven Angebots des NPC-Verkäufers. Ermöglicht die Überprüfung von Art, Menge und Preis vor dem Kauf oder Verkauf.
Es gibt keine Parameter.
Array von string – Array von Strings, Indizes von 0. Jede Zeile: serial|graphic|hue|Betrag|Preis|Name. Seriell – ID spezifische Position, graphic – Typ, hue – Farbe; Die ersten drei Felder werden im 0x-Format geschrieben. Menge – verfügbare Einheiten abzüglich des Entwurfs im Fenster, Preis – Preis einer Einheit, Name – Name. Dies ist keine serial-Liste und keine bool-Liste. Wenn kein Angebot vorliegt, ist das Array leer. Der Name kann | enthalten: Die ersten fünf Trennzeichen definieren die Felder, der Rest ist der Name.
- Öffnen Sie zunächst als normale Spielaktion einen Kauf oder Verkauf am gewünschten NPC und warten Sie, bis der Server ein Angebot macht. Diese Teams selbst suchen nicht nach einem Verkäufer, eröffnen keinen Handel, legen keinen Preis für einen persönlichen Verkäufer fest und übertragen keine Gegenstände zwischen Truhen. ID des Verkäufers wird nicht als Parameter übergeben: Bei mehreren Angeboten wird das letzte verwendet.
- Im Manager wird das Angebot in der Spielsitzung gespeichert. Beim Schließen des grafischen Clients werden der Vorschlag und der Entwurf gespeichert, beim Öffnen wird das Fenster wiederhergestellt. Durch Schließen des Stores selbst, Antworten, Schließen des Servers oder Trennen der Verbindung wird das Angebot entfernt. Autobuy/Autosell Bad Newbie kann es vor dem Skript verarbeiten.
- Beim Lesen werden keine Anfragen an den Server gesendet. Dies ist eine Momentaufnahme der bereits erhaltenen Lieferung, keine Garantie für den aktuellen Bestand an NPC. Das Mengenfeld spiegelt die Einheiten wider, nicht die Anzahl der Reihen/Stapel. ArrayLength(Zeilen) zählt Positionen. Preise hier lesen Sie GetShopList; SendShopReply akzeptiert den Preis nicht.
- Die explizite Liste ersetzt den Entwurf und wird ihm nicht hinzugefügt. Durch Wiederholen eines serial wird die Menge addiert; Die Gesamtsumme ist durch die Gesamtmenge des Artikels im Angebot begrenzt. Unbekannt serial, falsche oder nicht positive Menge lehnt die gesamte Antwort vor dem Absenden ab und speichert das Angebot. Wenn kein Satz vorhanden ist, meldet SendShopReply einen Fehler. Die Zeile „0“ ist kein Rückgängig-Befehl; verwenden "".
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.
object? result = UO.GetShopList();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- GetWord verwendet den Index von 0: 0 - serial, 1 - graphic, 2 - hue, 3 - Menge, 4 - Preis. Vor rows[0] wird die Länge des Arrays überprüft.
var rows = UO.GetShopList();
if (Truth(ArrayLength(rows) == 0))
{
return null;
}
var serial = ReadField(rows[0], 0, "|");
var itemType = ReadField(rows[0], 1, "|");
var amount = Convert.ToInt32(ReadField(rows[0], 3, "|"));
var price = Convert.ToDouble(ReadField(rows[0], 4, "|"));
UO.Print(serial + " / " + itemType + " / " + Convert.ToString(amount) + " / " + Convert.ToString(price));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
string ReadField(object? row, int index, string separator) { string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None); return index >= 0 && index < fields.Length ? fields[index] : ""; }Parameter und Ablauf:
- Nur für das KAUF-Angebot vor der Eröffnung. 0x0E21 – Bandagen, 5 – maximaler Stückpreis, 10 – erforderliche Menge. Die erste geeignete Position wird eingenommen; genaues serial wird aus dem Satz gelesen. Der Code löst nicht den eigentlichen Kauf aus.
return RunScenario();
object? RunScenario()
{
var rows = UO.GetShopList();
for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
{
var row = rows[i];
if (Truth(ReadField(row, 1, "|") == "0x0E21"))
{
var price = Convert.ToDouble(ReadField(row, 4, "|"));
var amount = Convert.ToInt32(ReadField(row, 3, "|"));
if (Truth(price > 0) && Truth(price <= 5) && Truth(amount > 0))
{
if (Truth(amount > 10))
{
amount = 10;
}
UO.SendShopReply(ReadField(row, 0, "|") + ":" + Convert.ToString(amount));
return null;
}
}
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
string ReadField(object? row, int index, string separator)
{
string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
return index >= 0 && index < fields.Length ? fields[index] : "";
}Parameter und Ablauf:
- Die Hilfsfunktion ist vollständig angegeben: Sie summiert das Betragsfeld aller Positionen des angegebenen Typs. Wenn die Klausel leer ist, wird 0 zurückgegeben; Dies ist die Anzahl der verfügbaren Einheiten, nicht die Anzahl der Tiere oder Gegenstände des Charakters.
Shop Listen / Kauf- und Verkaufslisten
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var available = CountOfferedType("0x0E21");
if (Truth(available < 10))
{
UO.Print("Bandage stock below 10: " + Convert.ToString(available));
}
return null;
}
dynamic CountOfferedType(dynamic itemType)
{
var total = 0;
var rows = UO.GetShopList();
for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
{
if (Truth(ReadField(rows[i], 1, "|") == itemType))
{
total = total + Convert.ToInt32(ReadField(rows[i], 3, "|"));
}
}
return total;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
string ReadField(object? row, int index, string separator)
{
string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
return index >= 0 && index < fields.Length ? fields[index] : "";
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GetShopList. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetShopList:bridge.GetShopList().
Interner Implementierungscode; kein eigenständiges Skript.
public InjectionValue GetShopList()
=> new InjectionValue((bridge.GetShopList() ?? Array.Empty<string>()).Select(item => new InjectionValue(item)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.MassPriceMove();
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price);
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price, object? destination);
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price, object? destination, object? x, object? y, object? z);Ermöglicht die Massenübertragung von Artikeln eines TYPE mit automatischer Preisauszeichnung im Bestand Ihres Lieferanten. Die Quelle wird durch die erste manuelle Übertragung ermittelt. Jeder Stapel wird vollständig übertragen und gilt als ein Artikel; Nach seiner Preisanfrage antwortet der Kunde und setzt die Warteschlange erst dann fort.
-
delay– Der erste Parameter ist die Verzögerung zwischen Übertragungsanforderungen in Millisekunden, eine Ganzzahl von 0 bis 2147483647. 350 bedeutet 0,35 Sekunden. Mit 0 wird pro Spielframe nicht mehr als ein nächster Carry gesendet. Zu GrabDelay wird keine Verzögerung hinzugefügt. Ein negativer Wert deaktiviert den Modus und löscht die Warteschlange. zum Ausschalten ist eine eindeutige UO.MassPriceMove()-Notation zu bevorzugen. -
quantity– Der zweite Parameter ist das TOTAL-Limit einzelner Artikel (Artikel), einschließlich der ersten manuellen Übertragung. Ein Stapel gilt als ein Artikel, unabhängig von der Menge darin. 50 bedeutet bis zu 50 ganze Stapel oder 50 einzelne Artikel. Der Stapel wird bei diesem Limit NICHT geteilt. 0 – alle passenden Artikel. Negative Werte sind nicht zulässig. -
type– Der dritte Parameter ist der Artikeltypcode (Grafik/Typ), die Ganzzahl 0..65535, zum Beispiel 0x0EED oder die Zeichenfolge „0x0EED“ für Gold. Dies ist NICHT serial/ID und NICHT der Name AddObject. 0 bestimmt den Typ durch die erste manuelle Übertragung. Bei einem expliziten Typ wird die Warteschlange durch Ziehen eines anderen Typs nicht aktiviert; Der Modus wartet weiterhin auf ein passendes Element. -
price– Der vierte erforderliche Parameter ist der Gesamtpreis 0..2147483647 für jeden angezeigten vollständigen Artikel/Stapel. 0 bedeutet frei, kein Herunterfahren. Negativer Preis wird abgelehnt. -
destination– Der fünfte optionale Parameter ist serial oder der gespeicherte Name des Containers im Inventar Ihres Anbieters. Bei Fehlen wird es aus dem manuellen Reset übernommen. Von einem gewöhnlichen Rucksack, einer Truhe am Boden und dem Ziel=0 wird hier abgewichen: Es ist unmöglich, einen Preis am Boden festzulegen. -
x– Sechster Parameter – X im Vendor-Container: -1 oder 65535 für automatische Platzierung, andernfalls 0..65535. Wird nur zusammen mit Y und Z angezeigt. -
y– Siebter Parameter – Y im Vendor-Container: -1/65535 für automatische Platzierung, andernfalls 0..65535. Wird nur zusammen mit X und Z angegeben. -
z– Der achte Parameter ist die Höhe -128..127, innerhalb des Containers normalerweise 0. Ohne explizites X/Y/Z werden mit einem gegebenen Ziel -1,-1,0 verwendet; Beim manuellen Zuweisen wird der Reset-Speicherort übernommen.
void: kein Wert. Durch Aktivieren von MassPriceMove wird die manuelle Probenwartezeit aktiviert. Übertragungs- und Preisnachrichten weisen auf eingereichte Anfragen hin und stellen keine Garantie für die Serverakzeptanz dar.
- Formulare mit den Argumenten 0, 4, 5 oder 8. Genaue Reihenfolge: Verzögerung, Menge, type, Preis, Ziel, x, y, z. Partielle Koordinatentripel werden nicht unterstützt.
- Rufen Sie zuerst den Befehl auf, heben Sie dann das gesamte entsprechende Element auf und ziehen Sie es. Geben Sie 0 ein und merken Sie sich TYPE; Ein expliziter Typ überspringt manuelle Umbrüche anderer Typen. Als Quelle wird immer das erste passende Element übernommen.
- Die Menge beinhaltet den ersten manuellen Artikel. 50 bedeutet 50 volle Stapel von 100, nicht 50 Einheiten vom Stapel. 0 – alle geeigneten geraden Gegenstände. Die Farbe wird nicht gefiltert und verschachtelte Container werden nicht erweitert.
- Es gelten die AllPrice-Preisanfrageerkennungsregeln, einschließlich ASCII/Unicode und 10-Sekunden-Wartezeit. Pausenverzögerung – Mindestintervall: Ein langsamer Server erhöht es, um die Preise nicht zu verwirren.
- Der allgemeine Modus AllPrice muss nicht aktiviert werden. Der Preis dieser Operation hat Vorrang vor AllPrice. Das Ändern des Preises AllPrice oder das manuelle Übertragen zusätzlicher Artikel während der Warteschlange wird nicht empfohlen: Eine unbekannte Antwort oder ein Serverausfall unterbricht die Warteschlange.
- MassPriceMove() schaltet die aktuelle Übertragungswarteschlange ab und bricht die ausstehende Preisantwort ab; das allgemeine AllPrice, sofern es separat aktiviert wurde, bleibt erhalten. TerminateAll() schaltet beide Modi aus. Dies ist eine Warteschlange, die mit MassMove gemeinsam ist: Die neue Aktivierung ersetzt die alte.
- Wird die Preisanfrage nicht erkannt, verlässt der Befehl den Dialog zur manuellen Eingabe und stoppt weitere Übertragungen. Serverausfall, Tod, Kartenänderung und nicht verfügbare Gegenstände/Container funktionieren ebenfalls nicht mehr.
- Wiederholtes korrektes Aufrufen desselben Befehls, während der Modus noch auf das erste Ziehen mit der Maus wartet, schaltet das Warten ab: Deaktivieren MassMove/MassPriceMove erscheint direkt im Spielfenster. Beim nächsten Anruf wird der Modus wieder aktiviert. Verwenden Sie nach der ersten Übertragung das Formular ohne Argumente, um die verbleibende Warteschlange zu stoppen. Bereits gesendete Anfragen werden nicht zurückgesetzt.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.MassPriceMove");
UO.MassPriceMove();Parameter und Ablauf:
- Verzögerung=350 ms; Menge=50 der einzelnen Artikel, einschließlich des ersten manuellen Artikels; type=0 merkt sich das TYPE-Beispiel; Preis=125 für jeden gesamten Artikel.
- Ziel und Koordinaten fehlen: Ziehen Sie die Probe direkt in das Inventar Ihres Anbieters.
- Wenn die ursprünglichen Stapel 100 sind, werden maximal 50 volle Stapel übertragen. Jeder erhält nach der Serveranfrage einen Preis 125.
UO.MassPriceMove(350, 50, 0, 125);
UO.Print("Drag one complete stack into your vendor bag");Parameter und Ablauf:
- AddObject fordert Sie auf, eine Lieferantentasche auszuwählen und speichert sie als Vendor_bag. Dies ist das ID-Ziel; type bleibt Code 0x0F7A.
- Verzögerung=500, Menge=0 ohne Begrenzung, type=0x0F7A, Preis=250, Ziel=vendor_bag.
- X/Y/Z fehlt: -1,-1,0. Um eine Warteschlange zu starten, ziehen Sie manuell ein Element des entsprechenden Typs; Daraus wird der Originalbeutel ermittelt.
return RunScenario();
object? RunScenario()
{
UO.AddObject("vendor_bag");
UO.MassPriceMove(500, 0, "0x0F7A", 250, "vendor_bag");
UO.Print("Now drag one matching item from the source");
return null;
}Parameter und Ablauf:
- Verzögerung=350 ms; Menge=10 volle Artikel; type=itemType=0x0EED; Preis=1000 für jeden vollen Stapel.
- Destination=vendorBag ist das echte ID der Taschen Ihres Lieferanten. Ersetzen Sie das Beispiel. Dies ist der fünfte Parameter, nicht der vierte.
- x=60, y=70 ist der Platz in dieser Tasche, z=0. Dies sind nicht die Koordinaten des Charakters auf der Karte.
- Nach dem Aufruf ziehen Sie das entsprechende Sample manuell per Drag & Drop aus der Quelle. Wenn der Server die Platzierung ablehnt, werden weitere Anfragen gestoppt.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var itemType = "0x0EED";
var vendorBag = "0x40005678";
UO.MassPriceMove(350, 10, itemType, 1000, vendorBag, 60, 70, 0);
return null;
}
}Parameter und Ablauf:
- Ohne Argumente deaktiviert der Befehl die allgemeine Massenübertragungswarteschlange und löscht die ausstehende Preisantwort.
- Bereits vom Server akzeptierte Preise und Überweisungen werden nicht zurückgesetzt. Um andere Vorgänge zu stoppen und AllPrice separat zu aktivieren, verwenden Sie UO.TerminateAll().
Shop Listen / Kauf- und Verkaufslisten
UO.MassPriceMove();C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
Interner Implementierungscode; kein eigenständiges Skript.
case "masspricemove":
if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);
else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),
NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),
NumberConversions.ToInt(arguments[3]),
arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,
arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);
break;Parameter: delay (Any), quantity (Any), type (Any), price (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
Interner Implementierungscode; kein eigenständiges Skript.
case "masspricemove":
if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);
else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),
NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),
NumberConversions.ToInt(arguments[3]),
arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,
arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);
break;Parameter: delay (Any), quantity (Any), type (Any), price (Any), destination (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
Interner Implementierungscode; kein eigenständiges Skript.
case "masspricemove":
if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);
else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),
NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),
NumberConversions.ToInt(arguments[3]),
arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,
arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);
break;
UO.MassPriceMove(delay, quantity, type, price, destination, x, y, z) — UO.MassPriceMove(Any,Any,Any,Any,Any,Any,Any,Any)
Parameter: delay (Any), quantity (Any), type (Any), price (Any), destination (Any), x (Any), y (Any), z (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
Interner Implementierungscode; kein eigenständiges Skript.
case "masspricemove":
if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);
else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),
NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),
NumberConversions.ToInt(arguments[3]),
arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,
arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Sell(object? @type);
void UO.Sell(object? @type, object? color);
void UO.Sell(object? @type, object? color, object? quantity);Erstellt, aktualisiert oder löscht eine automatische Verkaufsregel in der Hauptstandardliste des aktuellen Bad Newbie-Profils. Der Befehl konfiguriert die zukünftige Verarbeitung des Angebots des NPC-Verkäufers; sagt nicht „Kaufen/Verkaufen“, eröffnet kein Geschäft und bestätigt die Transaktion nicht. Vollständiger Vorgang: Einträge speichern.
-
type– Grafisches Produkt 0..65535: zum Beispiel 0x0F7A – Black Pearl, 0x0F51 – Dolch. Dies ist nicht das serial des Verkäufers/Artikels und nicht das body des Charakters. Eine negative Zahl oder eine Zahl größer als 65535 wird abgelehnt. Hier ist 0xFFFF ein spezifisches graphic, keine Maske aller Güter. -
color– Produktfarbton: negative Zahl oder 0xFFFF – beliebig; 0 – nur unlackierte Artikel. Für präzises hue verwenden Sie 0..65534. Verwenden Sie keine Farben außerhalb dieses Bereichs: Ein positiver Wert wird in ushort umgewandelt. Der Standardwert ist 1. -
quantity– Die Anzahl der Wareneinheiten pro erhaltenem Ladenangebot, nicht die Anzahl der Stapel und nicht das gewünschte Guthaben im Rucksack. Das Positive ist auf 65535 begrenzt. 0/negative entfernt die Übereinstimmungsregel type+color aus der Standardeinstellung; es ist nicht „die ganze Menge“. Der Standardwert ist 1.
void – kein Wert. Rufen Sie auf einer separaten Leitung an, ohne var result = und ohne if. Das Ende des Anrufs bedeutet das Ende der Einrichtung, nicht eine erfolgreiche Transaktion. Wenn kein Profil vorhanden oder ungültig graphic ist, wird die Regel nicht erstellt; Es gibt kein numerisches Ergebnis des Fehlers. Überprüfen Sie die tatsächliche Transaktion anhand des Inhalts des Rucksacks, des Goldes und der Serverantwort.
- Sell erhält Argumente von 1 bis 3; rechts fehlt Farbe=-1, Menge=1.
- Der Regelschlüssel ist graphic und die Maske hue im Standard. Der wiederholte Aufruf ersetzt die Menge und andere Felder dieser Regel; Es wird kein weiteres Limit zum vorherigen hinzugefügt. Ohne Preis/Name werden die bisherigen Einschränkungen für diese Felder aufgehoben.
- Neue/aktualisierte Regel „Enabled=true“. Der allgemeine Kauf-/Verkaufsschalter wird basierend auf dem Vorhandensein von Regeln eingestellt und das Profil wird gespeichert. Die deaktivierte Standardliste selbst ist nicht automatisch aktiviert: Sowohl der allgemeine Modus als auch die Liste müssen in den Einstellungen aktiviert sein. Andere benannte Listen werden nicht geändert.
- Die Bearbeitung beginnt mit dem Eintreffen einer Warenliste. Das Limit wird insgesamt für die Zeilen ausgegeben, die einer Regel entsprechen. Für jede Position wird die erste passende aktivierte Regel verwendet. Durch die Wiedereröffnung des Geschäfts erhalten Sie ein neues Angebot und ein neues Limit, solange die Regel aktiv ist.
- Arbeitet bei Full mit Bad Newbie; In Classic ist diese Automatisierung deaktiviert. Ersetzen Sie nicht den Namen NPC oder den Namen der gespeicherten Liste in den Parametern. AutoBuyEx fügt Preis-/Namensfilter beim Kauf hinzu; ClearShopList setzt beide Automatisierungen vollständig zurück.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.Sell");
UO.Sell(0x0F51);Parameter und Ablauf:
- 0x0F51 – graphic Dolch, beliebig hue, 1 – einer pro Satz. Das Team wählt kein bestimmtes serial aus und testet nicht die Nützlichkeit/den Wert des Gegenstands. Wählen Sie die genaue type/Farbe Ihres Artikels aus.
UO.Sell(0x0F51);Parameter und Ablauf:
- 0x1F03 ist ein Beispiel für eine Standardrobe graphic, 0x0044 ist ein Beispiel für hue. Ersetzen Sie beides durch Ihr Produkt. 5 – Einheiten, nicht Preis; Die Mindestpreis- und Namensparameter Sell/AutoSell werden nicht akzeptiert. Der Server muss den Artikel in das Verkaufsangebot aufnehmen.
return RunScenario();
object? RunScenario()
{
UO.Sell(0x1F03, 0x0044, 5);
return null;
}Parameter und Ablauf:
- Der Prozedurname ist willkürlich; itemType und hue sind seine Parameter. Andere Regeln, Einkäufe und benutzerdefinierte benannte Listen bleiben erhalten. Wenn eine andere aktivierte Liste diese Artikel ebenfalls verkauft, deaktivieren Sie die entsprechende Regel darin über die Einstellungen.
Shop Listen / Kauf- und Verkaufslisten
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
RemoveSaleRule(0x0F51, -1);
RemoveSaleRule(0x1F03, 0x0044);
return null;
}
void RemoveSaleRule(dynamic itemType, dynamic hue)
{
UO.Sell(itemType, hue, 0);
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: type (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;Parameter: type (Any), color (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;Parameter: type (Any), color (Any), quantity (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SendShopReply(object? reply);Sendet die Produktauswahl an das letzte aktive Angebot des NPC-Verkäufers. Die Richtung der Transaktion wird durch das Angebot bestimmt: Kauf von NPC oder Verkauf an ihn.
-
reply– String: „serial:quantity“; mehrere Positionen werden durch |, ; getrennt oder Komma. Anstelle von: sagen wir =. Seriell – ID Positionen von GetShopList, dezimal oder 0x, nicht graphic und nicht ID Verkäufer. Die Menge ist eine positive ganze Zahl von Einsen, nicht die Anzahl der Stapel. ohne es wird 1 genommen. „Akzeptieren“ berücksichtigt keine Groß-/Kleinschreibung oder „1“ bestätigt das Entwurfsfenster; Eine leere Zeile bricht die Transaktion mit einer leeren Antwort ab.
void - Es gibt keinen Rückgabewert: weder true/false, noch den Betrag, noch die Kaufbestätigung. Der Server entscheidet, ob die Transaktion gültig ist. Überprüfen Sie nach dem Absenden, ob aktualisierte Artikel, Gold oder Servernachrichten vorhanden sind.
- Öffnen Sie zunächst als normale Spielaktion einen Kauf oder Verkauf am gewünschten NPC und warten Sie, bis der Server ein Angebot macht. Diese Teams selbst suchen nicht nach einem Verkäufer, eröffnen keinen Handel, legen keinen Preis für einen persönlichen Verkäufer fest und übertragen keine Gegenstände zwischen Truhen. ID des Verkäufers wird nicht als Parameter übergeben: Bei mehreren Angeboten wird das letzte verwendet.
- Im Manager wird das Angebot in der Spielsitzung gespeichert. Beim Schließen des grafischen Clients werden der Vorschlag und der Entwurf gespeichert, beim Öffnen wird das Fenster wiederhergestellt. Durch Schließen des Stores selbst, Antworten, Schließen des Servers oder Trennen der Verbindung wird das Angebot entfernt. Autobuy/Autosell Bad Newbie kann es vor dem Skript verarbeiten.
- Beim Lesen werden keine Anfragen an den Server gesendet. Dies ist eine Momentaufnahme der bereits erhaltenen Lieferung, keine Garantie für den aktuellen Bestand an NPC. Das Mengenfeld spiegelt die Einheiten wider, nicht die Anzahl der Reihen/Stapel. ArrayLength(Zeilen) zählt Positionen. Preise hier lesen Sie GetShopList; SendShopReply akzeptiert den Preis nicht.
- Die explizite Liste ersetzt den Entwurf und wird ihm nicht hinzugefügt. Durch Wiederholen eines serial wird die Menge addiert; Die Gesamtsumme ist durch die Gesamtmenge des Artikels im Angebot begrenzt. Unbekannt serial, falsche oder nicht positive Menge lehnt die gesamte Antwort vor dem Absenden ab und speichert das Angebot. Wenn kein Satz vorhanden ist, meldet SendShopReply einen Fehler. Die Zeile „0“ ist kein Rückgängig-Befehl; verwenden "".
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.SendShopReply");
UO.SendShopReply("");Parameter und Ablauf:
- Bis zu 3 erste Positionseinheiten werden ausgewählt; serial ist nicht harthäutig. Bei einem Kaufangebot handelt es sich um einen Kauf, bei einem Verkaufsangebot um einen Verkauf. Prüfen Sie, welches Angebot Sie geöffnet haben.
var rows = UO.GetShopList();
if (Truth(ArrayLength(rows) == 0))
{
return null;
}
var amount = Convert.ToInt32(ReadField(rows[0], 3, "|"));
if (Truth(amount > 3))
{
amount = 3;
}
if (Truth(amount > 0))
{
UO.SendShopReply(ReadField(rows[0], 0, "|") + ":" + Convert.ToString(amount));
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
string ReadField(object? row, int index, string separator) { string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None); return index >= 0 && index < fields.Length ? fields[index] : ""; }Parameter und Ablauf:
- Nur für KAUF-Angebot: Budget 30, Typ 0x0E21. Von jedem förderfähigen Artikel wird eine Einheit ausgewählt, wenn der Preis positiv ist und innerhalb des verbleibenden Budgets liegt. Die Zeichenfolge wird mit |; verkettet. ein SendShopReply sendet die gesamte Auswahl.
return RunScenario();
object? RunScenario()
{
double budget = 30;
var reply = "";
var rows = UO.GetShopList();
for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
{
var row = rows[i];
if (Truth(ReadField(row, 1, "|") == "0x0E21"))
{
var price = Convert.ToDouble(ReadField(row, 4, "|"));
var amount = Convert.ToInt32(ReadField(row, 3, "|"));
if (Truth(price > 0) && Truth(price <= budget) && Truth(amount > 0))
{
if (Truth(reply != ""))
{
reply = reply + "|";
}
reply = reply + ReadField(row, 0, "|") + ":1";
budget = budget - price;
}
}
}
if (Truth(reply != ""))
{
UO.SendShopReply(reply);
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
string ReadField(object? row, int index, string separator)
{
string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
return index >= 0 && index < fields.Length ? fields[index] : "";
}Parameter und Ablauf:
- Mengen im Schaufenster vorwählen. „Akzeptieren“ sendet genau diesen Entwurf; Nach dem Schließen des Spielfensters wird es gespeichert. Wenn nichts ausgewählt ist, wird eine leere Antwort gesendet. „1“ ist ein Synonym für Bestätigung, nicht für serial Betreff.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SendShopReply("accept");
return null;
}
}Parameter und Ablauf:
- Eine leere Zeile sendet eine leere Antwort und schließt das aktive Angebot. Die GetShopList-Prüfung vermeidet den Aufruf, wenn keine Güter vorhanden sind, unterscheidet aber nicht zwischen einem leeren und einem fehlenden Satz.
Shop Listen / Kauf- und Verkaufslisten
if (Truth(ArrayLength(UO.GetShopList()) > 0))
{
UO.SendShopReply("");
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: reply (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.SendShopReply. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendShopReply:bridge.SendShopReply(reply.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:reply.ToString().
Interner Implementierungscode; kein eigenständiges Skript.
public void SendShopReply(InjectionValue reply) => bridge.SendShopReply(reply.ToString());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetAutoBuyDelay(object? value);Legt die automatische Kaufverzögerung fest und speichert das aktuelle Profil.
-
value– Erforderliche Anzahl von Millisekunden. Ein negativer Wert ist auf 0 begrenzt, ein Wert größer als 65535 ist auf die Zahl 65535 begrenzt. 0 deaktiviert die zusätzliche Verzögerung, deaktiviert jedoch nicht den automatischen Handel selbst.
void – kein Rückgabewert. Rufen Sie als separate Leitung auf und lesen Sie dann mit GetAutoBuyDelay() die wirksame Einstellung ab. Wenn kein Profil vorhanden ist, speichert der Setter nichts; Der Getter gibt in diesem Zustand standardmäßig 3 ms aus.
- Die Einstellung gilt allgemein für das aktuelle Profil: Änderungen in einem anderen Skript oder UI sind beim nächsten Lesen sichtbar. Null ist eine gültige Einstellung, kein Zeichen fehlender Daten und kein Grund, den alten Skript-Cache zurückzugeben.
- Der Standardwert ist 3 ms. Nach dem Senden einer automatischen Operation legt der Manager die Zeit für die nächste erlaubte Operation fest. Früher eingetroffene Lieferantenlisten werden von diesem Durchlauf nicht verarbeitet; Der Getter löst keine Wartezeit aus und sendet selbst keinen Kauf/Verkauf.
- Hierbei handelt es sich nicht um Verzögerungs-MassMove, Drag/Drop oder manuellen Handel. Der neue Wert wird bei der Planung der nächsten Verzögerung angewendet; das bereits zugeordnete Moment wird nicht neu berechnet.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.SetAutoBuyDelay");
UO.SetAutoBuyDelay(350);Parameter und Ablauf:
- Wert=350 – Millisekunden zwischen zulässigen automatischen Vorgängen.
- Die Einstellung wird im aktuellen Profil gespeichert und ist für andere Skripte sichtbar.
UO.SetAutoBuyDelay(350);
UO.Print(Convert.ToString(UO.GetAutoBuyDelay()));Parameter und Ablauf:
- Value=0 hat eine eigenständige Bedeutung; wird nicht durch den vorherigen Wert ungleich Null ersetzt.
- Lediglich die Verzögerung ändert sich. Regeln, Listen und eine allgemeine automatische Handelsumschaltung werden separat festgelegt.
return RunScenario();
object? RunScenario()
{
UO.SetAutoBuyDelay(0);
var actual = UO.GetAutoBuyDelay();
if (Truth(actual == 0))
{
UO.Print("Delay disabled");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- request=70000 überschreitet das Maximum. Applied liest das Profil nach Setter-Einschränkungen.
- Wenn das Profil geladen wird, ist das Ergebnis 65535. Um zur Standardverzögerung zurückzukehren, rufen Sie den Setter explizit mit 3 auf.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var requested = 70000;
UO.SetAutoBuyDelay(requested);
var applied = UO.GetAutoBuyDelay();
UO.Print("Requested: " + Convert.ToString(requested));
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: value (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyDelay:bridge.SetAutoBuyDelay(state.AutoBuyDelay).
Interner Implementierungscode; kein eigenständiges Skript.
case "setautobuydelay":
state.AutoBuyDelay = Math.Max(0, Arg(0));
bridge.SetAutoBuyDelay(state.AutoBuyDelay);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetAutoSellDelay(object? value);Legt die automatische Verkaufsverzögerung fest und speichert das aktuelle Profil.
-
value– Erforderliche Anzahl von Millisekunden. Ein negativer Wert ist auf 0 begrenzt, ein Wert größer als 65535 ist auf die Zahl 65535 begrenzt. 0 deaktiviert die zusätzliche Verzögerung, deaktiviert jedoch nicht den automatischen Handel selbst.
void – kein Rückgabewert. Rufen Sie als separate Leitung auf und lesen Sie dann mit GetAutoSellDelay() die wirksame Einstellung ab. Wenn kein Profil vorhanden ist, speichert der Setter nichts; Der Getter gibt in diesem Zustand standardmäßig 3 ms aus.
- Die Einstellung gilt allgemein für das aktuelle Profil: Änderungen in einem anderen Skript oder UI sind beim nächsten Lesen sichtbar. Null ist eine gültige Einstellung, kein Zeichen fehlender Daten und kein Grund, den alten Skript-Cache zurückzugeben.
- Der Standardwert ist 3 ms. Nach dem Senden einer automatischen Operation legt der Manager die Zeit für die nächste erlaubte Operation fest. Früher eingetroffene Lieferantenlisten werden von diesem Durchlauf nicht verarbeitet; Der Getter löst keine Wartezeit aus und sendet selbst keinen Kauf/Verkauf.
- Hierbei handelt es sich nicht um Verzögerungs-MassMove, Drag/Drop oder manuellen Handel. Der neue Wert wird bei der Planung der nächsten Verzögerung angewendet; das bereits zugeordnete Moment wird nicht neu berechnet.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.SetAutoSellDelay");
UO.SetAutoSellDelay(350);Parameter und Ablauf:
- Wert=350 – Millisekunden zwischen zulässigen automatischen Vorgängen.
- Die Einstellung wird im aktuellen Profil gespeichert und ist für andere Skripte sichtbar.
UO.SetAutoSellDelay(350);
UO.Print(Convert.ToString(UO.GetAutoSellDelay()));Parameter und Ablauf:
- Value=0 hat eine eigenständige Bedeutung; wird nicht durch den vorherigen Wert ungleich Null ersetzt.
- Lediglich die Verzögerung ändert sich. Regeln, Listen und eine allgemeine automatische Handelsumschaltung werden separat festgelegt.
return RunScenario();
object? RunScenario()
{
UO.SetAutoSellDelay(0);
var actual = UO.GetAutoSellDelay();
if (Truth(actual == 0))
{
UO.Print("Delay disabled");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- request=70000 überschreitet das Maximum. Applied liest das Profil nach Setter-Einschränkungen.
- Wenn das Profil geladen wird, ist das Ergebnis 65535. Um zur Standardverzögerung zurückzukehren, rufen Sie den Setter explizit mit 3 auf.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var requested = 70000;
UO.SetAutoSellDelay(requested);
var applied = UO.GetAutoSellDelay();
UO.Print("Requested: " + Convert.ToString(requested));
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: value (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellDelay:bridge.SetAutoSellDelay(state.AutoSellDelay).
Interner Implementierungscode; kein eigenständiges Skript.
case "setautoselldelay":
state.AutoSellDelay = Math.Max(0, Arg(0));
bridge.SetAutoSellDelay(state.AutoSellDelay);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Shop();Druckt eine lokale Liste der Handelslinien.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- ExecuteLegacyManualAlias liest Bridge.GetShopList und verkettet die Zeilen über „|“ für SystemMessage. Das Verkäufermenü öffnet sich nicht, der Kauf/Verkauf wird nicht durchgeführt.
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.Shop");
UO.Shop();Parameter und Ablauf:
- Druckt eine lokale Liste der Handelslinien.
UO.Shop();Parameter und Ablauf:
- ExecuteLegacyManualAlias liest Bridge.GetShopList und verkettet die Zeilen über „|“ für SystemMessage. Das Verkäufermenü öffnet sich nicht, der Kauf/Verkauf wird nicht durchgeführt.
return RunScenario();
object? RunScenario()
{
UO.Shop();
UO.Print(UO.GetArrayLength(UO.GetShopList()));
return null;
}Parameter und Ablauf:
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Shop();
UO.TextOpen();
UO.TextPrint("Shop list was printed in the journal");
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(string.Join(" | ", bridge.GetShopList())). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetShopList:bridge.GetShopList().
Interner Implementierungscode; kein eigenständiges Skript.
case "shop": SystemMessage(string.Join(" | ", bridge.GetShopList())); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.VendorMenu(object? vendor);
void UO.VendorMenu(object? menu, object? choice);Verwendet einen Verkäufer oder registriert einen permanenten Menü-Hook.
-
vendor– Formular mit einem Argument: serial/Alias des Verkäuferobjekts. -
menu– Ein Formular mit zwei Argumenten: einem Titel und einem Menüelement, beide als Text. Dies ist eine andere Operation; das erste Argument ist nicht serial. -
choice– Ein Formular mit zwei Argumenten: einem Titel und einem Menüelement, beide als Text. Dies ist eine andere Operation; das erste Argument ist nicht serial.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Ein Argument nennt Bridge.UseObject. Die beiden Argumente rufen „bridge.AddMenuHook(menu,choice,true)“ auf, wobei „true“ einen wiederholbaren Hook bedeutet.
- Kauft oder verkauft nicht automatisch. Das Öffnen und Auswählen von Menüs wird vom Server bestimmt; Der registrierte Hook wirkt auf die nächsten passenden Menüs, bis er abgebrochen wird.
- Bei Menü-/Auswahlformularen wählt der Manager das erste Menü aus, dessen Titel Eingabeaufforderung enthält, ohne Berücksichtigung der Groß- und Kleinschreibung; SessionMenu wählt das erste Element aus, dessen Name eine Auswahl enthält, wobei die Groß- und Kleinschreibung ebenfalls nicht berücksichtigt wird. Leerer Text ist für jeden geeignet; Numerischer Text ist ein Fragment des Namens, kein Index. Bei erfolgreicher Auswahl wird eine Antwort gesendet und das lokale Menü geschlossen. Ein einmaliger Hook wird erst nach erfolgreicher Auswahl gelöscht; Es bleibt ein permanenter Haken übrig.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.VendorMenu");
UO.VendorMenu("lasttarget");Parameter und Ablauf:
- Verwendet einen Verkäufer oder registriert einen permanenten Menü-Hook.
if (Truth(UO.Exists("lasttarget")))
{
UO.VendorMenu("lasttarget");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Ein Argument nennt Bridge.UseObject. Die beiden Argumente rufen „bridge.AddMenuHook(menu,choice,true)“ auf, wobei „true“ einen wiederholbaren Hook bedeutet.
return RunScenario();
object? RunScenario()
{
UO.VendorMenu("Vendor", "Buy");
return null;
}Parameter und Ablauf:
- Kauft oder verkauft nicht automatisch. Das Öffnen und Auswählen von Menüs wird vom Server bestimmt; Der registrierte Hook wirkt auf die nächsten passenden Menüs, bis er abgebrochen wird.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.VendorMenu("Vendor", "Buy");
UO.Print(UO.MenuHookPresent());
UO.CancelMenu();
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: vendor (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddMenuHook:bridge.AddMenuHook(Text(0), Text(1), true). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Interner Implementierungscode; kein eigenständiges Skript.
case "vendormenu":
if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);
else bridge.UseObject(Arg(0, bridge.LastTarget));
break;Parameter: menu (Any), choice (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddMenuHook:bridge.AddMenuHook(Text(0), Text(1), true). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Interner Implementierungscode; kein eigenständiges Skript.
case "vendormenu":
if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);
else bridge.UseObject(Arg(0, bridge.LastTarget));
break;