Repository navigation
FR UO Topic character Part 4
Українська · Русский · 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.MaxStamina();Lit l'endurance maximale du modèle local.
Il n'y a pas de paramètres.
int est la valeur du champ StaminaMax, pas un pourcentage ou bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
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.MaxStamina();
UO.Print("MaxStamina: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.MaxStamina();
UO.Print("MaxStamina: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.MaxStamina();
if (Truth(value > 0))
{
UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
}
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 :
- Ce nom n'a pas de forme avec ID. ReadValue sans paramètres lit self ; les deux appels sont séparés par UO.Wait(1000). La comparaison de deux instantanés peut manquer des modifications intermédiaires.
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 before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.MaxStamina();
}
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: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [MaxStamina]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxStamina:bridge.MaxStamina.
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.MaxStaminaCré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.MaxWeight();Lit le compteur de statut de votre personnage : poids maximum en pierres.
Il n'y a pas de paramètres.
int — poids maximum en pierres, 0..65535 dans le modèle client. 0 peut être une valeur réelle, aucune donnée ou un joueur manquant/détruit. Il s'agit de quantité, pas de bool, ID ou de type : 1 signifie une unité, pas de succès. La commande ne parcourt pas les objets et ne renvoie pas de tableau.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.WeightMax si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- MaxWeight lit le cache WeightMax. Le statut natif type >= 5 fixe la limite du serveur à UInt16, même si elle est égale à 0. L'ancien statut étendu le calcule une fois à réception : protocole UO >= 5.0.0a - 7 * floor(Strength / 2) + 40; le plus ancien est Strength * 4 + 25. Le résultat est enregistré sous UInt16 ; les valeurs extrêmes sont enveloppées modulo 65536. Strength=101 donne respectivement 390 ou 429. Lors de la modification de Strength séparément, le getter lui-même ne recalcule pas la limite.
- CharacterStatus vérifie le corps requis avant la mise à jour. Weight est disponible dans son propre statut étendu, slots - de type 3, Luck - de type 4, serveur WeightMax - de type 5. Un package compact/ancien sans compteur optionnel quitte son cache précédent. Le nouveau Player repart de zéro ; l'appel ne prouve pas la réception d'un nouveau statut.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donné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.
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.MaxWeight();
UO.Print("MaxWeight: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke un appel sans argument à son propre caractère ; Convert.ToString formate le numéro du journal sans changer sa signification.
var value = UO.MaxWeight();
UO.Print("WeightMax: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- UO.Wait(500) sépare l'avant et l'après de 500 millisecondes. la différence peut être positive, nulle ou négative ; Les mises à jour intermédiaires et les changements de personnages peuvent être ignorés. La pause en est un exemple.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.MaxWeight();
await Delay(500);
var after = UO.MaxWeight();
var difference = after - before;
UO.Print("Counter change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- CanCarry(extra) obtient un poids supplémentaire en pierres ; 10 est un exemple, pas le nombre de piles. Rejette les extras négatifs, aucun joueur ou maximum <= 0, lit le poids et la limite actuels, puis renvoie bool : true ou false par extra <= maximum - courant. La soustraction évite le débordement de courant + supplémentaire. En cas de surcharge, le résultat est false même pour extra=0. Il s'agit d'une évaluation locale, pas d'une résolution de serveur ; les lectures ne sont pas atomiques et le poids nul peut être inconnu.
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(Truth(CanCarry(10)) == true))
{
UO.Print("Local check passed");
}
else
{
UO.Print("Local check failed or data unavailable");
}
return null;
}
dynamic CanCarry(dynamic extra)
{
if (Truth(extra < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum <= 0))
{
return false;
}
return extra <= maximum - current;
}
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.MaxWeight. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxWeight:bridge.MaxWeight.
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int MaxWeight() => bridge.MaxWeight;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Mount();
void UO.Mount(object? mount);Demande de monter la monture/l'élément sélectionné.
-
mount- Cibles serial facultatives. Sans argument, LastTarget est pris. Il s'agit de ID, pas de graphic/type. Un mobile actif doit être chargé et pas plus loin qu'une cellule ; l'objet doit être dans l'inventaire du personnage (par exemple, une monture éthérée). Un élément arbitraire de l'inventaire ne devient pas montable : c'est le serveur qui décide.
void - aucune valeur de retour. Appelez sur une ligne distincte, ne comparez pas le résultat avec 1/true. Vérifiez la couche 25 après que le serveur ait répondu.
- La commande envoie une requête pour utiliser l'objet de protocole UO (0x06), sans émulation de souris. Il contourne le gestionnaire de double-clic commun de l'interface : en mode guerre, la requête n'est pas remplacée par une attaque.
- L'état du support est lu à partir de la couche 25. Cela change après les données du serveur ; le retour du commandement ne confirme pas l'achèvement de l'atterrissage/débarquement.
- Les demandes de montage/démontage répétées sont temporairement fusionnées : aucune nouvelle demande n'est envoyée jusqu'à ce qu'un changement de couche, un changement de personnage ou 5 secondes se soient écoulés. Cela protège contre la duplication entre les scripts.
- Si le personnage est absent, hors jeu ou pour un personnage mort, la requête n'est pas envoyée. Les règles finales concernant la propriété, la disponibilité et les sièges sont déterminées par le serveur.
- Si le personnage est déjà monté, la cible est 0/self, détruite, morte ou indisponible dans les conditions spécifiées, la requête n'est pas envoyée. L'objet au sol est rejeté.
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.Mount");
UO.Mount();Paramètres et déroulement de l’exécution :
- Aucun argument : LastTarget est utilisé. Print ne confirme pas le consentement du serveur.
if (Truth(UO.GetSerial("lasttarget") == "0x00000000"))
{
UO.Print("Mount target not selected");
return null;
}
UO.Mount();
UO.Print("Mount request processed locally");
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 :
- mount=target, le numéro 25 fait référence à la couche de caractères personnalisée. Si vous roulez déjà, une nouvelle demande n'est pas nécessaire.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(target == "0x00000000"))
{
return null;
}
if (Truth(UO.ObjAtLayer(25) == 0))
{
UO.Mount(target);
}
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 :
- cible — cibles ID. Une requête, puis jusqu'à 20 attend 50 ms. true/false renvoie notre assistant, UO.Mount lui-même renvoie Unit.
- false signifie que la couche n'est pas apparue dans ce délai ; une réponse tardive du serveur est toujours possible.
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 mounted = await TryMount("lasttarget");
UO.Print("Mounted within one second: " + Convert.ToString(mounted));
return null;
}
async Task<dynamic> TryMount(dynamic target)
{
if (Truth(UO.ObjAtLayer(25) != 0))
{
return true;
}
if (Truth(target == "0x00000000"))
{
return false;
}
UO.Mount(target);
var attempts = 0;
while (Truth(attempts < 20))
{
if (Truth(UO.ObjAtLayer(25) != 0))
{
return true;
}
await Delay(50);
attempts = attempts + 1;
}
return false;
}
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: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Mount:bridge.Mount(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 "mount": bridge.Mount(Arg(0, bridge.LastTarget)); break;Paramètres: mount (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Mount:bridge.Mount(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 "mount": bridge.Mount(Arg(0, bridge.LastTarget)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ObjAtLayer(object? layer);Trouve un élément sur la couche spécifiée de l'équipement de votre propre personnage.
-
layer— Un argument obligatoire : le numéro de couche 1..29 ou un nom de chaîne dans la liste ci-dessous. Le numéro 0 et le nom Invalid donnent 0. La casse et les espaces de fin du nom sont ignorés. Un nom de chaîne inconnu provoque une erreur de script ; la chaîne numérique "1" ne remplace pas le nombre 1.
La forme numérique renvoie int - serial pour l'élément, ou 0 pour une couche vide/invalide. La forme chaîne renvoie string de la forme "0x40001001" si l'élément est trouvé, sinon int 0. Il s'agit du ID de l'article, pas du numéro de couche, du graphic/type ou de la quantité. Métadonnées object ? La forme de chaîne reflète deux types de résultats possibles.
- Le modèle client local est lu ; Il n'y a aucune requête au serveur, pas d'attente ni de déplacement.
- Le résultat fait référence au moment de la lecture. Après UO.Wait ou une autre action, l'objet et ses drapeaux peuvent changer.
- Les données de l'équipement self sont vérifiées. L’équipe n’ouvre pas le sac, n’enfile pas l’article et n’envoie pas de demande d’inspection.
- Les nombres en dehors de 1..29 donnent 0 sans conversion modulo 256 ; par exemple, 257 ne peut pas sélectionner la main droite.
- Toutes les couches numériques et noms de chaînes pris en charge :
- 1 OneHanded/Rhand/RightHand; 2 TwoHanded/Lhand/LeftHand; 3 Shoes; 4 Pants; 5 Shirt; 6 Helmet/Hat; 7 Gloves; 8 Ring; 9 Talisman; 10 Necklace/Neck.
- 11 Hair; 12 Waist; 13 Torso; 14 Bracelet/Brace; 15 Face; 16 Beard; 17 Tunic; 18 Earrings/Ear; 19 Arms; 20 Cloak.
- 21 Backpack/Bpack/BackpackLayer; 22 Robe; 23 Skirt; 24 Legs; 25 Mount; 26 ShopBuyRestock/Rstk; 27 ShopBuy/NRstk; 28 ShopSell/Sell; 29 Bank.
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.
object? item = UO.ObjAtLayer("Rhand");
if (item is string serial) UO.Print("Equipped serial: " + serial);
else UO.Print("The layer is empty");Paramètres et déroulement de l’exécution :
- Rhand sélectionne le calque 1. En cas de succès, la main est une chaîne hexadécimale ; en cas d'absence, le numéro 0.
- Convert.ToString vous permet de générer les deux types possibles. Le résultat ne peut pas être considéré comme le graphic de l'arme.
object? hand = UO.ObjAtLayer("Rhand");
if (hand is string serial)
{
UO.Print("Right hand serial: " + serial);
}
else
{
UO.Print("Right hand is empty or 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 :
- Le nombre 2 sélectionne TwoHanded. Ce formulaire renvoie toujours int.
- Exists vérifie que l'élément est disponible pour lire ses propriétés. GetGraphic renvoie un type distinct.
return RunScenario();
object? RunScenario()
{
var item = UO.ObjAtLayer(2);
if (Truth(UO.Exists(item)))
{
UO.Print("Two-handed layer serial: " + Convert.ToString(item));
UO.Print("Graphic: " + UO.GetGraphic(item));
}
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 :
- 21—couche Backpack ; Le résultat 0 est possible avant le chargement de l'équipement.
- 257 est en dehors de la liste et donne toujours 0. Il ne s'agit pas d'une désignation alternative pour la couche 1.
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 bag = UO.ObjAtLayer(21);
var invalid = UO.ObjAtLayer(257);
UO.Print("Backpack serial: " + Convert.ToString(bag));
UO.Print("Invalid layer: " + Convert.ToString(invalid));
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: layer (Any/String)
Résultat: dynamic / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(ObjAtLayer(Text(0))). -
InjectionScript.Runtime.InjectionApiUO.ObjAtLayer:ObjAtLayer(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ObjAtLayer:bridge.ObjAtLayer(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "objatlayer":
return new InjectionValue(arguments[0].Kind == InjectionValueKind.String
? GetObject(ObjAtLayer(Text(0))) : bridge.ObjAtLayer(Arg(0)));Paramètres: layer (Any/String)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ObjAtLayer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ObjAtLayer:bridge.ObjAtLayer(ConvertLayer(layer)). -
InjectionScript.Runtime.InjectionApiUO.ConvertLayer:ConvertLayer(layer).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public InjectionValue ObjAtLayer(string layer)
{
var id = bridge.ObjAtLayer(ConvertLayer(layer));
if (id == 0)
return InjectionValue.Zero;
return new InjectionValue("0x" + id.ToString("X8"));
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ObjAtLayerEx(object? layerType, object? playerID);Lit un élément/conteneur dans le calque spécifié pour le caractère chargé spécifié.
-
layerType— Numéro numérique de la couche 1..29. Accepte un entier ou une chaîne numérique, telle que 26 ou "0x1A". Les noms de chaînes Rhand/ShopBuyRestock et les constantes de couche nue ne sont pas convertis en nombres ici. Utilisez un numéro. -
playerID— Série du personnage/mobile, un nombre, une chaîne hexadécimale ou un nom d'objet résoluble, tel que "self"/"lasttarget". Le Graphique/type de l'article ou le ID du conteneur lui-même ne conviennent pas.
int : serial de l'élément/conteneur sur le calque ou 0 si le calque est vide/inconnu, le numéro est invalide ou il n'y a pas de Mobile chargé. Ce n'est pas bool ou un numéro de couche.
- La lecture est locale, sans objectif, achat, ouverture de conteneur et demande de réseau.
- La plage 1..29 est vérifiée. La conversion d'un paramètre de chaîne inapproprié peut provoquer une erreur ; Un nom de calque arbitraire ne doit pas être transmis à la place d'un numéro.
- Un UO.ObjAtLayer distinct est disponible pour un caractère personnalisé avec un nom de couche de chaîne. Ne confondez pas le calque avec world Z, l'index statique ou la coordonnée 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.ObjAtLayerEx(26, UO.GetSerial("lasttarget"));
UO.Print("ObjAtLayerEx: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- LayerType=26; PlayerID=fournisseur ; boutique — conteneur serial. Pour GetContent, la boutique est transmise, pas le numéro de couche.
- Le tableau est indexé de 0 à la longueur moins 1. Chaque élément est serial. Un tableau vide signifie qu’aucun élément immédiat n’est chargé ; l'achat n'est pas honoré.
var vendor = UO.GetSerial("lasttarget");
if (Truth(vendor == "0x00000000"))
{
UO.Print("Vendor not selected");
return null;
}
var shop = UO.ObjAtLayerEx(26, vendor);
if (Truth(shop == 0))
{
UO.Print("ShopBuyRestock container is not loaded");
return null;
}
UO.Print("Shop container ID: " + Convert.ToString(shop));
var items = UO.GetContent(shop);
var i = 0;
while (Truth(i < ArrayLength(items)))
{
var item = items[i];
UO.Print(UO.GetName(item) + " | ID: " + Convert.ToString(item));
UO.Print("Graphic: " + Convert.ToString(UO.GetType(item)));
i = i + 1;
}
UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));
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;Paramètres et déroulement de l’exécution :
- wantedType est graphic et l'élément est ID d'un élément individuel. les piles comptent les enregistrements/piles ; unités ajoute le nombre qu'elles contiennent.
- Il s'agit d'un relevé de la quantité déjà reçue et non du solde garanti par un prochain achat. Il n'y a pas de prix spécifié ici.
return RunScenario();
object? RunScenario()
{
var vendor = UO.GetSerial("lasttarget");
if (Truth(vendor == "0x00000000"))
{
UO.Print("Vendor not selected");
return null;
}
var shop = UO.ObjAtLayerEx(26, vendor);
if (Truth(shop == 0))
{
UO.Print("Shop layer is not loaded");
return null;
}
var wantedType = 0x1766;
var stacks = 0;
var units = 0;
var items = UO.GetContent(shop);
var i = 0;
while (Truth(i < ArrayLength(items)))
{
var item = items[i];
if (Truth(UO.GetType(item) == wantedType))
{
stacks = stacks + 1;
units = units + UO.GetQuantity(item);
}
i = i + 1;
}
UO.Print("Stacks: " + Convert.ToString(stacks) + " | Units: " + Convert.ToString(units));
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;Paramètres et déroulement de l’exécution :
- ShowVendorLayer est déclaré dans son intégralité. fournisseur - ID NPC, layerNumber - 26/27/28, légende - signature uniquement.
- Les conteneurs peuvent être inconnus du client. 0 est coché avant GetContent : un GetContent(0) explicite reviendrait à demander des objets au sol, ce qui n'est pas obligatoire ici.
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 vendor = UO.GetSerial("lasttarget");
if (Truth(vendor == "0x00000000"))
{
UO.Print("Vendor not selected");
return null;
}
ShowVendorLayer(vendor, 26, "ShopBuyRestock / Rstk");
ShowVendorLayer(vendor, 27, "ShopBuy / NRstk");
ShowVendorLayer(vendor, 28, "ShopSell / Sell");
return null;
}
void ShowVendorLayer(dynamic vendor, dynamic layerNumber, dynamic caption)
{
var container = UO.ObjAtLayerEx(layerNumber, vendor);
if (Truth(container == 0))
{
UO.Print(caption + ": not loaded");
return;
}
var items = UO.GetContent(container);
UO.Print(caption + " | Container ID: " + Convert.ToString(container));
UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));
}
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: layerType (Any), playerID (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ObjAtLayerEx:bridge.ObjAtLayerEx(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "objatlayerex": return new InjectionValue(bridge.ObjAtLayerEx(Arg(0), Arg(1)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Paralyzed();
int UO.Paralyzed(object? value);Vérifie l'indicateur de paralysie du personnage connu du client.
-
value- Facultatif serial/ID mobile : nombre, chaîne hexadécimale, self, lasttarget ou autre nom d'objet standard ou nom AddObject. Ce n'est pas graphic/type. Sans argument, self est utilisé. Le nom inconnu est résolu dans 0 ; la cible ne s'ouvre pas.
Indicateur numérique int : 1 (condition remplie) - mobile chargé a l'indicateur IsParalyzed ; 0 (condition non remplie) - aucun indicateur, mobile inconnu, supprimé ou l'objet est un élément. Ce n'est pas une période de paralysie et ne garantit pas la capacité de se déplacer avec un résultat de 0.
- Utilisez Paralyzed pour vérifier le drapeau de paralysie. Les options Is/Get, GetParalisa, Frozen et GetLocked lisent le même indicateur.
- La commande lit uniquement les données locales. Il n'applique ni ne supprime la paralysie, n'attend pas sa fin et n'envoie pas de demande de mise à jour au serveur.
- Le résultat de cette commande est de type int : utilisez if (value != 0) ou if (value == 0). Les comparaisons directes avec true/false et if (valeur) dans C# ne sont pas autorisées. La valeur préserve la signification du drapeau, pas la quantité ou ID.
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.Paralyzed();
UO.Print("Paralyzed: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Les parenthèses vides sélectionnent self. state stocke un instantané du drapeau ; true est la constante numérique 1.
- Un résultat de false n'exclut pas un mur, un manque d'endurance ou toute autre raison d'arrêt.
var state = UO.Paralyzed();
if (Truth(Truth(state) == true))
{
UO.Print("Paralysis flag is set");
}
else
{
UO.Print("Paralysis flag is absent or 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 :
- target stocke la chaîne hexadécimale serial de la dernière cible. IsNpc vérifie qu'il s'agit du mobile chargé, y compris les joueurs.
- La commande avec l'argument lit target. Elle ne choisit pas de nouveau personnage et ne change pas lasttarget.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.Paralyzed(target);
UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
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 :
- Pas plus de 10 pauses pendant 100 ms. Chaque appel sans argument lit à nouveau self.
- Après le cycle, la présence de self est vérifiée séparément. Il s'agit d'une observation pendant environ une seconde plus l'exécution des commandes, et non d'une suppression garantie de la paralysie.
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 attempts = 0;
while (Truth(Truth(UO.Paralyzed()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.Paralyzed()) == false))
{
UO.Print("Paralysis flag is clear");
}
else
{
UO.Print("Still paralyzed");
}
}
else
{
UO.Print("Self is unavailable");
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "paralyzed": return new InjectionValue(bridge.GetLocked(bridge.Self));Paramètres: value (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Paralyzed]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
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.
serial => bridge.GetLocked(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
value => getter(GetObject(value))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.PhysicalResist();Lit le champ de résistance du personnage actuel : armure physique/résistance.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.PhysicalResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- PhysicalResistance - champ armure/statut du serveur : le serveur classique peut transmettre l'indice d'armure, et les règles avec résistances peuvent transmettre une résistance physique. API ne convertit pas de l'un à l'autre et ne calcule pas le pourcentage de réduction des dégâts. Armor et les alias physiques lisent le même champ.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. 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.PhysicalResist();
UO.Print("PhysicalResist: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.PhysicalResist();
UO.Print("PhysicalResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.PhysicalResist();
await Delay(500);
var after = UO.PhysicalResist();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
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(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.PhysicalResist();
return value >= minimum;
}
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.RegisterCharacterGetterAliases [PhysicalResist]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor.
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.ArmorCré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 · 繁體中文 · 日本語 · 한국어
void UO.Poison();
void UO.Poison(object? target);Utilise la compétence Empoisonnement, si nécessaire, sur une cible donnée.
-
target- Facultatif serial/alias cible. Aucun argument - seulement UseSkill("Empoisonnement"). Avec argument - UseSkillAtTarget("Empoisonnement", cible).
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- La commande héritée enregistrée n'est pas un getter pour la résistance au poison ou le statut du poison. La branche invoque la compétence et la défausse 1/0.
- Dans un formulaire avec cible, UseSkillAtTarget vérifie un serial positif, prépare la cible avant de demander la compétence ; si la compétence n'est pas acceptée, annule la cible. L'empoisonnement de la cible par le serveur n'est pas garanti.
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.Poison");
UO.Poison();Paramètres et déroulement de l’exécution :
- Utilise la compétence Empoisonnement, si nécessaire, sur une cible donnée.
UO.Poison();Paramètres et déroulement de l’exécution :
- La commande héritée enregistrée n'est pas un getter pour la résistance au poison ou le statut du poison. La branche invoque la compétence et la défausse 1/0.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.Poison("lasttarget");
}
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 :
- Dans un formulaire avec cible, UseSkillAtTarget vérifie un serial positif, prépare la cible avant de demander la compétence ; si la compétence n'est pas acceptée, annule la cible. L'empoisonnement de la cible par le serveur n'est pas garanti.
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.Poison(id);
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: Aucun paramètre.
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.UseSkillAtTarget:UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.UseSkill:UseSkill("Poisoning").
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "poison":
if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);
else UseSkill("Poisoning");
break;Paramètres: target (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.UseSkillAtTarget:UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.UseSkill:UseSkill("Poisoning").
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "poison":
if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);
else UseSkill("Poisoning");
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PoisonResist();Lit le champ de résistance du personnage actuel : poison.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.PoisonResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. 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.PoisonResist();
UO.Print("PoisonResist: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.PoisonResist();
UO.Print("PoisonResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.PoisonResist();
await Delay(500);
var after = UO.PoisonResist();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
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(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.PoisonResist();
return value >= minimum;
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PoisonResistance:bridge.PoisonResistance.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "poisonresist": return new InjectionValue(bridge.PoisonResistance);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Poisoned();
int UO.Poisoned(object? id);Vérifie l'empoisonnement du personnage.
-
id— Objet facultatif sous les formes affichées : serial par numéro/chaîne hexadécimale, self, lasttarget ou nom enregistré AddObject. Ce n'est pas type. Sans argument, lisez self. Un texte inconnu dans certains formulaires provoque une erreur de conversion ; vérifiez le nom avant d'appeler.
Flag numérique int : 1 (condition remplie), 0 (condition non remplie). Il s'agit d'un indicateur numérique : dans C#, vérifiez le résultat != 0 ou le résultat == 0. La comparaison directe de int avec true/false et if (résultat) n'est pas autorisée. 1 - mobile a IsPoisoned, 0 n'a pas d'indicateur ou mobile est manquant. Le degré de poison et le temps restant ne sont pas restitués.
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é.
- Lit le modèle local : n'ouvre pas la cible, ne demande pas de statut, ne modifie pas l'indicateur et n'envoie pas le paquet. Un objet détruit est considéré comme manquant avant même que l'entrée ne soit supprimée du dictionnaire.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Pour Poisoned/Flying la version du protocole est prise en compte : jusqu'à 7.0.0.0 le bit 0x04 signifie poison ; commençant par 7.0.0.0 cela signifie fuite et le poison est stocké séparément. Le vol n'est pas calculé à partir de Z.
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.Poisoned();
UO.Print("Poisoned: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Les parenthèses vides indiquent self. active enregistre le résultat une fois ; true et false définissent deux branches. Print affiche uniquement un exemple de message.
var active = UO.Poisoned();
if (Truth(Truth(active) == true))
{
UO.Print("State is active");
}
else
{
UO.Print("State is inactive or 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 :
- lasttarget – objet précédemment sélectionné. Exists vérifie sa présence. obj est le seul paramètre ReadState ; la fonction renvoie le résultat de la commande sans modification. Sa définition est incluse dans le code copié.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var observed = ReadState("lasttarget");
UO.Print("State 1/0: " + Convert.ToString(observed));
}
return null;
}
dynamic ReadState(dynamic obj)
{
return UO.Poisoned(obj);
}
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 :
- Deux appels sans arguments lisent self, UO.Wait(500) définit 500 millisecondes. Deux images sont comparées ; les transitions intermédiaires peuvent être ignorées. Il n’y a pas d’attente interminable.
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 before = UO.Poisoned();
await Delay(500);
var after = UO.Poisoned();
if (Truth(before != after))
{
UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
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.Poisoned. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int Poisoned() => bridge.Poisoned(bridge.Self);Paramètres: id (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Poisoned. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int Poisoned(InjectionValue id) => bridge.Poisoned(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Race();Lit la race du personnage à partir du modèle client.
Il n'y a pas de paramètres.
int — 1=humain, 2=elfe, 3=gargouille selon le modèle client. 0 signifie qu'aucun caractère n'est chargé. Ce n'est pas body/graphic et non serial.
- 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.
object? result = UO.Race();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments fait référence à self. La race du personnage est stockée en valeur.
- Convert.ToString convertit le nombre à sortir et ne change pas la signification du résultat.
var value = UO.Race();
UO.Print("Race: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- La valeur est lue une fois sans aucun argument. La race du personnage est utilisée dans le calcul ou la condition affichée.
- Les seuils numériques sont des exemples de conditions de script et non de nouvelles limites client. Le champ stocke les unités de serveur et les restrictions décrites ci-dessus.
return RunScenario();
object? RunScenario()
{
var value = UO.Race();
if (Truth(value == 3))
{
UO.Print("Player race is gargoyle");
}
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 :
- Les deux appels sans argument lisent leur valeur actuelle. UO.Wait(1000) donne une pause en millisecondes entre les prises de vue.
- Changement par rapport : race de personnage. Un exemple ne change rien au monde et n’attend pas indéfiniment. Les événements au cours de cette seconde peuvent être manqués.
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 before = UO.Race();
await Delay(1000);
var after = UO.Race();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
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: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Race:bridge.Race.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "race": return new InjectionValue(bridge.Race);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RemoveEarrings();Demande la suppression d’un élément de la couche Ear.
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 appelle Unequip("Ear"). ConvertLayer sélectionne la couche numérique, bridge. Unequip demande le transfert vers le sac à dos.
- Le résultat du Unequip interne (1/0) de la commande héritée est ignoré ; appeler sur une ligne séparée. S'il n'y a pas d'article/sac à dos, la demande ne pourra pas être exécutée. La vérification ObjAtLayer après l'appel lit uniquement l'état local.
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.RemoveEarrings");
UO.RemoveEarrings();Paramètres et déroulement de l’exécution :
- Demande la suppression d’un élément de la couche Ear.
UO.RemoveEarrings();Paramètres et déroulement de l’exécution :
- ExecuteLegacyManualAlias appelle Unequip("Ear"). ConvertLayer sélectionne la couche numérique, bridge. Unequip demande le transfert vers le sac à dos.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ObjAtLayer("Ear"));
UO.RemoveEarrings();
return null;
}Paramètres et déroulement de l’exécution :
- Le résultat du Unequip interne (1/0) de la commande héritée est ignoré ; appeler sur une ligne séparée. S'il n'y a pas d'article/sac à dos, la demande ne pourra pas être exécutée. La vérification ObjAtLayer après l'appel lit uniquement l'état local.
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.RemoveEarrings();
UO.Wait(500);
UO.Print(UO.ObjAtLayer("Ear"));
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.Unequip:Unequip("Ear").
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "removeearrings": Unequip("Ear"); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RemoveHat();Demande la suppression d’un élément de la couche Hat.
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 appelle Unequip("Hat"). ConvertLayer sélectionne la couche numérique, bridge. Unequip demande le transfert vers le sac à dos.
- Le résultat du Unequip interne (1/0) de la commande héritée est ignoré ; appeler sur une ligne séparée. S'il n'y a pas d'article/sac à dos, la demande ne pourra pas être exécutée. La vérification ObjAtLayer après l'appel lit uniquement l'état local.
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.RemoveHat");
UO.RemoveHat();Paramètres et déroulement de l’exécution :
- Demande la suppression d’un élément de la couche Hat.
UO.RemoveHat();Paramètres et déroulement de l’exécution :
- ExecuteLegacyManualAlias appelle Unequip("Hat"). ConvertLayer sélectionne la couche numérique, bridge. Unequip demande le transfert vers le sac à dos.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ObjAtLayer("Hat"));
UO.RemoveHat();
return null;
}Paramètres et déroulement de l’exécution :
- Le résultat du Unequip interne (1/0) de la commande héritée est ignoré ; appeler sur une ligne séparée. S'il n'y a pas d'article/sac à dos, la demande ne pourra pas être exécutée. La vérification ObjAtLayer après l'appel lit uniquement l'état local.
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.RemoveHat();
UO.Wait(500);
UO.Print(UO.ObjAtLayer("Hat"));
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.Unequip:Unequip("Hat").
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "removehat": Unequip("Hat"); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RemoveNeckless();Demande qu’un élément soit supprimé du calque Neck.
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 appelle Unequip("Neck"). ConvertLayer sélectionne la couche numérique, bridge. Unequip demande le transfert vers le sac à dos.
- Le résultat du Unequip interne (1/0) de la commande héritée est ignoré ; appeler sur une ligne séparée. S'il n'y a pas d'article/sac à dos, la demande ne pourra pas être exécutée. La vérification ObjAtLayer après l'appel lit uniquement l'état local.
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.RemoveNeckless");
UO.RemoveNeckless();Paramètres et déroulement de l’exécution :
- Demande qu’un élément soit supprimé du calque Neck.
UO.RemoveNeckless();Paramètres et déroulement de l’exécution :
- ExecuteLegacyManualAlias appelle Unequip("Neck"). ConvertLayer sélectionne la couche numérique, bridge. Unequip demande le transfert vers le sac à dos.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ObjAtLayer("Neck"));
UO.RemoveNeckless();
return null;
}Paramètres et déroulement de l’exécution :
- Le résultat du Unequip interne (1/0) de la commande héritée est ignoré ; appeler sur une ligne séparée. S'il n'y a pas d'article/sac à dos, la demande ne pourra pas être exécutée. La vérification ObjAtLayer après l'appel lit uniquement l'état local.
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.RemoveNeckless();
UO.Wait(500);
UO.Print(UO.ObjAtLayer("Neck"));
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.Unequip:Unequip("Neck").
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "removeneckless": Unequip("Neck"); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RemoveRing();Demande la suppression d’un élément de la couche Ring.
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 appelle Unequip("Ring"). ConvertLayer sélectionne la couche numérique, bridge. Unequip demande le transfert vers le sac à dos.
- Le résultat du Unequip interne (1/0) de la commande héritée est ignoré ; appeler sur une ligne séparée. S'il n'y a pas d'article/sac à dos, la demande ne pourra pas être exécutée. La vérification ObjAtLayer après l'appel lit uniquement l'état local.
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.RemoveRing");
UO.RemoveRing();Paramètres et déroulement de l’exécution :
- Demande la suppression d’un élément de la couche Ring.
UO.RemoveRing();Paramètres et déroulement de l’exécution :
- ExecuteLegacyManualAlias appelle Unequip("Ring"). ConvertLayer sélectionne la couche numérique, bridge. Unequip demande le transfert vers le sac à dos.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ObjAtLayer("Ring"));
UO.RemoveRing();
return null;
}Paramètres et déroulement de l’exécution :
- Le résultat du Unequip interne (1/0) de la commande héritée est ignoré ; appeler sur une ligne séparée. S'il n'y a pas d'article/sac à dos, la demande ne pourra pas être exécutée. La vérification ObjAtLayer après l'appel lit uniquement l'état local.
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.RemoveRing();
UO.Wait(500);
UO.Print(UO.ObjAtLayer("Ring"));
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.Unequip:Unequip("Ring").
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "removering": Unequip("Ring"); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RequestStats(object? objID);Demande le statut du personnage par serial.
-
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.
- RequestStats appelle RequestMobileStatus(_world, serial, true). L'appel ne renvoie pas un tableau de caractéristiques et n'attend pas de réponse ; GetHP/GetStr après cela, le modèle local est lu.
- 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.RequestStats");
UO.RequestStats(UO.GetSerial("lasttarget"));Paramètres et déroulement de l’exécution :
- Demande le statut du personnage par serial.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.RequestStats(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 :
- RequestStats appelle RequestMobileStatus(_world, serial, true). L'appel ne renvoie pas un tableau de caractéristiques et n'attend pas de réponse ; GetHP/GetStr après cela, le modèle local est lu.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.RequestStats(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.RequestStats(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)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestStats:bridge.RequestStats(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "requeststats": bridge.RequestStats(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ResistCold();Lit le champ de résistance du personnage actuel : froid.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.ColdResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. 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.ResistCold();
UO.Print("ResistCold: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.ResistCold();
UO.Print("ColdResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ResistCold();
await Delay(500);
var after = UO.ResistCold();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
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(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.ResistCold();
return value >= minimum;
}
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.RegisterCharacterGetterAliases [ResistCold]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ColdResistance:bridge.ColdResistance.
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.ColdResistanceCré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.ResistEnergy();Lit le champ de résistance du personnage actuel : énergie.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.EnergyResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. 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.ResistEnergy();
UO.Print("ResistEnergy: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.ResistEnergy();
UO.Print("EnergyResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ResistEnergy();
await Delay(500);
var after = UO.ResistEnergy();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
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(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.ResistEnergy();
return value >= minimum;
}
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.RegisterCharacterGetterAliases [ResistEnergy]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.EnergyResistance:bridge.EnergyResistance.
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.EnergyResistanceCré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.ResistFire();Lit le champ de résistance du personnage actuel : le feu.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.FireResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. 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.ResistFire();
UO.Print("ResistFire: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.ResistFire();
UO.Print("FireResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ResistFire();
await Delay(500);
var after = UO.ResistFire();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
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(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.ResistFire();
return value >= minimum;
}
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.RegisterCharacterGetterAliases [ResistFire]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FireResistance:bridge.FireResistance.
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.FireResistanceCré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.ResistPhysical();Lit le champ de résistance du personnage actuel : armure physique/résistance.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.PhysicalResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- PhysicalResistance - champ armure/statut du serveur : le serveur classique peut transmettre l'indice d'armure, et les règles avec résistances peuvent transmettre une résistance physique. API ne convertit pas de l'un à l'autre et ne calcule pas le pourcentage de réduction des dégâts. Armor et les alias physiques lisent le même champ.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. 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.ResistPhysical();
UO.Print("ResistPhysical: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.ResistPhysical();
UO.Print("PhysicalResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ResistPhysical();
await Delay(500);
var after = UO.ResistPhysical();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
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(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.ResistPhysical();
return value >= minimum;
}
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.RegisterCharacterGetterAliases [ResistPhysical]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor.
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.ArmorCré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.ResistPoison();Lit le champ de résistance du personnage actuel : poison.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.PoisonResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. 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.ResistPoison();
UO.Print("ResistPoison: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.ResistPoison();
UO.Print("PoisonResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ResistPoison();
await Delay(500);
var after = UO.ResistPoison();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
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(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.ResistPoison();
return value >= minimum;
}
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.RegisterCharacterGetterAliases [ResistPoison]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PoisonResistance:bridge.PoisonResistance.
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.PoisonResistanceCré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.Self();Renvoie ID du caractère actuel.
Il n'y a pas de paramètres.
int - serial/ID, pas graphic/type, couche, nombre d'éléments ou bool. 0—il n'y a aucun objet actuel. Tous les bits 32 serial sont sauvegardés ; vérifiez != 0, pas == true ou > 0. Le résultat enregistré n'est pas lui-même mis à jour. Lit World.Player.Serial ; un joueur disparu ou détruit donne 0. La mort est différente de la suppression : le fantôme présent conserve le ID du personnage.
- Il n'y a pas de paramètres. Lit les données locales via Invoke sur le flux du jeu ; l'annulation du script interrompt l'attente de ce thread. N'envoie pas le colis, n'ouvre pas le conteneur/cible et ne transfère pas l'article.
- Le self/backpack intégré sans parenthèses est relu à moins qu'il ne soit remplacé par une variable de script. Les noms de chaînes sont traités par la commande de réception. Dans la destination de transport, "self" signifie le sac à dos et UO.Self() renvoie le serial du personnage. Pour le conteneur ID, utilisez explicitement UO.Backpack().
- World.Clear supprime le joueur ; les lectures ultérieures donnent 0. Entrer dans le monde ou changer de sac équipé peut changer ID. Les lectures individuelles ne sont pas atomiques. Un ID différent de zéro ne prouve pas la connexion, la résolution du serveur ou le chargement du contenu.
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.Self();
UO.Print("Self: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- id stocke le résultat d'un appel ; HEX formate serial pour le journal. L’exemple ne sélectionne ni n’utilise rien.
var id = UO.Self();
UO.Print("ID: " + Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Paramètres et déroulement de l’exécution :
- avant/après sont lus à des intervalles de 250 ms. UO.Wait ajouté à titre d'exemple uniquement. L'égalité signifie un ID final identique ; des changements intermédiaires peuvent être manqués.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Self();
await Delay(250);
var after = UO.Self();
if (Truth(before != after))
{
UO.Print("ID changed: " + Hex(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- candidat - enregistré ID LastTarget. IsOwnSerial (candidat) prend un serial et renvoie bool : true pour le propre ID actuel non nul, sinon false. La définition de la fonction est donnée dans son intégralité ; la cible ne change pas.
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 candidate = UO.LastTarget();
if (Truth(Truth(IsOwnSerial(candidate)) == true))
{
UO.Print("Own object selected");
}
else
{
UO.Print("Different object or no own object");
}
return null;
}
dynamic IsOwnSerial(dynamic candidate)
{
var current = UO.Self();
return Truth(current != 0) && Truth(current == candidate);
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "self": return new InjectionValue(bridge.Self);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetARExtParams();
void UO.SetARExtParams(object? shardName);
void UO.SetARExtParams(object? shardName, object? charName);
void UO.SetARExtParams(object? shardName, object? charName, object? useAtEveryConnect);Spécifie un serveur dans la liste des fragments et un caractère pour une connexion ultérieure. Utile lorsque le script doit être reconnecté par un certain personnage du même compte.
-
shardName— Nom d'affichage facultatif du serveur dans la liste de connexion, pas IP ou port. Une valeur vide ou manquante est prise par le ShardName actuel. Les espaces autour des bords sont supprimés. -
charName- Nom facultatif d'un personnage de compte existant. Une valeur vide ou manquante prend le nom self si elle est connue. Il s'agit du nom, pas du numéro d'emplacement ou de serial ; un nom non vide est prioritaire sur un emplacement de profil. -
useAtEveryConnect- Indicateur facultatif : false/0 par défaut - sélection unique ; true/1 ou autre entier non nul : enregistrez la sélection pour les connexions futures dans cette session.
void - aucune valeur. Il s'agit de configurer l'entrée suivante, sans confirmer la connexion ou l'existence du personnage.
- Dans le gestionnaire, les noms occasionnels sont enregistrés lors des tentatives de réseau infructueuses et ne sont consommés qu'après l'entrée dans le monde. La prochaine connexion revient aux paramètres du profil. Un choix persistant dure jusqu'à la fin d'un nouveau paramètre ou jusqu'à la fin du propriétaire de la session ; Le fichier de profil du gestionnaire n'est pas écrasé. Le nouveau paramètre lors de la connexion s'applique à la prochaine connexion et n'est pas perdu une fois la connexion en cours terminée.
- Dans un client graphique distinct, le serveur est enregistré sous LastServerName, le personnage est enregistré sous LastCharacterManager. Après une connexion réussie, le personnage devient également le dernier utilisé : la disponibilité ne signifie pas un retour automatique au caractère précédent. Le remplacement permanent vit dans le processus actuel.
- La commande elle-même n'active pas la reconnexion automatique et ne rompt pas la connexion. Pour ce faire, SetARStatus, Connect et Disconnect sont utilisés séparément. Les noms doivent être présents dans les listes de serveurs ; la comparaison n'est pas sensible à la casse. Si la saisie automatique des caractères est désactivée dans le gestionnaire, la sélection manuelle demeure. Le nom self peut ne pas être connu hors ligne : spécifiez explicitement les noms. La commande ne modifie pas le compte, le mot de passe, IP, le port et le cryptage ; les valeurs vides sans nom actuel disponible n'effacent pas la sélection précédemment définie.
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.SetARExtParams");
UO.SetARExtParams("", "", true);Paramètres et déroulement de l’exécution :
- Le premier exemple ne fonctionne qu'en ligne. Les deux lignes vides prennent les noms actuels ; true les enregistre pour les connexions répétées, SetARStatus(true) active la politique de reconnexion automatique. Il n'y a pas de reconnexion immédiate.
if (!(Truth(UO.Connected())))
{
return null;
}
UO.SetARExtParams("", "", true);
UO.SetARStatus(true);
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 deuxième exemple sélectionne Exemple de caractère uniquement si ce nom est dans le vrai GetCharsListForShard. Le tableau est indexé avec 0 ; ToLowerInvariant compare les noms sans tenir compte de la casse. false signifie une entrée réussie, après la configuration, la reconnexion automatique est activée et Disconnect est appelé. Remplacez le nom par le vôtre. S'il n'y a pas de nom, la connexion est conservée. La pause automatique peut retarder le retour jusqu'à ce que la connexion soit rétablie.
return RunScenario();
object? RunScenario()
{
if (!(Truth(UO.Connected())))
{
return null;
}
var wanted = "Example Character";
var names = UO.GetCharsListForShard();
var i = 0;
while (Truth(i < ArrayLength(names)))
{
if (Truth(Convert.ToString(names[i]) == Convert.ToString(wanted)))
{
UO.SetARExtParams("", names[i], false);
UO.SetARStatus(true);
UO.Disconnect();
return null;
}
i += 1;
}
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;Paramètres et déroulement de l’exécution :
- Le troisième exemple est lancé à partir d’un script hors ligne en cours d’exécution. L'exemple de fragment et l'exemple de caractère sont explicitement spécifiés ; remplacez-les par de vrais noms. true préserve la sélection, false dans SetARStatus désactive les tentatives automatiques, Connect demande une entrée. Vous avez besoin des détails du compte enregistrés. Connect n'attend pas que le monde soit prêt ; Un script automatiquement mis en pause n'atteindra pas ces lignes sans reprendre.
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(UO.Connected()))
{
return null;
}
UO.SetARExtParams("Example Shard", "Example Character", true);
UO.SetARStatus(false);
UO.Connect();
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: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(2). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetReconnectSelection:bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setarextparams":
{
string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;
string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;
state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)
? bridge.ShardName
: requestedShard;
state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)
? bridge.GetName(bridge.Self) ?? string.Empty
: requestedCharacter;
int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;
bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);
return InjectionValue.Unit;
}Paramètres: shardName (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(2). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetReconnectSelection:bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setarextparams":
{
string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;
string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;
state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)
? bridge.ShardName
: requestedShard;
state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)
? bridge.GetName(bridge.Self) ?? string.Empty
: requestedCharacter;
int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;
bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);
return InjectionValue.Unit;
}Paramètres: shardName (Any), charName (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(2). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetReconnectSelection:bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setarextparams":
{
string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;
string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;
state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)
? bridge.ShardName
: requestedShard;
state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)
? bridge.GetName(bridge.Self) ?? string.Empty
: requestedCharacter;
int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;
bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);
return InjectionValue.Unit;
}Paramètres: shardName (Any), charName (Any), useAtEveryConnect (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(2). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetReconnectSelection:bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setarextparams":
{
string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;
string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;
state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)
? bridge.ShardName
: requestedShard;
state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)
? bridge.GetName(bridge.Self) ?? string.Empty
: requestedCharacter;
int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;
bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);
return InjectionValue.Unit;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetARStatus(object? value);Active ou désactive la reconnexion automatique.
-
value- 0 s'éteint ; tout entier non nul inclut.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Bridge.SetAutoReconnect modifie le paramètre de reconnexion automatique. La valeur est interprétée comme activée != 0; Il n’y a pas de connexion/déconnexion immédiate au serveur.
- Modifie le paramètre client. La valeur n'est pas le résultat d'un test de connexion et ne confirme pas le traitement par le 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.SetARStatus");
UO.SetARStatus(1);Paramètres et déroulement de l’exécution :
- Active ou désactive la reconnexion automatique.
UO.SetARStatus(1);Paramètres et déroulement de l’exécution :
- Bridge.SetAutoReconnect modifie le paramètre de reconnexion automatique. La valeur est interprétée comme activée != 0; Il n’y a pas de connexion/déconnexion immédiate au serveur.
return RunScenario();
object? RunScenario()
{
UO.SetARStatus(0);
return null;
}Paramètres et déroulement de l’exécution :
- Modifie le paramètre client. La valeur n'est pas le résultat d'un test de connexion et ne confirme pas le traitement par le 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()
{
ApplyMode(1);
return null;
}
void ApplyMode(dynamic mode)
{
UO.SetARStatus(mode);
}
}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. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoReconnect:bridge.SetAutoReconnect(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setarstatus": bridge.SetAutoReconnect(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetArm(object? name);Mémorise l'arme et le bouclier actuels dans un ensemble nommé.
-
name— Nom de chaîne de l'ensemble, tel que « voyage » ou « bataille ». Les noms ne sont pas sensibles à la casse. Les ensembles de vêtements et d'armes sont conservés séparément : le même nom est autorisé dans les deux cas. Ce n'est pas une chose ID ou un nom de fichier. Seul SetDress autorise l'absence de nom : alors un ensemble séparé est enregistré pour DressSavedSet/EquipDressSet.
void - aucune valeur. Appelez sur une ligne séparée ; n'attribuez pas le résultat et ne le comparez pas à true. L'enregistrement et la suppression modifient l'entrée et non l'équipement.
- Vêtements : couches 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Armes : 1 et 2 uniquement. Les cheveux, la barbe, le sac à dos, l'animal et la banque ne sont pas inclus dans ces ensembles.
- Les éléments spécifiques serial déjà chargés sont enregistrés dans leurs propres couches. Enregistrer à nouveau le même nom remplace l'entrée. Les calques vides ont également du sens : une fois restaurés, les calques occupés correspondants seront libérés dans leur propre sac à dos. Par conséquent, un ensemble complètement vide enregistré supprime les éléments de ses calques.
- L'ensemble est stocké dans l'état d'exécution. L'appel lui-même ne crée pas de fichier et ne garantit pas que l'ensemble sera transféré vers un autre profil ou un nouveau runtime. Tout d’abord, enregistrez l’ensemble souhaité dans son état utilisé. Le chargement/sauvegarde de l'état général du client est un mécanisme distinct.
- UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
- 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.SetArm");
UO.SetArm("battle");Paramètres et déroulement de l’exécution :
- La photo est prise maintenant, alors que les choses nécessaires sont déjà en place. Le défi n'équipe pas les objets du sac à dos.
UO.SetArm("battle");Paramètres et déroulement de l’exécution :
- Le même nom est utilisé dans différents référentiels. SetDress() stocke également l'ensemble sans nom séparément ; il ne s'agit pas d'une sélection d'un nom préalablement enregistré.
return RunScenario();
object? RunScenario()
{
UO.SetArm("battle");
UO.SetDress("battle");
return null;
}Paramètres et déroulement de l’exécution :
- SaveIfReady vérifie la couche de contrôle : 3 - chaussures pour les vêtements, 1 - main droite pour les armes. S'il est vide, l'instantané n'est pas écrasé. Le 1/0 renvoyé appartient à l'assistant, pas SetDress/SetArm.
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()
{
return SaveIfReady("battle");
return null;
}
dynamic SaveIfReady(dynamic name)
{
if (Truth(UO.ObjAtLayerEx(1, UO.Self()) == 0))
{
return 0;
}
UO.SetArm(name);
return 1;
}
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: name (String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.SetArm. -
InjectionScript.Runtime.InjectionApiUO.SetEquip:SetEquip(name, armSets, weaponLayers, "Arm set.").
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void SetArm(string name)
=> SetEquip(name, armSets, weaponLayers, "Arm set.");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetDress();
void UO.SetDress(object? name);Se souvient des vêtements et armures actuellement portés pour une restauration ultérieure.
-
name— Nom de chaîne de l'ensemble, tel que « voyage » ou « bataille ». Les noms ne sont pas sensibles à la casse. Les ensembles de vêtements et d'armes sont conservés séparément : le même nom est autorisé dans les deux cas. Ce n'est pas une chose ID ou un nom de fichier. Seul SetDress autorise l'absence de nom : alors un ensemble séparé est enregistré pour DressSavedSet/EquipDressSet.
void - aucune valeur. Appelez sur une ligne séparée ; n'attribuez pas le résultat et ne le comparez pas à true. L'enregistrement et la suppression modifient l'entrée et non l'équipement.
- Vêtements : couches 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Armes : 1 et 2 uniquement. Les cheveux, la barbe, le sac à dos, l'animal et la banque ne sont pas inclus dans ces ensembles.
- Les éléments spécifiques serial déjà chargés sont enregistrés dans leurs propres couches. Enregistrer à nouveau le même nom remplace l'entrée. Les calques vides ont également du sens : une fois restaurés, les calques occupés correspondants seront libérés dans leur propre sac à dos. Par conséquent, un ensemble complètement vide enregistré supprime les éléments de ses calques.
- L'ensemble est stocké dans l'état d'exécution. L'appel lui-même ne crée pas de fichier et ne garantit pas que l'ensemble sera transféré vers un autre profil ou un nouveau runtime. Tout d’abord, enregistrez l’ensemble souhaité dans son état utilisé. Le chargement/sauvegarde de l'état général du client est un mécanisme distinct.
- UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
- 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.SetDress");
UO.SetDress();Paramètres et déroulement de l’exécution :
- La photo est prise maintenant, alors que les choses nécessaires sont déjà en place. Le défi n'équipe pas les objets du sac à dos.
UO.SetDress("travel");Paramètres et déroulement de l’exécution :
- Le même nom est utilisé dans différents référentiels. SetDress() stocke également l'ensemble sans nom séparément ; il ne s'agit pas d'une sélection d'un nom préalablement enregistré.
return RunScenario();
object? RunScenario()
{
UO.SetArm("battle");
UO.SetDress("battle");
UO.SetDress();
return null;
}Paramètres et déroulement de l’exécution :
- SaveIfReady vérifie la couche de contrôle : 3 - chaussures pour les vêtements, 1 - main droite pour les armes. S'il est vide, l'instantané n'est pas écrasé. Le 1/0 renvoyé appartient à l'assistant, pas SetDress/SetArm.
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()
{
return SaveIfReady("travel");
return null;
}
dynamic SaveIfReady(dynamic name)
{
if (Truth(UO.ObjAtLayerEx(3, UO.Self()) == 0))
{
return 0;
}
UO.SetDress(name);
return 1;
}
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: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SetDress:SetDress("__stealth_saved_set__").
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setdress": SetDress("__stealth_saved_set__"); return InjectionValue.Unit;Paramètres: name (String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.SetDress. -
InjectionScript.Runtime.InjectionApiUO.SetEquip:SetEquip(name, dressSets, dressLayers, "Clothing set.").
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void SetDress(string name)
=> SetEquip(name, dressSets, dressLayers, "Clothing set.");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetDressSpeed(object? delayms);Définit une pause entre les demandes de changement de vêtements.
-
delayms— int, millisecondes. La valeur est limitée à 10..10000 inclus.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- SetDressSpeed enregistre l'état.DressSpeed = max(10, min(10000, delayms)). Les opérations sur les ensembles sauvegardés en profitent ; la vitesse des actions autorisées par le serveur ne change pas.
- Une valeur inférieure à 10 devient 10, une valeur supérieure à 10000 devient 10000. L’équipe ne met ni n’enlève d’objets.
- 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.SetDressSpeed");
UO.SetDressSpeed(250);Paramètres et déroulement de l’exécution :
- Définit une pause entre les demandes de changement de vêtements.
UO.SetDressSpeed(250);Paramètres et déroulement de l’exécution :
- SetDressSpeed enregistre l'état.DressSpeed = max(10, min(10000, delayms)). Les opérations sur les ensembles sauvegardés en profitent ; la vitesse des actions autorisées par le serveur ne change pas.
return RunScenario();
object? RunScenario()
{
UO.SetDressSpeed(0);
UO.Print(UO.DressSpeed());
return null;
}Paramètres et déroulement de l’exécution :
- Une valeur inférieure à 10 devient 10, une valeur supérieure à 10000 devient 10000. L’équipe ne met ni n’enlève d’objets.
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.SetDressSpeed(20000);
UO.Print(UO.DressSpeed());
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: delayms (Integer)
Résultat: void / Unit.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void SetDressSpeed(int delayms) => state.DressSpeed = Math.Max(10, Math.Min(10_000, delayms));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetStatLockState(object? statNum, object? statState);Demande un changement de mode caractéristique.
-
statNum- Numéro de caractéristique obligatoire : 0 - STR, 1 - DEX, 2 - INT. Ce n'est pas sa valeur actuelle ni le nom de la chaîne. -
statState— Mode obligatoire : 0 — augmentation, 1 — diminution, 2 — blocage. Ce sont trois codes, pas bool ; true/false ne remplacent pas les noms de tous les modes.
void - aucune valeur de retour. Le résultat ne peut pas être utilisé comme un succès/échec ou comparé à true. La lecture suivante montre le modèle local, pas la confirmation du serveur.
- Une requête valide envoie un paquet via GameActions et change immédiatement de mode local. Le serveur peut appliquer ses propres restrictions ; Les augmentations de compétences ou de statistiques ne sont pas garanties. Les compétences inconnues, les index/modes invalides et les caractères manquants sont ignorés sans package.
- Numéro caractéristique obligatoire : 0 - STR, 1 - DEX, 2 - INT. Ce n'est pas sa valeur actuelle ni le nom de la chaîne.
- ExecuteClientApiCompatibility sélectionne la branche de commande. Text lit le sélecteur de compétences, Arg lit les nombres numériques et les modes. Un argument non convertible peut faire échouer l'appel avec une erreur de conversion.
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.SetStatLockState");
UO.SetStatLockState(0, 2);Paramètres et déroulement de l’exécution :
- Dans l'exemple, le sélecteur et, lors de l'enregistrement, le mode sont explicitement spécifiés. La première ligne sélectionne une compétence par nom ou une caractéristique par numéro. Print affiche uniquement le résultat.
var selector = 0;
var mode = 2;
UO.SetStatLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetStatLockState(selector)));Paramètres et déroulement de l’exécution :
- Le seuil 95.1 et les modes 0/1/2 sont donnés à titre d'exemple. −1 est vérifié avant de changer de mode. Après l'écriture, seule la copie locale est lue ; il n'attend pas la réponse du serveur.
return RunScenario();
object? RunScenario()
{
var selector = 0;
var before = UO.GetStatLockState(selector);
if (Truth(before >= 0) && Truth(before <= 2))
{
UO.SetStatLockState(selector, 0);
UO.Print(Convert.ToString(UO.GetStatLockState(selector)));
}
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 :
- Tout le code d’assistance est donné ci-dessous Main. Le sélecteur sélectionne une compétence/caractéristique, le mode définit le mode d'enregistrement. ReadValue/ReadMode renvoie le numéro d'origine ; ApplyMode vérifie les arguments, exécute l'action et ne renvoie aucune valeur. UO.Wait(1000) dans l'exemple de lecture sépare deux images.
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()
{
ApplyMode(0, 2);
return null;
}
void ApplyMode(dynamic selector, dynamic mode)
{
if (Truth(mode < 0) || Truth(mode > 2))
{
return;
}
if (Truth(UO.GetStatLockState(selector) < 0))
{
return;
}
UO.SetStatLockState(selector, mode);
}
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: statNum (Any), statState (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetStatLockState:bridge.SetStatLockState(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setstatlockstate":
case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetStatState(object? statNum, object? statState);Demande un changement de mode caractéristique.
-
statNum- Numéro de caractéristique obligatoire : 0 - STR, 1 - DEX, 2 - INT. Ce n'est pas sa valeur actuelle ni le nom de la chaîne. -
statState— Mode obligatoire : 0 — augmentation, 1 — diminution, 2 — blocage. Ce sont trois codes, pas bool ; true/false ne remplacent pas les noms de tous les modes.
void - aucune valeur de retour. Le résultat ne peut pas être utilisé comme un succès/échec ou comparé à true. La lecture suivante montre le modèle local, pas la confirmation du serveur.
- Une requête valide envoie un paquet via GameActions et change immédiatement de mode local. Le serveur peut appliquer ses propres restrictions ; Les augmentations de compétences ou de statistiques ne sont pas garanties. Les compétences inconnues, les index/modes invalides et les caractères manquants sont ignorés sans package.
- Numéro caractéristique obligatoire : 0 - STR, 1 - DEX, 2 - INT. Ce n'est pas sa valeur actuelle ni le nom de la chaîne.
- ExecuteClientApiCompatibility sélectionne la branche de commande. Text lit le sélecteur de compétences, Arg lit les nombres numériques et les modes. Un argument non convertible peut faire échouer l'appel avec une erreur de conversion.
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.SetStatState");
UO.SetStatState(0, 2);Paramètres et déroulement de l’exécution :
- Dans l'exemple, le sélecteur et, lors de l'enregistrement, le mode sont explicitement spécifiés. La première ligne sélectionne une compétence par nom ou une caractéristique par numéro. Print affiche uniquement le résultat.
var selector = 0;
var mode = 2;
UO.SetStatState(selector, mode);
UO.Print(Convert.ToString(UO.GetStatLockState(selector)));Paramètres et déroulement de l’exécution :
- Le seuil 95.1 et les modes 0/1/2 sont donnés à titre d'exemple. −1 est vérifié avant de changer de mode. Après l'écriture, seule la copie locale est lue ; il n'attend pas la réponse du serveur.
return RunScenario();
object? RunScenario()
{
var selector = 0;
var before = UO.GetStatLockState(selector);
if (Truth(before >= 0) && Truth(before <= 2))
{
UO.SetStatState(selector, 0);
UO.Print(Convert.ToString(UO.GetStatLockState(selector)));
}
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 :
- Tout le code d’assistance est donné ci-dessous Main. Le sélecteur sélectionne une compétence/caractéristique, le mode définit le mode d'enregistrement. ReadValue/ReadMode renvoie le numéro d'origine ; ApplyMode vérifie les arguments, exécute l'action et ne renvoie aucune valeur. UO.Wait(1000) dans l'exemple de lecture sépare deux images.
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()
{
ApplyMode(0, 2);
return null;
}
void ApplyMode(dynamic selector, dynamic mode)
{
if (Truth(mode < 0) || Truth(mode > 2))
{
return;
}
if (Truth(UO.GetStatLockState(selector) < 0))
{
return;
}
UO.SetStatState(selector, mode);
}
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: statNum (Any), statState (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetStatLockState:bridge.SetStatLockState(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setstatlockstate":
case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Sex();Lit le code de sexe et de race à partir du modèle client.
Il n'y a pas de paramètres.
int - code compatible : 0=humain mâle, 1=humaine femelle, 2=elfe mâle, 3=elfe femelle, 4=gargouille mâle, 5=gargouille femelle. Sans personnage également 0, alors vérifiez Exists(self) pour la disponibilité. Ce n'est pas une simple femelle bool.
- 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.
object? result = UO.Sex();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments fait référence à self. Le sexe et le code de race sont stockés en valeur.
- Convert.ToString convertit le nombre à sortir et ne change pas la signification du résultat.
var value = UO.Sex();
UO.Print("Sex: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- La valeur est lue une fois sans aucun argument. Le sexe et le code de race sont utilisés dans le calcul ou la condition indiquée.
- Les seuils numériques sont des exemples de conditions de script et non de nouvelles limites client. Le champ stocke les unités de serveur et les restrictions décrites ci-dessus.
return RunScenario();
object? RunScenario()
{
var value = UO.Sex();
if (Truth(value == 4) || Truth(value == 5))
{
UO.Print("Gargoyle sex/race code");
}
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 :
- Les deux appels sans argument lisent leur valeur actuelle. UO.Wait(1000) donne une pause en millisecondes entre les prises de vue.
- Le changement est comparé : sexe et code racial. Un exemple ne change rien au monde et n’attend pas indéfiniment. Les événements au cours de cette seconde peuvent être manqués.
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 before = UO.Sex();
await Delay(1000);
var after = UO.Sex();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
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: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Sex:bridge.Sex.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "sex": return new InjectionValue(bridge.Sex);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Stam();Lit l'endurance actuelle du modèle local.
Il n'y a pas de paramètres.
int est la valeur du champ Stamina, pas un pourcentage ou bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
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.Stam();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.Stam();
UO.Print("Stam: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.Stam();
if (Truth(value < 15))
{
UO.Print("Known stamina is below the movement threshold of 15");
}
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 :
- Ce nom n'a pas de forme avec ID. ReadValue sans paramètres lit self ; les deux appels sont séparés par UO.Wait(1000). La comparaison de deux instantanés peut manquer des modifications intermédiaires.
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 before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.Stam();
}
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: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "stam": return new InjectionValue(bridge.Stamina);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Stamina();Lit l'endurance actuelle du modèle local.
Il n'y a pas de paramètres.
int est la valeur du champ Stamina, pas un pourcentage ou bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
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.Stamina();
UO.Print("Stamina: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.Stamina();
UO.Print("Stamina: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.Stamina();
if (Truth(value < 15))
{
UO.Print("Known stamina is below the movement threshold of 15");
}
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 :
- Ce nom n'a pas de forme avec ID. ReadValue sans paramètres lit self ; les deux appels sont séparés par UO.Wait(1000). La comparaison de deux instantanés peut manquer des modifications intermédiaires.
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 before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.Stamina();
}
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: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Stamina]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
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.StaminaCré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.Str();Lit la force actuelle (Strength) du personnage.
Il n'y a pas de paramètres.
int — points de statistiques actuels, 0..65535 dans le modèle client ; pas de pourcentage, ID, compétence, mode de verrouillage ou bool. 0 signifie également un caractère manquant/supprimé ou un objet inaccessible. Comparez avec l'exigence numérique, pas == true. Il ne s’agit pas d’un plafond statistique ou d’une valeur de base garantie sans modificateurs.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- Lit Player.Strength si le joueur existe et n'a pas été détruit ; sinon 0. Un personnage mort présent n'est pas un objet supprimé. La statistique n'est pas calculée à partir de HP, de mana ou d'endurance.
- GetStr/GetInt/GetDex acceptent ObjID. Les données PlayerMobile ne sont disponibles que pour self ; pour un autre serial - 0, même pour un mobile chargé. Les caractéristiques de quelqu'un d'autre ne sont ni substituées ni devinées.
- Invoke lit sur le flux du jeu avec la possibilité d'annuler l'attente par script. N'interroge pas l'état, n'ouvre pas la cible, n'envoie pas de paquet, ne modifie pas les caractéristiques et n'ajoute pas de délai.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Utilisez les noms C# exacts :
UO.Str(),UO.Strength(),UO.GetStr()ouUO.GetStrength(). C# distingue les majuscules des minuscules.
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.Str();
UO.Print("Str: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat numérique ; Convert.ToString le formate simplement pour le magazine. Il n'y a pas d'arguments ni d'actions de personnages.
var value = UO.Str();
UO.Print("Strength: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- avant et après 1000 ms séparés ; UO.Wait ajouté à l'exemple. change=after-before peut être positif, nul ou négatif. En soi, il ne fait pas la distinction entre toutes les mises à jour intermédiaires et la sortie du monde.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Str();
await Delay(1000);
var after = UO.Str();
var change = after - before;
UO.Print("Change: " + Convert.ToString(change));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=80 est un exemple d'exigence, pas de limite client. AttributeAtLeast(minimum) rejette le caractère manquant, lit une fois la caractéristique et renvoie bool : true ou false si >= minimum. La signification logique est donnée par la comparaison et non par la caractéristique elle-même.
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(Truth(AttributeAtLeast(80)) == true))
{
UO.Print("Requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic AttributeAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.Str();
return value >= minimum;
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Strength:bridge.Strength.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "str": return new InjectionValue(bridge.Strength);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Strength();Lit la puissance actuelle (Strength, Str) du personnage.
Il n'y a pas de paramètres.
int — points de statistiques actuels, 0..65535 dans le modèle client ; pas de pourcentage, ID, compétence, mode de verrouillage ou bool. 0 signifie également un caractère manquant/supprimé ou un objet inaccessible. Comparez avec l'exigence numérique, pas == true. Il ne s’agit pas d’un plafond statistique ou d’une valeur de base garantie sans modificateurs.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- Lit Player.Strength si le joueur existe et n'a pas été détruit ; sinon 0. Un personnage mort présent n'est pas un objet supprimé. La statistique n'est pas calculée à partir de HP, de mana ou d'endurance.
- GetStr/GetInt/GetDex acceptent ObjID. Les données PlayerMobile ne sont disponibles que pour self ; pour un autre serial - 0, même pour un mobile chargé. Les caractéristiques de quelqu'un d'autre ne sont ni substituées ni devinées.
- Invoke lit sur le flux du jeu avec la possibilité d'annuler l'attente par script. N'interroge pas l'état, n'ouvre pas la cible, n'envoie pas de paquet, ne modifie pas les caractéristiques et n'ajoute pas de délai.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
UO.Str(),UO.Strength(),UO.GetStr(),UO.GetStrength().
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.Strength();
UO.Print("Strength: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat numérique ; Convert.ToString le formate simplement pour le magazine. Il n'y a pas d'arguments ni d'actions de personnages.
var value = UO.Strength();
UO.Print("Strength: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- avant et après 1000 ms séparés ; UO.Wait ajouté à l'exemple. change=after-before peut être positif, nul ou négatif. En soi, il ne fait pas la distinction entre toutes les mises à jour intermédiaires et la sortie du monde.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Strength();
await Delay(1000);
var after = UO.Strength();
var change = after - before;
UO.Print("Change: " + Convert.ToString(change));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=80 est un exemple d'exigence, pas de limite client. AttributeAtLeast(minimum) rejette le caractère manquant, lit une fois la caractéristique et renvoie bool : true ou false si >= minimum. La signification logique est donnée par la comparaison et non par la caractéristique elle-même.
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(Truth(AttributeAtLeast(80)) == true))
{
UO.Print("Requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic AttributeAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.Strength();
return value >= minimum;
}
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.RegisterCharacterGetterAliases [Strength]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Strength:bridge.Strength.
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.StrengthCré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.TicksDead();Lit ou marque un décès constaté pour la première fois.
Il n'y a pas de paramètres.
int — UO.Timer en dixièmes de seconde à partir du début de l'exécution, initialement 0. Pas le nombre de décès ni la durée du décès.
- A chaque appel, si bridge.Dead()!=0 et ticksDead==0, enregistre Timer(). Sinon, il renvoie le ticksDead précédent. Après la réactivation, le champ n'est pas réinitialisé par cette méthode.
- Il s'agit de la marque du premier appel TicksDead au moment du décès observé, et non de l'heure exacte de l'événement serveur. Dans le premier dixième de seconde, la valeur de 0 peut être réinitialisé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.
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.TicksDead();
UO.Print("TicksDead: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Lit ou marque un décès constaté pour la première fois.
UO.Print(UO.TicksDead());Paramètres et déroulement de l’exécution :
- A chaque appel, si bridge.Dead()!=0 et ticksDead==0, enregistre Timer(). Sinon, il renvoie le ticksDead précédent. Après la réactivation, le champ n'est pas réinitialisé par cette méthode.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsDead()))
{
var stamp = UO.TicksDead();
UO.Print(UO.Timer() - stamp);
}
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 :
- Il s'agit de la marque du premier appel TicksDead au moment du décès observé, et non de l'heure exacte de l'événement serveur. Dans le premier dixième de seconde, la valeur de 0 peut être réinitialisé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()
{
var before = UO.TicksDead();
UO.Wait(500);
UO.Print(before = UO.TicksDead());
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:
-
InjectionScript.Runtime.InjectionApiUO.TicksDead. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Dead:bridge.Dead(). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int TicksDead()
{
if (bridge.Dead() != 0 && ticksDead == 0)
ticksDead = Timer();
return ticksDead;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ToggleFly();Demande de changer le vol de votre propre Gargouille : du sol au vol, du vol au sol. Il s'agit d'une action et UO.Flying() vérifie uniquement le statut. La commande sera utile avant un itinéraire qui nécessite un certain mode.
Il n'y a pas de paramètres.
void - aucune valeur. Ce n'est pas true/false ou une confirmation du serveur. Vérifiez le résultat réel via UO.Flying() après avoir traité la réponse du serveur.
- La seule forme est UO.ToggleFly(), sans ID, coordonnées et paramètre true/false. Se rapporte à votre personnage ; Le vol d'un autre mobile ne peut pas être modifié.
- Envoie une requête 0xBF avec une sous-commande 0x0032. L'appel lui-même ne vérifie pas la race, la version du protocole, les autorisations du serveur ou le mode actuel ; choisissez-le pour votre propre gargouille sur un serveur compatible avec le vol.
- Le serveur peut échouer et la mise à jour de l'état intervient plus tard. N'appelez pas ToggleFly dans une boucle d'attente : un nouvel appel peut annuler le commutateur précédent. Envoyez une demande et lisez Flying jusqu'à expiration du délai.
- L'altitude Z et le signe de vol sont des données différentes. UO.Flying() renvoie int 1/true ou 0/false ; false est également possible s'il n'y a pas de caractère ou l'ancien protocole.
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.ToggleFly");
UO.ToggleFly();Paramètres et déroulement de l’exécution :
- L'exemple concerne votre Gargouille sur un serveur prenant en charge le vol. EnsureFlight(timeoutMs) renvoie 1/true si un vol est observé, sinon 0/false. 2000 — limite d'attente en millisecondes ; vérifie toutes les 50 ms. Si vous êtes déjà en vol, ToggleFly n'est pas appelé. Au maximum une demande est envoyée, puis l'état de la réponse est vérifié. Le délai de pause/planification du script peut augmenter le temps réel.
if (Truth(await EnsureFlight(2000)))
{
UO.Print("Flight confirmed; ready for the next stage");
}
else
{
UO.Print("Flight not confirmed; route was not started");
}
async Task<dynamic> EnsureFlight(dynamic timeoutMs)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return false;
}
if (Truth(UO.Flying()))
{
return true;
}
UO.ToggleFly();
var waited = 0;
while (Truth(waited < timeoutMs))
{
if (!(Truth(UO.Connected())))
{
return false;
}
if (Truth(UO.Flying()))
{
return true;
}
await Delay(50);
waited += 50;
}
return UO.Flying();
}
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;Paramètres et déroulement de l’exécution :
- Jusqu'à 40 attend 50 ms, une seule requête. La vérification Connected empêche que l'arrêt soit accepté comme un atterrissage réussi. La mise en pause du script peut augmenter la durée réelle.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.Connected()) && Truth(UO.Flying()))
{
UO.ToggleFly();
var checks = 0;
while (Truth(UO.Connected()) && Truth(UO.Flying()) && Truth(checks < 40))
{
await Delay(50);
checks += 1;
}
if (Truth(UO.Connected()) && !(Truth(UO.Flying())))
{
UO.Print("Landing state observed");
}
else
{
UO.Print("Landing not confirmed");
}
}
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;Paramètres et déroulement de l’exécution :
- Attribuez Main à une clé pour une demande de changement. Ce n'est pas EnsureFlight : un nouvel appui pendant le vol demande l'atterrissage. Une répétition de clé ou deux scripts parallèles peuvent envoyer plusieurs requêtes ; aucun limiteur n'est installé ici.
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(UO.Connected()) && !(Truth(UO.Dead())))
{
UO.ToggleFly();
}
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: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ToggleFly:bridge.ToggleFly().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "togglefly": bridge.ToggleFly(); return InjectionValue.Unit;ClassicUO — Bad Newbie & C# Scripts IDE