Skip to content

FR UO Topic character Part 4

Codex edited this page Oct 12, 2026 · 4 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Personnage — 4

Accueil · C# · IDE · UO API · A–Z · Exemples · Langues

Parties de la référence

1 · 2 · 3 · 4 · 5

Référence complète des commandes


UO.MaxStamina

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.MaxStamina();

Lit l'endurance maximale du modèle local.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Imprimez la valeur de votre personnage - script direct

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));

2. Appliquer la valeur lors du contrôle ou du calcul - fonction de script

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;

3. Fonction d'assistance complète ReadValue - Classe de script

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)));
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.MaxStamina() — UO.MaxStamina()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

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.MaxStamina

Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.


UO.MaxWeight

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.MaxWeight();

Lit le compteur de statut de votre personnage : poids maximum en pierres.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Afficher le compteur enregistré - script direct

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));

2. Observer le changement - Fonction de script

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)));

3. Fonction d'assistance complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.MaxWeight() — UO.MaxWeight()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

public int MaxWeight() => bridge.MaxWeight;

UO.Mount

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.Mount();
void UO.Mount(object? mount);

Demande de monter la monture/l'élément sélectionné.

Paramètres

  • 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.

Valeur de retour

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.

Comportement

  • 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é.

Scripts C# autonomes

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.

Exemple simple

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();

1. Atterrissage sur lasttarget sans paramètres - script direct

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;

2. Passez ID explicite et vérifiez la couche - fonction de script

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;

3. Fonction complète avec attente limitée - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.Mount() — UO.Mount()

Paramètres: Aucun paramètre.

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "mount": bridge.Mount(Arg(0, bridge.LastTarget)); break;

UO.Mount(mount) — UO.Mount(Any)

Paramètres: mount (Any)

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "mount": bridge.Mount(Arg(0, bridge.LastTarget)); break;

UO.ObjAtLayer

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

dynamic UO.ObjAtLayer(object? layer);

Trouve un élément sur la couche spécifiée de l'équipement de votre propre personnage.

Paramètres

  • 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.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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");

1. Élément dans la main droite par nom de calque - script direct

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;

2. Propriétés des couches numériques et des éléments - fonction de script

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;

3. Récupérez le sac à dos et recherchez la couche invalide - classe de script

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;
    }
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.ObjAtLayer(layer) — UO.ObjAtLayer(Any)

Paramètres: layer (Any/String)

Résultat: dynamic / Integer.

Pendant un appel:

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)));

UO.ObjAtLayer(layer) — UO.ObjAtLayer(String)

Paramètres: layer (Any/String)

Résultat: dynamic / Any.

Pendant un appel:

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"));

        }

UO.ObjAtLayerEx

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.ObjAtLayerEx(object? layerType, object? playerID);

Lit un élément/conteneur dans le calque spécifié pour le caractère chargé spécifié.

Paramètres

  • 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.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Recevoir un conteneur de magasin et lister les produits - script direct

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;

2. Sélectionnez les biens du graphic souhaité et comptez les unités - fonction de script

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;

3. Comparez trois couches de magasin via une procédure complète - classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.ObjAtLayerEx(layerType, playerID) — UO.ObjAtLayerEx(Any,Any)

Paramètres: layerType (Any), playerID (Any)

Résultat: int / Integer.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "objatlayerex": return new InjectionValue(bridge.ObjAtLayerEx(Arg(0), Arg(1)));

UO.Paralyzed

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.Paralyzed();
int UO.Paralyzed(object? value);

Vérifie l'indicateur de paralysie du personnage connu du client.

Paramètres

  • 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.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Testez-vous via true - script direct

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;

2. Vérifier le mobile sélectionné - fonction de script

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;

3. Attente limitée pour la levée de la paralysie - classe de scénario

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.Paralyzed() — UO.Paralyzed()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "paralyzed": return new InjectionValue(bridge.GetLocked(bridge.Self));

UO.Paralyzed(value) — UO.Paralyzed(Any)

Paramètres: value (Any)

