Skip to content

FR UO Topic character Part 2

Codex edited this page Oct 12, 2026 · 3 revisions

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

Personnage — 2

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

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

Signatures C#

dynamic UO.GetEquipment(object? id);

Lit la liste des équipements sur les couches d'objets non nulles.

Paramètres

  • id — Série/ID d'un objet spécifique : int, chaîne décimale/hexadécimale ou alias défini self, backpack, lasttarget, lastobject ou nom AddObject. Ce n'est pas graphic/type. Les lignes my/backpack sélectionnent le sac à dos. Seuls les terrains sélectionnés explicites 0, "0" ou "ground". Un alias inconnu, un sac à dos manquant, un ID négatif ou un type de valeur inapproprié génèrent un tableau vide.

Valeur de retour

Tableau - serial de chaque élément dont le conteneur est ID et la couche n'est pas égale à Invalid. Pour ground/0, un tableau vide est renvoyé. Sans entrées, un tableau vide est renvoyé. La liste contient ID, pas type et aucun calque.

Comportement

  • Les données déjà téléchargées par le client sont lues. La commande n'ouvre pas le conteneur, ne déplace pas les éléments et ne télécharge pas les objets depuis l'ensemble du serveur.
  • Array - tableau avec des indices commençant à 0. Enregistrez-le dans var, vérifiez ArrayLength avant d'y accéder. Des éléments peuvent disparaître du monde après avoir pris un instantané : vérifiez Exists(serial) avant d'agir.
  • Il n'y a pas de parcours récursif de sacs imbriqués, de tri à distance, de filtre Ignore ou FindDistance/FindVertical. L'instantané FindType habituel reste inchangé.
  • GetEquipment(self) inclut le sac à dos et d'autres couches non nulles connues ; Le simple fait d’avoir une couche ne signifie pas qu’une arme ou une armure soit portée. GetContent(self) peut inclure de l'équipement car son parent est un personnage.

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.GetEquipment("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Obtenir la taille de la liste - script direct

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

  • ID="self" - le personnage actuel, ses éléments directs avec une couche non nulle sont sélectionnés.
  • Longueur - nombre d'enregistrements/ID. Ce n'est pas le montant du montant en piles. La liste vide donne 0.
var items = UO.GetEquipment("self");
UO.Print(Convert.ToString(ArrayLength(items)));

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

2. Parcourez tous les éléments trouvés ID - fonction de script

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

  • ID="self" - le personnage actuel, ses éléments directs avec une couche non nulle sont sélectionnés.
  • items[i] — numérique serial. Hex est utilisé uniquement pour la sortie. La boucle n'accède pas au dernier index.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetEquipment("self");
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
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. Vérifier le premier enregistrement avant de lire - Classe de script

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

  • ID="self" - le personnage actuel, ses éléments directs avec une couche non nulle sont sélectionnés.
  • Deux choses différentes sont vérifiées : l'enregistrement dans l'instantané et l'existence actuelle de l'objet. Ordre sans tri explicite ne signifie pas proximité.
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 items = UO.GetEquipment("self");
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

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

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.GetEquipment(id) — UO.GetEquipment(Any)

Paramètres: id (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "getcontent":

                case "getequipment":

                {

                    InjectionValue selection = arguments[0];

                    bool ground = false, explicitZero;

                    int container;

                    if (selection.Kind == InjectionValueKind.String)

                    {

                        string text = Text(0).Trim();

                        ground = text.Equals("ground", StringComparison.OrdinalIgnoreCase);

                        explicitZero = NumberConversions.TryStr2Int(text, out int literal) && literal == 0;

                        container = ground ? 0 : text.Equals("my", StringComparison.OrdinalIgnoreCase)

                            ? bridge.Backpack : GetObject(text);

                    }

                    else

                    {

                        if (selection.Kind != InjectionValueKind.Integer && selection.Kind != InjectionValueKind.Decimal)

                            return new InjectionValue(Array.Empty<InjectionValue>());

                        container = Arg(0);

                        explicitZero = selection.Kind == InjectionValueKind.Integer ? selection.Integer == 0 : selection.Decimal == 0d;

                    }

                    // Only an explicit ground/zero selector may query world items.

                    if (container < 0 || container == 0 && !ground && !explicitZero)

                        return new InjectionValue(Array.Empty<InjectionValue>());

                    bool equipment = name.Equals("GetEquipment", StringComparison.OrdinalIgnoreCase);

                    int[] items = equipment

                        ? container == 0 ? Array.Empty<int>() : bridge.GetEquipment(container)

                        : bridge.GetContent(container);

                    return new InjectionValue(items.Select(serial => new InjectionValue(serial)).ToArray());

                }

UO.GetFireResist

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

Signatures C#

int UO.GetFireResist();

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.GetFireResist();
UO.Print("GetFireResist: " + 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.GetFireResist();
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.GetFireResist();
    await Delay(500);
    var after = UO.GetFireResist();
    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.GetFireResist();
        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.GetFireResist() — UO.GetFireResist()

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

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

Signatures C#

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

Vérifie si le personnage vole actuellement. Ceci est généralement nécessaire pour Gargoyle : par exemple, avant de démarrer un itinéraire ou avant de demander l'autorisation d'un vol. Répond à la question « Mon personnage vole-t-il maintenant ? » sans argument. La commande lit uniquement l'état : elle ne permet pas de voler, d'atterrir ou de déplacer le personnage.

Paramètres

  • value - Caractère serial facultatif : nombre, chaîne hexadécimale, self, lasttarget ou nom stocké via UO.AddObject. Sans argument, votre personnage est utilisé. Il s'agit de ID du mobile spécifique, pas de graphic/type et non de la coordonnée de Z. Un nom inconnu, un mobile manquant/supprimé ou un élément donne 0.

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 IsFlying, 0 n'a pas d'indicateur ou mobile est manquant. L'altitude Z en elle-même ne signifie pas un vol.

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

  • La principale application du jeu est le vol de Gargoyle. Cependant, le getter ne vérifie pas la course : dans ce client, il lit le bit 0x04 du mobile avec la version de protocole 7.0.0.0 et plus récente. Sur l'ancien protocole, il renvoie 0. Se tenir sur un toit, un Z élevé, des animations d'ailes ou la course de gargouilles elle-même ne sont pas des preuves de vol activées.
  • Il existe un UO.ToggleFly() distinct pour changer d'état : il envoie une demande de commutation plutôt qu'une commande "allumer". Si vous êtes déjà en vol, un appel répété demande l'atterrissage. Le serveur peut échouer ; après y avoir été invité, relisez Flying avec une attente limitée. false est également possible sans personnage/données disponibles, alors vérifiez Connected avant de jouer l'action.
  • 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.

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.GetFlying();
UO.Print("GetFlying: " + Convert.ToString(result));

1. Vérifier le mode avant la prochaine étape de script - script direct

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

  • Les parenthèses vides indiquent self. true est égal à 1, false est égal à 0 ; si UO.Flying() { ... } est acceptable. Cet exemple ne change rien.
var active = UO.GetFlying();
if (Truth(Truth(active) == true))
{
    UO.Print("Flying mode active");
}
else
{
    UO.Print("Ground mode or character data 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 caractère précédemment sélectionné - fonction de script

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

  • ReadState(obj) prend serial/alias et renvoie l'état. La définition complète est ci-dessous ; l'absence d'objet est traitée avant la lecture. Le caractère de quelqu'un d'autre est également vérifié par rapport aux données déjà reçues par le client.
return  RunScenario();
 object? RunScenario()
{
    var target = Asc(UO.GetSerial("lasttarget"), 0);
    if (Truth(target != 0) && Truth(UO.Exists(target)))
    {
        if (Truth(ReadState(target)))
        {
            UO.AddObject("flying_mobile", target);
        }
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    if (!(Truth(UO.Exists(obj))))
    {
        return false;
    }

    return UO.GetFlying(obj);
}

int Asc(object? value, int fallback = 0)
{
    string text = Convert.ToString(value) ?? "";
    if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
        return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
    return int.TryParse(text, out int number) ? number : fallback;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Demandez un vol une fois et attendez le résultat - classe de scénario

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.
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()
    {
        if (Truth(await EnsureFlight(2000)))
        {
            UO.Print("Flight confirmed; ready for the next stage");
        }
        else
        {
            UO.Print("Flight not confirmed; route was not started");
        }

        return null;
    }

    async Task<dynamic> EnsureFlight(dynamic timeoutMs)
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
        {
            return false;
        }

        if (Truth(UO.GetFlying()))
        {
            return true;
        }

        UO.ToggleFly();
        var waited = 0;
        while (Truth(waited < timeoutMs))
        {
            if (!(Truth(UO.Connected())))
            {
                return false;
            }

            if (Truth(UO.GetFlying()))
            {
                return true;
            }

            await Delay(50);
            waited += 50;
        }

        return UO.GetFlying();
    }

    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.GetFlying() — UO.GetFlying()

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.

serial => bridge.Flying(serial)

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

() => getter(bridge.Self)

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

UO.GetFlying(value) — UO.GetFlying(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.Flying(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.GetFrozen

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

Signatures C#

int UO.GetFrozen();
int UO.GetFrozen(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.GetFrozen();
UO.Print("GetFrozen: " + 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.GetFrozen();
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.GetFrozen(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.GetFrozen()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetFrozen()) == 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.GetFrozen() — UO.GetFrozen()

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.

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

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

UO.GetFrozen(value) — UO.GetFrozen(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.GetGold

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

Signatures C#

dynamic UO.GetGold();

Lit la quantité d'or à partir du statut actuel du personnage.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int/double est la somme non négative 0..4294967295. Jusqu'à 2147483647 inclus, int est renvoyé, au-dessus de double (Double), représentant exactement tout entier non signé de 32 bits. 0 signifie également qu'il n'y a actuellement aucun joueur non supprimé ni aucun montant reçu. Ce n'est pas bool, ID, le nombre de piles ou le contournement du sac à dos/banque.

Comportement

  • Il n'y a pas de paramètres. Lit le cache Player.Gold à partir de CharacterStatus (0x11). Le serveur détermine quel or est inclus dans son compteur ; l'équipe ne fouille pas les sacs et ne demande pas les soldes bancaires. Joueur non/détruit - 0 ; un cadeau fantôme peut maintenir un montant de statut.
  • ReadGoldValue lit bridge.Gold une fois. L'ancien pont C# conserve la signature Int32 et transmet les bits UInt32. une conversion non vérifiée restaure la somme non signée ; un petit montant se transforme en int, un grand montant en double. Le bit le plus significatif ne rend plus le solde négatif. La conversion est locale, il n'y a pas de packages.
  • 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.

object? result = UO.GetGold();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Retirer le montant reçu - script direct

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

  • montant stocke un résultat ; Convert.ToString le formate pour le magazine. L’or n’est ni recherché, ni transporté, ni dépensé.
var amount = UO.GetGold();
UO.Print("Status gold: " + Convert.ToString(amount));

2. Fonction complète CanAfford à gros prix - fonction script

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

  • price=3000000000.0 est un exemple de prix, pas la limite. CanAfford(price) rejette un prix négatif ou aucun joueur, lit le montant une fois et renvoie bool : true ou false si montant >= prix. The amount itself is not bool. La fonction est entièrement définie ci-dessous.
return  RunScenario();
 object? RunScenario()
{
    var price = 3000000000.0;
    if (Truth(Truth(CanAfford(price)) == true))
    {
        UO.Print("Local balance is sufficient");
    }
    else
    {
        UO.Print("Local check failed");
    }

    return null;
}

dynamic CanAfford(dynamic price)
{
    if (Truth(price < 0) || Truth(UO.Self() == 0))
    {
        return false;
    }

    var amount = UO.GetGold();
    return amount >= price;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Observer le changement d'équilibre - Classe de script

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

  • before/after separates UO.Wait(500) milliseconds. différence=après-avant peut être négatif lorsque le solde diminue ; This is not a fixed unsigned counter overflow. Les mises à jour intermédiaires et les changements de personnages 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.GetGold();
        await Delay(500);
        var after = UO.GetGold();
        var difference = after - before;
        UO.Print("Balance change: " + Convert.ToString(difference));
        return null;
    }

    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.GetGold() — UO.GetGold()

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.

private InjectionValue ReadGoldValue()

        {

            // The existing bridge carries all 32 unsigned status-counter bits in

            // an Int32. Keep small results Integer; Double exactly represents

            // every UInt32 and avoids returning a negative large gold amount.

            uint amount = unchecked((uint)bridge.Gold);

            return amount <= int.MaxValue ? new InjectionValue((int)amount)

                : new InjectionValue((double)amount);

        }

UO.GetHP

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

Signatures C#

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

Lit l’état de santé actuel à partir du modèle local.

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

int est la valeur du champ Hits, pas le pourcentage et non 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.

Exemple .csx

int hp = UO.GetHP();
UO.Print($"HP = {hp}");

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.GetHP();
UO.Print("GetHP: " + 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.GetHP();
UO.Print("GetHP: " + 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.GetHP();
    var maximum = UO.GetMaxHP();
    if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
    {
        UO.Print("Health below half of the known maximum");
    }

    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 :

  • lasttarget — objet précédemment sélectionné ; Exists vérifie la disponibilité. obj est le seul paramètre de ReadValue. La fonction renvoie le numéro de commande inchangé et est donné dans son intégralité.
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.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetHP(obj);
    }

    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.GetHP() — UO.GetHP()

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 GetHP() => GetHP("self");

UO.GetHP(id) — UO.GetHP(Any)

Paramètres: id (Any/Integer/String)

Résultat: int / Any.

Pendant un appel:

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

case "gethp": return new InjectionValue(bridge.GetHP(Arg(0, bridge.Self)));

UO.GetHP(id) — UO.GetHP(Integer)

Paramètres: id (Any/Integer/String)

Résultat: int / Integer.

Pendant un appel:

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

public int GetHP(int id) => bridge.GetHP(id);

UO.GetHP(id) — UO.GetHP(String)

Paramètres: id (Any/Integer/String)

Résultat: int / Integer.

Pendant un appel:

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

public int GetHP(string id) => GetHP(GetObject(id));

UO.GetHidden

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

Signatures C#

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

Teste la furtivité du personnage.

Paramètres

  • value — 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 IsHidden, 0 n'a pas d'indicateur ou mobile est manquant. Il s'agit d'un drapeau de serveur, pas d'une visibilité derrière un mur.

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.

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.GetHidden();
UO.Print("GetHidden: " + 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.GetHidden();
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.GetHidden(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.GetHidden();
        await Delay(500);
        var after = UO.GetHidden();
        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.GetHidden() — UO.GetHidden()

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.

serial => bridge.Hidden(serial)

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

() => getter(bridge.Self)

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

UO.GetHidden(value) — UO.GetHidden(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.Hidden(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.GetInt

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

Signatures C#

int UO.GetInt();
int UO.GetInt(object? objID);

Lit l'intelligence actuelle (Intelligence, INT) du personnage.

Paramètres

  • objID — ObjID sous la forme affichée uniquement, avec un argument : serial numéro de caractère, chaîne hexadécimale/0x, "self", "lasttarget" ou nom AddObject. Sélectionne un objet autre que graphic/type. Sans argument, le caractère actuel est lu.

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

  • Sont pris en charge () pour self et (ObjID) pour un objet explicite. Il n'y a pas d'autres arguments facultatifs.
  • Lit Player.Intelligence 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.Int(), UO.Intelligence(), UO.GetInt(), UO.GetIntelligence().
  • ExecuteClientApiCompatibility.Arg résout d'abord le nom de l'objet, puis convertit le numéro. Une chaîne non numérique inconnue provoque une erreur de conversion, pas une cible. double est réduit à int, Array/void est réduit à 0. Pour sélectionner un caractère, utilisez le bon serial, pas de telles transformations.

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.GetInt();
UO.Print("GetInt: " + 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.GetInt();
UO.Print("Intelligence: " + 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.GetInt();
    await Delay(1000);
    var after = UO.GetInt();
    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.GetInt();
        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;
}

4. Sélectionnez le caractère par serial et le nom de l'objet - script direct

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

  • id est le résultat de UO.Self(), pas le type. AddObject stocke ID sous la forme statSubject sans portée car le deuxième argument est spécifié. Les deux appels sélectionnent le même caractère, mais les lectures ne sont pas atomiques.
var id = UO.Self();
if (Truth(id != 0))
{
    UO.AddObject("statSubject", id);
    var direct = UO.GetInt(id);
    var byName = UO.GetInt("statSubject");
    UO.Print("Direct: " + Convert.ToString(direct) + "; alias: " + Convert.ToString(byName));
}

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.GetInt() — UO.GetInt()

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

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

UO.GetInt(objID) — UO.GetInt(Any)

Paramètres: objID (Any)

Résultat: int / Integer.

Pendant un appel:

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

case "getint": return new InjectionValue(arguments.Length > 0 ? bridge.GetIntelligence(Arg(0)) : bridge.Intelligence);

UO.GetIntelligence

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

Signatures C#

int UO.GetIntelligence();

Lit l'intelligence actuelle (Intelligence, INT) 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.Intelligence 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.Int(), UO.Intelligence(), UO.GetInt(), UO.GetIntelligence().

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.GetIntelligence();
UO.Print("GetIntelligence: " + 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.GetIntelligence();
UO.Print("Intelligence: " + 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.GetIntelligence();
    await Delay(1000);
    var after = UO.GetIntelligence();
    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.GetIntelligence();
        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.GetIntelligence() — UO.GetIntelligence()

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

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


UO.GetLife

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

Signatures C#

int UO.GetLife();

Lit l’état de santé actuel à partir du modèle local.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int est la valeur du champ Hits, pas le pourcentage et non 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.GetLife();
UO.Print("GetLife: " + 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.GetLife();
UO.Print("GetLife: " + 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.GetLife();
    var maximum = UO.GetMaxHP();
    if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
    {
        UO.Print("Health below half of the known maximum");
    }

    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.GetLife();
    }

    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.GetLife() — UO.GetLife()

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.GetHP(bridge.Self)

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


UO.GetLuck

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

Signatures C#

int UO.GetLuck();

Lit le compteur de statut de votre personnage : points de chance.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int — points de chance, 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.Luck 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.
  • Luck lit les points de chance du serveur stockés sous UInt16 à partir du type de statut >= 4. Il ne s'agit pas d'un pourcentage, d'un nombre aléatoire ou d'une garantie de la qualité du butin. Lors de la lecture, le client ne calcule pas le taux de drop et n'ajoute pas de bonus d'équipement.
  • 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.GetLuck();
UO.Print("GetLuck: " + 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.GetLuck();
UO.Print("Luck: " + 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.GetLuck();
    await Delay(500);
    var after = UO.GetLuck();
    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 :

  • LuckAtLeast(minimum) reçoit une exigence numérique ; 1000 est un exemple, pas une limite ou un pourcentage. Rejette l'absence d'un Joueur, lit la chance une fois et renvoie bool : true ou false par valeur >= minimum. La chance elle-même n'est pas bool. Les points mis en cache sont comparés et les chutes de butin ne sont pas prévues.
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(LuckAtLeast(1000)) == true))
        {
            UO.Print("Local check passed");
        }
        else
        {
            UO.Print("Local check failed or data unavailable");
        }

        return null;
    }

    dynamic LuckAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetLuck();
        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.GetLuck() — UO.GetLuck()

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

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


UO.GetMana

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

Signatures C#

int UO.GetMana();
dynamic UO.GetMana(object? objID);

Lit le mana actuel du modèle local.

Paramètres

  • objID — 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

int est la valeur du champ Mana, 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.GetMana();
UO.Print("GetMana: " + 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.GetMana();
UO.Print("GetMana: " + 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.GetMana();
    if (Truth(value >= 10))
    {
        UO.Print("At least ten mana points are known");
    }

    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 :

  • lasttarget — objet précédemment sélectionné ; Exists vérifie la disponibilité. obj est le seul paramètre de ReadValue. La fonction renvoie le numéro de commande inchangé et est donné dans son intégralité.
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.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetMana(obj);
    }

    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.GetMana() — UO.GetMana()

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

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

UO.GetMana(objID) — UO.GetMana(Any)

Paramètres: objID (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "getmana": return new InjectionValue(arguments.Length > 0 ? bridge.GetMana(Arg(0)) : bridge.Mana);

UO.GetMaxHP

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

Signatures C#

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

Lit la santé maximale du modèle local.

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

int est la valeur du champ HitsMax, 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.GetMaxHP();
UO.Print("GetMaxHP: " + 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.GetMaxHP();
UO.Print("GetMaxHP: " + 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.GetMaxHP();
    if (Truth(value > 0))
    {
        UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
    }
    else
    {
        UO.Print("HP maximum unavailable");
    }

    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 :

  • lasttarget — objet précédemment sélectionné ; Exists vérifie la disponibilité. obj est le seul paramètre de ReadValue. La fonction renvoie le numéro de commande inchangé et est donné dans son intégralité.
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.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetMaxHP(obj);
    }

    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.GetMaxHP() — UO.GetMaxHP()

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 GetMaxHP() => GetMaxHP("self");

UO.GetMaxHP(id) — UO.GetMaxHP(Any)

Paramètres: id (Any/Integer/String)

Résultat: int / Any.

Pendant un appel:

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

case "getmaxhp": return new InjectionValue(bridge.GetMaxHP(Arg(0, bridge.Self)));

UO.GetMaxHP(id) — UO.GetMaxHP(Integer)

Paramètres: id (Any/Integer/String)

Résultat: int / Integer.

Pendant un appel:

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

public int GetMaxHP(int id) => bridge.GetMaxHP(id);

UO.GetMaxHP(id) — UO.GetMaxHP(String)

Paramètres: id (Any/Integer/String)

Résultat: int / Integer.

Pendant un appel:

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

public int GetMaxHP(string id) => GetMaxHP(GetObject(id));

UO.GetMaxLife

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

Signatures C#

int UO.GetMaxLife();

Lit la santé maximale du modèle local.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int est la valeur du champ HitsMax, 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.GetMaxLife();
UO.Print("GetMaxLife: " + 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.GetMaxLife();
UO.Print("GetMaxLife: " + 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.GetMaxLife();
    if (Truth(value > 0))
    {
        UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
    }
    else
    {
        UO.Print("HP maximum unavailable");
    }

    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.GetMaxLife();
    }

    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.GetMaxLife() — UO.GetMaxLife()

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.GetMaxHP(bridge.Self)

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


UO.GetMaxMana

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

Signatures C#

int UO.GetMaxMana();
dynamic UO.GetMaxMana(object? objID);

Lit le mana maximum du modèle local.

Paramètres

  • objID — 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

int est la valeur du champ ManaMax, 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.GetMaxMana();
UO.Print("GetMaxMana: " + 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.GetMaxMana();
UO.Print("GetMaxMana: " + 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.GetMaxMana();
    if (Truth(value > 0))
    {
        UO.Print("Mana percent: " + Convert.ToString(UO.Mana() * 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 :

  • lasttarget — objet précédemment sélectionné ; Exists vérifie la disponibilité. obj est le seul paramètre de ReadValue. La fonction renvoie le numéro de commande inchangé et est donné dans son intégralité.
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.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetMaxMana(obj);
    }

    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.GetMaxMana() — UO.GetMaxMana()

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

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

UO.GetMaxMana(objID) — UO.GetMaxMana(Any)

Paramètres: objID (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "getmaxmana": return new InjectionValue(bridge.GetMaxMana(Arg(0, bridge.Self)));

UO.GetMaxStam

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

Signatures C#

int UO.GetMaxStam();
dynamic UO.GetMaxStam(object? objID);

Lit l'endurance maximale du modèle local.

Paramètres

  • objID — 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

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.GetMaxStam();
UO.Print("GetMaxStam: " + 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.GetMaxStam();
UO.Print("GetMaxStam: " + 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.GetMaxStam();
    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 :

  • lasttarget — objet précédemment sélectionné ; Exists vérifie la disponibilité. obj est le seul paramètre de ReadValue. La fonction renvoie le numéro de commande inchangé et est donné dans son intégralité.
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.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetMaxStam(obj);
    }

    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.GetMaxStam() — UO.GetMaxStam()

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.GetMaxStam(objID) — UO.GetMaxStam(Any)

Paramètres: objID (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "getmaxstam": return new InjectionValue(bridge.GetMaxStamina(Arg(0, bridge.Self)));

UO.GetMaxStamina

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

Signatures C#

int UO.GetMaxStamina();

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.GetMaxStamina();
UO.Print("GetMaxStamina: " + 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.GetMaxStamina();
UO.Print("GetMaxStamina: " + 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.GetMaxStamina();
    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.GetMaxStamina();
    }

    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.GetMaxStamina() — UO.GetMaxStamina()

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

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

Signatures C#

int UO.GetMaxWeight();

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.GetMaxWeight();
UO.Print("GetMaxWeight: " + 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.GetMaxWeight();
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.GetMaxWeight();
    await Delay(500);
    var after = UO.GetMaxWeight();
    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.GetMaxWeight();
        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.GetMaxWeight() — UO.GetMaxWeight()

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

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


UO.GetParalisa

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

Signatures C#

int UO.GetParalisa();
int UO.GetParalisa(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.GetParalisa();
UO.Print("GetParalisa: " + 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.GetParalisa();
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.GetParalisa(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.GetParalisa()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetParalisa()) == 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.GetParalisa() — UO.GetParalisa()

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.

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

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

UO.GetParalisa(value) — UO.GetParalisa(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.GetParalysed

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

Signatures C#

int UO.GetParalysed();
int UO.GetParalysed(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.GetParalysed();
UO.Print("GetParalysed: " + 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.GetParalysed();
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.GetParalysed(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.GetParalysed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetParalysed()) == 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.GetParalysed() — UO.GetParalysed()

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.

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

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

UO.GetParalysed(value) — UO.GetParalysed(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.GetParalyzed

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

Signatures C#

int UO.GetParalyzed();
int UO.GetParalyzed(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.GetParalyzed();
UO.Print("GetParalyzed: " + 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.GetParalyzed();
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.GetParalyzed(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.GetParalyzed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetParalyzed()) == 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.GetParalyzed() — UO.GetParalyzed()

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.

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

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

UO.GetParalyzed(value) — UO.GetParalyzed(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.GetPhysicalResist

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

Signatures C#

int UO.GetPhysicalResist();

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.GetPhysicalResist();
UO.Print("GetPhysicalResist: " + 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.GetPhysicalResist();
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.GetPhysicalResist();
    await Delay(500);
    var after = UO.GetPhysicalResist();
    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.GetPhysicalResist();
        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.GetPhysicalResist() — UO.GetPhysicalResist()

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

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

Signatures C#

dynamic UO.GetPlayerStatusText(object? objID);

Génère un court texte du nom et de la santé de l'objet.

Paramètres

  • objID — Série/ID d'un objet spécifique : int, chaîne décimale/hexadécimale ou alias défini self, backpack, lasttarget, lastobject ou nom AddObject. Ce n'est pas graphic/type.

Valeur de retour

string au format « nom HP/MaxHP ». Par exemple "Corbeau 75/100". Pour un objet inconnu, généralement "0/0" avec un espace en tête. Il s'agit de texte, pas de structure, de bool ou d'un aperçu de statut ouvert.

Comportement

  • GetName/GetHP/GetMaxHP sont lus sans demander de mise à jour. N'analysez pas le texte par espace pour obtenir ID ou HP : le nom peut contenir des espaces, utilisez des commandes getter distinctes pour les nombres.

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.GetPlayerStatusText("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Montrez votre santé - script direct

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

  • ObjID=self - caractère actuel.
  • Print affiche le texte terminé dans le journal.
UO.Print(UO.GetPlayerStatusText("self"));

2. Vérifiez la cible avant de l'afficher - fonction de script

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

  • ObjID=serial de la dernière cible.
  • Exists empêche la sortie d'un objet inconnu comme 0/0.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(target)))
    {
        UO.Print(UO.GetPlayerStatusText(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. Enregistrer deux instantanés - Classe de script

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

  • 500 - millisecondes entre les lectures.
  • Le texte du nom/HP est comparé, pas toutes les caractéristiques du personnage.
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.GetPlayerStatusText("self");
        await Delay(500);
        var after = UO.GetPlayerStatusText("self");
        if (Truth(before != after))
        {
            UO.Print(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.GetPlayerStatusText(objID) — UO.GetPlayerStatusText(Any)

Paramètres: objID (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "getplayerstatustext": return new InjectionValue(bridge.GetName(Arg(0)) + " " + bridge.GetHP(Arg(0)) + "/" + bridge.GetMaxHP(Arg(0)));

UO.GetPoisonResist

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

Signatures C#

int UO.GetPoisonResist();

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.GetPoisonResist();
UO.Print("GetPoisonResist: " + 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.GetPoisonResist();
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.GetPoisonResist();
    await Delay(500);
    var after = UO.GetPoisonResist();
    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.GetPoisonResist();
        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.GetPoisonResist() — UO.GetPoisonResist()

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

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

Signatures C#

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

Vérifie l'empoisonnement du personnage.

Paramètres

  • value — 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.GetPoisoned();
UO.Print("GetPoisoned: " + 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.GetPoisoned();
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.GetPoisoned(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.GetPoisoned();
        await Delay(500);
        var after = UO.GetPoisoned();
        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.GetPoisoned() — UO.GetPoisoned()

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.

serial => bridge.Poisoned(serial)

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

() => getter(bridge.Self)

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

UO.GetPoisoned(value) — UO.GetPoisoned(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.Poisoned(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.GetRace

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

Signatures C#

int UO.GetRace();

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.

var result = UO.GetRace();
UO.Print("GetRace: " + 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.GetRace();
UO.Print("GetRace: " + 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.GetRace();
    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.GetRace();
        await Delay(1000);
        var after = UO.GetRace();
        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.GetRace() — UO.GetRace()

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

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


UO.GetResist

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

Signatures C#

int UO.GetResist(object? resistance);

Lit l'une des résistances de votre personnage à l'aide d'un sélecteur numérique ou de chaîne.

Paramètres

  • resistance — une résistance est requise. Nombres : 0=physique, 1=feu, 2=froid, 3=poison, 4=énergie. Lignes : physique/physique/armure, feu, froid, poison, énergie. La casse et les espaces de fin sont ignorés. Il n'y a pas de serial, type, hue, de vue ou de deuxième argument.

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

  • GetResistance distingue d'abord le type de valeur : les chaînes "1" et "0" sont des noms inconnus, donnent 0 et ne sont pas des sélecteurs numériques. Une non-chaîne double rejette la fraction à zéro : 1.9 -> feu, -0.9 -> physique. true=1 sélectionne le feu, false=0 sélectionne le physique ; Array/null est également converti en 0. Utilisez un entier explicite ou un nom valide. Les noms AddObject ne sont pas autorisés.
  • GetResistance sélectionne exactement un champ de pont. Les nombres/noms inconnus donnent int 0 sans lire le champ. La commande ne supprime pas cinq valeurs de manière atomique et ne modifie pas la résistance.
  • 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.
  • 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.
  • 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.

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.GetResist("fire");
UO.Print("GetResist: " + Convert.ToString(result));

1. Sélectionnez par nom avec une casse différente - script direct

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

  • résistance=" FiRe " sélectionne le feu après avoir supprimé les espaces de fin et n'est pas sensible à la casse. la valeur reste un nombre signé ; la vue n'apparaît pas.
var value = UO.GetResist(" FiRe ");
UO.Print("Fire resistance: " + Convert.ToString(value));

2. Comparez les sélecteurs numériques et de chaîne - fonction de script

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

  • 2 sélectionne le froid ; "poison" - poison. Ce sont des sélecteurs, pas serial. La comparaison de deux instantanés renvoie bool ; Poison Resistance ne dit pas si un personnage est empoisonné.
return  RunScenario();
 object? RunScenario()
{
    var cold = UO.GetResist(2);
    var poison = UO.GetResist("poison");
    if (Truth(cold < poison))
    {
        UO.Print("Cold resistance is lower");
    }
    else
    {
        UO.Print("Cold resistance is equal or higher");
    }

    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 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.
  • le sélecteur est passé de la fonction à GetResist sans modification ; l'exemple utilise "feu". La fonction vérifie la présence du Player, mais ne valide pas le sélecteur arbitraire et ne confirme pas la fraîcheur du statut. Utilisez le sélecteur dans la liste ci-dessus.
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("fire", 50)) == true))
        {
            UO.Print("Local fire resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic selector, dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetResist(selector);
        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.GetResist(resistance) — UO.GetResist(Any)

Paramètres: resistance (Any)

Résultat: int / Integer.

Pendant un appel:

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

private int GetResistance(InjectionValue resistance)

        {

            if (resistance.Kind != InjectionValueKind.String)

            {

                switch (NumberConversions.ToInt(resistance))

                {

                    case 0: return bridge.Armor;

                    case 1: return bridge.FireResistance;

                    case 2: return bridge.ColdResistance;

                    case 3: return bridge.PoisonResistance;

                    case 4: return bridge.EnergyResistance;

                    default: return 0;

                }

            }



            switch ((resistance.String ?? string.Empty).Trim().ToLowerInvariant())

            {

                case "physical":

                case "phys":

                case "armor": return bridge.Armor;

                case "fire": return bridge.FireResistance;

                case "cold": return bridge.ColdResistance;

                case "poison": return bridge.PoisonResistance;

                case "energy": return bridge.EnergyResistance;

                default: return 0;

            }

        }

UO.GetResistCold

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

Signatures C#

int UO.GetResistCold();

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.GetResistCold();
UO.Print("GetResistCold: " + 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.GetResistCold();
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.GetResistCold();
    await Delay(500);
    var after = UO.GetResistCold();
    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.GetResistCold();
        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.GetResistCold() — UO.GetResistCold()

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

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

Signatures C#

int UO.GetResistEnergy();

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.GetResistEnergy();
UO.Print("GetResistEnergy: " + 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.GetResistEnergy();
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.GetResistEnergy();
    await Delay(500);
    var after = UO.GetResistEnergy();
    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.GetResistEnergy();
        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.GetResistEnergy() — UO.GetResistEnergy()

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

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

Signatures C#

int UO.GetResistFire();

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.GetResistFire();
UO.Print("GetResistFire: " + 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.GetResistFire();
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.GetResistFire();
    await Delay(500);
    var after = UO.GetResistFire();
    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.GetResistFire();
        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.GetResistFire() — UO.GetResistFire()

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

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

Signatures C#

int UO.GetResistPhysical();

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.GetResistPhysical();
UO.Print("GetResistPhysical: " + 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.GetResistPhysical();
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.GetResistPhysical();
    await Delay(500);
    var after = UO.GetResistPhysical();
    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.GetResistPhysical();
        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.GetResistPhysical() — UO.GetResistPhysical()

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

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

Signatures C#

int UO.GetResistPoison();

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.GetResistPoison();
UO.Print("GetResistPoison: " + 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.GetResistPoison();
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.GetResistPoison();
    await Delay(500);
    var after = UO.GetResistPoison();
    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.GetResistPoison();
        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.GetResistPoison() — UO.GetResistPoison()

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.

Clone this wiki locally