FR UO Topic character Part 5 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Personnage — 5

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

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

Signatures C#

int UO.Undress();

Supprime les vêtements et les armures des calques 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Les mains, les cheveux, la barbe, le sac à dos, la monture et la banque ne sont pas concernés.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

Flag numérique int : 1 (condition remplie) - opération locale acceptée, 0 (condition non remplie) - refus. Ceci n'est pas une confirmation du serveur, ni ID, ni une quantité. Le serveur peut échouer plus tard ; vérifiez l'équipement réel après avoir répondu.

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

  • Besoin d'éléments chargés et de glisser à main levée. Une fois retiré, le sac à dos lui-même self est requis : le sac à dos de rechange GrabBag n'est pas utilisé. Les articles inconnus, détruits et inadaptés sont rejetés. Les éléments d'autres personnes ne peuvent pas être supprimés via UnequipItems. Un ensemble n'est pas une transaction atomique.
  • EquipItems/UnequipItems applique DressSpeed après l'opération acceptée avant l'élément suivant ; Disarm/Undress - après chaque couche occupée. Le retrait respecte en outre DropDelay lorsque le carry est accepté. Les mêmes paramètres des autres environnements d'exécution ne changent pas ; l'accélération ne remplace pas les limitations du serveur.
  • Un formulaire d'appel incorrect, un nom de couche inconnu ou une valeur qui n'est pas convertible en nombre peuvent provoquer une erreur de script au lieu de 0. L'instantané de l'équipement contient uniquement des données déjà chargées. Dans l'assistant, ChangeAndConfirm layer=1 est la main droite : autre chose, passer son vrai layer.
  • Pour un tableau, 1 signifie que toutes les opérations répertoriées sont acceptées ; en cas de refus 0 est renvoyé. Les éléments restants sont toujours traités, il n'y a pas de restauration. Un tableau vide produit 1 sans action. Disarm/Undress donne 1 également lorsque les couches requises sont déjà vides ; un échec partiel donne 0.
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

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

1. Undress - Un élément ou un calque sélectionné - script direct

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

  • Tout d'abord, sélectionnez l'élément approprié dans le jeu : lasttarget - son ID. Dans l'exemple Equip/WearItem, la couche 1 nécessite une arme secondaire. Unequip(1) retire la main droite ; Disarm/Undress fonctionnent avec leurs propres calques fixes. Il n'y a pas de replay automatique après un refus.
return UO.Undress();

2. Undress - Deux éléments et enregistrés ID - fonction de script

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

  • Pour équiper, 0x0F5E est un exemple d'épée, 0x1B76 est un exemple de bouclier. FindType les recherche parmi les éléments chargés du sac à dos, ASC convertit l'hex-ID renvoyé. Pour la suppression, les propres couches actuelles sont lues. Si l'élément requis n'est pas disponible, le script se termine. Le tableau stocke deux ID ; Chaque élément est transféré entièrement.
return  RunScenario();
 object? RunScenario()
{
    var first = UO.ObjAtLayerEx(5, UO.Self());
    var second = UO.ObjAtLayerEx(4, UO.Self());
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    return UO.Undress();
    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. Undress - Fonction complète avec attente limitée - classe de script

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