Résultat: int / Integer.

Pendant un appel:

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.


UO.PhysicalResist

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.PhysicalResist();

Lit le champ de résistance du personnage actuel : armure physique/résistance.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Imprimer la valeur enregistrée - script direct

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));

2. Comparez deux images - fonction de script

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)));

3. Fonction de test de résistance minimale complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.PhysicalResist() — UO.PhysicalResist()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

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.Armor

Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.


UO.Poison

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.Poison();
void UO.Poison(object? target);

Utilise la compétence Empoisonnement, si nécessaire, sur une cible donnée.

Paramètres

  • target - Facultatif serial/alias cible. Aucun argument - seulement UseSkill("Empoisonnement"). Avec argument - UseSkillAtTarget("Empoisonnement", cible).

Valeur de retour

void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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();

1. Appel direct - script direct

Paramètres et déroulement de l’exécution :

  • Utilise la compétence Empoisonnement, si nécessaire, sur une cible donnée.
UO.Poison();

2. Option explicite - fonction de script

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;

3. Fonction d'assistance complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.Poison() — UO.Poison()

Paramètres: Aucun paramètre.

Résultat: void / Unit.

Pendant un appel:

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;

UO.Poison(target) — UO.Poison(Any)

Paramètres: target (Any)

Résultat: void / Unit.

Pendant un appel:

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;

UO.PoisonResist

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.PoisonResist();

Lit le champ de résistance du personnage actuel : poison.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Imprimer la valeur enregistrée - script direct

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));

2. Comparez deux images - fonction de script

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)));

3. Fonction de test de résistance minimale complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.PoisonResist() — UO.PoisonResist()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "poisonresist": return new InjectionValue(bridge.PoisonResistance);

UO.Poisoned

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.Poisoned();
int UO.Poisoned(object? id);

Vérifie l'empoisonnement du personnage.

Paramètres

  • 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.

Valeur de retour

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é.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Vérifiez votre propre état - script direct

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;

2. Objet sélectionné et fonction complète ReadState - fonction de script

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;

3. Remarquez un changement en une demi-seconde - classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.Poisoned() — UO.Poisoned()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

public int Poisoned() => bridge.Poisoned(bridge.Self);

UO.Poisoned(id) — UO.Poisoned(Any)

Paramètres: id (Any)

Résultat: int / Integer.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

public int Poisoned(InjectionValue id) => bridge.Poisoned(GetObject(id));

UO.Race

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

dynamic UO.Race();

Lit la race du personnage à partir du modèle client.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Afficher la valeur actuelle de votre personnage - script direct

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));

2. Utiliser la valeur dans la validation de l'application - Fonction de script

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;

3. Regardez le changement en une seconde - cours de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.Race() — UO.Race()

Paramètres: Aucun paramètre.

Résultat: dynamic / Any.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "race": return new InjectionValue(bridge.Race);

UO.RemoveEarrings

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.RemoveEarrings();

Demande la suppression d’un élément de la couche Ear.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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();

1. Appel direct - script direct

Paramètres et déroulement de l’exécution :

  • Demande la suppression d’un élément de la couche Ear.
UO.RemoveEarrings();

2. Option explicite - fonction de script

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;
}

3. Fonction d'assistance complète - Classe de script

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;
    }
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.RemoveEarrings() — UO.RemoveEarrings()

Paramètres: Aucun paramètre.

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "removeearrings": Unequip("Ear"); break;

UO.RemoveHat

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.RemoveHat();

Demande la suppression d’un élément de la couche Hat.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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();

1. Appel direct - script direct

Paramètres et déroulement de l’exécution :

  • Demande la suppression d’un élément de la couche Hat.
UO.RemoveHat();

2. Option explicite - fonction de script

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;
}

3. Fonction d'assistance complète - Classe de script

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;
    }
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.RemoveHat() — UO.RemoveHat()

Paramètres: Aucun paramètre.

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "removehat": Unequip("Hat"); break;

UO.RemoveNeckless

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.RemoveNeckless();

