Repository navigation
FR UO Topic items Part 2
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Accueil · C# · IDE · UO API · A–Z · Exemples · Langues
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.MoveItem(object? id);
int UO.MoveItem(object? id, object? amount);
int UO.MoveItem(object? id, object? amount, object? targetContainer);
int UO.MoveItem(object? item, object? amount, object? container, object? x);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y);
int UO.MoveItem(object? id, object? amount, object? targetContainer, object? x, object? y, object? z);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y, object? z, object? timeout);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y, object? z, object? timeout, object? waitConfirmation);Transporte un objet/une pile spécifique par serial : capturé et déposé dans un conteneur ou sur le sol.
-
id— Série d'un élément/caractère spécifique : numéro, chaîne hexadécimale/décimale, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus ou nom enregistré AddObject. Ce n'est pas type. L'objet doit être chargé ; vérifiez Exists avant d'agir. -
item— Série d'un élément/caractère spécifique : numéro, chaîne hexadécimale/décimale, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus ou nom enregistré AddObject. Ce n'est pas type. L'objet doit être chargé ; vérifiez Exists avant d'agir. -
amount— Nombre d'unités dans une pile. 0 ou une valeur négative signifie la pile entière ; le positif est limité par la quantité disponible. Ce n'est PAS le nombre de stacks qui limite MassMove. La valeur par défaut est 0. -
targetContainer— Numéro de série du conteneur ou nom d'ensemble AddObject ; backpack/self/my choisissez un sac à dos, receiving/catchbag - SetCatchBag, et sans lui un sac à dos. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus sont valides lorsqu'ils sont résolus dans le bon conteneur. ground ou 0 sélectionne explicitement le terrain ; -1—le même sélecteur de sac à dos. Un nom inconnu ou non spécifié provoque une erreur avant que l'élément ne soit capturé. Sans argument de destination, le sac à dos est utilisé. -
container— Numéro de série du conteneur ou nom d'ensemble AddObject ; backpack/self/my choisissez un sac à dos, receiving/catchbag - SetCatchBag, et sans lui un sac à dos. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus sont valides lorsqu'ils sont résolus dans le bon conteneur. ground ou 0 sélectionne explicitement le terrain ; -1—le même sélecteur de sac à dos. Un nom inconnu ou non spécifié provoque une erreur avant que l'élément ne soit capturé. Sans argument de destination, le sac à dos est utilisé. -
x— Avec un conteneur — X dans le gump, par défaut 65535 (automatique). Au sol - monde X, caractère par défaut X. -
y— Y dans le gump ou le monde Y ; la valeur par défaut est 65535 pour le conteneur ou le caractère Y pour le terrain. -
z— Hauteur, par défaut 0 dans un conteneur ou Z d'un personnage au sol. -
timeout— Septième argument : attente maximale en ms, par défaut 1000 ; une valeur négative équivaut à 0. Utilisé uniquement avec le huitième waitConfirmation=true. -
waitConfirmation— Huitième argument : true/1 inclut l'attente d'un changement observé dans le monde ; false/0 (par défaut) renvoie le résultat de l'envoi d'une requête.
int 1 : le client a accepté la demande de capture et de réinitialisation ; 0—La demande n'a pas pu être complétée. Lorsque waitConfirmation=true on nécessite en plus un changement observable du conteneur/coordonnées ou une diminution de la pile d'origine. Il ne s'agit pas du serial de la nouvelle pile ni du nombre d'éléments transférés. Le serveur peut refuser de fonctionner.
Le résultat de la commande est un indicateur numérique : 1 signifie une condition remplie, 0 signifie une condition non remplie. Après var result = command(...) vérifiez si (result != 0) ou if (result == 0). Enregistrez le résultat d'un appel : un appel répété peut effectuer à nouveau l'action ou lire l'état qui a déjà changé.
- Toutes les longueurs d'argument de 1 à 8 sont prises en charge. Étant donné x, vous pouvez omettre y/z : les valeurs par défaut décrites sont utilisées pour eux.
- Le nom de destination connu est résolu avant la capture. Pour le sol, utilisez explicitement ground/0 ; une faute de frappe dans le nom ne doit pas jeter l'article par terre.
- L'objet peut être dans un coffre, un sac ou un sac à dos : ground fixe la destination au sol, quel que soit le contenant d'origine. Le premier argument spécifie le serial de l'objet lui-même, pas le coffre ou le type. L'équipe effectue elle-même le plaquage ; Il n'est pas nécessaire de saisir au préalable l'élément avec la souris.
- Lorsque DropCheckCoord est activé, le déversement au sol au-delà de deux cellules est rejeté. Le serveur vérifie en outre la disponibilité de l'espace. X/Y sont des cellules de carte, pas des pixels inutiles ; Z : hauteur de la surface sélectionnée, y compris le négatif. Pour un conteneur, X/Y signifie toujours l'emplacement à l'intérieur de sa gump.
- L'attente de confirmation utilise l'état du monde du client : pour une pile partielle - une diminution de quantité, pour un tout - un conteneur, pour le sol un autre X/Y/Z. À l’intérieur du conteneur, l’emplacement exact de la gomme n’est pas confirmé par cette attente ; la disparition/fusion des piles peut compliquer la vérification.
- Il ne s'agit pas d'une confirmation d'une transaction distincte ID. Si l'élément était déjà dans le même conteneur, la correspondance avec le conteneur ne prouve pas un nouveau déplacement dans le gump.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.MoveItem("lasttarget");
UO.Print("MoveItem: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- butin - nom AddObject ; le montant est manquant et égal à 0, la destination est le sac à dos.
- Un élément/une pile est transféré, pas tous les éléments d'un type donné.
var ok = UO.MoveItem("loot");
UO.Print("Move request: " + Convert.ToString(ok));Paramètres et déroulement de l’exécution :
- montant=10 unités d'une pile, coffre est le nom du conteneur, x/y=60/70 à l'intérieur du gump, z=0.
- La quantité n'a pas la valeur « dix piles » adoptée par MassMove.
return RunScenario();
object? RunScenario()
{
var ok = UO.MoveItem("loot", 10, "chest", 60, 70, 0);
return null;
}Paramètres et déroulement de l’exécution :
- ground sélectionne explicitement le terrain ; les X/Y/Z manquants sont extraits du personnage.
- Pour un autre point, passez ses coordonnées mondiales, en tenant compte de la portée et de DropCheckCoord.
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 ok = UO.MoveItem("loot", 0, "ground");
return null;
}
}Paramètres et déroulement de l’exécution :
- ground_item - enregistré serial de l'élément sélectionné dans un coffre ouvert. Le coffre d'origine n'est pas transmis en tant que paramètre distinct. montant=0 prend la totalité de la pile ; par exemple, 10 prendra jusqu'à dix unités de cette pile.
- ground sélectionne explicitement le sol. x/y - coordonnées absolues de la cellule à une cellule de X à partir du caractère ; z est tiré du caractère et convient si la surface adjacente est à la même hauteur. Sur un escalier, une table ou un autre sol, définissez le Z réel de la surface souhaitée.
- sent=1 signifie l'envoi d'une requête par le client ; sans le huitième paramètre, la confirmation du serveur n'est pas attendue. La valeur 0 signifie que la demande a échoué. Il s'agit du flag numérique int 1/0 : chèque envoyé != 0 ou envoyé == 0 ; la comparaison avec bool n'est pas valide.
- Pour se remettre directement à vos pieds, UO.MoveItem('ground_item', 0, 'ground') suffit : les trois coordonnées seront extraites du personnage. Pour le placer à l'intérieur d'un coffre, au lieu de ground, précisez serial/le nom du coffre et les coordonnées de son gump.
UO.AddObject("ground_item");
var x = UO.GetX() + 1;
var y = UO.GetY();
var z = UO.GetZ();
var sent = UO.MoveItem("ground_item", 0, "ground", x, y, z);
if (Truth(sent == 1))
{
UO.Print("Ground move request sent");
}
else
{
UO.Print("Ground move request was not sent");
}
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 :
- timeout=1500 ms est utilisé car waitConfirmation=true. x/y=-1 — placement automatique.
- 0 peut indiquer un délai d'attente pour une demande déjà envoyée. Ne répétez pas le transfert aveuglément ; Veuillez d'abord vérifier l'état actuel de l'article.
return RunScenario();
object? RunScenario()
{
var ok = UO.MoveItem("loot", 0, "backpack", -1, -1, 0, 1500, true);
if (Truth(ok == 0))
{
UO.Print("Move was rejected or not confirmed");
}
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: id (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id }).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int MoveItem(InjectionValue id)
=> CompactMoveItem(new[] { id });Paramètres: id (Any), amount (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount }).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int MoveItem(InjectionValue id, InjectionValue amount)
=> CompactMoveItem(new[] { id, amount });Paramètres: id (Any), amount (Any), targetContainer (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount, targetContainer }).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int MoveItem(InjectionValue id, InjectionValue amount, InjectionValue targetContainer)
=> CompactMoveItem(new[] { id, amount, targetContainer });Paramètres: item (Any), amount (Any), container (Any), x (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactMoveItem(values))Paramètres: item (Any), amount (Any), container (Any), x (Any), y (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactMoveItem(values))Paramètres: id (Any), amount (Any), targetContainer (Any), x (Any), y (Any), z (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount, targetContainer, x, y, z }).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int MoveItem(InjectionValue id, InjectionValue amount, InjectionValue targetContainer, InjectionValue x, InjectionValue y, InjectionValue z)
=> CompactMoveItem(new[] { id, amount, targetContainer, x, y, z });Paramètres: item (Any), amount (Any), container (Any), x (Any), y (Any), z (Any), timeout (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactMoveItem(values))
UO.MoveItem(item, amount, container, x, y, z, timeout, waitConfirmation) — UO.MoveItem(Any,Any,Any,Any,Any,Any,Any,Any)
Paramètres: item (Any), amount (Any), container (Any), x (Any), y (Any), z (Any), timeout (Any), waitConfirmation (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactMoveItem(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MoveItems(object? container, object? itemsType, object? itemsColor, object? moveIntoID, object? x, object? y, object? z, object? delayMS);Transfère tous les éléments appropriés directement d’un conteneur à un autre ou au sol. Les éléments sont sélectionnés par graphic et hue ; chaque pile est transférée entièrement. Il s'agit de transporter des objets, pas de marcher avec un personnage ou d'activer interactivement MassMove.
-
container— Numéro de série du conteneur source, tel que backpack, "backpack", nom AddObject ou hex-ID. Le contenu doit déjà être téléchargé. 0 n'est pas une source valide ; ground ne sélectionne pas les éléments autour du personnage. Pour un sac à dos, utilisez backpack plutôt que self. -
itemsType- Élément graphique, par exemple 0x0EED - or. Pas les choses ID ni le corps mobile. Nombre négatif ou 0xFFFF - tous types. Le masque de tableau/type n’est pas accepté. -
itemsColor— Teinte les choses. -1 (ou autre nombre négatif) et 0xFFFF - n'importe lequel ; 0 - uniquement hue 0. Pas de serial et pas de notoriété. -
moveIntoID— Série du conteneur de destination ou de l'alias de l'objet. Pour votre sac à dos - backpack. Pour les terrains - le numéro 0 (également ground/"ground"/UO.Ground()). La source et la destination doivent être différentes. -1 n'est pas l'abréviation de backpack dans cette commande. Self - serial mobile plutôt que de remplacer automatiquement son sac à dos. -
x— Pour un conteneur non nul, la position À L'INTÉRIEUR de sa gomme ; -1,-1 laisse le placement au serveur. Au sol - coordonnées mondiales 0..65535, les deux sont obligatoires et non négatives. Pas les pixels de l'écran du monde du jeu ni le point final du parcours. -
y— Pour un conteneur non nul, la position À L'INTÉRIEUR de sa gomme ; -1,-1 laisse le placement au serveur. Au sol - coordonnées mondiales 0..65535, les deux sont obligatoires et non négatives. Pas les pixels de l'écran du monde du jeu ni le point final du parcours. -
z— Hauteur du monde posé au sol ; utiliser l'altitude réelle du site (plage de protocole -128..127). Dans l'exemple du conteneur, indiquez 0. Il ne s’agit pas d’un index de couche d’équipement. -
delayMS— Délai entre les requêtes acceptées en millisecondes. En réalité, max(GrabDelay, max(0, DelayMS)); il y a aussi une attente après le dernier transfert envoyé. 350 ne signifie pas les articles 350 et ne garantit pas la confirmation dans 350 ms.
Inscription object ? renvoie en fait int 1/true si au moins une demande de transfert est acceptée, sinon 0/false. Il ne s’agit pas d’un nombre d’éléments ni d’une garantie que TOUS les matchs seront reportés. Vérifiez le contenu une fois que le serveur a répondu. Une annulation d'urgence annule la procédure et n'exige pas le retour du false.
- Les huit arguments sont requis. Une liste des enfants directs du conteneur d'origine est créée une seule fois ; Il n’y a pas de parcours récursif. Une fois qu'un sac est inclus dans la liste, il est déplacé comme un seul article avec son contenu, plutôt que d'être déballé.
- Prend la totalité de la pile actuelle de chaque match. La limite du nombre d'éléments ou d'unités n'est pas définie par cette commande ; pour de tels scénarios, voir UO.MassMove. Ignore n'est pas utilisé comme filtre supplémentaire pour cet échantillon.
- Avant chaque action, il revérifie que l'élément est toujours dans son contenant d'origine. L'interdiction d'imbriquer un conteneur dans lui-même/descendant et l'indisponibilité de l'article peuvent entraîner un saut. Une file d'attente n'est pas une transaction : les actions déjà soumises ne sont pas annulées.
- Si source=0, source/destination ou masse identique avec X/Y négatif, renvoie 0 et signale une erreur. Le serveur détermine la résolution, la portée, la capacité et le résultat final. N'effectuez pas d'autres opérations avec des objets soulevés en même temps.
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.MoveItems("lasttarget", 0x0EED, -1, "backpack", -1, -1, 0, 350);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0x0EED - type or ; -1 à ItemsColor - n'importe quel hue. -1,-1 après backpack est la position automatique dans la gump, pas dans le sol. 350 ms - le délai minimum souhaité, en tenant compte de GrabDelay. Toutes les piles d'or droites sont prises entières.
var source = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(source == 0) || Truth(source == UO.Backpack()) || !(Truth(UO.Exists(source))))
{
return null;
}
var sent = UO.MoveItems(source, 0x0EED, -1, "backpack", -1, -1, 0, 350);
if (Truth(Truth(sent) == false))
{
UO.Print("No gold transfer request was accepted");
}
int Asc(object? value, int fallback = 0) { string text = Convert.ToString(value) ?? ""; if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback; return int.TryParse(text, out int number) ? number : fallback; }
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 :
- 0x0E21 - des bandages, pas le corps humain. backpack est la source, la destination est serial du coffre. Tous les matchs sont dirigés vers un point 30,40 ; le serveur peut fusionner les piles ou ajuster la position.
return RunScenario();
object? RunScenario()
{
var destination = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(destination == 0) || Truth(destination == UO.Backpack()) || !(Truth(UO.Exists(destination))))
{
return null;
}
var sent = UO.MoveItems("backpack", 0x0E21, -1, destination, 30, 40, 0, 350);
if (Truth(sent != 0))
{
UO.Print("Transfer requested; verify the destination contents");
}
return null;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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 :
- itemType spécifie le type, pas la quantité ; toutes ses piles droites sont transportées dans un sac à dos. X+1/Y/Z est un exemple de point adjacent à la même hauteur : pour une pente/un mur, sélectionnez la bonne coordonnée. L'affectation 0 est requise pour le mode monde. true indique uniquement une demande acceptée, pas un sac à dos libéré.
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()
{
if (!(Truth(DropTypeBesideMe(0x0EED))))
{
UO.Print("No ground drop request was accepted");
}
return null;
}
dynamic DropTypeBesideMe(dynamic itemType)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return false;
}
var x = UO.GetX() + 1;
var y = UO.GetY();
var z = UO.GetZ();
return UO.MoveItems("backpack", itemType, -1, 0, x, y, z, 350);
}
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.
UO.MoveItems(container, itemsType, itemsColor, moveIntoID, x, y, z, delayMS) — UO.MoveItems(Any,Any,Any,Any,Any,Any,Any,Any)
Paramètres: container (Any), itemsType (Any), itemsColor (Any), moveIntoID (Any), x (Any), y (Any), z (Any), delayMS (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MoveItems:bridge.MoveItems(Arg(0), ResolveType(arguments[1]), Arg(2), Arg(3), Arg(4), Arg(5), Arg(6), Arg(7)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "moveitems": return new InjectionValue(bridge.MoveItems(Arg(0), ResolveType(arguments[1]), Arg(2), Arg(3), Arg(4), Arg(5), Arg(6), Arg(7)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Name();Lit le nom du personnage.
Il n'y a pas de paramètres.
string est un nom connu du client. Une chaîne vide signifie une valeur vide/inconnue ou aucun objet. Ce n'est pas serial ou un chemin de profil. Le nom/titre du jeu n'est pas traduit par la langue IDE.
- Les données locales déjà reçues sont lues. La requête n'ouvre pas le statut et n'oblige pas le serveur à envoyer une mise à jour. Après un décès, une transition de map ou une suppression d'objet, les valeurs peuvent changer entre deux appels.
- C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.Name();
UO.Print("Name: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Il n'y a pas de paramètres : self est lu.
- La chaîne vide est gérée explicitement ; ce n'est pas le texte "0".
var text = UO.Name();
if (Truth(text != ""))
{
UO.Print(text);
}
else
{
UO.Print("Text is unavailable");
}
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 :
- Votre caractère est lu, la valeur est stockée sous forme de ligne.
- L'opérateur + joint les chaînes ; Convert.ToString n'est pas nécessaire pour ce résultat.
return RunScenario();
object? RunScenario()
{
var text = UO.Name();
UO.Print("Player имя: " + text);
return null;
}Paramètres et déroulement de l’exécution :
- Les deux appels font référence à self ; UO.Wait définit la pause 1000 ms.
- La différence peut signifier mettre à jour les données ou quitter le monde. L'exemple ne change ni le nom ni le titre.
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 previous = UO.Name();
await Delay(1000);
var current = UO.Name();
if (Truth(previous != current))
{
UO.Print("Updated text: " + current);
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Name]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.GetName(bridge.Self)Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Picking();Vérifie si le curseur du client est occupé par un élément ramassé.
Il n'y a pas de paramètres.
int 1 - ItemHold.Ensemble activé ; 0 - non installé. Il s'agit d'un état client, pas de ID ou d'une confirmation de livraison par le serveur. Un objet capté par une souris ou autre script est pris en compte.
Le résultat de la commande est un indicateur numérique : 1 signifie une condition remplie, 0 signifie une condition non remplie. Après var result = command(...) vérifiez si (result != 0) ou if (result == 0). Enregistrez le résultat d'un appel : un appel répété peut effectuer à nouveau l'action ou lire l'état qui a déjà changé.
- La lecture ne ramasse ni ne laisse tomber un objet.
- Pour votre propre transfert, vérifiez également le résultat de Drag/DragItem ; le curseur occupé de quelqu'un d'autre ne signifie pas que l'élément souhaité a été récupéré avec succè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.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.Picking();
UO.Print("Picking: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Il n'y a pas d'arguments.
- 1 ou 0 s'affiche.
UO.Print(Convert.ToString(UO.Picking()));Paramètres et déroulement de l’exécution :
- Un argument Drag signifie la pile entière et timeout=0.
- Picking vérifie le curseur partagé du client. N'exécutez pas deux migrations indépendantes en même temps.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Picking() == 0))
{
if (Truth(UO.Drag("loot")))
{
var dropped = UO.DropItem("backpack", -1, -1, 0);
}
}
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 :
- Le contrôle est répété jusqu'à vingt fois avec des pauses de 50 ms.
- La commande ne libère pas le curseur et n'annule pas le mouvement de quelqu'un d'autre.
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 tries = 0;
while (Truth(UO.Picking()) && Truth(tries < 20))
{
await Delay(50);
tries = tries + 1;
}
if (Truth(UO.Picking()))
{
UO.Print("Cursor is still occupied");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Picking. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Picking:bridge.Picking().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int Picking() => bridge.Picking();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ReceiveObjectName(object? id);
void UO.ReceiveObjectName(object? id, object? timeout);Demande le nom d'un objet avec une requête en un seul clic.
-
id— Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir. -
timeout— Facultatif int, millisecondes ; la valeur par défaut est 0. Une valeur négative n’ajoute pas d’anticipation.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Bridge.ReceiveObjectName appelle Click(id), puis attend que max(0,timeout) jusqu'à ce que GetName(id) soit vide ; ne faites pas de pause plus de 25 ms. Un nom déjà connu met immédiatement fin à l'attente.
- Sans timeout, seul Click est exécuté. Il n'y a pas de nom de retour : lisez GetName séparément ; la fin de l'attente peut signifier un délai d'attente.
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.ReceiveObjectName");
UO.ReceiveObjectName("lasttarget");Paramètres et déroulement de l’exécution :
- Demande le nom d'un objet avec une requête en un seul clic.
UO.ReceiveObjectName("lasttarget");Paramètres et déroulement de l’exécution :
- Bridge.ReceiveObjectName appelle Click(id), puis attend que max(0,timeout) jusqu'à ce que GetName(id) soit vide ; ne faites pas de pause plus de 25 ms. Un nom déjà connu met immédiatement fin à l'attente.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.ReceiveObjectName("lasttarget", 1000);
}
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 :
- Sans timeout, seul Click est exécuté. Il n'y a pas de nom de retour : lisez GetName séparément ; la fin de l'attente peut signifier un délai d'attente.
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 id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.ReceiveObjectName(id, 1000);
UO.Print(UO.GetName(id));
}
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: id (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ReceiveObjectName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ReceiveObjectName:bridge.ReceiveObjectName(GetObject(id), 0). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void ReceiveObjectName(InjectionValue id) => bridge.ReceiveObjectName(GetObject(id), 0);Paramètres: id (Any), timeout (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ReceiveObjectName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ReceiveObjectName:bridge.ReceiveObjectName(GetObject(id), NumberConversions.ToInt(timeout)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void ReceiveObjectName(InjectionValue id, InjectionValue timeout) => bridge.ReceiveObjectName(GetObject(id), NumberConversions.ToInt(timeout));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksUse();Lit la marque enregistrée TicksUse.
Il n'y a pas de paramètres.
int — marque UO.Timer en dixièmes de seconde à partir du début de l'exécution. 0 - la marque n'a pas encore été posée ou l'événement s'est produit dans le premier dixième de seconde ; ce ne sont pas des millisecondes ou l’heure du calendrier.
- Renvoie le champ ticksUse. Il est mis à jour par UseObject ; il ne s'agit pas d'une observation automatique de toutes les activités manuelles/serveurs. La commande elle-même ne modifie pas la marque.
- UO.Timer() - la marque calcule l'âge en dixièmes de seconde. Les marques ne sont pas comparées entre les différentes exécutions.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.TicksUse();
UO.Print("TicksUse: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Lit la marque enregistrée TicksUse.
var stamp = UO.TicksUse();
UO.Print(stamp);Paramètres et déroulement de l’exécution :
- Renvoie le champ ticksUse. Il est mis à jour par UseObject ; il ne s'agit pas d'une observation automatique de toutes les activités manuelles/serveurs. La commande elle-même ne modifie pas la marque.
return RunScenario();
object? RunScenario()
{
var stamp = UO.TicksUse();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}Paramètres et déroulement de l’exécution :
- UO.Timer() - la marque calcule l'âge en dixièmes de seconde. Les marques ne sont pas comparées entre les différentes exécutions.
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 before = UO.TicksUse();
UO.Wait(250);
var after = UO.TicksUse();
UO.Print(before = after);
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: int / Integer.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int TicksUse() => ticksUse;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UpdateObject(object? id);Demande une mise à jour d'un objet déjà chargé.
-
id— Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Pour Mobile, RequestMobileStatus(..., true) est appelé, pour Item - SingleClick. Si serial n'est pas présent dans les deux tables locales, il n'y a aucune action. Il ne s’agit pas de télécharger un objet inconnu ou de confirmer une mise à jour.
- Bridge envoie la requête sur le flux du jeu. Les règles du serveur s'appliquent ; Il n’y a pas d’attente de confirmation intégrée.
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.UpdateObject");
UO.UpdateObject(UO.GetSerial("lasttarget"));Paramètres et déroulement de l’exécution :
- Demande une mise à jour d'un objet déjà chargé.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
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 :
- Pour Mobile, RequestMobileStatus(..., true) est appelé, pour Item - SingleClick. Si serial n'est pas présent dans les deux tables locales, il n'y a aucune action. Il ne s’agit pas de télécharger un objet inconnu ou de confirmer une mise à jour.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
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 :
- Bridge envoie la requête sur le flux du jeu. Les règles du serveur s'appliquent ; Il n’y a pas d’attente de confirmation intégrée.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
}
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: id (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UpdateObject. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UpdateObject:bridge.UpdateObject(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void UpdateObject(InjectionValue id) => bridge.UpdateObject(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseFromGround(object? @type);
int UO.UseFromGround(object? @type, object? color);Recherche un objet du graphic donné sur le terrain/dans le monde et appelle immédiatement son application. Généralement utilisé pour les objets à proximité, comme l'ouverture d'un sac à dos. Une fonctionnalité importante de ce runtime : la recherche est basée sur FindType et peut également trouver mobile avec le même body ; Il ne s’agit pas strictement d’une sélection d’éléments uniquement. Pour les éléments avec un rayon explicite et une sélection la plus proche, utilisez UseType(..., ground, ...).
-
type- Obligatoire graphic. Par exemple, 0x0E75 est un sac à dos. Nombre ou chaîne hexadécimale numérique ; nombre négatif/0xFFFF — n'importe quel graphic. Les valeurs corporelles telles que 0x0190 (homme) et 0x0191 (femme) peuvent sélectionner mobile ; ne les remplacez pas par l'élément type. Deux types ne sont pas transmis en même temps par ce formulaire. -
color- Facultatif hue, par défaut - 1 (n'importe lequel). Nombre négatif/0xFFFF - n'importe lequel, 0 - uniquement hue 0. Il n'y a pas d'autres paramètres : conteneur, distance, plus proche et maxZ ne sont pas ajoutés à cette commande.
int - serial du premier objet trouvé, passé à UseObject, ou 0. Ce n'est pas le nombre d'objets, ni graphic ni true/false. L'objet peut être trouvé, mais le serveur peut ne pas autoriser son utilisation. Vérifiez id != 0 et l'effet de jeu attendu séparément.
- Utilise les courants FindDistance et FindVertical, prend en compte Ignore. Le conteneur de recherche est corrigé comme ground, le contenu imbriqué n'est pas parcouru. Les mobiles excluent self ; il n’y a pas de restriction distincte sur la vie/visibilité/notoriété.
- Met à jour FindItem/FindCount/GetFoundItems avec toutes les correspondances de recherche, mais n'applique que le premier résultat. Le plus proche n’est pas garanti ; les objets du monde sont vérifiés avant les mobiles.
- Ne ramasse pas un objet dans le sac à dos, ne déplace pas le personnage, n'attend pas la réponse du serveur ni la fin de la cible. S'il n'y a pas de correspondance, imprime un message. Pour rechercher sans action, utilisez UO.FindType.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.UseFromGround(0x0E75);
UO.Print("UseFromGround: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- type uniquement ; n'importe quel hue. Les FindDistance/FindVertical actuels sont utilisés. bag - ID du premier résultat, pas forcément le plus proche. Le contenu ne s'ouvrira que si le serveur le permet.
var bag = UO.UseFromGround(0x0E75);
if (Truth(bag != 0))
{
UO.AddObject("ground_bag", bag);
}
else
{
UO.Print("No loaded ground backpack matches the search settings");
}
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 :
- La recherche est limitée à deux cellules et au même Z. La couleur 0x0044 est donnée à titre d'exemple : remplacez-la par hue de votre article. Les paramètres sont restaurés même en cas d'erreur.
return RunScenario();
object? RunScenario()
{
var oldDistance = UO.FindDistance();
var oldZ = UO.FindVertical();
try
{
UO.FindDistance(2);
UO.FindVertical(0);
var bag = UO.UseFromGround(0x0E75, 0x0044);
if (Truth(bag != 0))
{
UO.AddObject("colored_ground_bag", bag);
}
}
finally
{
UO.FindDistance(oldDistance);
UO.FindVertical(oldZ);
}
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 :
- radius spécifie FindDistance plutôt que le troisième argument UseFromGround. 3000 ms — temps de visualisation de l'exemple, pas de confirmation d'ouverture ; type de fenêtre 3 - conteneur. Les résultats de cette recherche restent dans Rechercher*.
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 selected = OpenGroundBagWithin(2);
if (Truth(selected != 0))
{
await Delay(3000);
UO.CloseClientUIWindow(3, selected);
}
return null;
}
dynamic OpenGroundBagWithin(dynamic radius)
{
var previous = UO.FindDistance();
try
{
UO.FindDistance(radius);
return UO.UseFromGround(0x0E75, -1);
}
finally
{
UO.FindDistance(previous);
}
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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: type (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseFromGround. -
InjectionScript.Runtime.InjectionApiUO.UseFromGround:UseFromGround(type, new InjectionValue(-1)).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int UseFromGround(InjectionValue type) => UseFromGround(type, new InjectionValue(-1));Paramètres: type (Any), color (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseFromGround. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(id). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("No matching item found on ground.").
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int UseFromGround(InjectionValue type, InjectionValue color)
{
int id = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);
if (id != 0)
UseObject(id);
else
SystemMessage("No matching item found on ground.");
return id;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseItemOnMobile(object? itemSerial, object? targetSerial);Prépare la cible du personnage et utilise l'objet.
-
itemSerial— Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir. -
targetSerial— Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- ExecuteClientApiCompatibility appelle d'abord bridge.WaitTargetObject(TargetSerial), puis bridge.UseObject(ItemSerial). Les arguments ne sont pas échangés. Ces appels de pont directs ne mettent pas à jour le runtime TicksTarget/TicksUse.
- Ne vérifie pas le type de cible/élément et n’attend pas le curseur. La préparation de la cible avant utilisation évite qu'une cible arrivant rapidement ne soit manquée, mais le serveur détermine toujours si l'action est valide.
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.UseItemOnMobile");
UO.UseItemOnMobile("0x40001234", "self");Paramètres et déroulement de l’exécution :
- Prépare la cible du personnage et utilise l'objet.
UO.UseItemOnMobile("0x40001234", "self");Paramètres et déroulement de l’exécution :
- ExecuteClientApiCompatibility appelle d'abord bridge.WaitTargetObject(TargetSerial), puis bridge.UseObject(ItemSerial). Les arguments ne sont pas échangés. Ces appels de pont directs ne mettent pas à jour le runtime TicksTarget/TicksUse.
return RunScenario();
object? RunScenario()
{
var item = UO.GetSerial("lastobject");
var mobile = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(item)) && Truth(UO.Exists(mobile)))
{
UO.UseItemOnMobile(item, mobile);
}
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 :
- Ne vérifie pas le type de cible/élément et n’attend pas le curseur. La préparation de la cible avant utilisation évite qu'une cible arrivant rapidement ne soit manquée, mais le serveur détermine toujours si l'action est valide.
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 item = UO.GetSerial("lastobject");
if (Truth(UO.Exists(item)))
{
UO.UseItemOnMobile(item, "self");
UO.Print(UO.Waiting());
}
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: itemSerial (Any), targetSerial (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0)).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "useitemonmobile": bridge.WaitTargetObject(Arg(1)); bridge.UseObject(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseObject(object? objID);Demande l'utilisation d'un objet par serial. Le pont appelle GameActions.DoubleClick ; L'article n'est pas recherché pour type.
-
objID— Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- GetObject autorise les alias ; un nom inconnu donne -1. Après l'appel, le runtime met à jour TicksUse avec la valeur de UO.Timer ; C'est le moment de la demande, pas de la confirmation du serveur.
- Bridge envoie la requête sur le flux du jeu. Les règles du serveur s'appliquent ; Il n’y a pas d’attente de confirmation intégrée.
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.UseObject");
UO.UseObject(UO.GetSerial("lasttarget"));Paramètres et déroulement de l’exécution :
- Demande l'utilisation d'un objet par serial. Le pont appelle GameActions.DoubleClick ; L'article n'est pas recherché pour type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UseObject(id);
}
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 :
- GetObject autorise les alias ; un nom inconnu donne -1. Après l'appel, le runtime met à jour TicksUse avec la valeur de UO.Timer ; C'est le moment de la demande, pas de la confirmation du serveur.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UseObject(id);
}
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 :
- Bridge envoie la requête sur le flux du jeu. Les règles du serveur s'appliquent ; Il n’y a pas d’attente de confirmation intégrée.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UseObject(id);
}
}
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: objID (Any/Integer/String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "useobject": bridge.UseObject(Arg(0)); return InjectionValue.Unit;Paramètres: objID (Any/Integer/String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseObject. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(id). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void UseObject(int id)
{
bridge.UseObject(id);
ticksUse = Timer();
}Paramètres: objID (Any/Integer/String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void UseObject(string id) => UseObject(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseType(object? @type);
int UO.UseType(object? @type, object? color);
int UO.UseType(object? @type, object? color, object? container);
int UO.UseType(object? @type, object? color, object? container, object? distance);
int UO.UseType(object? @type, object? color, object? container, object? distance, object? nearest);
int UO.UseType(object? @type, object? color, object? container, object? distance, object? nearest, object? maxZ);Trouve un élément du graphic/type souhaité et l'applique. Par exemple, buvez une potion dans un sac à dos, ouvrez un sac à dos à proximité ou utilisez un objet d'un conteneur sélectionné. Cette commande ne recherche ni ne déplace le personnage. Si un élément nécessite une portée, la cible doit être préparée séparément.
-
type— Graphique de l'élément : nombre ou chaîne hexadécimale ; par exemple, 0x0F0C est un type de potion de guérison, 0x0E75 est un sac à dos. Ce n'est pas un caractère serial ou body. Un nombre négatif ou 0xFFFF autorise tout type ; pour une action significative, un graphic précis est préférable. -
color— Teinte de l'élément, par défaut - 1 (n'importe lequel). Tout nombre négatif ou 0xFFFF supprime le filtre ; 0 choisit l'élément non peint. Pas de notoriété et pas de couleur du texte. -
container— Par défaut -1 : votre sac à dos et les sous-conteneurs chargés. "my" signifie la même chose. "backpack" ou le serial explicite du conteneur spécifie la racine du parcours récursif. ground/"ground"/UO.Ground(), les numériques 0/1 désignent uniquement les objets du monde. Self n'est pas synonyme de backpack ; utilisez un sac à dos explicite. Un alias d'objet inconnu/null peut être résolu comme un sac à dos : vérifiez d'abord le conteneur transféré en utilisant Exists. -
distance— Plage géométrique maximale X/Y, pas la longueur du trajet. L'argument par défaut ou négatif est FindDistance. 0 signifie la même cellule. Pour les objets en conteneur, le client prend en compte la distance avec le propriétaire. -
nearest— Par défaut true : sélectionnez l'élément le plus proche, s'il est égal, le plus petit serial. false : Trouvé pour la première fois en parcours sans tri. Pas le nombre d'éléments ou le mode de fonctionnement. -
maxZ— Différence absolue maximale entre la hauteur du monde Z et le personnage. L'argument par défaut ou négatif est FindVertical. 0 nécessite le même Z. Pour l'article dans le sac, la hauteur du conteneur extérieur au sol ou le personnage du propriétaire est utilisé ; les coordonnées internes du Gump ne sont pas considérées comme des coordonnées mondiales. Il s'agit d'un filtre de hauteur, et non d'une vérification de l'accessibilité piétonnière ou de la ligne de vue.
int - serial de l'item pour lequel UseObject est appelé ; 0 s'il n'y a pas de correspondance. Même l'inscription auprès de ReturnKind object ? renvoie en fait un nombre. Il ne s'agit pas de true/false ou de confirmation d'utilisation par le serveur : vérifiez used != 0 plutôt que used == true. Une vérification distincte de l'état, du contenu ou du journal est requise pour que l'effet réussisse.
- Des arguments 1 à 6. Pour définir la plage, spécifiez également la couleur et le conteneur. Pour spécifier maxZ, complétez les six positions. Tableau type, masque via | et les objectifs supplémentaires ne sont pas acceptés par cette commande.
- Les formulaires réguliers avec int/string et les formulaires étendus utilisent CompactUseType : éléments uniquement, Ignore, distance et hauteur ; les conteneurs sont parcourus de manière récursive sur le contenu déjà chargé. Le conteneur de chargement ne s'ouvre pas automatiquement. FindItem/FindCount/GetFoundItems ne sont pas mis à jour par cette branche.
- La hauteur des propriétaires partagés et des conteneurs est calculée une fois par appel pour éviter de répéter le parcours pour chaque pile. Une chaîne de conteneurs circulaire ou excessivement profonde (maillons 128 sans racine trouvée) n'est pas utilisée comme correspondance de hauteur.
- Maintien d'un enregistrement commun compatible de deux object? : il achemine un appel vers bridge.UseType en utilisant FindType sur le sac à dos, en mettant à jour Find* et en sélectionnant le premier résultat. Pour une forme compacte prévisible, utilisez int/string plutôt que des conversions implicites de types valeur inappropriés.
- UseObject envoie une action d'incantation, mais la commande n'attend pas la cible, la guérison, la boisson, l'ouverture d'une fenêtre ou la panne du serveur. La plage de recherche n'étend pas la plage d'utilisation autorisée par le serveur.
- S'il n'y a pas de correspondance, le formulaire compact imprime le message et renvoie 0. S’il n’y a pas de caractère/de lien, le résultat ne doit pas être considéré comme une autorisation d’agir. Pour un ID précis, utilisez UO.UseObject.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.UseType(0x0F0C);
UO.Print("UseType: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0x0F0C est un exemple de type standard de potion de guérison. Le serveur peut rejeter l'action en raison de l'état du personnage, de la latence ou de ses propres règles. La couleur et la plage ne sont pas spécifiées séparément : les valeurs par défaut s'appliquent.
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return null;
}
var used = UO.UseType(0x0F0C);
if (Truth(used == 0))
{
UO.Print("No matching healing potion in the loaded backpack");
}
else
{
UO.Print("Potion use requested; check health and the game message");
}
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 :
- 0x0E75 — type d'un sac à dos, -1 — n'importe quel hue, ground — objets du monde. 2 - cellules X/Y, true - les plus proches, 4 - différence Z. Sac de retour — ID. L'accès au contenu est déterminé par le serveur ; l'équipe ne récupère pas le sac à dos.
return RunScenario();
object? RunScenario()
{
var bag = UO.UseType(0x0E75, -1, "ground", 2, true, 4);
if (Truth(bag != 0))
{
UO.AddObject("nearby_bag", bag);
}
else
{
UO.Print("No suitable ground backpack within the selected bounds");
}
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 :
- itemType — graphic choses, source — conteneur serial séparé. L'assistant renvoie serial/0 de la même manière que UseType. Même un élément trouvé peut être interdit par le serveur d'être utilisé à partir de quelqu'un d'autre ou d'un conteneur distant.
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 source = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(source == 0) || !(Truth(UO.Exists(source))))
{
return null;
}
UO.AddObject("supply", source);
var used = UseFromNamedSupply(0x0F0C);
if (Truth(used == 0))
{
UO.Print("Supply item was not found with these filters");
}
return null;
}
dynamic UseFromNamedSupply(dynamic itemType)
{
var source = Asc(UO.GetSerial("supply"), 0);
if (Truth(source == 0) || !(Truth(UO.Exists(source))))
{
return 0;
}
return UO.UseType(itemType, 0, source, 2, false, 16);
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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: type (Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(type, -1).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int UseType(int type) => UseType(type, -1);Paramètres: type (Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int UseType(string type) => UseType(ResolveType(type));Paramètres: type (Any/Integer/String), color (Any/Integer/String)
Résultat: int / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseType:bridge.UseType(ResolveType(arguments[0]), arguments.Length > 1 ? Arg(1) : -1). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "usetype": return new InjectionValue(bridge.UseType(ResolveType(arguments[0]), arguments.Length > 1 ? Arg(1) : -1));Paramètres: type (Any/Integer/String), color (Any/Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(new[] { new InjectionValue(type), new InjectionValue(color) }).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int UseType(int type, int color) => CompactUseType(new[]
{
new InjectionValue(type),
new InjectionValue(color)
});Paramètres: type (Any/Integer/String), color (Any/Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(type, NumberConversions.ToInt(color)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int UseType(int type, string color) => UseType(type, NumberConversions.ToInt(color));Paramètres: type (Any/Integer/String), color (Any/Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type), color). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int UseType(string type, int color) => UseType(ResolveType(type), color);Paramètres: type (Any/Integer/String), color (Any/Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type), NumberConversions.ToInt(color)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int UseType(string type, string color) => UseType(ResolveType(type), NumberConversions.ToInt(color));Paramètres: type (Any), color (Any), container (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactUseType(values))Paramètres: type (Any), color (Any), container (Any), distance (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactUseType(values))Paramètres: type (Any), color (Any), container (Any), distance (Any), nearest (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactUseType(values))Paramètres: type (Any), color (Any), container (Any), distance (Any), nearest (Any), maxZ (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactUseType(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseWorldObject(object? serialOrName);Active serialOrName à GetObject et appelle UseObject. Le nom de la chaîne est un alias d'objet, pas le nom graphic/type.
-
serialOrName— Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Enregistré dans les métadonnées directement sur UserObject. Il s'agit d'une utilisation normale de serial, pas d'une recherche à l'échelle du serveur.
- Bridge envoie la requête sur le flux du jeu. Les règles du serveur s'appliquent ; Il n’y a pas d’attente de confirmation intégrée.
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.UseWorldObject");
UO.UseWorldObject(UO.GetSerial("lasttarget"));Paramètres et déroulement de l’exécution :
- Active serialOrName à GetObject et appelle UseObject. Le nom de la chaîne est un alias d'objet, pas le nom graphic/type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(id);
}
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 :
- Enregistré dans les métadonnées directement sur UserObject. Il s'agit d'une utilisation normale de serial, pas d'une recherche à l'échelle du serveur.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(id);
}
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 :
- Bridge envoie la requête sur le flux du jeu. Les règles du serveur s'appliquent ; Il n’y a pas d’attente de confirmation intégrée.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(id);
}
}
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: serialOrName (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UserObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(serialOrName)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(serialOrName).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void UserObject(InjectionValue serialOrName)
=> UseObject(GetObject(serialOrName));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UserObject(object? serialOrName);Active serialOrName à GetObject et appelle UseObject. Le nom de la chaîne est un alias d'objet, pas le nom graphic/type.
-
serialOrName— Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Même chemin d'utilisation que UO.UseWorldObject. La commande ne crée pas d'objet personnalisé et n'ajoute pas le nom AddObject.
- Bridge envoie la requête sur le flux du jeu. Les règles du serveur s'appliquent ; Il n’y a pas d’attente de confirmation intégrée.
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.UserObject");
UO.UserObject(UO.GetSerial("lasttarget"));Paramètres et déroulement de l’exécution :
- Active serialOrName à GetObject et appelle UseObject. Le nom de la chaîne est un alias d'objet, pas le nom graphic/type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UserObject(id);
}
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 :
- Même chemin d'utilisation que UO.UseWorldObject. La commande ne crée pas d'objet personnalisé et n'ajoute pas le nom AddObject.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UserObject(id);
}
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 :
- Bridge envoie la requête sur le flux du jeu. Les règles du serveur s'appliquent ; Il n’y a pas d’attente de confirmation intégrée.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UserObject(id);
}
}
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: serialOrName (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UserObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(serialOrName)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(serialOrName).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void UserObject(InjectionValue serialOrName)
=> UseObject(GetObject(serialOrName));ClassicUO — Bad Newbie & C# Scripts IDE