  • ChangeAndConfirm exécute la commande une fois. Vérifie ensuite l'état réel jusqu'à 20 fois avec une pause de 100 ms. 1 - le contrôle a vu l'état attendu, 0 - échec ou attente expirée. C'est le résultat de notre assistant, pas une nouvelle commande intégrée. L’appel de l’opération elle-même peut également prendre du temps.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        return ChangeAndConfirm();
        return null;
    }

    dynamic ChangeAndConfirm()
    {
        if (!(Truth(UO.Undress())))
        {
            return 0;
        }

        dynamic[] layers = new dynamic[checked((int)(16) + 1)];
        layers[0] = 3;
        layers[1] = 4;
        layers[2] = 5;
        layers[3] = 6;
        layers[4] = 7;
        layers[5] = 8;
        layers[6] = 10;
        layers[7] = 12;
        layers[8] = 13;
        layers[9] = 14;
        layers[10] = 17;
        layers[11] = 18;
        layers[12] = 19;
        layers[13] = 20;
        layers[14] = 22;
        layers[15] = 23;
        layers[16] = 24;
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            dynamic empty = true;
            for (int i = (int)(0); i <= ArrayLength(layers) - 1; i += (int)(1))
            {
                if (Truth(UO.ObjAtLayerEx(layers[i], UO.Self()) != 0))
                {
                    empty = false;
                }
            }

            if (Truth(empty))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

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

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

            => Unequip(dressLayers, "Clothing removed.");

UO.Unequip

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

Signatures C#

int UO.Unequip(object? layer);

Supprime son objet du calque spécifié dans son propre sac à dos.

Paramètres

  • layer - Numéro de couche, par exemple 1 - main droite, 2 - gauche. Equip et Unequip acceptent également un nom de calque, tel que "Rhand". WearItem utilise une couche numérique. La couche doit correspondre à la couche portable de l'article ; ce n'est ni graphic ni ID.

Valeur de retour

Flag numérique int : 1 (condition remplie) - opération locale acceptée, 0 (condition non remplie) - refus. Ceci n'est pas une confirmation du serveur, ni ID, ni une quantité. Le serveur peut échouer plus tard ; vérifiez l'équipement réel après avoir répondu.

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

  • Besoin d'éléments chargés et de glisser à main levée. Une fois retiré, le sac à dos lui-même self est requis : le sac à dos de rechange GrabBag n'est pas utilisé. Les articles inconnus, détruits et inadaptés sont rejetés. Les éléments d'autres personnes ne peuvent pas être supprimés via UnequipItems. Un ensemble n'est pas une transaction atomique.
  • EquipItems/UnequipItems applique DressSpeed après l'opération acceptée avant l'élément suivant ; Disarm/Undress - après chaque couche occupée. Le retrait respecte en outre DropDelay lorsque le carry est accepté. Les mêmes paramètres des autres environnements d'exécution ne changent pas ; l'accélération ne remplace pas les limitations du serveur.
  • Un formulaire d'appel incorrect, un nom de couche inconnu ou une valeur qui n'est pas convertible en nombre peuvent provoquer une erreur de script au lieu de 0. L'instantané de l'équipement contient uniquement des données déjà chargées. Dans l'assistant, ChangeAndConfirm layer=1 est la main droite : autre chose, passer son vrai layer.
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

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

1. Unequip - Un élément ou un calque sélectionné - script direct

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

  • Tout d'abord, sélectionnez l'élément approprié dans le jeu : lasttarget - son ID. Dans l'exemple Equip/WearItem, la couche 1 nécessite une arme secondaire. Unequip(1) retire la main droite ; Disarm/Undress fonctionnent avec leurs propres calques fixes. Il n'y a pas de replay automatique après un refus.
return UO.Unequip(1);

2. Unequip - Deux éléments et enregistrés ID - fonction de script

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

  • Pour équiper, 0x0F5E est un exemple d'épée, 0x1B76 est un exemple de bouclier. FindType les recherche parmi les éléments chargés du sac à dos, ASC convertit l'hex-ID renvoyé. Pour la suppression, les propres couches actuelles sont lues. Si l'élément requis n'est pas disponible, le script se termine. Le tableau stocke deux ID ; Chaque élément est transféré entièrement.
return  RunScenario();
 object? RunScenario()
{
    var first = UO.ObjAtLayerEx(1, UO.Self());
    var second = UO.ObjAtLayerEx(2, UO.Self());
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    var firstOk = UO.Unequip(1);
    var secondOk = UO.Unequip(2);
    return firstOk != 0 && secondOk != 0;
    return null;
}

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

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

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

  • ChangeAndConfirm exécute la commande une fois. Vérifie ensuite l'état réel jusqu'à 20 fois avec une pause de 100 ms. 1 - le contrôle a vu l'état attendu, 0 - échec ou attente expirée. C'est le résultat de notre assistant, pas une nouvelle commande intégrée. L’appel de l’opération elle-même peut également prendre du temps.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var item = UO.ObjAtLayerEx(1, UO.Self());
        return ChangeAndConfirm(1, item);
        return null;
    }

    dynamic ChangeAndConfirm(dynamic layer, dynamic item)
    {
        if (Truth(item == 0))
        {
            return 0;
        }

        if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) != item))
        {
            return 0;
        }

        if (!(Truth(UO.Unequip(layer))))
        {
            return 0;
        }

        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == 0))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 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.Unequip(layer) — UO.Unequip(Any)

Paramètres: layer (Any/String)

Résultat: int / Any.

Pendant un appel:

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