Demande qu’un élément soit supprimé du calque Neck.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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();

1. Appel direct - script direct

Paramètres et déroulement de l’exécution :

  • Demande qu’un élément soit supprimé du calque Neck.
UO.RemoveNeckless();

2. Option explicite - fonction de script

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;
}

3. Fonction d'assistance complète - Classe de script

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;
    }
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.RemoveNeckless() — UO.RemoveNeckless()

Paramètres: Aucun paramètre.

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "removeneckless": Unequip("Neck"); break;

UO.RemoveRing

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.RemoveRing();

Demande la suppression d’un élément de la couche Ring.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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();

1. Appel direct - script direct

Paramètres et déroulement de l’exécution :

  • Demande la suppression d’un élément de la couche Ring.
UO.RemoveRing();

2. Option explicite - fonction de script

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;
}

3. Fonction d'assistance complète - Classe de script

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;
    }
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.RemoveRing() — UO.RemoveRing()

Paramètres: Aucun paramètre.

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "removering": Unequip("Ring"); break;

UO.RequestStats

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.RequestStats(object? objID);

Demande le statut du personnage par serial.

Paramètres

  • 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.

Valeur de retour

void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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"));

1. Appel direct - script direct

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;

2. Option explicite - fonction de script

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;

3. Fonction d'assistance complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.RequestStats(objID) — UO.RequestStats(Any)

Paramètres: objID (Any)

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "requeststats": bridge.RequestStats(Arg(0)); return InjectionValue.Unit;

UO.ResistCold

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.ResistCold();

Lit le champ de résistance du personnage actuel : froid.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Imprimer la valeur enregistrée - script direct

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));

2. Comparez deux images - fonction de script

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)));

3. Fonction de test de résistance minimale complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.ResistCold() — UO.ResistCold()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

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.ColdResistance

Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.


UO.ResistEnergy

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.ResistEnergy();

Lit le champ de résistance du personnage actuel : énergie.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Imprimer la valeur enregistrée - script direct

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));

2. Comparez deux images - fonction de script

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)));

3. Fonction de test de résistance minimale complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.ResistEnergy() — UO.ResistEnergy()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

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.EnergyResistance

Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.


UO.ResistFire

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.ResistFire();

Lit le champ de résistance du personnage actuel : le feu.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Imprimer la valeur enregistrée - script direct

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));

2. Comparez deux images - fonction de script

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)));

3. Fonction de test de résistance minimale complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.ResistFire() — UO.ResistFire()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

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.FireResistance

Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.


UO.ResistPhysical

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.ResistPhysical();

Lit le champ de résistance du personnage actuel : armure physique/résistance.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Imprimer la valeur enregistrée - script direct

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));

2. Comparez deux images - fonction de script

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)));

3. Fonction de test de résistance minimale complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.ResistPhysical() — UO.ResistPhysical()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

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.Armor

Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.


UO.ResistPoison

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.ResistPoison();

Lit le champ de résistance du personnage actuel : poison.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Imprimer la valeur enregistrée - script direct

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));

2. Comparez deux images - fonction de script

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)));

3. Fonction de test de résistance minimale complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.ResistPoison() — UO.ResistPoison()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

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.PoisonResistance

Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.


UO.Self

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.Self();

Renvoie ID du caractère actuel.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Lire et afficher ID - script direct

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");

2. Détecter le changement ID - Fonction de script

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;

3. Fonction complète IsOwnSerial - classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.Self() — UO.Self()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "self": return new InjectionValue(bridge.Self);

UO.SetARExtParams

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

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.

Paramètres

  • 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.

Valeur de retour

void - aucune valeur. Il s'agit de configurer l'entrée suivante, sans confirmer la connexion ou l'existence du personnage.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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);

1. SetARExtParams - 1 - script direct

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;

2. SetARExtParams — 2 — fonction de script

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;

3. SetARExtParams - 3 - classe de scénario

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.SetARExtParams() — UO.SetARExtParams()

Paramètres: Aucun paramètre.

