FR UO Topic shops vendors - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Accueil · C# · IDE · UO API · A–Z · Exemples · Langues
Achats, ventes, listes de magasins, retards et prix marchands personnels. AllPrice et MassPriceMove utilisent le type d'élément spécifié dans leurs paramètres.
Ouvrir le catalogue complet et les exemples
| Sujet | Commandes et explications |
|---|---|
| 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
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
UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");Paramètres, résultat et tous les scénarios
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);Permet la saisie automatique du prix après avoir placé un article dans l'inventaire de votre fournisseur. L'équipe ne transporte pas elle-même d'objets. Activez d’abord le mode, puis faites glisser l’élément. Le prix n'est envoyé qu'après une demande correspondante du serveur. Le deuxième paramètre filtre le TYPE de l'élément.
-
price— Le premier paramètre est le prix total de l'ensemble de l'article/pile exposé, de 0 à 2147483647. 125 signifie prix 125. 0 - prix clairement nul (gratuit si autorisé par le serveur), pas d'arrêt. Une valeur négative désactive le mode ; UO.AllPrice() sans arguments est recommandé. -
type— Le deuxième paramètre facultatif est TYPE/Graphic de 0 à 65535, un nombre ou une chaîne hexadécimale, par exemple 0x0EED. 0 ou absence - tous types. Le numéro de série de l'article et le nom de l'objet ne sont pas appropriés. La couleur n'est pas filtrée.
void : aucune valeur. Activez l'activation des rapports AllPrice. La ligne de prix envoyé indique que la réponse a été envoyée et non l'acceptation du prix confirmé par le serveur.
- Le mode s'applique aux transferts ultérieurs jusqu'à ce qu'il soit désactivé. Une demande de prix déjà en attente avant l'inclusion/le transfert n'est pas automatiquement remplie. Ne répond pas aux demandes de changement de nom du fournisseur/magasin.
- Nécessite que le conteneur appartienne à un autre personnage/NPC connu du client. Le droit de gérer le vendeur et l'acceptabilité du prix sont vérifiés par le serveur. Le sac à dos habituel du personnage, le coffre au sol et le terrain ne reçoivent pas de prix automatique.
- Pour un fournisseur standard, la demande de prix cliloc 1043303 est reconnue quelle que soit la langue du client. Les invites de texte système commençant par Saisissez un prix, Saisissez un prix, Saisissez le prix, Saisissez un prix ou Saisissez un prix sont également prises en charge. Une invitation inconnue est laissée pour réponse manuelle.
- Les requêtes du serveur ASCII et Unicode sont prises en charge. Si l'invitation n'arrive pas dans les 10 secondes, la réponse différée est annulée. Lors d'un transfert de masse, la file d'attente s'arrête également. Les réponses déjà envoyées ne seront pas rappelées.
- L'autre article TYPE ne reçoit pas de prix. Si MassMove est activé, la prochaine soumission attend que la demande de prix soit traitée ; une demande inconnue ou inappropriée arrête la file d'attente pour éviter de mélanger les éléments.
- AllPrice() efface les prix en attente et désactive le mode. TerminateAll(), quitter, mourir ou changer de carte réinitialise également le prix automatique. Cette commande ne modifie pas les prix des produits déjà répertoriés.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.AllPrice");
UO.AllPrice();Paramètres et déroulement de l’exécution :
- price=125 — le prix total de chaque article. type absent : tous les types conviennent.
- Après le lancement, ajoutez manuellement l'article à l'inventaire de votre fournisseur. Le client répondra à une demande de prix par 125. Chaque article suivant reçoit le même prix jusqu'à ce qu'il soit éteint.
- Print ne ressemble qu'à l'action ; Cette procédure en elle-même ne transfère rien.
UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");Paramètres et déroulement de l’exécution :
- salePrice est transmis sous la forme price=250. itemType est transmis comme type=0x0F7A, et non serial d'un produit séparé.
- Le prix 250 fait référence à la totalité de la pile affichée. La commande ne multiplie pas le prix par le nombre d'unités qu'il contient.
- Les autres types restent sans réponse automatique. Pour ceux-ci, saisissez le prix manuellement ou incluez AllPrice avec un filtre différent.
return RunScenario();
object? RunScenario()
{
var itemType = "0x0F7A";
var salePrice = 250;
UO.AllPrice(salePrice, itemType);
return null;
}Paramètres et déroulement de l’exécution :
- price=0 — envoie la chaîne 0 au serveur comme prix. Il ne s’agit pas d’annuler le dialogue ou de l’arrêter.
- type=0x0F7A limite le prix gratuit à ce type. Le comportement de la vente gratuite dépend des règles du serveur.
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;
}
}Paramètres et déroulement de l’exécution :
- Aucun argument : le mode est désactivé et les réponses en attente sont supprimées.
- Le prix déjà fixé par le serveur ne change pas. L'utilisateur remplit lui-même la prochaine demande de prix.
Listes Shop / Listes d'achat et de vente
UO.AllPrice();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: void / Unit.
Pendant un appel:
-
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]).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;Paramètres: price (Any)
Résultat: void / Unit.
Pendant un appel:
-
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]).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;Paramètres: price (Any), type (Any)
Résultat: void / Unit.
Pendant un appel:
-
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]).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Crée, met à jour ou supprime une règle d'achat automatique dans la liste principale par défaut du profil Bad Newbie actuel. La commande configure le traitement futur de l'offre du vendeur NPC ; ne dit pas acheter/vendre, n'ouvre pas de magasin et ne confirme pas la transaction. Procédure complète : listes des magasins.
-
itemType- Produit graphique 0..65535 : par exemple 0x0F7A - Black Pearl, 0x0F51 - poignard. Ce n'est pas le serial du vendeur/objet ni le body du personnage. Un nombre négatif ou un nombre supérieur à 65535 est rejeté. Ici, 0xFFFF est un graphic spécifique, pas un masque de tous les biens. -
itemColor— Teinte du produit : nombre négatif ou 0xFFFF — n'importe lequel ; 0 - uniquement les articles non peints. Pour un hue précis, utilisez 0..65534. N'utilisez pas de couleurs en dehors de cette plage : une valeur positive est convertie en ushort. Requis. -
quantity— Le nombre d'UNITÉS de marchandises par offre de magasin reçue, pas le nombre de piles ni le solde souhaité dans le sac à dos. Le positif est limité à 65535. 0/negative supprime la règle de correspondance type+couleur de la valeur par défaut ; il ne s’agit pas de « la quantité totale ». Requis.
void - aucune valeur. Appel sur une ligne séparée, sans résultat var = et sans if. La fin de l'appel signifie la fin de la configuration et non une transaction réussie. S'il n'y a pas de profil ou graphic invalide, la règle n'est pas créée ; Il n’y a pas de résultat numérique de l’erreur. Vérifiez la transaction réelle par le contenu du sac à dos, l'or et la réponse du serveur.
- Tous les arguments 3 sont requis. Il s'agit d'un paramètre de règle, pas d'une fonction d'attente.
- La clé de règle est graphic et le masque hue par défaut. L'appel répété remplace la quantité et les autres champs de cette règle ; il n’ajoute pas de limite supplémentaire à la précédente. Sans prix/nom, les restrictions précédentes sur ces champs sont supprimées.
- Règle nouvelle/mise à jour Enabled=true. Le commutateur général d'achat/vente est défini en fonction de la présence de règles et le profil est enregistré. La liste par défaut désactivée elle-même n'est pas automatiquement activée : le mode général et la liste doivent être activés dans les paramètres. Les autres listes nommées ne sont pas modifiées.
- Le traitement commence lorsqu'une liste de marchandises arrive. La limite est dépensée au total sur les lignes correspondant à une règle. Pour chaque position, la première règle activée correspondante est utilisée. La réouverture du magasin donne une nouvelle offre et une nouvelle limite tant que la règle est active.
- Fonctionne pleinement avec Bad Newbie ; dans Classic, cette automatisation est désactivée. Ne remplacez pas le nom NPC ou le nom de la liste enregistrée dans les paramètres. AutoBuyEx ajoute des filtres prix/nom lors de l'achat ; ClearShopList réinitialise entièrement les deux automatisations.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.AutoBuy");
UO.AutoBuy(0x0F7A, -1, 1);Paramètres et déroulement de l’exécution :
- Réactif 0x0F7A - graphic, pas ID NPC. Quantité - 1 ; couleur - n'importe laquelle. Aucun prix plafond n’est spécifié dans ce formulaire. Le script lui-même ne dit rien et n'ouvre pas la boutique. La règle continue de s'appliquer aux phrases suivantes jusqu'à ce que vous la modifiiez/désactiviez.
UO.AutoBuy(0x0F7A, -1, 1);Paramètres et déroulement de l’exécution :
- 20 - dans un maximum d'une réponse du magasin, et non « amener la quantité à 20 ». AutoBuy n'a aucun argument de prix et de nom. S'ils sont nécessaires, utilisez AutoBuyEx ; son exemple complet est disponible sur le lien ci-dessous. Le manque de biens, d'argent et les règles du serveur déterminent le résultat.
return RunScenario();
object? RunScenario()
{
UO.AutoBuy(0x0F7A, 0, 20);
return null;
}Paramètres et déroulement de l’exécution :
- L'assistant accepte graphic. Seules les règles par défaut avec AnyHue sont supprimées ; les règles individuelles hue=0 sont conservées. Cela n'annule pas une transaction déjà envoyée au serveur. Pour supprimer une couleur exacte, transmettez le même hue avec lequel la règle a été créée.
Listes Shop / Listes d'achat et de vente
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# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: itemType (Any), itemColor (Any), quantity (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Crée, met à jour ou supprime une règle d'achat automatique dans la liste principale par défaut du profil Bad Newbie actuel. La commande configure le traitement futur de l'offre du vendeur NPC ; ne dit pas acheter/vendre, n'ouvre pas de magasin et ne confirme pas la transaction. Procédure complète : listes des magasins.
-
itemType- Produit graphique 0..65535 : par exemple 0x0F7A - Black Pearl, 0x0F51 - poignard. Ce n'est pas le serial du vendeur/objet ni le body du personnage. Un nombre négatif ou un nombre supérieur à 65535 est rejeté. Ici, 0xFFFF est un graphic spécifique, pas un masque de tous les biens. -
itemColor— Teinte du produit : nombre négatif ou 0xFFFF — n'importe lequel ; 0 - uniquement les articles non peints. Pour un hue précis, utilisez 0..65534. N'utilisez pas de couleurs en dehors de cette plage : une valeur positive est convertie en ushort. Requis. -
quantity— Le nombre d'UNITÉS de marchandises par offre de magasin reçue, pas le nombre de piles ni le solde souhaité dans le sac à dos. Le positif est limité à 65535. 0/negative supprime la règle de correspondance type+couleur de la valeur par défaut ; il ne s’agit pas de « la quantité totale ». Requis. -
price— Prix maximum d'UNE unité, pas de la totalité de la transaction. 0/négatif – pas de prix plafond. Les produits dont le prix dépasse la limite positive sont autorisés. Le prix n'est ni échangé ni modifié sur le serveur. Requis. -
name— Sous-chaîne du nom du PRODUIT, insensible à la casse ; les espaces de bord sont supprimés, ligne vide - pas de filtre. Il ne s'agit pas du nom du vendeur ni du nom de l'annonce. Par exemple, "Black Pearl" vérifie le texte de l'emplacement du magasin si le serveur a envoyé exactement ce nom. Requis.
void - aucune valeur. Appel sur une ligne séparée, sans résultat var = et sans if. La fin de l'appel signifie la fin de la configuration et non une transaction réussie. S'il n'y a pas de profil ou graphic invalide, la règle n'est pas créée ; Il n’y a pas de résultat numérique de l’erreur. Vérifiez la transaction réelle par le contenu du sac à dos, l'or et la réponse du serveur.
- Tous les arguments 5 sont requis. Il s'agit d'un paramètre de règle, pas d'une fonction d'attente.
- La clé de règle est graphic et le masque hue par défaut. L'appel répété remplace la quantité et les autres champs de cette règle ; il n’ajoute pas de limite supplémentaire à la précédente. Sans prix/nom, les restrictions précédentes sur ces champs sont supprimées.
- Règle nouvelle/mise à jour Enabled=true. Le commutateur général d'achat/vente est défini en fonction de la présence de règles et le profil est enregistré. La liste par défaut désactivée elle-même n'est pas automatiquement activée : le mode général et la liste doivent être activés dans les paramètres. Les autres listes nommées ne sont pas modifiées.
- Le traitement commence lorsqu'une liste de marchandises arrive. La limite est dépensée au total sur les lignes correspondant à une règle. Pour chaque position, la première règle activée correspondante est utilisée. La réouverture du magasin donne une nouvelle offre et une nouvelle limite tant que la règle est active.
- Fonctionne pleinement avec Bad Newbie ; dans Classic, cette automatisation est désactivée. Ne remplacez pas le nom NPC ou le nom de la liste enregistrée dans les paramètres. AutoBuyEx ajoute des filtres prix/nom lors de l'achat ; ClearShopList réinitialise entièrement les deux automatisations.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.AutoBuyEx");
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");Paramètres et déroulement de l’exécution :
- Réactif 0x0F7A - graphic, pas ID NPC. Quantité - 1 ; couleur - n'importe laquelle. Prix plafond 5 par unité. Le script lui-même ne dit rien et n'ouvre pas la boutique. La règle continue de s'appliquer aux phrases suivantes jusqu'à ce que vous la modifiiez/désactiviez.
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");Paramètres et déroulement de l’exécution :
- 20 - réponse maximale dans un magasin, et non « amener la quantité à 20 ». 5 — prix unitaire, « Black Pearl » — sous-chaîne du nom du produit. Si le serveur appelle le réactif différemment, changez le filtre ou passez "". Le manque de biens, d'argent et les règles du serveur déterminent le résultat.
return RunScenario();
object? RunScenario()
{
UO.AutoBuyEx(0x0F7A, 0, 20, 5, "Black Pearl");
return null;
}Paramètres et déroulement de l’exécution :
- L'assistant accepte graphic. Seules les règles par défaut avec AnyHue sont supprimées ; les règles individuelles hue=0 sont conservées. Cela n'annule pas une transaction déjà envoyée au serveur. Pour supprimer une couleur exacte, transmettez le même hue avec lequel la règle a été créée.
Listes Shop / Listes d'achat et de vente
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# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: itemType (Any), itemColor (Any), quantity (Any), price (Any), name (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Crée, met à jour ou supprime une règle de vente automatique dans la liste principale par défaut du profil Bad Newbie actuel. La commande configure le traitement futur de l'offre du vendeur NPC ; ne dit pas acheter/vendre, n'ouvre pas de magasin et ne confirme pas la transaction. Procédure complète : listes des magasins.
-
itemType- Produit graphique 0..65535 : par exemple 0x0F7A - Black Pearl, 0x0F51 - poignard. Ce n'est pas le serial du vendeur/objet ni le body du personnage. Un nombre négatif ou un nombre supérieur à 65535 est rejeté. Ici, 0xFFFF est un graphic spécifique, pas un masque de tous les biens. -
itemColor— Teinte du produit : nombre négatif ou 0xFFFF — n'importe lequel ; 0 - uniquement les articles non peints. Pour un hue précis, utilisez 0..65534. N'utilisez pas de couleurs en dehors de cette plage : une valeur positive est convertie en ushort. Requis. -
quantity— Le nombre d'UNITÉS de marchandises par offre de magasin reçue, pas le nombre de piles ni le solde souhaité dans le sac à dos. Le positif est limité à 65535. 0/negative supprime la règle de correspondance type+couleur de la valeur par défaut ; il ne s’agit pas de « la quantité totale ». Requis.
void - aucune valeur. Appel sur une ligne séparée, sans résultat var = et sans if. La fin de l'appel signifie la fin de la configuration et non une transaction réussie. S'il n'y a pas de profil ou graphic invalide, la règle n'est pas créée ; Il n’y a pas de résultat numérique de l’erreur. Vérifiez la transaction réelle par le contenu du sac à dos, l'or et la réponse du serveur.
- Tous les arguments 3 sont requis. Il s'agit d'un paramètre de règle, pas d'une fonction d'attente.
- La clé de règle est graphic et le masque hue par défaut. L'appel répété remplace la quantité et les autres champs de cette règle ; il n’ajoute pas de limite supplémentaire à la précédente. Sans prix/nom, les restrictions précédentes sur ces champs sont supprimées.
- Règle nouvelle/mise à jour Enabled=true. Le commutateur général d'achat/vente est défini en fonction de la présence de règles et le profil est enregistré. La liste par défaut désactivée elle-même n'est pas automatiquement activée : le mode général et la liste doivent être activés dans les paramètres. Les autres listes nommées ne sont pas modifiées.
- Le traitement commence lorsqu'une liste de marchandises arrive. La limite est dépensée au total sur les lignes correspondant à une règle. Pour chaque position, la première règle activée correspondante est utilisée. La réouverture du magasin donne une nouvelle offre et une nouvelle limite tant que la règle est active.
- Fonctionne pleinement avec Bad Newbie ; dans Classic, cette automatisation est désactivée. Ne remplacez pas le nom NPC ou le nom de la liste enregistrée dans les paramètres. AutoBuyEx ajoute des filtres prix/nom lors de l'achat ; ClearShopList réinitialise entièrement les deux automatisations.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.AutoSell");
UO.AutoSell(0x0F51, -1, 1);Paramètres et déroulement de l’exécution :
- 0x0F51 - graphic dague, n'importe quel hue, 1 - un par phrase. L'équipe ne sélectionne pas un serial spécifique et ne teste pas l'utilité/valeur de l'élément. Sélectionnez le type/couleur exact de votre article.
UO.AutoSell(0x0F51, -1, 1);Paramètres et déroulement de l’exécution :
- 0x1F03 est un exemple de robe graphic standard, 0x0044 est un exemple de hue. Remplacez les deux par votre produit. 5 — unités, pas prix ; les paramètres de prix minimum et de nom Sell/AutoSell ne sont pas acceptés. Le serveur doit inclure l'article dans l'offre de vente.
return RunScenario();
object? RunScenario()
{
UO.AutoSell(0x1F03, 0x0044, 5);
return null;
}Paramètres et déroulement de l’exécution :
- Le nom de la procédure est arbitraire ; itemType et hue sont ses paramètres. Les autres règles, achats et listes nommées personnalisées sont conservées. Si une autre liste activée vend également ces articles, désactivez la règle correspondante via les paramètres.
Listes Shop / Listes d'achat et de vente
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# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: itemType (Any), itemColor (Any), quantity (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Crée, met à jour ou supprime une règle d'achat automatique dans la liste principale par défaut du profil Bad Newbie actuel. La commande configure le traitement futur de l'offre du vendeur NPC ; ne dit pas acheter/vendre, n'ouvre pas de magasin et ne confirme pas la transaction. Procédure complète : listes des magasins.
-
type- Produit graphique 0..65535 : par exemple 0x0F7A - Black Pearl, 0x0F51 - poignard. Ce n'est pas le serial du vendeur/objet ni le body du personnage. Un nombre négatif ou un nombre supérieur à 65535 est rejeté. Ici, 0xFFFF est un graphic spécifique, pas un masque de tous les biens. -
color— Teinte du produit : nombre négatif ou 0xFFFF — n'importe lequel ; 0 - uniquement les articles non peints. Pour un hue précis, utilisez 0..65534. N'utilisez pas de couleurs en dehors de cette plage : une valeur positive est convertie en ushort. La valeur par défaut est 1. -
quantity— Le nombre d'UNITÉS de marchandises par offre de magasin reçue, pas le nombre de piles ni le solde souhaité dans le sac à dos. Le positif est limité à 65535. 0/negative supprime la règle de correspondance type+couleur de la valeur par défaut ; il ne s’agit pas de « la quantité totale ». La valeur par défaut est 1. -
maxPrice— Prix maximum d'UNE unité, pas de la totalité de la transaction. 0/négatif – pas de prix plafond. Les produits dont le prix dépasse la limite positive sont autorisés. Le prix n'est ni échangé ni modifié sur le serveur. La valeur par défaut est 0. -
name— Sous-chaîne du nom du PRODUIT, insensible à la casse ; les espaces de bord sont supprimés, ligne vide - pas de filtre. Il ne s'agit pas du nom du vendeur ni du nom de l'annonce. Par exemple, "Black Pearl" vérifie le texte de l'emplacement du magasin si le serveur a envoyé exactement ce nom. La valeur par défaut est une chaîne vide.
void - aucune valeur. Appel sur une ligne séparée, sans résultat var = et sans if. La fin de l'appel signifie la fin de la configuration et non une transaction réussie. S'il n'y a pas de profil ou graphic invalide, la règle n'est pas créée ; Il n’y a pas de résultat numérique de l’erreur. Vérifiez la transaction réelle par le contenu du sac à dos, l'or et la réponse du serveur.
- Buy accepte les arguments 1 à 5 ; manquant à droite color=-1, quantité=1, maxPrice=0, name="".
- La clé de règle est graphic et le masque hue par défaut. L'appel répété remplace la quantité et les autres champs de cette règle ; il n’ajoute pas de limite supplémentaire à la précédente. Sans prix/nom, les restrictions précédentes sur ces champs sont supprimées.
- Règle nouvelle/mise à jour Enabled=true. Le commutateur général d'achat/vente est défini en fonction de la présence de règles et le profil est enregistré. La liste par défaut désactivée elle-même n'est pas automatiquement activée : le mode général et la liste doivent être activés dans les paramètres. Les autres listes nommées ne sont pas modifiées.
- Le traitement commence lorsqu'une liste de marchandises arrive. La limite est dépensée au total sur les lignes correspondant à une règle. Pour chaque position, la première règle activée correspondante est utilisée. La réouverture du magasin donne une nouvelle offre et une nouvelle limite tant que la règle est active.
- Fonctionne pleinement avec Bad Newbie ; dans Classic, cette automatisation est désactivée. Ne remplacez pas le nom NPC ou le nom de la liste enregistrée dans les paramètres. AutoBuyEx ajoute des filtres prix/nom lors de l'achat ; ClearShopList réinitialise entièrement les deux automatisations.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.Buy");
UO.Buy(0x0F7A);Paramètres et déroulement de l’exécution :
- Réactif 0x0F7A - graphic, pas ID NPC. Quantité - 1 ; couleur - n'importe laquelle. Aucun prix plafond n’est spécifié dans ce formulaire. Le script lui-même ne dit rien et n'ouvre pas la boutique. La règle continue de s'appliquer aux phrases suivantes jusqu'à ce que vous la modifiiez/désactiviez.
UO.Buy(0x0F7A);Paramètres et déroulement de l’exécution :
- 20 - réponse maximale dans un magasin, et non « amener la quantité à 20 ». 5 — prix unitaire, « Black Pearl » — sous-chaîne du nom du produit. Si le serveur appelle le réactif différemment, changez le filtre ou passez "". Le manque de biens, d'argent et les règles du serveur déterminent le résultat.
return RunScenario();
object? RunScenario()
{
UO.Buy(0x0F7A, 0, 20, 5, "Black Pearl");
return null;
}Paramètres et déroulement de l’exécution :
- L'assistant accepte graphic. Seules les règles par défaut avec AnyHue sont supprimées ; les règles individuelles hue=0 sont conservées. Cela n'annule pas une transaction déjà envoyée au serveur. Pour supprimer une couleur exacte, transmettez le même hue avec lequel la règle a été créée.
Listes Shop / Listes d'achat et de vente
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# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: type (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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;Paramètres: type (Any), color (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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;Paramètres: type (Any), color (Any), quantity (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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;Paramètres: type (Any), color (Any), quantity (Any), maxPrice (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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;Paramètres: type (Any), color (Any), quantity (Any), maxPrice (Any), name (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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();Supprime les règles d'achat et de vente automatiques du profil actif.
Il n'y a pas de paramètres.
void - aucune valeur de retour.
- Efface BackNewbieAutoBuyRules et BackNewbieAutoSellRules, désactive les AutoBuy/AutoSell partagés, met à jour OptionsGump et enregistre le profil. La liste du butin ne change pas ; l'absence de profil donne une action vide.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.ClearShopList");
UO.ClearShopList();Paramètres et déroulement de l’exécution :
- Supprime les règles d'achat et de vente automatiques du profil actif.
UO.ClearShopList();Paramètres et déroulement de l’exécution :
- Supprimez la règle d'achat de bandages ainsi que le reste des règles commerciales.
return RunScenario();
object? RunScenario()
{
UO.AutoBuy(0x0E21, -1, 10);
UO.ClearShopList();
return null;
}Paramètres et déroulement de l’exécution :
- Effacer un ensemble vide est acceptable et ne crée pas de nouveau paramètre.
Listes Shop / Listes d'achat et de vente
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# 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: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearAutoShopRules:bridge.ClearAutoShopRules().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "clearshoplist":
bridge.ClearAutoShopRules(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetAutoBuyDelay();Lit le délai d'achat automatique actuel à partir du profil client.
Il n'y a pas de paramètres.
int — délai actuel en millisecondes. Les valeurs écrites par le setter sont limitées à 0…65535. 0 signifie aucun délai supplémentaire ; ce n'est pas une erreur. S'il n'y a pas de profil chargé, 3 est renvoyé. La lecture ne renvoie pas la quantité d'article ni ne confirme la transaction.
- Le paramétrage est général pour le profil actuel : les modifications dans un autre script ou UI sont visibles la prochaine fois que vous le lirez. Zéro est un paramètre valide, ce n'est pas un signe de données manquantes et ce n'est pas une raison pour renvoyer l'ancien cache de script.
- La valeur par défaut est 3 ms. Après l'envoi d'une opération automatique, le gestionnaire fixe l'heure de la prochaine opération autorisée. Les listes de fournisseurs arrivées plus tôt ne sont pas traitées par ce passe ; getter ne déclenche pas d'attente et n'envoie pas lui-même d'achat/vente.
- Il ne s'agit pas d'un délai de MassMove, Drag/Drop ou d'un trading manuel. La nouvelle valeur est appliquée lors de la planification du prochain délai ; le moment déjà attribué n'est pas recalculé.
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.GetAutoBuyDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Il n'y a pas d'arguments. délai — temps en millisecondes.
- La valeur reflète le profil au moment de l'appel. Le var enregistré ne sera pas mis à jour ultérieurement.
var delay = UO.GetAutoBuyDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));Paramètres et déroulement de l’exécution :
- le passeur obtient 70000 ms ; le maximum autorisé est 65535. L'exemple modifie le paramètre de profil.
- actual doit contenir 65535 lorsque le profil est chargé. Getter renvoie la valeur contrainte réelle plutôt que l'argument d'origine 70000.
return RunScenario();
object? RunScenario()
{
UO.SetAutoBuyDelay(70000);
var actual = UO.GetAutoBuyDelay();
UO.Print(Convert.ToString(actual));
return null;
}Paramètres et déroulement de l’exécution :
- Zéro est coché explicitement. Cet exemple ne modifie pas le profil.
- Une latence nulle ne signifie pas que l’opération est terminée. Pour le résultat de la transaction, vérifiez les objets du jeu.
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# 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: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAutoBuyDelay:bridge.GetAutoBuyDelay().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getautobuydelay":
return new InjectionValue(bridge.GetAutoBuyDelay());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetAutoSellDelay();Lit le délai de vente automatique actuel à partir du profil client.
Il n'y a pas de paramètres.
int — délai actuel en millisecondes. Les valeurs écrites par le setter sont limitées à 0…65535. 0 signifie aucun délai supplémentaire ; ce n'est pas une erreur. S'il n'y a pas de profil chargé, 3 est renvoyé. La lecture ne renvoie pas la quantité d'article ni ne confirme la transaction.
- Le paramétrage est général pour le profil actuel : les modifications dans un autre script ou UI sont visibles la prochaine fois que vous le lirez. Zéro est un paramètre valide, ce n'est pas un signe de données manquantes et ce n'est pas une raison pour renvoyer l'ancien cache de script.
- La valeur par défaut est 3 ms. Après l'envoi d'une opération automatique, le gestionnaire fixe l'heure de la prochaine opération autorisée. Les listes de fournisseurs arrivées plus tôt ne sont pas traitées par ce passe ; getter ne déclenche pas d'attente et n'envoie pas lui-même d'achat/vente.
- Il ne s'agit pas d'un délai de MassMove, Drag/Drop ou d'un trading manuel. La nouvelle valeur est appliquée lors de la planification du prochain délai ; le moment déjà attribué n'est pas recalculé.
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.GetAutoSellDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Il n'y a pas d'arguments. délai — temps en millisecondes.
- La valeur reflète le profil au moment de l'appel. Le var enregistré ne sera pas mis à jour ultérieurement.
var delay = UO.GetAutoSellDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));Paramètres et déroulement de l’exécution :
- le passeur obtient 70000 ms ; le maximum autorisé est 65535. L'exemple modifie le paramètre de profil.
- actual doit contenir 65535 lorsque le profil est chargé. Getter renvoie la valeur contrainte réelle plutôt que l'argument d'origine 70000.
return RunScenario();
object? RunScenario()
{
UO.SetAutoSellDelay(70000);
var actual = UO.GetAutoSellDelay();
UO.Print(Convert.ToString(actual));
return null;
}Paramètres et déroulement de l’exécution :
- Zéro est coché explicitement. Cet exemple ne modifie pas le profil.
- Une latence nulle ne signifie pas que l’opération est terminée. Pour le résultat de la transaction, vérifiez les objets du jeu.
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# 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: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAutoSellDelay:bridge.GetAutoSellDelay().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getautoselldelay":
return new InjectionValue(bridge.GetAutoSellDelay());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetPrice(object? objID);Lit le Item.Price connu du client pour l'article serial.
-
objID— Numéro de série de l'objet ou nom pris en charge de l'objet self/backpack/lasttarget/saved ; les chaînes numériques et les chaînes 0x sont résolues par l'exécution.
int — conversion non vérifiée de uint Item.Price en int. Un élément manquant donne 0 ; les prix supérieurs à 2147483647 sont affichés comme négatifs int.
- L'équipe ne demande pas de proposition de fournisseur. La valeur dépend des données précédemment reçues par le client. Zéro peut indiquer un prix inconnu/zéro ou l'absence d'un article ; pour vérifier un objet, utilisez Exists.
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.GetPrice(UO.LastTarget());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Le résultat est un Item.Price mis en cache.
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;Paramètres et déroulement de l’exécution :
- Un élément manquant donne 0.
return RunScenario();
object? RunScenario()
{
var price = UO.GetPrice(0);
UO.Print(Convert.ToString(price));
return null;
}Paramètres et déroulement de l’exécution :
- Seul un nouvel appel relit le modèle ; la pause elle-même ne demande pas de prix.
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# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: objID (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPrice:bridge.GetPrice(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getprice":
return new InjectionValue(bridge.GetPrice(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetShopList();Lit les produits de la dernière offre active du vendeur NPC. Vous permet de vérifier le type, la quantité et le prix avant d'acheter ou de vendre.
Il n'y a pas de paramètres.
Tableau de string — tableau de chaînes, indices de 0. Chaque ligne : serial|graphic|hue|montant|prix|nom. Série - ID position spécifique, graphic - type, hue - couleur ; les trois premiers champs sont écrits au format 0x. Montant — unités disponibles moins la traite dans la fenêtre, prix — prix d'une unité, nom — nom. Ce n'est pas une liste serial ni une liste bool. S'il n'y a pas d'offre, le tableau est vide. Le nom peut contenir | : les cinq premiers délimiteurs définissent les champs, le reste est le nom.
- Tout d'abord, comme une action de jeu normale, ouvrez un achat ou une vente à partir du NPC souhaité et attendez que le serveur propose. Ces équipes elles-mêmes ne recherchent pas de vendeur, n'ouvrent pas de commerce, ne fixent pas de prix pour un vendeur personnel et ne transfèrent pas d'objets entre les coffres. ID du vendeur n'est pas passé en paramètre : en cas de plusieurs offres, la dernière est utilisée.
- Dans le manager, l'offre est stockée dans la session de jeu. La fermeture du client graphique enregistre la proposition et le brouillon, son ouverture restaure la fenêtre. Fermer le magasin lui-même, répondre, fermer le serveur ou déconnecter la connexion supprime l'offre. Autobuy/autosell Bad Newbie peut le traiter avant le script.
- La lecture n'envoie pas de requêtes au serveur. Il s'agit d'un instantané de l'approvisionnement déjà reçu, et non d'une garantie du stock actuel de NPC. Le champ de quantité reflète les unités, pas le nombre de lignes/piles. ArrayLength(lignes) compte les positions. Les prix ici se lisent GetShopList ; SendShopReply n'accepte pas le prix.
- La liste explicite remplace le brouillon et n'y est pas ajoutée. Répéter un serial additionne la quantité ; le total est limité par la quantité totale de l'article dans l'offre. Inconnu serial, quantité incorrecte ou non positive rejette l'intégralité de la réponse avant de la soumettre, enregistrant l'offre. S'il n'y a pas de phrase, SendShopReply signale une erreur. La ligne "0" n'est pas une commande d'annulation ; utiliser "".
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.GetShopList();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- GetWord utilise l'index de 0 : 0 - serial, 1 - graphic, 2 - hue, 3 - quantité, 4 - prix. Avant les lignes[0], la longueur du tableau est vérifiée.
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] : ""; }Paramètres et déroulement de l’exécution :
- Pour l'offre d'ACHAT pré-ouverte uniquement. 0x0E21 — bandages, 5 — prix unitaire maximum, 10 — quantité requise. La première position appropriée est prise ; exact serial est lu à partir de la phrase. Le code ne démarre pas l'achat lui-même.
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] : "";
}Paramètres et déroulement de l’exécution :
- La fonction auxiliaire est donnée dans son intégralité : elle additionne le champ montant de toutes les positions du type spécifié. Si la clause est vide, renvoie 0 ; il s'agit du nombre d'unités disponibles, et non du nombre d'animaux ou d'objets sur le personnage.
Listes Shop / Listes d'achat et de vente
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# 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: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetShopList. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetShopList:bridge.GetShopList().
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Permet le transfert de masse d'articles d'un TYPE avec tarification automatique dans l'inventaire de votre fournisseur. La source est déterminée par le premier transfert manuel. Chaque pile est entièrement transférée et est considérée comme un élément ; après sa demande de prix, le client répond et continue ensuite la file d'attente.
-
delay— Le premier paramètre est le délai entre les demandes de transfert en millisecondes, un entier compris entre 0 et 2147483647. 350 signifie 0,35 secondes. Avec 0, pas plus d'un prochain report n'est envoyé par image de jeu. Aucun délai n'est ajouté à GrabDelay. Une valeur négative désactive le mode et efface la file d'attente ; pour l'extinction, une notation claire UO.MassPriceMove() est préférable. -
quantity- Le deuxième paramètre est la limite TOTALE des éléments individuels (éléments), y compris le premier transfert manuel. Une pile/pile est considérée comme un article, quelle que soit la quantité à l'intérieur. 50 signifie jusqu'à 50 piles entières ou 50 éléments uniques. La pile n'est PAS divisée à cette limite. 0 - tous les éléments appropriés. Les valeurs négatives ne sont pas autorisées. -
type- Le troisième paramètre est le code du type d'élément (Graphique/Type), l'entier 0..65535, par exemple 0x0EED ou la chaîne "0x0EED" pour l'or. Ce n'est PAS serial/ID et PAS le nom AddObject. 0 détermine le type par le premier transfert manuel. Avec un type explicite, faire glisser un autre type n'active pas la file d'attente ; Le mode continue d'attendre un élément approprié. -
price— Le quatrième paramètre requis est le prix total 0..2147483647 pour chaque article/pile complet affiché. 0 signifie gratuit, pas d'arrêt. Le prix négatif est rejeté. -
destination- Le cinquième paramètre facultatif est serial ou le nom enregistré du conteneur dans l'inventaire de votre fournisseur. En cas d'absence, il est prélevé lors de la remise à zéro manuelle. Un sac à dos ordinaire, un coffre au sol et destination=0 sont ici déviés : il est impossible de fixer un prix sur le terrain. -
x- Sixième paramètre - X à l'intérieur du conteneur du fournisseur : -1 ou 65535 pour le placement automatique, sinon 0..65535. Indiqué uniquement avec Y et Z. -
y- Septième paramètre - Y à l'intérieur du conteneur du fournisseur : -1/65535 pour le placement automatique, sinon 0..65535. Uniquement indiqué avec X et Z. -
z— Le huitième paramètre est la hauteur -128..127, à l'intérieur du conteneur généralement 0. Sans X/Y/Z explicite, avec une destination donnée, -1,-1,0 sont utilisés ; Lors de l'attribution manuelle, l'emplacement de réinitialisation est pris.
void : aucune valeur. L'activation de MassPriceMove active l'attente manuelle de l'échantillon. Les messages de transfert et de prix indiquent les demandes soumises et ne constituent pas une garantie d'acceptation du serveur.
- Formulaires avec les arguments 0, 4, 5 ou 8. Commande exacte : délai, quantité, type, prix, destination, x, y, z. Les triples de coordonnées partielles ne sont pas pris en charge.
- Tout d’abord, appelez la commande, puis récupérez et faites glisser l’intégralité de l’élément approprié. Tapez 0 s'en souvient TYPE ; un type explicite ignore les retours à la ligne manuels des autres types. La source est toujours tirée du premier élément approprié.
- La quantité comprend le premier article manuel. 50 signifie 50 piles complètes de 100, et non 50 unités de la pile. 0 - tous les objets droits appropriés. La couleur n'est pas filtrée et les conteneurs imbriqués ne sont pas développés.
- Les règles de reconnaissance des demandes de prix AllPrice s'appliquent, notamment ASCII/Unicode et 10-seconde d'attente. Délai de pause - intervalle minimum : un serveur lent l'augmente pour ne pas confondre les prix.
- Le mode général AllPrice n'a pas besoin d'être activé. Le prix de cette opération est prioritaire sur AllPrice. Il n'est pas recommandé de modifier le prix AllPrice ou de transférer manuellement des articles supplémentaires pendant la file d'attente : une réponse inconnue ou une panne de serveur interrompt la file d'attente.
- MassPriceMove() désactive la file d'attente de transfert actuelle et annule la réponse de prix en attente ; le AllPrice général, s'il a été activé séparément, est conservé. TerminateAll() désactive les deux modes. Il s'agit d'une file d'attente commune avec MassMove : la nouvelle activation remplace l'ancienne.
- Si la demande de prix n'est pas reconnue, la commande quitte la boîte de dialogue pour la saisie manuelle et arrête les transferts ultérieurs. Les pannes de serveur, les décès, les changements de carte et les éléments/conteneurs indisponibles cessent également de fonctionner.
- Appeler correctement et à plusieurs reprises la même commande, alors que le mode attend toujours le premier glissement de la souris, désactive l'attente : Désactiver MassMove/MassPriceMove apparaît directement dans la fenêtre de jeu. L'appel suivant réactive le mode. Après le premier transfert, utilisez le formulaire sans argument pour arrêter la file d'attente restante. Les demandes déjà envoyées ne sont pas annulées.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.MassPriceMove");
UO.MassPriceMove();Paramètres et déroulement de l’exécution :
- délai=350 ms ; quantité=50 d'articles individuels, y compris le premier manuel ; type=0 se souvient de l'échantillon TYPE ; price=125 pour chaque article entier.
- il manque la destination et les coordonnées : faites glisser l'échantillon directement dans l'inventaire de votre fournisseur.
- Si les piles d'origine sont 100, un maximum de 50 piles complètes sont transférées. Chacun reçoit un prix 125 suite aux requêtes du serveur.
UO.MassPriceMove(350, 50, 0, 125);
UO.Print("Drag one complete stack into your vendor bag");Paramètres et déroulement de l’exécution :
- AddObject vous invite à sélectionner un sac de fournisseur et l'enregistre sous le nom supplier_bag. C'est la destination ID ; le type reste le code 0x0F7A.
- delay=500, quantité=0 sans limite, type=0x0F7A, prix=250, destination=vendor_bag.
- X/Y/Z manquant : -1,-1,0. Pour démarrer une file d'attente, faites glisser manuellement un élément du type approprié ; à partir de là, le sac d'origine est déterminé.
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;
}Paramètres et déroulement de l’exécution :
- délai=350 ms ; quantité=10 articles complets ; type=itemType=0x0EED; price=1000 pour chaque pile complète.
- destination=vendorBag est le vrai ID des sacs de votre vendeur, remplacez l'exemple. C'est le cinquième paramètre, pas le quatrième.
- x=60, y=70 est l'endroit à l'intérieur de ce sac, z=0. Ce ne sont pas les coordonnées du personnage sur la carte.
- Une fois appelé, faites glisser et déposez manuellement l’échantillon approprié depuis la source. Si le serveur rejette le placement, les autres demandes sont arrêtées.
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;
}
}Paramètres et déroulement de l’exécution :
- Sans argument, la commande désactive la file d'attente générale des transferts en masse et efface sa réponse de prix en attente.
- Les prix et transferts déjà acceptés par le serveur ne sont pas annulés. Pour arrêter d'autres procédures et activer séparément AllPrice, utilisez UO.TerminateAll().
Listes Shop / Listes d'achat et de vente
UO.MassPriceMove();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: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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;Paramètres: delay (Any), quantity (Any), type (Any), price (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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;Paramètres: delay (Any), quantity (Any), type (Any), price (Any), destination (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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)
Paramètres: delay (Any), quantity (Any), type (Any), price (Any), destination (Any), x (Any), y (Any), z (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Crée, met à jour ou supprime une règle de vente automatique dans la liste principale par défaut du profil Bad Newbie actuel. La commande configure le traitement futur de l'offre du vendeur NPC ; ne dit pas acheter/vendre, n'ouvre pas de magasin et ne confirme pas la transaction. Procédure complète : listes des magasins.
-
type- Produit graphique 0..65535 : par exemple 0x0F7A - Black Pearl, 0x0F51 - poignard. Ce n'est pas le serial du vendeur/objet ni le body du personnage. Un nombre négatif ou un nombre supérieur à 65535 est rejeté. Ici, 0xFFFF est un graphic spécifique, pas un masque de tous les biens. -
color— Teinte du produit : nombre négatif ou 0xFFFF — n'importe lequel ; 0 - uniquement les articles non peints. Pour un hue précis, utilisez 0..65534. N'utilisez pas de couleurs en dehors de cette plage : une valeur positive est convertie en ushort. La valeur par défaut est 1. -
quantity— Le nombre d'UNITÉS de marchandises par offre de magasin reçue, pas le nombre de piles ni le solde souhaité dans le sac à dos. Le positif est limité à 65535. 0/negative supprime la règle de correspondance type+couleur de la valeur par défaut ; il ne s’agit pas de « la quantité totale ». La valeur par défaut est 1.
void - aucune valeur. Appel sur une ligne séparée, sans résultat var = et sans if. La fin de l'appel signifie la fin de la configuration et non une transaction réussie. S'il n'y a pas de profil ou graphic invalide, la règle n'est pas créée ; Il n’y a pas de résultat numérique de l’erreur. Vérifiez la transaction réelle par le contenu du sac à dos, l'or et la réponse du serveur.
- Sell prend des arguments 1 à 3 ; manque sur la droite couleur=-1, quantité=1.
- La clé de règle est graphic et le masque hue par défaut. L'appel répété remplace la quantité et les autres champs de cette règle ; il n’ajoute pas de limite supplémentaire à la précédente. Sans prix/nom, les restrictions précédentes sur ces champs sont supprimées.
- Règle nouvelle/mise à jour Enabled=true. Le commutateur général d'achat/vente est défini en fonction de la présence de règles et le profil est enregistré. La liste par défaut désactivée elle-même n'est pas automatiquement activée : le mode général et la liste doivent être activés dans les paramètres. Les autres listes nommées ne sont pas modifiées.
- Le traitement commence lorsqu'une liste de marchandises arrive. La limite est dépensée au total sur les lignes correspondant à une règle. Pour chaque position, la première règle activée correspondante est utilisée. La réouverture du magasin donne une nouvelle offre et une nouvelle limite tant que la règle est active.
- Fonctionne pleinement avec Bad Newbie ; dans Classic, cette automatisation est désactivée. Ne remplacez pas le nom NPC ou le nom de la liste enregistrée dans les paramètres. AutoBuyEx ajoute des filtres prix/nom lors de l'achat ; ClearShopList réinitialise entièrement les deux automatisations.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.Sell");
UO.Sell(0x0F51);Paramètres et déroulement de l’exécution :
- 0x0F51 - graphic dague, n'importe quel hue, 1 - un par phrase. L'équipe ne sélectionne pas un serial spécifique et ne teste pas l'utilité/valeur de l'élément. Sélectionnez le type/couleur exact de votre article.
UO.Sell(0x0F51);Paramètres et déroulement de l’exécution :
- 0x1F03 est un exemple de robe graphic standard, 0x0044 est un exemple de hue. Remplacez les deux par votre produit. 5 — unités, pas prix ; les paramètres de prix minimum et de nom Sell/AutoSell ne sont pas acceptés. Le serveur doit inclure l'article dans l'offre de vente.
return RunScenario();
object? RunScenario()
{
UO.Sell(0x1F03, 0x0044, 5);
return null;
}Paramètres et déroulement de l’exécution :
- Le nom de la procédure est arbitraire ; itemType et hue sont ses paramètres. Les autres règles, achats et listes nommées personnalisées sont conservées. Si une autre liste activée vend également ces articles, désactivez la règle correspondante via les paramètres.
Listes Shop / Listes d'achat et de vente
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# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: type (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;Paramètres: type (Any), color (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;Paramètres: type (Any), color (Any), quantity (Any)
Résultat: void / Unit.
Pendant un appel:
-
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).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Envoie la sélection de produits à la dernière offre active du vendeur NPC. Le sens de la transaction est déterminé par l'offre : acheter à NPC ou lui vendre.
-
reply— Chaîne : "serial:quantité" ; plusieurs positions sont séparées par |, ; ou virgule. Au lieu de : disons =. Série - positions ID de GetShopList, décimal ou 0x, pas graphic et non ID vendeur. La quantité est un nombre entier positif de un, et non le nombre de piles ; sans cela, 1 est pris. "accepter" n'est pas sensible à la casse ou "1" confirme la fenêtre de brouillon ; une ligne vide annule la transaction avec une réponse vide.
void - Il n'y a pas de valeur de retour : ni true/false, ni le montant, ni la confirmation d'achat. Le serveur décide si la transaction est valide. Après la soumission, vérifiez les éléments mis à jour, l'or ou le message du serveur.
- Tout d'abord, comme une action de jeu normale, ouvrez un achat ou une vente à partir du NPC souhaité et attendez que le serveur propose. Ces équipes elles-mêmes ne recherchent pas de vendeur, n'ouvrent pas de commerce, ne fixent pas de prix pour un vendeur personnel et ne transfèrent pas d'objets entre les coffres. ID du vendeur n'est pas passé en paramètre : en cas de plusieurs offres, la dernière est utilisée.
- Dans le manager, l'offre est stockée dans la session de jeu. La fermeture du client graphique enregistre la proposition et le brouillon, son ouverture restaure la fenêtre. Fermer le magasin lui-même, répondre, fermer le serveur ou déconnecter la connexion supprime l'offre. Autobuy/autosell Bad Newbie peut le traiter avant le script.
- La lecture n'envoie pas de requêtes au serveur. Il s'agit d'un instantané de l'approvisionnement déjà reçu, et non d'une garantie du stock actuel de NPC. Le champ de quantité reflète les unités, pas le nombre de lignes/piles. ArrayLength(lignes) compte les positions. Les prix ici se lisent GetShopList ; SendShopReply n'accepte pas le prix.
- La liste explicite remplace le brouillon et n'y est pas ajoutée. Répéter un serial additionne la quantité ; le total est limité par la quantité totale de l'article dans l'offre. Inconnu serial, quantité incorrecte ou non positive rejette l'intégralité de la réponse avant de la soumettre, enregistrant l'offre. S'il n'y a pas de phrase, SendShopReply signale une erreur. La ligne "0" n'est pas une commande d'annulation ; utiliser "".
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.SendShopReply");
UO.SendShopReply("");Paramètres et déroulement de l’exécution :
- Jusqu'à 3 les unités de première position sont sélectionnées ; serial n'a pas la peau dure. Pour une offre d’achat c’est un achat, pour une offre de vente c’est une vente. Vérifiez quelle offre vous avez ouverte.
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] : ""; }Paramètres et déroulement de l’exécution :
- Uniquement pour l'offre ACHETER : budget 30, tapez 0x0E21. Une unité est sélectionnée parmi chaque article éligible si le prix est positif et dans les limites du budget restant. La chaîne est concaténée à l'aide de |; un SendShopReply envoie la totalité de la sélection.
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] : "";
}Paramètres et déroulement de l’exécution :
- Présélectionnez les quantités dans la vitrine du magasin. "accepter" envoie exactement ce brouillon ; Après avoir fermé la fenêtre de jeu, il est enregistré. Si rien n’est sélectionné, une réponse vide sera envoyée. "1" est un synonyme de confirmation, pas de sujet serial.
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;
}
}Paramètres et déroulement de l’exécution :
- Une ligne vide envoie une réponse vide et ferme l'offre active. Le contrôle GetShopList évite d'être appelé lorsqu'il n'y a pas de marchandise, mais il ne fait pas la distinction entre une phrase vide et une phrase absente.
Listes Shop / Listes d'achat et de vente
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# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: reply (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.SendShopReply. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendShopReply:bridge.SendShopReply(reply.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:reply.ToString().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void SendShopReply(InjectionValue reply) => bridge.SendShopReply(reply.ToString());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetAutoBuyDelay(object? value);Définit le délai d'achat automatique et enregistre le profil actuel.
-
value— Nombre requis de millisecondes. Une valeur négative est limitée à 0, une valeur supérieure à 65535 est limitée au nombre 65535. 0 désactive le délai supplémentaire, mais ne désactive pas le trading automatique lui-même.
void - aucune valeur de retour. Appelez sur une ligne distincte, puis utilisez GetAutoBuyDelay() pour lire le paramètre effectif. S'il n'y a pas de profil, le passeur ne sauvegarde rien ; le getter dans cet état donne la norme 3 ms.
- Le paramétrage est général pour le profil actuel : les modifications dans un autre script ou UI sont visibles la prochaine fois que vous le lirez. Zéro est un paramètre valide, ce n'est pas un signe de données manquantes et ce n'est pas une raison pour renvoyer l'ancien cache de script.
- La valeur par défaut est 3 ms. Après l'envoi d'une opération automatique, le gestionnaire fixe l'heure de la prochaine opération autorisée. Les listes de fournisseurs arrivées plus tôt ne sont pas traitées par ce passe ; getter ne déclenche pas d'attente et n'envoie pas lui-même d'achat/vente.
- Il ne s'agit pas d'un délai de MassMove, Drag/Drop ou d'un trading manuel. La nouvelle valeur est appliquée lors de la planification du prochain délai ; le moment déjà attribué n'est pas recalculé.
- Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.SetAutoBuyDelay");
UO.SetAutoBuyDelay(350);Paramètres et déroulement de l’exécution :
- Value=350 — millisecondes entre les opérations automatiques autorisées.
- Le paramètre est enregistré dans le profil actuel et est visible par les autres scripts.
UO.SetAutoBuyDelay(350);
UO.Print(Convert.ToString(UO.GetAutoBuyDelay()));Paramètres et déroulement de l’exécution :
- Value=0 a une signification indépendante ; n'est pas remplacé par la valeur non nulle précédente.
- Seul le délai change. Les règles, les listes et un commutateur de trading automatique général sont définis séparément.
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;Paramètres et déroulement de l’exécution :
- request=70000 dépasse le maximum. appliqué lit le profil après les restrictions du setter.
- Lorsque le profil est chargé, le résultat sera 65535. Pour revenir au délai standard, appelez explicitement le setter avec 3.
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# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: value (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyDelay:bridge.SetAutoBuyDelay(state.AutoBuyDelay).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Définit le délai de vente automatique et enregistre le profil actuel.
-
value— Nombre requis de millisecondes. Une valeur négative est limitée à 0, une valeur supérieure à 65535 est limitée au nombre 65535. 0 désactive le délai supplémentaire, mais ne désactive pas le trading automatique lui-même.
void - aucune valeur de retour. Appelez sur une ligne distincte, puis utilisez GetAutoSellDelay() pour lire le paramètre effectif. S'il n'y a pas de profil, le passeur ne sauvegarde rien ; le getter dans cet état donne la norme 3 ms.
- Le paramétrage est général pour le profil actuel : les modifications dans un autre script ou UI sont visibles la prochaine fois que vous le lirez. Zéro est un paramètre valide, ce n'est pas un signe de données manquantes et ce n'est pas une raison pour renvoyer l'ancien cache de script.
- La valeur par défaut est 3 ms. Après l'envoi d'une opération automatique, le gestionnaire fixe l'heure de la prochaine opération autorisée. Les listes de fournisseurs arrivées plus tôt ne sont pas traitées par ce passe ; getter ne déclenche pas d'attente et n'envoie pas lui-même d'achat/vente.
- Il ne s'agit pas d'un délai de MassMove, Drag/Drop ou d'un trading manuel. La nouvelle valeur est appliquée lors de la planification du prochain délai ; le moment déjà attribué n'est pas recalculé.
- Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.SetAutoSellDelay");
UO.SetAutoSellDelay(350);Paramètres et déroulement de l’exécution :
- Value=350 — millisecondes entre les opérations automatiques autorisées.
- Le paramètre est enregistré dans le profil actuel et est visible par les autres scripts.
UO.SetAutoSellDelay(350);
UO.Print(Convert.ToString(UO.GetAutoSellDelay()));Paramètres et déroulement de l’exécution :
- Value=0 a une signification indépendante ; n'est pas remplacé par la valeur non nulle précédente.
- Seul le délai change. Les règles, les listes et un commutateur de trading automatique général sont définis séparément.
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;Paramètres et déroulement de l’exécution :
- request=70000 dépasse le maximum. appliqué lit le profil après les restrictions du setter.
- Lorsque le profil est chargé, le résultat sera 65535. Pour revenir au délai standard, appelez explicitement le setter avec 3.
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# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: value (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellDelay:bridge.SetAutoSellDelay(state.AutoSellDelay).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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();Imprime une liste locale des lignes commerciales.
Il n'y a pas de paramètres.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- ExecuteLegacyManualAlias lit bridge.GetShopList et concatène les lignes via "|" pour SystemMessage. Le menu vendeur ne s'ouvre pas, l'achat/vente ne s'effectue pas.
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.Shop");
UO.Shop();Paramètres et déroulement de l’exécution :
- Imprime une liste locale des lignes commerciales.
UO.Shop();Paramètres et déroulement de l’exécution :
- ExecuteLegacyManualAlias lit bridge.GetShopList et concatène les lignes via "|" pour SystemMessage. Le menu vendeur ne s'ouvre pas, l'achat/vente ne s'effectue pas.
return RunScenario();
object? RunScenario()
{
UO.Shop();
UO.Print(UO.GetArrayLength(UO.GetShopList()));
return null;
}Paramètres et déroulement de l’exécution :
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
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# 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: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(string.Join(" | ", bridge.GetShopList())). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetShopList:bridge.GetShopList().
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Utilise un vendeur ou enregistre un crochet de menu permanent.
-
vendor— Formulaire avec un argument : serial/alias de l'objet vendeur. -
menu— Un formulaire avec deux arguments : un titre et un élément de menu, tous deux sous forme de texte. Il s'agit d'une opération différente ; le premier argument n'est pas serial. -
choice— Un formulaire avec deux arguments : un titre et un élément de menu, tous deux sous forme de texte. Il s'agit d'une opération différente ; le premier argument n'est pas serial.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Un argument appelle bridge.UseObject. Les deux arguments appellent bridge.AddMenuHook(menu,choice,true), où true signifie un hook répétable.
- N'achète ni ne vend automatiquement. L'ouverture et la sélection des menus sont déterminées par le serveur ; le hook enregistré agit sur les prochains menus correspondants jusqu'à son annulation.
- Pour les formulaires de menu/choix, le responsable sélectionne le premier menu dont le titre contient une invite, insensible à la casse ; SessionMenu sélectionne le premier élément dont le nom contient le choix, également insensible à la casse. Le texte vierge convient à tout le monde ; le texte numérique est un fragment du nom, pas un index. Une sélection réussie envoie une réponse et ferme le menu local. Un hook unique n'est supprimé qu'après une sélection réussie ; il reste un crochet permanent.
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.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.VendorMenu");
UO.VendorMenu("lasttarget");Paramètres et déroulement de l’exécution :
- Utilise un vendeur ou enregistre un crochet de menu permanent.
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;Paramètres et déroulement de l’exécution :
- Un argument appelle bridge.UseObject. Les deux arguments appellent bridge.AddMenuHook(menu,choice,true), où true signifie un hook répétable.
return RunScenario();
object? RunScenario()
{
UO.VendorMenu("Vendor", "Buy");
return null;
}Paramètres et déroulement de l’exécution :
- N'achète ni ne vend automatiquement. L'ouverture et la sélection des menus sont déterminées par le serveur ; le hook enregistré agit sur les prochains menus correspondants jusqu'à son annulation.
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# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: vendor (Any)
Résultat: void / Unit.
Pendant un appel:
-
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.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "vendormenu":
if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);
else bridge.UseObject(Arg(0, bridge.LastTarget));
break;Paramètres: menu (Any), choice (Any)
Résultat: void / Unit.
Pendant un appel:
-
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.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "vendormenu":
if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);
else bridge.UseObject(Arg(0, bridge.LastTarget));
break;