case "unequip":

                    return new InjectionValue(arguments[0].Kind == InjectionValueKind.String ? Unequip(Text(0)) : bridge.Unequip(Arg(0)));

UO.Unequip(layer) — UO.Unequip(String)

Paramètres: layer (Any/String)

Résultat: int / Integer.

Pendant un appel:

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

public int Unequip(string layer) => bridge.Unequip(ConvertLayer(layer));

UO.UnequipItems

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

Signatures C#

dynamic UO.UnequipItems(object? items);

Prend les objets personnels répertoriés dans le sac à dos. ID de l'élément de quelqu'un d'autre ne supprime pas votre élément du même calque.

Paramètres

  • items - ID ou tableau ID requis d'éléments. Les éléments du tableau sont des nombres ou des chaînes numériques hexadécimales. L'argument unique accepte également "lasttarget"/nom AddObject. Pour un tableau, utilisez les éléments de déclaration de variable [1] pour deux éléments aux index 0 et 1. Les choses sont transmises, pas les numéros de couche ni type.

Valeur de retour

Flag numérique int : 1 (condition remplie) - opération locale acceptée, 0 (condition non remplie) - refus. Ceci n'est pas une confirmation du serveur, ni ID, ni une quantité. Le serveur peut échouer plus tard ; vérifiez l'équipement réel après avoir répondu.

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

  • Besoin d'éléments chargés et de glisser à main levée. Une fois retiré, le sac à dos lui-même self est requis : le sac à dos de rechange GrabBag n'est pas utilisé. Les articles inconnus, détruits et inadaptés sont rejetés. Les éléments d'autres personnes ne peuvent pas être supprimés via UnequipItems. Un ensemble n'est pas une transaction atomique.
  • EquipItems/UnequipItems applique DressSpeed après l'opération acceptée avant l'élément suivant ; Disarm/Undress - après chaque couche occupée. Le retrait respecte en outre DropDelay lorsque le carry est accepté. Les mêmes paramètres des autres environnements d'exécution ne changent pas ; l'accélération ne remplace pas les limitations du serveur.
  • Un formulaire d'appel incorrect, un nom de couche inconnu ou une valeur qui n'est pas convertible en nombre peuvent provoquer une erreur de script au lieu de 0. L'instantané de l'équipement contient uniquement des données déjà chargées. Dans l'assistant, ChangeAndConfirm layer=1 est la main droite : autre chose, passer son vrai layer.
  • Pour un tableau, 1 signifie que toutes les opérations répertoriées sont acceptées ; en cas de refus 0 est renvoyé. Les éléments restants sont toujours traités, il n'y a pas de restauration. Un tableau vide produit 1 sans action. Disarm/Undress donne 1 également lorsque les couches requises sont déjà vides ; un échec partiel donne 0.
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

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

1. UnequipItems - Un élément ou un calque sélectionné - script direct

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

  • Tout d'abord, sélectionnez l'élément approprié dans le jeu : lasttarget - son ID. Dans l'exemple Equip/WearItem, la couche 1 nécessite une arme secondaire. Unequip(1) retire la main droite ; Disarm/Undress fonctionnent avec leurs propres calques fixes. Il n'y a pas de replay automatique après un refus.
var item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
    return 0;
}
return UO.UnequipItems(item);

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;

2. UnequipItems - Deux éléments et enregistrés ID - fonction de script

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

  • Pour équiper, 0x0F5E est un exemple d'épée, 0x1B76 est un exemple de bouclier. FindType les recherche parmi les éléments chargés du sac à dos, ASC convertit l'hex-ID renvoyé. Pour la suppression, les propres couches actuelles sont lues. Si l'élément requis n'est pas disponible, le script se termine. Le tableau stocke deux ID ; Chaque élément est transféré entièrement.
return  RunScenario();
 object? RunScenario()
{
    var first = UO.ObjAtLayerEx(1, UO.Self());
    var second = UO.ObjAtLayerEx(2, UO.Self());
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    dynamic[] items = new dynamic[checked((int)(1) + 1)];
    items[0] = first;
    items[1] = second;
    return UO.UnequipItems(items);
    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. UnequipItems - Fonction complète avec attente limitée - classe de script

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