Résultat: void / Unit.

Pendant un appel:

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;

                }

UO.SetARExtParams(shardName) — UO.SetARExtParams(Any)

Paramètres: shardName (Any)

Résultat: void / Unit.

Pendant un appel:

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;

                }

UO.SetARExtParams(shardName, charName) — UO.SetARExtParams(Any,Any)

Paramètres: shardName (Any), charName (Any)

Résultat: void / Unit.

Pendant un appel:

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;

                }

UO.SetARExtParams(shardName, charName, useAtEveryConnect) — UO.SetARExtParams(Any,Any,Any)

Paramètres: shardName (Any), charName (Any), useAtEveryConnect (Any)

Résultat: void / Unit.

Pendant un appel:

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;

                }

UO.SetARStatus

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.SetARStatus(object? value);

Active ou désactive la reconnexion automatique.

Paramètres

  • value - 0 s'éteint ; tout entier non nul inclut.

Valeur de retour

void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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);

1. Appel direct - script direct

Paramètres et déroulement de l’exécution :

  • Active ou désactive la reconnexion automatique.
UO.SetARStatus(1);

2. Option explicite - fonction de script

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;
}

3. Fonction d'assistance complète - Classe de script

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);
    }
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.SetARStatus(value) — UO.SetARStatus(Any)

Paramètres: value (Any)

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "setarstatus": bridge.SetAutoReconnect(Arg(0)); return InjectionValue.Unit;

UO.SetArm

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.SetArm(object? name);

Mémorise l'arme et le bouclier actuels dans un ensemble nommé.

Paramètres

  • 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.

Valeur de retour

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.

Comportement

  • 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é.

Scripts C# autonomes

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.

Exemple simple

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");

1. Utilisation directe - script direct

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");

2. Noms et mode de requête - Fonction de script

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;
}

3. Script d'assistance complet - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.SetArm(name) — UO.SetArm(String)

Paramètres: name (String)

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

public void SetArm(string name)

            => SetEquip(name, armSets, weaponLayers, "Arm set.");

UO.SetDress

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.SetDress();
void UO.SetDress(object? name);

Se souvient des vêtements et armures actuellement portés pour une restauration ultérieure.

Paramètres

  • 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.

Valeur de retour

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.

Comportement

  • 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é.

Scripts C# autonomes

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.

Exemple simple

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();

1. Utilisation directe - script direct

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");

2. Noms et mode de requête - Fonction de script

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;
}

3. Script d'assistance complet - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.SetDress() — UO.SetDress()

Paramètres: Aucun paramètre.

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "setdress": SetDress("__stealth_saved_set__"); return InjectionValue.Unit;

UO.SetDress(name) — UO.SetDress(String)

Paramètres: name (String)

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

public void SetDress(string name)

            => SetEquip(name, dressSets, dressLayers, "Clothing set.");

UO.SetDressSpeed

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.SetDressSpeed(object? delayms);

Définit une pause entre les demandes de changement de vêtements.

Paramètres

  • delayms — int, millisecondes. La valeur est limitée à 10..10000 inclus.

Valeur de retour

void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.

Comportement

  • 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é.

Scripts C# autonomes

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.

Exemple simple

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);

1. Appel direct - script direct

Paramètres et déroulement de l’exécution :

  • Définit une pause entre les demandes de changement de vêtements.
UO.SetDressSpeed(250);

2. Option explicite - fonction de script

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;
}

3. Fonction d'assistance complète - Classe de script

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;
    }
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.SetDressSpeed(delayms) — UO.SetDressSpeed(Integer)

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));

UO.SetStatLockState

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.SetStatLockState(object? statNum, object? statState);

Demande un changement de mode caractéristique.

Paramètres

  • 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.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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);

1. Lecture et sortie - script direct

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)));

2. Appliquer en condition ou en comparaison - fonction script

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;

3. Fonction d'assistance complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.SetStatLockState(statNum, statState) — UO.SetStatLockState(Any,Any)

