Repository navigation
FR UO Topic trade
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Accueil · C# · IDE · UO API · A–Z · Exemples · Langues
Fenêtre d'échange sécurisé entre joueurs : participant, conteneur, statut, confirmation et annulation.
| Sujet | Commandes et explications |
|---|---|
| IsTrade | UO.IsTrade |
| Adversaire commercial | UO.GetTradeOpponent · UO.GetTradeOpponentName |
| Conteneur commercial | UO.GetTradeContainer |
| ConfirmTrade | UO.ConfirmTrade |
| CancelTrade | UO.CancelTrade |
UO.IsTrade · UO.TradeCount · UO.TradeCheck · UO.TradeContainer · UO.GetTradeContainer · UO.TradeOpponent · UO.GetTradeOpponent · UO.TradeName · UO.GetTradeOpponentName · UO.ConfirmTrade · UO.CancelTrade
Chaque carte de commande possède plusieurs scénarios indépendants : code direct, fonctions et classes. Vous trouverez ci-dessous une sélection de courts scénarios ; des restrictions et une analyse complète sont à prévoir.
Paramètres, résultat et tous les scénarios
var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Paramètres, résultat et tous les scénarios
var result = UO.ConfirmTrade(1);
if (Truth(Truth(result) == true))
{
UO.Print("Local request processed");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.CancelTrade(object? tradeNum);Annule l'échange sélectionné et ferme sa fenêtre.
-
tradeNum— Entier : numéro de fenêtre actuel de 1 à TradeCount(). 0 et les valeurs négatives ne sont pas autorisées. Ce n'est pas serial.
int : 1 (condition remplie) - la fenêtre est trouvée, fermée et une demande d'annulation est envoyée via la fermeture ; 0 (condition non remplie) - pas de fenêtre. Cela n'attend pas une réponse du serveur. Annuler à nouveau la fenêtre fermée n’envoie pas le deuxième paquet.
Le résultat de la commande est un indicateur numérique : 1 signifie une condition remplie, 0 signifie une condition non remplie. Après var result = command(...) vérifiez si (result != 0) ou if (result == 0). Enregistrez le résultat d'un appel : un appel répété peut effectuer à nouveau l'action ou lire l'état qui a déjà changé.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
object? result = UO.CancelTrade(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel est effectué une seule fois, le résultat est stocké dans valeur/résultat. 0 est le premier index, 1 est le premier nombre (voir la syntaxe de cette commande). HEX affiche le serial numérique ; Convert.ToString — nombre ou chaîne.
var result = UO.CancelTrade(1);
if (Truth(Truth(result) == true))
{
UO.Print("Local request processed");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
return RunScenario();
object? RunScenario()
{
var tradeNumber = 2;
if (Truth(UO.TradeCount() >= tradeNumber))
{
var result = UO.CancelTrade(tradeNumber);
UO.Print(Convert.ToString(result));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 expectedPartner = UO.GetTradeOpponent(1);
var result = ApplyToPartner(1, expectedPartner);
UO.Print(Convert.ToString(result));
return null;
}
dynamic ApplyToPartner(dynamic tradeNumber, dynamic expectedPartner)
{
if (Truth(expectedPartner == 0))
{
return false;
}
if (Truth(UO.GetTradeOpponent(tradeNumber) != expectedPartner))
{
return false;
}
return UO.CancelTrade(tradeNumber);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: tradeNum (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelTrade:bridge.CancelTrade(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "canceltrade": return new InjectionValue(bridge.CancelTrade(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ConfirmTrade(object? tradeNum);Définit l’indicateur de consentement personnalisé sur l’échange sélectionné.
-
tradeNum— Entier : numéro de fenêtre actuel de 1 à TradeCount(). 0 et les valeurs négatives ne sont pas autorisées. Ce n'est pas serial.
int : 1 (condition remplie) - la fenêtre est trouvée et son propre accord est activé (ou a déjà été activé) ; 0 (condition non remplie) - pas de fenêtre. Ne confirme pas le transfert des éléments par le serveur. Rappeler ne supprime pas le consentement.
Le résultat de la commande est un indicateur numérique : 1 signifie une condition remplie, 0 signifie une condition non remplie. Après var result = command(...) vérifiez si (result != 0) ou if (result == 0). Enregistrez le résultat d'un appel : un appel répété peut effectuer à nouveau l'action ou lire l'état qui a déjà changé.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
object? result = UO.ConfirmTrade(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel est effectué une seule fois, le résultat est stocké dans valeur/résultat. 0 est le premier index, 1 est le premier nombre (voir la syntaxe de cette commande). HEX affiche le serial numérique ; Convert.ToString — nombre ou chaîne.
var result = UO.ConfirmTrade(1);
if (Truth(Truth(result) == true))
{
UO.Print("Local request processed");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
return RunScenario();
object? RunScenario()
{
var tradeNumber = 2;
if (Truth(UO.TradeCount() >= tradeNumber))
{
var result = UO.ConfirmTrade(tradeNumber);
UO.Print(Convert.ToString(result));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 expectedPartner = UO.GetTradeOpponent(1);
var result = ApplyToPartner(1, expectedPartner);
UO.Print(Convert.ToString(result));
return null;
}
dynamic ApplyToPartner(dynamic tradeNumber, dynamic expectedPartner)
{
if (Truth(expectedPartner == 0))
{
return false;
}
if (Truth(UO.GetTradeOpponent(tradeNumber) != expectedPartner))
{
return false;
}
return UO.ConfirmTrade(tradeNumber);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: tradeNum (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ConfirmTrade:bridge.ConfirmTrade(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "confirmtrade": return new InjectionValue(bridge.ConfirmTrade(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTradeContainer(object? tradeNum, object? num);Renvoie le numérique serial de l'un des deux conteneurs d'échange.
-
tradeNum— Entier : numéro de fenêtre actuel de 1 à TradeCount(). 0 et les valeurs négatives ne sont pas autorisées. Ce n'est pas serial. -
num- 1 - propre conteneur, 2 - conteneur du partenaire. Les valeurs restantes renvoient 0.
int : 32 bit serial conteneur ; 0 s'il n'y a pas de fenêtre ou un numéro incorrect. Ce n'est pas type. Le bit de poids fort est conservé : check != 0, pas > 0 ou == true.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
object? result = UO.GetTradeContainer(1, 1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel est effectué une seule fois, le résultat est stocké dans valeur/résultat. 0 est le premier index, 1 est le premier nombre (voir la syntaxe de cette commande). HEX affiche le serial numérique ; Convert.ToString — nombre ou chaîne.
var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Paramètres et déroulement de l’exécution :
- total — instantané du nombre de fenêtres ; index - index/numéro actuel. L'exemple d'énumération ne confirme rien. Dans GetTradeContainer deux appels lisent leur conteneur (1) et celui de quelqu'un d'autre (2) de la première fenêtre (1).
return RunScenario();
object? RunScenario()
{
var ours = UO.GetTradeContainer(1, 1);
var theirs = UO.GetTradeContainer(1, 2);
UO.Print(Hex(ours) + " / " + Hex(theirs));
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 value = ReadTradeValue(1);
UO.Print(Hex(value));
return null;
}
dynamic ReadTradeValue(dynamic index)
{
var total = UO.TradeCount();
if (Truth(index < 1) || Truth(index >= total + 1))
{
return 0;
}
return UO.GetTradeContainer(index, 1);
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: tradeNum (Any), num (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTradeContainer:bridge.GetTradeContainer(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "gettradecontainer": return new InjectionValue(bridge.GetTradeContainer(Arg(0), Arg(1)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTradeOpponent(object? tradeNum);Renvoie le numérique serial du caractère partenaire.
-
tradeNum— Entier : numéro de fenêtre actuel de 1 à TradeCount(). 0 et les valeurs négatives ne sont pas autorisées. Ce n'est pas serial.
int : caractère serial de la fenêtre LocalSerial ; 0 s'il n'y a pas de fenêtre. Pas un conteneur ni un bool ; vérifiez != 0.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
object? result = UO.GetTradeOpponent(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel est effectué une seule fois, le résultat est stocké dans valeur/résultat. 0 est le premier index, 1 est le premier nombre (voir la syntaxe de cette commande). HEX affiche le serial numérique ; Convert.ToString — nombre ou chaîne.
var value = UO.GetTradeOpponent(1);
UO.Print(Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Paramètres et déroulement de l’exécution :
- total — instantané du nombre de fenêtres ; index - index/numéro actuel. L'exemple d'énumération ne confirme rien. Dans GetTradeContainer deux appels lisent leur conteneur (1) et celui de quelqu'un d'autre (2) de la première fenêtre (1).
return RunScenario();
object? RunScenario()
{
var total = UO.TradeCount();
for (int index = (int)(1); index <= total - 0; index += (int)(1))
{
var value = UO.GetTradeOpponent(index);
UO.Print(Convert.ToString(index) + ": " + Hex(value));
}
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 value = ReadTradeValue(1);
UO.Print(Hex(value));
return null;
}
dynamic ReadTradeValue(dynamic index)
{
var total = UO.TradeCount();
if (Truth(index < 1) || Truth(index >= total + 1))
{
return 0;
}
return UO.GetTradeOpponent(index);
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: tradeNum (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTradeOpponent:bridge.GetTradeOpponent(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "gettradeopponent": return new InjectionValue(bridge.GetTradeOpponent(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTradeOpponentName(object? tradeNum);Renvoie le nom du partenaire reçu ainsi que la fenêtre d'échange.
-
tradeNum— Entier : numéro de fenêtre actuel de 1 à TradeCount(). 0 et les valeurs négatives ne sont pas autorisées. Ce n'est pas serial.
string : nom du package d’ouverture de l’échange ; chaîne vide s'il n'y a pas de fenêtre ou de nom. Ne demande plus le nom.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
object? result = UO.GetTradeOpponentName(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel est effectué une seule fois, le résultat est stocké dans valeur/résultat. 0 est le premier index, 1 est le premier nombre (voir la syntaxe de cette commande). HEX affiche le serial numérique ; Convert.ToString — nombre ou chaîne.
var value = UO.GetTradeOpponentName(1);
UO.Print(Convert.ToString(value));Paramètres et déroulement de l’exécution :
- total — instantané du nombre de fenêtres ; index - index/numéro actuel. L'exemple d'énumération ne confirme rien. Dans GetTradeContainer deux appels lisent leur conteneur (1) et celui de quelqu'un d'autre (2) de la première fenêtre (1).
return RunScenario();
object? RunScenario()
{
var total = UO.TradeCount();
for (int index = (int)(1); index <= total - 0; index += (int)(1))
{
var value = UO.GetTradeOpponentName(index);
UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
}
return null;
}Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 value = ReadTradeValue(1);
UO.Print(Convert.ToString(value));
return null;
}
dynamic ReadTradeValue(dynamic index)
{
var total = UO.TradeCount();
if (Truth(index < 1) || Truth(index >= total + 1))
{
return "";
}
return UO.GetTradeOpponentName(index);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: tradeNum (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTradeOpponentName:bridge.GetTradeOpponentName(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "gettradeopponentname": return new InjectionValue(bridge.GetTradeOpponentName(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsTrade();Vérifie une fenêtre d’échange sécurisée ouverte.
Il n'y a pas de paramètres.
int : 1 (condition remplie) - il y a un échange ouvert ; 0 (condition non remplie) - non.
Le résultat de la commande est un indicateur numérique : 1 signifie une condition remplie, 0 signifie une condition non remplie. Après var result = command(...) vérifiez si (result != 0) ou if (result == 0). Enregistrez le résultat d'un appel : un appel répété peut effectuer à nouveau l'action ou lire l'état qui a déjà changé.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.IsTrade();
UO.Print("IsTrade: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel est effectué une seule fois, le résultat est stocké dans valeur/résultat. 0 est le premier index, 1 est le premier nombre (voir la syntaxe de cette commande). HEX affiche le serial numérique ; Convert.ToString — nombre ou chaîne.
var value = UO.IsTrade();
UO.Print(Convert.ToString(value));Paramètres et déroulement de l’exécution :
- avant/après - deux instantanés distincts avec un intervalle de 500 millisecondes. La pause n'attend pas un échange précis ; Entre les lectures, l'état peut changer plusieurs fois.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.IsTrade();
await Delay(500);
var after = UO.IsTrade();
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 value = ReadTradeState();
UO.Print(Convert.ToString(value));
return null;
}
dynamic ReadTradeState()
{
return UO.IsTrade();
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsTrade:bridge.IsTrade().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "istrade": return new InjectionValue(bridge.IsTrade());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TradeCheck(object? windowIndex);
dynamic UO.TradeCheck(object? tradeNum, object? num);
int UO.TradeCheck(object? windowIndex, object? checkbox, object? stateValue);Lit les indicateurs de consentement ; le formulaire à trois paramètres modifie également sa propre case à cocher.
-
windowIndex— Entier : index de la fenêtre actuelle de 0 à TradeCount()-1. Un index négatif ou manquant produit un résultat vide. Ce n'est pas serial. -
tradeNum— Entier : index de la fenêtre actuelle de 0 à TradeCount()-1. Un index négatif ou manquant produit un résultat vide. Ce n'est pas serial. -
num— Forme à deux paramètres uniquement : 1 — propre drapeau, 2 — drapeau du partenaire ; d'autres significations donnent 0. TradeNum commence ici par 0. -
checkbox— Forme à trois paramètres uniquement : 0 — votre propre drapeau, 1 — celui de votre partenaire. Le drapeau de quelqu'un d'autre est seulement lu ; une autre signification est donnée par 0. -
stateValue— Uniquement avec checkbox=0 : 0/false supprime le consentement, tout nombre non nul/true inclut. Si checkbox=1 la valeur est ignorée.
int : 1 (condition remplie) - la case sélectionnée est cochée ; 0 (condition non remplie) - retirée, la fenêtre est manquante ou le côté est incorrect. Le formulaire d'enregistrement renvoie le statut plutôt que l'indication d'une transaction réussie : décocher la case renvoie 0.
Le résultat de la commande est un indicateur numérique : 1 signifie une condition remplie, 0 signifie une condition non remplie. Après var result = command(...) vérifiez si (result != 0) ou if (result == 0). Enregistrez le résultat d'un appel : un appel répété peut effectuer à nouveau l'action ou lire l'état qui a déjà changé.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.TradeCheck(0);
UO.Print("TradeCheck: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- UO.TradeCheck(0) et UO.TradeCheck(0,1) lisent leur accord de la première fenêtre ; UO.TradeCheck(0,2) - celui de quelqu'un d'autre. Il n'y a pas d'enregistrement ni de confirmation automatique.
var own = UO.TradeCheck(0);
var sameOwn = UO.TradeCheck(0, 1);
var other = UO.TradeCheck(0, 2);
UO.Print(Convert.ToString(own) + "/" + Convert.ToString(sameOwn) + "/" + Convert.ToString(other));Paramètres et déroulement de l’exécution :
- UO.TradeCheck(0,0,false) retire son consentement. UO.TradeCheck(0,1,false) ne lit que le consentement du partenaire : false ne peut pas changer le côté de quelqu'un d'autre. Nous attendons le résultat 0 après retrait.
return RunScenario();
object? RunScenario()
{
var cleared = UO.TradeCheck(0, 0, false);
var other = UO.TradeCheck(0, 1, false);
UO.Print(Convert.ToString(cleared) + "/" + Convert.ToString(other));
return null;
}Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 accepted = BothAccepted(0);
if (Truth(Truth(accepted) == true))
{
UO.Print("Both boxes are checked; server completion is not known");
}
return null;
}
dynamic BothAccepted(dynamic index)
{
if (Truth(index < 0) || Truth(index >= UO.TradeCount()))
{
return false;
}
var own = UO.TradeCheck(index, 1);
var other = UO.TradeCheck(index, 2);
return Truth(Truth(own) == true) && Truth(Truth(other) == true);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: windowIndex (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.TradeCheck. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeCheck:bridge.TradeCheck(NumberConversions.ToInt(windowIndex), 0, 0, false). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(windowIndex).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int TradeCheck(InjectionValue windowIndex)
=> bridge.TradeCheck(NumberConversions.ToInt(windowIndex), 0, 0, false);Paramètres: tradeNum (Any), num (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeCheck:bridge.TradeCheck(Arg(0), tradeSide - 1, 0, false).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "tradecheck":
// The compatibility reader uses participants 1/2; the legacy
// one/three-argument forms use checkbox indices 0/1.
int tradeSide = Arg(1);
return new InjectionValue(tradeSide is 1 or 2
? bridge.TradeCheck(Arg(0), tradeSide - 1, 0, false) : 0);Paramètres: windowIndex (Any), checkbox (Any), stateValue (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.TradeCheck. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeCheck:bridge.TradeCheck(NumberConversions.ToInt(windowIndex), NumberConversions.ToInt(checkbox), NumberConversions.ToInt(stateValue), true). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(windowIndex).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int TradeCheck(InjectionValue windowIndex, InjectionValue checkbox, InjectionValue stateValue)
=> bridge.TradeCheck(NumberConversions.ToInt(windowIndex), NumberConversions.ToInt(checkbox), NumberConversions.ToInt(stateValue), true);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.TradeContainer(object? windowIndex);Renvoie serial de son conteneur d'échange sous forme de chaîne hexadécimale.
-
windowIndex— Entier : index de la fenêtre actuelle de 0 à TradeCount()-1. Un index négatif ou manquant produit un résultat vide. Ce n'est pas serial.
string : hexadécimal de la forme « 0x40000011 » ; "0x00000000" s'il n'y a pas de fenêtre. Il s'agit du ID de son conteneur, pas du bool et non de la chaîne vide.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.TradeContainer(0);
UO.Print("TradeContainer: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel est effectué une seule fois, le résultat est stocké dans valeur/résultat. 0 est le premier index, 1 est le premier nombre (voir la syntaxe de cette commande). HEX affiche le serial numérique ; Convert.ToString — nombre ou chaîne.
var value = UO.TradeContainer(0);
UO.Print(Convert.ToString(value));Paramètres et déroulement de l’exécution :
- total — instantané du nombre de fenêtres ; index - index/numéro actuel. L'exemple d'énumération ne confirme rien. Dans GetTradeContainer deux appels lisent leur conteneur (1) et celui de quelqu'un d'autre (2) de la première fenêtre (1).
return RunScenario();
object? RunScenario()
{
var total = UO.TradeCount();
for (int index = (int)(0); index <= total - 1; index += (int)(1))
{
var value = UO.TradeContainer(index);
UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
}
return null;
}Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 value = ReadTradeValue(0);
UO.Print(Convert.ToString(value));
return null;
}
dynamic ReadTradeValue(dynamic index)
{
var total = UO.TradeCount();
if (Truth(index < 0) || Truth(index >= total + 0))
{
return "0x00000000";
}
return UO.TradeContainer(index);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: windowIndex (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.TradeContainer. -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(bridge.TradeContainer(NumberConversions.ToInt(windowIndex))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeContainer:bridge.TradeContainer(NumberConversions.ToInt(windowIndex)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(windowIndex).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string TradeContainer(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeContainer(NumberConversions.ToInt(windowIndex)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TradeCount();Renvoie le nombre de fenêtres d'échange ouvertes.
Il n'y a pas de paramètres.
int : nombre de fenêtres de 0. Il s'agit d'une quantité, pas de bool ; pour vérifier la disponibilité, utilisez > 0.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.TradeCount();
UO.Print("TradeCount: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel est effectué une seule fois, le résultat est stocké dans valeur/résultat. 0 est le premier index, 1 est le premier nombre (voir la syntaxe de cette commande). HEX affiche le serial numérique ; Convert.ToString — nombre ou chaîne.
var value = UO.TradeCount();
UO.Print(Convert.ToString(value));Paramètres et déroulement de l’exécution :
- avant/après - deux instantanés distincts avec un intervalle de 500 millisecondes. La pause n'attend pas un échange précis ; Entre les lectures, l'état peut changer plusieurs fois.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.TradeCount();
await Delay(500);
var after = UO.TradeCount();
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 value = ReadTradeState();
UO.Print(Convert.ToString(value));
return null;
}
dynamic ReadTradeState()
{
return UO.TradeCount();
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.TradeCount. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeCount:bridge.TradeCount().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int TradeCount() => bridge.TradeCount();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.TradeName(object? windowIndex);Renvoie le nom du partenaire de la fenêtre d'échange par index à partir de zéro.
-
windowIndex— Entier : index de la fenêtre actuelle de 0 à TradeCount()-1. Un index négatif ou manquant produit un résultat vide. Ce n'est pas serial.
string : nom du partenaire enregistré ; chaîne vide s'il n'y a pas de fenêtre/nom. Le nom de l'élément conteneur n'est pas utilisé.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.TradeName(0);
UO.Print("TradeName: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel est effectué une seule fois, le résultat est stocké dans valeur/résultat. 0 est le premier index, 1 est le premier nombre (voir la syntaxe de cette commande). HEX affiche le serial numérique ; Convert.ToString — nombre ou chaîne.
var value = UO.TradeName(0);
UO.Print(Convert.ToString(value));Paramètres et déroulement de l’exécution :
- total — instantané du nombre de fenêtres ; index - index/numéro actuel. L'exemple d'énumération ne confirme rien. Dans GetTradeContainer deux appels lisent leur conteneur (1) et celui de quelqu'un d'autre (2) de la première fenêtre (1).
return RunScenario();
object? RunScenario()
{
var total = UO.TradeCount();
for (int index = (int)(0); index <= total - 1; index += (int)(1))
{
var value = UO.TradeName(index);
UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
}
return null;
}Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 value = ReadTradeValue(0);
UO.Print(Convert.ToString(value));
return null;
}
dynamic ReadTradeValue(dynamic index)
{
var total = UO.TradeCount();
if (Truth(index < 0) || Truth(index >= total + 0))
{
return "";
}
return UO.TradeName(index);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: windowIndex (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.TradeName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeName:bridge.TradeName(NumberConversions.ToInt(windowIndex)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(windowIndex).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string TradeName(InjectionValue windowIndex) => bridge.TradeName(NumberConversions.ToInt(windowIndex));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.TradeOpponent(object? windowIndex);Renvoie serial du conteneur partenaire sous forme de chaîne hexadécimale ; ce n'est pas un caractère ID.
-
windowIndex— Entier : index de la fenêtre actuelle de 0 à TradeCount()-1. Un index négatif ou manquant produit un résultat vide. Ce n'est pas serial.
string : hexadécimal serial du conteneur ID2 de quelqu'un d'autre ; "0x00000000" s'il n'y a pas de fenêtre. Pour un caractère ID, utilisez GetTradeOpponent(index + 1).
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade nombre de fenêtres avec 1 ; TradeContainer/TradeOpponent/TradeName et toutes les formes de TradeCheck - à partir de 0. Il s'agit d'une compatibilité évidente de ce client : les ouvrages de référence externes pour différents moteurs utilisent des points de référence différents.
- La lecture s'effectue sur le fil du jeu en utilisant les fenêtres live du monde actuel. Les fenêtres fermées ne comptent pas. Les appels de lecture n'envoient pas de paquets et n'attendent pas de réponse. L'ordre de UI peut changer lors de l'ouverture, de la fermeture et du déplacement de la fenêtre vers le haut ; le numéro n'est pas un identifiant permanent.
- ConfirmTrade et son enregistrement TradeCheck envoient le paquet uniquement lorsque le consentement change. Le consentement de quelqu'un d'autre est déterminé par le serveur. CancelTrade envoie l'annulation une fois. 1/true est un état/traitement local et ne constitue pas une garantie de finalisation de l'échange. Les noms et les deux accords ne prouvent pas que la composition des éléments n'a pas changé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.TradeOpponent(0);
UO.Print("TradeOpponent: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel est effectué une seule fois, le résultat est stocké dans valeur/résultat. 0 est le premier index, 1 est le premier nombre (voir la syntaxe de cette commande). HEX affiche le serial numérique ; Convert.ToString — nombre ou chaîne.
var value = UO.TradeOpponent(0);
UO.Print(Convert.ToString(value));Paramètres et déroulement de l’exécution :
- total — instantané du nombre de fenêtres ; index - index/numéro actuel. L'exemple d'énumération ne confirme rien. Dans GetTradeContainer deux appels lisent leur conteneur (1) et celui de quelqu'un d'autre (2) de la première fenêtre (1).
return RunScenario();
object? RunScenario()
{
var total = UO.TradeCount();
for (int index = (int)(0); index <= total - 1; index += (int)(1))
{
var value = UO.TradeOpponent(index);
UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
}
return null;
}Paramètres et déroulement de l’exécution :
- L'assistant est donné dans son intégralité et est en fait appelé depuis Main. Les vérifications Range/ID réduisent le risque d'erreur, mais plusieurs appels ne sont pas atomiques : la fenêtre peut changer entre eux. Pour l'action expectedPartner — caractère serial enregistré ; il ne s’agit pas d’une révision du prix ou du contenu de l’échange.
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 value = ReadTradeValue(0);
UO.Print(Convert.ToString(value));
return null;
}
dynamic ReadTradeValue(dynamic index)
{
var total = UO.TradeCount();
if (Truth(index < 0) || Truth(index >= total + 0))
{
return "0x00000000";
}
return UO.TradeOpponent(index);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: windowIndex (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.TradeOpponent. -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(bridge.TradeOpponent(NumberConversions.ToInt(windowIndex))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeOpponent:bridge.TradeOpponent(NumberConversions.ToInt(windowIndex)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(windowIndex).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string TradeOpponent(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeOpponent(NumberConversions.ToInt(windowIndex)));ClassicUO — Bad Newbie & C# Scripts IDE