  • ChangeAndConfirm exécute la commande une fois. Vérifie ensuite l'état réel jusqu'à 20 fois avec une pause de 100 ms. 1 - le contrôle a vu l'état attendu, 0 - échec ou attente expirée. C'est le résultat de notre assistant, pas une nouvelle commande intégrée. L’appel de l’opération elle-même peut également prendre du temps.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var item = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(item == 0))
        {
            return 0;
        }

        return ChangeAndConfirm(1, item);
        return null;
    }

    dynamic ChangeAndConfirm(dynamic layer, dynamic item)
    {
        if (Truth(item == 0))
        {
            return 0;
        }

        if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) != item))
        {
            return 0;
        }

        if (!(Truth(UO.UnequipItems(item))))
        {
            return 0;
        }

        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == 0))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

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

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.UnequipItems(items) — UO.UnequipItems(Any)

Paramètres: items (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "unequipitems":

                    return new InjectionValue(ChangeEquipmentItems(ArrayArg(0), false));

UO.UnsetArm

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

Signatures C#

void UO.UnsetArm(object? name);

Supprime une entrée pour un ensemble d'armes nommé sans désarmer le personnage.

Paramètres

  • name — Nom de chaîne de l'ensemble, tel que « voyage » ou « bataille ». Les noms ne sont pas sensibles à la casse. Les ensembles de vêtements et d'armes sont conservés séparément : le même nom est autorisé dans les deux cas. Ce n'est pas une chose ID ou un nom de fichier. Seul SetDress autorise l'absence de nom : alors un ensemble séparé est enregistré pour DressSavedSet/EquipDressSet.

Valeur de retour

void - aucune valeur. Appelez sur une ligne séparée ; n'attribuez pas le résultat et ne le comparez pas à true. L'enregistrement et la suppression modifient l'entrée et non l'équipement.

Comportement

  • Vêtements : couches 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Armes : 1 et 2 uniquement. Les cheveux, la barbe, le sac à dos, l'animal et la banque ne sont pas inclus dans ces ensembles.
  • Les éléments spécifiques serial déjà chargés sont enregistrés dans leurs propres couches. Enregistrer à nouveau le même nom remplace l'entrée. Les calques vides ont également du sens : une fois restaurés, les calques occupés correspondants seront libérés dans leur propre sac à dos. Par conséquent, un ensemble complètement vide enregistré supprime les éléments de ses calques.
  • L'ensemble est stocké dans l'état d'exécution. L'appel lui-même ne crée pas de fichier et ne garantit pas que l'ensemble sera transféré vers un autre profil ou un nouveau runtime. Tout d’abord, enregistrez l’ensemble souhaité dans son état utilisé. Le chargement/sauvegarde de l'état général du client est un mécanisme distinct.
  • La suppression n'affecte que la saisie du nom sélectionné. Les éléments restent sur le personnage, les autres noms et autres types d'ensembles ne sont pas affectés. La suppression d’une entrée manquante est acceptable. UnsetDress et UnsetArm ont un nom requis.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
  • Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.

Scripts C# autonomes

Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.

Exemple simple

Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.

La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.

UO.Print("Calling UO.UnsetArm");
UO.UnsetArm("battle");

1. Utilisation directe - script direct

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

  • Seule l'entrée spécifiée est supprimée. Les vêtements/armes ne peuvent pas être retirés.
UO.UnsetArm("battle");

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

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

  • Les noms voyage et bataille sont supprimés séparément. Le même nom d'un type d'ensemble différent est conservé.
return  RunScenario();
 object? RunScenario()
{
    UO.UnsetArm("travel");
    UO.UnsetArm("battle");
    return null;
}

3. Script d'assistance complet - Classe de script

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

  • CleanupSets est une procédure entièrement déclarée pour nettoyer deux noms propres. le préfixe génère des noms d'entrée, pas des chemins de fichiers.
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()
    {
        CleanupSets("mine_");
        return null;
    }

    void CleanupSets(dynamic prefix)
    {
        UO.UnsetArm(prefix + "travel");
        UO.UnsetArm(prefix + "battle");
    }
}

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.UnsetArm(name) — UO.UnsetArm(String)

Paramètres: name (String)

Résultat: void / Unit.

Pendant un appel:

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

public void UnsetArm(string name)

        {

            armSets.Remove(name);

            SystemMessage("Arm set removed.");

        }

UO.UnsetDress

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

Signatures C#

void UO.UnsetDress(object? name);

Supprime une entrée pour un ensemble de vêtements nommé sans supprimer les éléments.