Paramètres: statNum (Any), statState (Any)

Résultat: void / Unit.

Pendant un appel:

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;

UO.SetStatState

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

void UO.SetStatState(object? statNum, object? statState);

Demande un changement de mode caractéristique.

Paramètres

  • 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.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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);

1. Lecture et sortie - script direct

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)));

2. Appliquer en condition ou en comparaison - fonction script

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;

3. Fonction d'assistance complète - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.SetStatState(statNum, statState) — UO.SetStatState(Any,Any)

Paramètres: statNum (Any), statState (Any)

Résultat: void / Unit.

Pendant un appel:

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;

UO.Sex

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

dynamic UO.Sex();

Lit le code de sexe et de race à partir du modèle client.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Afficher la valeur actuelle de votre personnage - script direct

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));

2. Utiliser la valeur dans la validation de l'application - Fonction de script

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;

3. Regardez le changement en une seconde - cours de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.Sex() — UO.Sex()

Paramètres: Aucun paramètre.

Résultat: dynamic / Any.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "sex": return new InjectionValue(bridge.Sex);

UO.Stam

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

dynamic UO.Stam();

Lit l'endurance actuelle du modèle local.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Imprimez la valeur de votre personnage - script direct

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));

2. Appliquer la valeur lors du contrôle ou du calcul - fonction de script

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;

3. Fonction d'assistance complète ReadValue - Classe de script

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)));
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.Stam() — UO.Stam()

Paramètres: Aucun paramètre.

Résultat: dynamic / Any.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "stam": return new InjectionValue(bridge.Stamina);

UO.Stamina

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.Stamina();

Lit l'endurance actuelle du modèle local.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Imprimez la valeur de votre personnage - script direct

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));

2. Appliquer la valeur lors du contrôle ou du calcul - fonction de script

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;

3. Fonction d'assistance complète ReadValue - Classe de script

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)));
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.Stamina() — UO.Stamina()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

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.Stamina

Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.


UO.Str

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.Str();

Lit la force actuelle (Strength) du personnage.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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() ou UO.GetStrength(). C# distingue les majuscules des minuscules.

Scripts C# autonomes

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.

Exemple simple

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));

1. Points de lecture et d'affichage - script direct

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));

2. Comparez deux images - fonction de script

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)));

3. Fonction de validation complète des exigences - Classe de script

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;
}

Implémentation de la commande

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.Str()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "str": return new InjectionValue(bridge.Strength);

UO.Strength

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.Strength();

Lit la puissance actuelle (Strength, Str) du personnage.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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().

Scripts C# autonomes

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.

Exemple simple

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));

1. Points de lecture et d'affichage - script direct

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));

2. Comparez deux images - fonction de script

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)));

3. Fonction de validation complète des exigences - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.Strength() — UO.Strength()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

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.Strength

Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.


UO.TicksDead

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

int UO.TicksDead();

Lit ou marque un décès constaté pour la première fois.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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));

1. Appel direct - script direct

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());

2. Option explicite - fonction de script

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;

3. Fonction d'assistance complète - Classe de script

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;
    }
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.TicksDead() — UO.TicksDead()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

public int TicksDead()

        {

            if (bridge.Dead() != 0 && ticksDead == 0)

                ticksDead = Timer();

            return ticksDead;

        }

UO.ToggleFly

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Signatures C#

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.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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.

Comportement

  • 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.

Scripts C# autonomes

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.

Exemple simple

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();

1. Activez le vol si nécessaire et vérifiez le résultat - script direct

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;

2. Demander l'embarquement uniquement pendant le vol - fonction script

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;

3. Commande de basculement manuelle pour raccourci clavier - Classe de script

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;
}

Implémentation de la commande

C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

UO.ToggleFly() — UO.ToggleFly()

Paramètres: Aucun paramètre.

Résultat: void / Unit.

Pendant un appel:

Code interne de l’implémentation ; ce n’est pas un script autonome.

case "togglefly": bridge.ToggleFly(); return InjectionValue.Unit;

Clone this wiki locally