Paramètres

  • name — Nom de chaîne de l'ensemble, tel que « voyage » ou « bataille ». Les noms ne sont pas sensibles à la casse. Les ensembles de vêtements et d'armes sont conservés séparément : le même nom est autorisé dans les deux cas. Ce n'est pas une chose ID ou un nom de fichier. Seul SetDress autorise l'absence de nom : alors un ensemble séparé est enregistré pour DressSavedSet/EquipDressSet.

Valeur de retour

void - aucune valeur. Appelez sur une ligne séparée ; n'attribuez pas le résultat et ne le comparez pas à true. L'enregistrement et la suppression modifient l'entrée et non l'équipement.

Comportement

  • Vêtements : couches 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Armes : 1 et 2 uniquement. Les cheveux, la barbe, le sac à dos, l'animal et la banque ne sont pas inclus dans ces ensembles.
  • Les éléments spécifiques serial déjà chargés sont enregistrés dans leurs propres couches. Enregistrer à nouveau le même nom remplace l'entrée. Les calques vides ont également du sens : une fois restaurés, les calques occupés correspondants seront libérés dans leur propre sac à dos. Par conséquent, un ensemble complètement vide enregistré supprime les éléments de ses calques.
  • L'ensemble est stocké dans l'état d'exécution. L'appel lui-même ne crée pas de fichier et ne garantit pas que l'ensemble sera transféré vers un autre profil ou un nouveau runtime. Tout d’abord, enregistrez l’ensemble souhaité dans son état utilisé. Le chargement/sauvegarde de l'état général du client est un mécanisme distinct.
  • La suppression n'affecte que la saisie du nom sélectionné. Les éléments restent sur le personnage, les autres noms et autres types d'ensembles ne sont pas affectés. La suppression d’une entrée manquante est acceptable. UnsetDress et UnsetArm ont un nom requis.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
  • Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.

Scripts C# autonomes

Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.

Exemple simple

Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.

La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.

UO.Print("Calling UO.UnsetDress");
UO.UnsetDress("travel");

1. Utilisation directe - script direct

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

  • Seule l'entrée spécifiée est supprimée. Les vêtements/armes ne peuvent pas être retirés.
UO.UnsetDress("travel");

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

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

  • Les noms voyage et bataille sont supprimés séparément. Le même nom d'un type d'ensemble différent est conservé.
return  RunScenario();
 object? RunScenario()
{
    UO.UnsetDress("travel");
    UO.UnsetDress("battle");
    return null;
}

3. Script d'assistance complet - Classe de script

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

  • CleanupSets est une procédure entièrement déclarée pour nettoyer deux noms propres. le préfixe génère des noms d'entrée, pas des chemins de fichiers.
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()
    {
        CleanupSets("mine_");
        return null;
    }

    void CleanupSets(dynamic prefix)
    {
        UO.UnsetDress(prefix + "travel");
        UO.UnsetDress(prefix + "battle");
    }
}

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.UnsetDress(name) — UO.UnsetDress(String)

Paramètres: name (String)

Résultat: void / Unit.

Pendant un appel:

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

public void UnsetDress(string name)

        {

            dressSets.Remove(name);

            SystemMessage("Dress set removed.");

        }

UO.UseOtherPaperdollScroll

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

Signatures C#

void UO.UseOtherPaperdollScroll(object? objID);

Utilise le serial spécifié via bridge.UseObject, ouvrant généralement la poupée de papier du personnage.

Paramètres

  • objID — Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir.

Valeur de retour

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

Comportement

  • ObjID fait référence au caractère, pas au bouton de défilement ID. L'appel ne lit pas la structure paperdoll et n'attend pas son ouverture.
  • Bridge envoie la requête sur le flux du jeu. Les règles du serveur s'appliquent ; Il n’y a pas d’attente de confirmation intégrée.

Scripts C# autonomes

Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.

Exemple simple

Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.

La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.

UO.Print("Calling UO.UseOtherPaperdollScroll");
UO.UseOtherPaperdollScroll(UO.GetSerial("lasttarget"));

1. Appel direct - script direct

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

  • Utilise le serial spécifié via bridge.UseObject, ouvrant généralement la poupée de papier du personnage.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.UseOtherPaperdollScroll(id);
}

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

2. Option explicite - fonction de script

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

  • ObjID fait référence au caractère, pas au bouton de défilement ID. L'appel ne lit pas la structure paperdoll et n'attend pas son ouverture.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.UseOtherPaperdollScroll(id);
    }

    return null;
}

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

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

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

  • Bridge envoie la requête sur le flux du jeu. Les règles du serveur s'appliquent ; Il n’y a pas d’attente de confirmation intégrée.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.UseOtherPaperdollScroll(id);
        }
    }

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

Implémentation de la commande

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

UO.UseOtherPaperdollScroll(objID) — UO.UseOtherPaperdollScroll(Any)

Paramètres: objID (Any)

Résultat: void / Unit.

Pendant un appel:

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

case "useotherpaperdollscroll": bridge.UseObject(Arg(0)); return InjectionValue.Unit;

UO.UseSelfPaperdollScroll

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

Signatures C#

void UO.UseSelfPaperdollScroll();

Utilise le personnage actuel, ouvrant généralement une paperdoll.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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

Comportement

  • ExecuteClientApiCompatibility appelle bridge.UseObject(bridge.Self). Il n'y a pas de lecture ou de clic séparé sur l'élément paperdoll ; c'est la requête normale UseObject pour self.
  • Dans les exemples, UO.Wait spécifie uniquement une pause de script ; la fin de la pause ne prouve pas que le serveur a complété la requête.

Scripts C# autonomes

Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.

Exemple simple

Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.

La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.

UO.Print("Calling UO.UseSelfPaperdollScroll");
UO.UseSelfPaperdollScroll();

1. Appel direct - script direct

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

  • Utilise le personnage actuel, ouvrant généralement une paperdoll.
UO.UseSelfPaperdollScroll();

2. Option explicite - fonction de script

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

  • ExecuteClientApiCompatibility appelle bridge.UseObject(bridge.Self). Il n'y a pas de lecture ou de clic séparé sur l'élément paperdoll ; c'est la requête normale UseObject pour self.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Self() != 0))
    {
        UO.UseSelfPaperdollScroll();
    }

    return null;
}

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

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

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

  • Dans les exemples, UO.Wait spécifie uniquement une pause de script ; la fin de la pause ne prouve pas que le serveur a complété la requête.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.UseSelfPaperdollScroll();
        UO.Wait(500);
        UO.Print(UO.Name());
        return null;
    }
}

Implémentation de la commande

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

UO.UseSelfPaperdollScroll() — UO.UseSelfPaperdollScroll()

Paramètres: Aucun paramètre.

Résultat: void / Unit.

Pendant un appel:

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

case "useselfpaperdollscroll": bridge.UseObject(bridge.Self); return InjectionValue.Unit;

UO.WearItem

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

Signatures C#

dynamic UO.WearItem(object? layer, object? objID);

Équipe l'élément sélectionné sur la couche numérique de votre personnage.

Paramètres

  • layer - Numéro de couche, par exemple 1 - main droite, 2 - gauche. Equip et Unequip acceptent également un nom de calque, tel que "Rhand". WearItem utilise une couche numérique. La couche doit correspondre à la couche portable de l'article ; ce n'est ni graphic ni ID.
  • objID - ID de l'élément spécifique chargé : entier, chaîne hexadécimale, "lasttarget" ou nom AddObject. Ce n'est pas type. Exemple avec 0x0F5E recherchant d'abord l'épée de ce graphic et l'obtenant par ID.

Valeur de retour

Flag numérique int : 1 (condition remplie) - opération locale acceptée, 0 (condition non remplie) - refus. Ceci n'est pas une confirmation du serveur, ni ID, ni une quantité. Le serveur peut échouer plus tard ; vérifiez l'équipement réel après avoir répondu.

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

  • Besoin d'éléments chargés et de glisser à main levée. Une fois retiré, le sac à dos lui-même self est requis : le sac à dos de rechange GrabBag n'est pas utilisé. Les articles inconnus, détruits et inadaptés sont rejetés. Les éléments d'autres personnes ne peuvent pas être supprimés via UnequipItems. Un ensemble n'est pas une transaction atomique.
  • EquipItems/UnequipItems applique DressSpeed après l'opération acceptée avant l'élément suivant ; Disarm/Undress - après chaque couche occupée. Le retrait respecte en outre DropDelay lorsque le carry est accepté. Les mêmes paramètres des autres environnements d'exécution ne changent pas ; l'accélération ne remplace pas les limitations du serveur.
  • Un formulaire d'appel incorrect, un nom de couche inconnu ou une valeur qui n'est pas convertible en nombre peuvent provoquer une erreur de script au lieu de 0. L'instantané de l'équipement contient uniquement des données déjà chargées. Dans l'assistant, ChangeAndConfirm layer=1 est la main droite : autre chose, passer son vrai layer.
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

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.

int item = UO.LastTarget();
if (item != 0)
    UO.Print("Accepted flag: " + Convert.ToString(UO.WearItem(1, item)));

1. WearItem - Un élément ou un calque sélectionné - script direct

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

  • Tout d'abord, sélectionnez l'élément approprié dans le jeu : lasttarget - son ID. Dans l'exemple Equip/WearItem, la couche 1 nécessite une arme secondaire. Unequip(1) retire la main droite ; Disarm/Undress fonctionnent avec leurs propres calques fixes. Il n'y a pas de replay automatique après un refus.
var item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
    return 0;
}
return UO.WearItem(1, item);

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;

2. WearItem - Deux éléments et enregistrés ID - fonction de script

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

  • Pour équiper, 0x0F5E est un exemple d'épée, 0x1B76 est un exemple de bouclier. FindType les recherche parmi les éléments chargés du sac à dos, ASC convertit l'hex-ID renvoyé. Pour la suppression, les propres couches actuelles sont lues. Si l'élément requis n'est pas disponible, le script se termine. Le tableau stocke deux ID ; Chaque élément est transféré entièrement.
return  RunScenario();
 object? RunScenario()
{
    var first = Asc(UO.FindType(0x0F5E, -1, "backpack"), 0);
    var second = Asc(UO.FindType(0x1B76, -1, "backpack"), 0);
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    var firstOk = UO.WearItem(1, first);
    var secondOk = UO.WearItem(2, second);
    return firstOk != 0 && secondOk != 0;
    return null;
}

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

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

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

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

  • ChangeAndConfirm exécute la commande une fois. Vérifie ensuite l'état réel jusqu'à 20 fois avec une pause de 100 ms. 1 - le contrôle a vu l'état attendu, 0 - échec ou attente expirée. C'est le résultat de notre assistant, pas une nouvelle commande intégrée. L’appel de l’opération elle-même peut également prendre du temps.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var item = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(item == 0))
        {
            return 0;
        }

        return ChangeAndConfirm(1, item);
        return null;
    }

    dynamic ChangeAndConfirm(dynamic layer, dynamic item)
    {
        if (Truth(item == 0))
        {
            return 0;
        }

        if (!(Truth(UO.WearItem(layer, item))))
        {
            return 0;
        }

        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == item))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

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

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.WearItem(layer, objID) — UO.WearItem(Any,Any)

Paramètres: layer (Any), objID (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "wearitem": return new InjectionValue(bridge.Equip(Arg(0), Arg(1)));

UO.Weight

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

Signatures C#

int UO.Weight();

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

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int — poids actuel 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.Weight 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.
  • Weight lit le poids total rapporté par le serveur en pierres. Les poids du corps, de l'équipement et des sacs fermés inclus dans le montant sont déterminés par les règles du tesson. L'équipe ne parcourt pas les conteneurs, n'additionne pas le poids des articles et ne met pas à jour les sacs fermés. Il ne s'agit pas de la propriété Weight d'un élément individuel, ni du nombre d'éléments.
  • 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.Weight();
UO.Print("Weight: " + 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.Weight();
UO.Print("Weight: " + 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.Weight();
    await Delay(500);
    var after = UO.Weight();
    var difference = after - before;
    UO.Print("Counter change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

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

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

  • CanCarry(extra) obtient un poids supplémentaire en pierres ; 10 est un exemple, pas le nombre de piles. Rejette les extras négatifs, aucun joueur ou maximum <= 0, lit le poids et la limite actuels, puis renvoie bool : true ou false par extra <= maximum - courant. La soustraction évite le débordement de courant + supplémentaire. En cas de surcharge, le résultat est false même pour extra=0. Il s'agit d'une évaluation locale, pas d'une résolution de serveur ; les lectures ne sont pas atomiques et le poids nul peut être inconnu.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(CanCarry(10)) == true))
        {
            UO.Print("Local check passed");
        }
        else
        {
            UO.Print("Local check failed or data unavailable");
        }

        return null;
    }

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

        var current = UO.Weight();
        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0))
        {
            return false;
        }

        return extra <= maximum - current;
    }

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

Implémentation de la commande

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

UO.Weight() — UO.Weight()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

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

case "weight": return new InjectionValue(bridge.Weight);
⚠️ **GitHub.com Fallback** ⚠️