Skip to content

FR UO Topic character

Codex edited this page Oct 12, 2026 · 5 revisions

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

Personnage

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

L'état de votre personnage, ses caractéristiques, ses résistances et son équipement. Pour une entité spécifique, utilisez une surcharge avec serial si elle est dans la carte de commande.

Sections

Sujet Commandes et explications
Identity UO.Self · UO.GetSerial · UO.GetName · UO.GetTitle · UO.GetSex · UO.GetRace
Stats UO.HP · UO.MaxHP · UO.Mana · UO.MaxMana · UO.Stamina · UO.MaxStamina · UO.Str · UO.Dex · UO.Int · UO.Weight · UO.MaxWeight · UO.Luck · UO.GetStatLockState · UO.SetStatLockState
Status UO.Alive · UO.Dead · UO.Hidden · UO.Poisoned · UO.Frozen · UO.Paralyzed · UO.Flying · UO.WarMode · UO.IsYellowHits
Resists UO.PhysicalResist · UO.GetPhysicalResist · UO.ResistPhysical · UO.GetResistPhysical · UO.FireResist · UO.GetFireResist · UO.ResistFire · UO.GetResistFire · UO.ColdResist · UO.GetColdResist · UO.ResistCold · UO.GetResistCold · UO.PoisonResist · UO.GetPoisonResist · UO.ResistPoison · UO.GetResistPoison · UO.EnergyResist · UO.GetEnergyResist · UO.ResistEnergy · UO.GetResistEnergy · UO.GetResist
Calques de caractères UO.ObjAtLayer · UO.ObjAtLayerEx · UO.GetLayer · UO.GetEquipment
Equipment UO.GetEquipment · UO.EquipItems · UO.UnequipItems · UO.WearItem
Dress / Undress UO.SetDress · UO.Dress · UO.Undress · UO.DressSavedSet
Arm / Disarm UO.SetArm · UO.Arm · UO.Disarm
Mount / Dismount UO.Mount · UO.Dismount
Paperdoll UO.UseSelfPaperdollScroll · UO.UseOtherPaperdollScroll

Toutes les commandes du thème

Identité

UO.Self · UO.CharacterTitle · UO.CharName · UO.CharTitle · UO.GetRace · UO.GetSex · UO.Race · UO.Sex · UO.IsFemale · UO.GetTitle

Statistiques

UO.Armor · UO.GetArmor · UO.HP · UO.GetHP · UO.Life · UO.GetLife · UO.MaxHP · UO.GetMaxHP · UO.MaxLife · UO.GetMaxLife · UO.Mana · UO.GetMana · UO.MaxMana · UO.GetMaxMana · UO.Stam · UO.GetStam · UO.Stamina · UO.GetStamina · UO.MaxStam · UO.GetMaxStam · UO.MaxStamina · UO.GetMaxStamina · UO.Str · UO.GetStr · UO.Strength · UO.GetStrength · UO.Dex · UO.GetDex · UO.Dexterity · UO.GetDexterity · UO.Int · UO.GetInt · UO.Intelligence · UO.GetIntelligence · UO.Weight · UO.GetWeight · UO.MaxWeight · UO.GetMaxWeight · UO.Luck · UO.GetLuck · UO.Gold · UO.GetGold · UO.GetStatLockState · UO.SetStatLockState · UO.SetStatState · UO.RequestStats · UO.GetStatus · UO.GetPlayerStatusText · UO.LastStatus · UO.LastStatusX · UO.LastStatusY · UO.GetARStatus · UO.SetARStatus · UO.SetARExtParams

Statut

UO.Alive · UO.GetAlive · UO.IsAlive · UO.Dead · UO.GetDead · UO.IsDead · UO.Hidden · UO.GetHidden · UO.IsHidden · UO.Poison · UO.Poisoned · UO.GetPoisoned · UO.IsPoisoned · UO.Frozen · UO.GetFrozen · UO.IsFrozen · UO.Paralyzed · UO.GetParalisa · UO.GetParalysed · UO.GetParalyzed · UO.IsParalysed · UO.IsParalyzed · UO.Flying · UO.GetFlying · UO.IsFlying · UO.ToggleFly · UO.GetYellowBar · UO.IsYellowHits · UO.TicksDead

Résiste

UO.PhysicalResist · UO.GetPhysicalResist · UO.ResistPhysical · UO.GetResistPhysical · UO.FireResist · UO.GetFireResist · UO.ResistFire · UO.GetResistFire · UO.ColdResist · UO.GetColdResist · UO.ResistCold · UO.GetResistCold · UO.PoisonResist · UO.GetPoisonResist · UO.ResistPoison · UO.GetResistPoison · UO.EnergyResist · UO.GetEnergyResist · UO.ResistEnergy · UO.GetResistEnergy · UO.GetResist

Équipement

UO.GetEquipment · UO.ObjAtLayer · UO.ObjAtLayerEx · UO.Equip · UO.EquipT · UO.EquipItems · UO.Unequip · UO.UnequipItems · UO.WearItem · UO.EquipLastWeapon · UO.RemoveEarrings · UO.RemoveHat · UO.RemoveNeckless · UO.RemoveRing

Dress / Undress

UO.Dress · UO.Undress · UO.SetDress · UO.UnsetDress · UO.DressSavedSet · UO.EquipDressSet · UO.DressSpeed · UO.SetDressSpeed

Arm / Disarm

UO.Arm · UO.Disarm · UO.SetArm · UO.UnsetArm

Mount / Dismount

UO.Mount · UO.Dismount

Poupée de papier

UO.UseSelfPaperdollScroll · UO.UseOtherPaperdollScroll

Calques de caractères

Tous les calques : objectif, significations et exemples. Le numéro de couche, serial de l'élément équipé et son graphic sont des valeurs différentes.

Exemples sur le sujet

Chaque carte de commande possède plusieurs scénarios indépendants : code direct, fonctions et classes. Vous trouverez ci-dessous une sélection de courts scénarios ; des restrictions et une analyse complète sont à prévoir.

UO.HP

Paramètres, résultat et tous les scénarios

var value = UO.HP();
UO.Print("HP: " + Convert.ToString(value));

UO.ObjAtLayer

Paramètres, résultat et tous les scénarios

object? hand = UO.ObjAtLayer("Rhand");
if (hand is string serial)
{
    UO.Print("Right hand serial: " + serial);
}
else
{
    UO.Print("Right hand is empty or unavailable");
}

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

Parties de la référence

1 · 2 · 3 · 4 · 5

Référence complète des commandes


UO.Alive

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

Signatures C#

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

Vérifie la présence d'un objet sans signe de mort.

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

Indicateur 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 - le serial positif existe et n'est pas marqué comme mort. Le fameux item donne aussi 1 : ce n'est pas le filtre mobile. Un objet mort/manquant donne 0.

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

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 => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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.Alive(value) — UO.Alive(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 => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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

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

Signatures C#

void UO.Arm(object? name);

Restaure un ensemble nommé d'armes et de boucliers précédemment enregistré.

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.
  • Une correspondance exacte entre le ID actuel et enregistré est ignorée, sans être à nouveau utilisée/relancée. Un élément manquant n'est pas remplacé par un type similaire. L'échec d'une opération n'annule pas celles qui ont réussi et n'interfère pas avec les tentatives des autres ; Il n'y a pas de restauration automatique. Besoin d'une connexion et de trucs chargés. Une fois retiré, un véritable sac à dos est utilisé.
  • UO.Set("equipfordress", 0) sélectionne la demande d'utilisation de l'élément (mode initial) ; valeur non nulle - ramassage/équipement. La couche portable souhaitée est vérifiée dans les deux modes. Un article déjà porté ne peut pas être remplacé par un usage répété. DressSpeed est valable après la demande acceptée, le retrait respecte en outre DropDelay.
  • Dress et Arm renvoient void même en cas d'échec. Le message indiquant que les demandes ont été acceptées ne signifie pas une confirmation par le serveur. Pour une continuation en fonction de l'enfilage, vérifiez les couches réelles avec des attentes limitées.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

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.Arm");
UO.Arm("battle");

1. Utilisation directe - script direct

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

  • L'ensemble requis doit être enregistré au préalable dans le même état d'exécution. N'appelez pas SetDress/SetArm juste avant chaque restauration : cela écrasera la cible avec les éléments actuels.
UO.Arm("battle");

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

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

  • Une adresse d'équipement non nulle sélectionne le ramassage/l'équipement ; 350 — millisecondes DressSpeed. Ces paramètres restent au moment de l'exécution après l'exemple. Le retrait et l'enfilage sont décidés par le serveur.
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    UO.Arm("battle");
    return null;
}

3. Script d'assistance complet - Classe de script

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

  • lasttarget — ID éléments qui doivent être inclus dans un ensemble précédemment enregistré. La couche de contrôle 3 signifie chaussures, 1 signifie main droite. AwaitSlot effectue des vérifications jusqu'à 20 avec une pause ms de 100 et ne répète pas la commande. Cela confirme uniquement l'élément sélectionné, pas l'ensemble de l'ensemble.
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

        UO.Arm("battle");
        return AwaitSlot(1, expected);
        return null;
    }

    dynamic AwaitSlot(dynamic layer, dynamic expected)
    {
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
            {
                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.Arm(name) — UO.Arm(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 Arm(string name)

            => Equip(name, armSets, weaponLayers, "Weapon set requests processed.", "No weapons set with setarm.");

UO.Armor

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

Signatures C#

int UO.Armor();

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

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 "armor": return new InjectionValue(bridge.Armor);

UO.CharName

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

Signatures C#

dynamic UO.CharName();

Lit le nom du personnage.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

string est un nom connu du client. Une chaîne vide signifie une valeur vide/inconnue ou aucun objet. Ce n'est pas serial ou un chemin de profil. Le nom/titre du jeu n'est pas traduit par la langue IDE.

Comportement

  • Les données locales déjà reçues sont lues. La requête n'ouvre pas le statut et n'oblige pas le serveur à envoyer une mise à jour. Après un décès, une transition de map ou une suppression d'objet, les valeurs peuvent changer entre deux appels.
  • C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

Scripts C# autonomes

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

Exemple simple

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

Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.

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

1. Afficher le texte après la connexion - script direct

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

  • Il n'y a pas de paramètres : self est lu.
  • La chaîne vide est gérée explicitement ; ce n'est pas le texte "0".
var text = UO.CharName();
if (Truth(text != ""))
{
    UO.Print(text);
}
else
{
    UO.Print("Text is unavailable");
}

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

2. Ajouter du texte au message du journal - fonction de script

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

  • Votre caractère est lu, la valeur est stockée sous forme de ligne.
  • L'opérateur + joint les chaînes ; Convert.ToString n'est pas nécessaire pour ce résultat.
return  RunScenario();
 object? RunScenario()
{
    var text = UO.CharName();
    UO.Print("Player имя: " + text);
    return null;
}

3. Comparer deux instantanés - classe de scénario

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

  • Les deux appels font référence à self ; UO.Wait définit la pause 1000 ms.
  • La différence peut signifier mettre à jour les données ou quitter le monde. L'exemple ne change ni le nom ni le titre.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previous = UO.CharName();
        await Delay(1000);
        var current = UO.CharName();
        if (Truth(previous != current))
        {
            UO.Print("Updated text: " + current);
        }

        return null;
    }

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

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

Paramètres: Aucun paramètre.

Résultat: dynamic / Any.

Pendant un appel:

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

case "getname":

                case "charname": return new InjectionValue(bridge.GetName(Arg(0, bridge.Self)));

UO.CharTitle

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

Signatures C#

dynamic UO.CharTitle();

Lit le titre du personnage.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

string est un titre connu du client. Une chaîne vide signifie une valeur vide/inconnue ou aucun objet. Ce n'est pas serial ou un chemin de profil. Le nom/titre du jeu n'est pas traduit par la langue IDE.

Comportement

  • Les données locales déjà reçues sont lues. La requête n'ouvre pas le statut et n'oblige pas le serveur à envoyer une mise à jour. Après un décès, une transition de map ou une suppression d'objet, les valeurs peuvent changer entre deux appels.
  • C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.

Scripts C# autonomes

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

Exemple simple

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

Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.

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

1. Afficher le texte après la connexion - script direct

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

  • Il n'y a pas de paramètres : self est lu.
  • La chaîne vide est gérée explicitement ; ce n'est pas le texte "0".
var text = UO.CharTitle();
if (Truth(text != ""))
{
    UO.Print(text);
}
else
{
    UO.Print("Text is unavailable");
}

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

2. Ajouter du texte au message du journal - fonction de script

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

  • Votre caractère est lu, la valeur est stockée sous forme de ligne.
  • L'opérateur + joint les chaînes ; Convert.ToString n'est pas nécessaire pour ce résultat.
return  RunScenario();
 object? RunScenario()
{
    var text = UO.CharTitle();
    UO.Print("Player титул: " + text);
    return null;
}

3. Comparer deux instantanés - classe de scénario

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

  • Les deux appels font référence à self ; UO.Wait définit la pause 1000 ms.
  • La différence peut signifier mettre à jour les données ou quitter le monde. L'exemple ne change ni le nom ni le titre.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previous = UO.CharTitle();
        await Delay(1000);
        var current = UO.CharTitle();
        if (Truth(previous != current))
        {
            UO.Print("Updated text: " + current);
        }

        return null;
    }

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

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

Paramètres: Aucun paramètre.

Résultat: dynamic / Any.

Pendant un appel:

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

case "chartitle": return new InjectionValue(bridge.CharacterTitle);

UO.CharacterTitle

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

Signatures C#

string UO.CharacterTitle();

Lit le titre du personnage.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

string est un titre connu du client. Une chaîne vide signifie une valeur vide/inconnue ou aucun objet. Ce n'est pas serial ou un chemin de profil. Le nom/titre du jeu n'est pas traduit par la langue IDE.

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

1. Afficher le texte après la connexion - script direct

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

  • Il n'y a pas de paramètres : self est lu.
  • La chaîne vide est gérée explicitement ; ce n'est pas le texte "0".
var text = UO.CharacterTitle();
if (Truth(text != ""))
{
    UO.Print(text);
}
else
{
    UO.Print("Text is unavailable");
}

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

2. Ajouter du texte au message du journal - fonction de script

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

  • Votre caractère est lu, la valeur est stockée sous forme de ligne.
  • L'opérateur + joint les chaînes ; Convert.ToString n'est pas nécessaire pour ce résultat.
return  RunScenario();
 object? RunScenario()
{
    var text = UO.CharacterTitle();
    UO.Print("Player титул: " + text);
    return null;
}

3. Comparer deux instantanés - classe de scénario

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

  • Les deux appels font référence à self ; UO.Wait définit la pause 1000 ms.
  • La différence peut signifier mettre à jour les données ou quitter le monde. L'exemple ne change ni le nom ni le titre.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previous = UO.CharacterTitle();
        await Delay(1000);
        var current = UO.CharacterTitle();
        if (Truth(previous != current))
        {
            UO.Print("Updated text: " + current);
        }

        return null;
    }

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

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

Paramètres: Aucun paramètre.

Résultat: string / String.

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

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


UO.ColdResist

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

Signatures C#

int UO.ColdResist();

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

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 "coldresist": return new InjectionValue(bridge.ColdResistance);

UO.Dead

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

Signatures C#

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

Vérifie la mort du personnage.

Paramètres

  • id — Objet facultatif sous les formes affichées : serial par numéro/chaîne hexadécimale, self, lasttarget ou nom enregistré AddObject. Ce n'est pas type. Sans argument, lisez self. Un texte inconnu dans certains formulaires provoque une erreur de conversion ; vérifiez le nom avant d'appeler.

Valeur de retour

Flag numérique int : 1 (condition remplie), 0 (condition non remplie). Il s'agit d'un indicateur numérique : dans C#, vérifiez le résultat != 0 ou le résultat == 0. La comparaison directe de int avec true/false et if (résultat) n'est pas autorisée. 1 - mobile a IsDead, 0 n'a aucun signe ou mobile est absent. HP=0 en soi ne signifie pas la mort.

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

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 Dead() => bridge.Dead();

UO.Dead(id) — UO.Dead(Any)

Paramètres: id (Any)

Résultat: int / Integer.

Pendant un appel:

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

public int Dead(InjectionValue id)

        {

            int serial = GetObject(id);

            if (serial == bridge.Self)

                return Dead();

            return serial > 0 ? bridge.IsDead(serial) : 0;

        }

UO.Dex

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

Signatures C#

int UO.Dex();

Lit l'agilité actuelle (Dexterity, DEX) 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.Dexterity 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.Dex(), UO.Dexterity(), UO.GetDex(), UO.GetDexterity().

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

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 "dex": return new InjectionValue(bridge.Dexterity);

UO.Dexterity

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

Signatures C#

int UO.Dexterity();

Lit l'agilité actuelle (Dexterity, DEX) 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.Dexterity 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.Dex(), UO.Dexterity(), UO.GetDex(), UO.GetDexterity().

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

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

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


UO.Disarm

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

Signatures C#

int UO.Disarm();

Supprime les armes et les boucliers des mains : couches 1 et 2. N'affecte pas les vêtements.

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

1. Disarm - 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.Disarm();

2. Disarm - 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);
    return UO.Disarm();
    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. Disarm - 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.Disarm())))
        {
            return 0;
        }

        dynamic[] layers = new dynamic[checked((int)(1) + 1)];
        layers[0] = 1;
        layers[1] = 2;
        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.Disarm() — UO.Disarm()

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

            => Unequip(weaponLayers, "Weapons disarmed.");

UO.Dismount

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

Signatures C#

void UO.Dismount();

Demande le démontage si le personnage est actuellement monté.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne distincte, ne comparez pas le résultat avec 1/true. Vérifiez la couche 25 après que le serveur ait répondu.

Comportement

  • La commande envoie une requête pour utiliser l'objet de protocole UO (0x06), sans émulation de souris. Il contourne le gestionnaire de double-clic commun de l'interface : en mode guerre, la requête n'est pas remplacée par une attaque.
  • L'état du support est lu à partir de la couche 25. Cela change après les données du serveur ; le retour du commandement ne confirme pas l'achèvement de l'atterrissage/débarquement.
  • Les demandes de montage/démontage répétées sont temporairement fusionnées : aucune nouvelle demande n'est envoyée jusqu'à ce qu'un changement de couche, un changement de personnage ou 5 secondes se soient écoulés. Cela protège contre la duplication entre les scripts.
  • Si le personnage est absent, hors jeu ou pour un personnage mort, la requête n'est pas envoyée. Les règles finales concernant la propriété, la disponibilité et les sièges sont déterminées par le serveur.
  • Si le calque 25 est vide, il n'y a pas d'invite et paperdoll ne s'ouvre pas. Un objet bateau de service avec graphic 0x3E96 ne compte pas comme une monture normale pour cette équipe.
  • UO.Exec("dismount") appelle le même gestionnaire et utilise la même protection contre la relecture. Vous ne pouvez pas passer de paramètres dans la ligne de démontage : un argument supplémentaire provoque une erreur et n'envoie pas 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.Dismount");
UO.Dismount();

1. Demander le démontage - script direct

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

  • Il n'y a pas de paramètres. Il n'y a pas non plus de valeur de retour.
UO.Dismount();

2. Vérifier la présence d'un élément monté avant la demande - fonction de script

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

  • monté - ID de l'élément de couche, pas la cible pour appeler à nouveau Mount. Dismount ne prend aucun argument.
return  RunScenario();
 object? RunScenario()
{
    var ridden = UO.ObjAtLayer(25);
    if (Truth(ridden == 0))
    {
        UO.Print("No loaded mount layer");
        return null;
    }

    UO.Print("Mounted item ID: " + Convert.ToString(ridden));
    UO.Dismount();
    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'attente de couche vide complète - Classe de script

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

  • Helper renvoie true si le calque est déjà vide ou est devenu vide dans les délais attendus. Il n’envoie pas plus d’une demande.
  • Il s'agit d'une vérification de l'état du client après la réponse du serveur, et non de la valeur de retour de UO.Dismount.
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 dismounted = await TryDismount();
        UO.Print("Mount layer empty: " + Convert.ToString(dismounted));
        return null;
    }

    async Task<dynamic> TryDismount()
    {
        if (Truth(UO.ObjAtLayer(25) == 0))
        {
            return true;
        }

        UO.Dismount();
        var attempts = 0;
        while (Truth(attempts < 20))
        {
            if (Truth(UO.ObjAtLayer(25) == 0))
            {
                return true;
            }

            await Delay(50);
            attempts = attempts + 1;
        }

        return false;
    }

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

Implémentation de la commande

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

UO.Dismount() — UO.Dismount()

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 "dismount": bridge.Dismount(); break;

UO.Dress

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

Signatures C#

void UO.Dress(object? name);

Restaure un ensemble de vêtements nommé précédemment enregistré.

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.
  • Une correspondance exacte entre le ID actuel et enregistré est ignorée, sans être à nouveau utilisée/relancée. Un élément manquant n'est pas remplacé par un type similaire. L'échec d'une opération n'annule pas celles qui ont réussi et n'interfère pas avec les tentatives des autres ; Il n'y a pas de restauration automatique. Besoin d'une connexion et de trucs chargés. Une fois retiré, un véritable sac à dos est utilisé.
  • UO.Set("equipfordress", 0) sélectionne la demande d'utilisation de l'élément (mode initial) ; valeur non nulle - ramassage/équipement. La couche portable souhaitée est vérifiée dans les deux modes. Un article déjà porté ne peut pas être remplacé par un usage répété. DressSpeed est valable après la demande acceptée, le retrait respecte en outre DropDelay.
  • Dress et Arm renvoient void même en cas d'échec. Le message indiquant que les demandes ont été acceptées ne signifie pas une confirmation par le serveur. Pour une continuation en fonction de l'enfilage, vérifiez les couches réelles avec des attentes limitées.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

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.Dress");
UO.Dress("travel");

1. Utilisation directe - script direct

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

  • L'ensemble requis doit être enregistré au préalable dans le même état d'exécution. N'appelez pas SetDress/SetArm juste avant chaque restauration : cela écrasera la cible avec les éléments actuels.
UO.Dress("travel");

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

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

  • Une adresse d'équipement non nulle sélectionne le ramassage/l'équipement ; 350 — millisecondes DressSpeed. Ces paramètres restent au moment de l'exécution après l'exemple. Le retrait et l'enfilage sont décidés par le serveur.
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    UO.Dress("travel");
    return null;
}

3. Script d'assistance complet - Classe de script

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

  • lasttarget — ID éléments qui doivent être inclus dans un ensemble précédemment enregistré. La couche de contrôle 3 signifie chaussures, 1 signifie main droite. AwaitSlot effectue des vérifications jusqu'à 20 avec une pause ms de 100 et ne répète pas la commande. Cela confirme uniquement l'élément sélectionné, pas l'ensemble de l'ensemble.
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

        UO.Dress("travel");
        return AwaitSlot(3, expected);
        return null;
    }

    dynamic AwaitSlot(dynamic layer, dynamic expected)
    {
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
            {
                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.Dress(name) — UO.Dress(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 Dress(string name)

            => Equip(name, dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress.");

UO.DressSavedSet

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

Signatures C#

dynamic UO.DressSavedSet();

Restaure un ensemble de vêtements enregistré en appelant UO.SetDress() sans nom.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

En fait, drapeau numérique int : 1 (condition remplie) - toutes les demandes nécessaires sont acceptées localement ou les couches nécessaires correspondent déjà ; 0 (condition non remplie) - aucune numérotation, aucune connexion ou au moins une demande a été rejetée. Inscription object ? permet cela int. Il ne s'agit pas de ID, du nombre d'articles portés ou de la confirmation du serveur.

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

  • 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.
  • Une correspondance exacte entre le ID actuel et enregistré est ignorée, sans être à nouveau utilisée/relancée. Un élément manquant n'est pas remplacé par un type similaire. L'échec d'une opération n'annule pas celles qui ont réussi et n'interfère pas avec les tentatives des autres ; Il n'y a pas de restauration automatique. Besoin d'une connexion et de trucs chargés. Une fois retiré, un véritable sac à dos est utilisé.
  • UO.Set("equipfordress", 0) sélectionne la demande d'utilisation de l'élément (mode initial) ; valeur non nulle - ramassage/équipement. La couche portable souhaitée est vérifiée dans les deux modes. Un article déjà porté ne peut pas être remplacé par un usage répété. DressSpeed est valable après la demande acceptée, le retrait respecte en outre DropDelay.
  • Dress et Arm renvoient null même en cas d'échec. Le message indiquant que les demandes ont été acceptées ne signifie pas une confirmation par le serveur. Pour une continuation en fonction de l'enfilage, vérifiez les couches réelles avec des attentes limitées.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

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

1. Utilisation directe - script direct

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

  • L'ensemble requis doit être enregistré au préalable dans le même état d'exécution. N'appelez pas SetDress/SetArm juste avant chaque restauration : cela écrasera la cible avec les éléments actuels.
return UO.DressSavedSet();

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

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

  • Une adresse d'équipement non nulle sélectionne le ramassage/l'équipement ; 350 — millisecondes DressSpeed. Ces paramètres restent au moment de l'exécution après l'exemple. Le retrait et l'enfilage sont décidés par le serveur.
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    return UO.DressSavedSet();
    return null;
}

3. Script d'assistance complet - Classe de script

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

  • lasttarget — ID éléments qui doivent être inclus dans un ensemble précédemment enregistré. La couche de contrôle 3 signifie chaussures, 1 signifie main droite. AwaitSlot effectue des vérifications jusqu'à 20 avec une pause ms de 100 et ne répète pas la commande. Cela confirme uniquement l'élément sélectionné, pas l'ensemble de l'ensemble.
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

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

        return AwaitSlot(3, expected);
        return null;
    }

    dynamic AwaitSlot(dynamic layer, dynamic expected)
    {
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
            {
                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.DressSavedSet() — UO.DressSavedSet()

Paramètres: Aucun paramètre.

Résultat: dynamic / Any.

Pendant un appel:

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

case "dresssavedset":

                case "equipdressset": return new InjectionValue(Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress."));

UO.DressSpeed

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

Signatures C#

dynamic UO.DressSpeed();
dynamic UO.DressSpeed(object? value);

Lit ou définit la pause entre les opérations d'habillage/déshabillage dans l'exécution en cours. Permet d'éviter d'envoyer une série d'actions trop rapidement pour les règles du serveur.

Paramètres

  • value - Millisecondes facultatives. Sans argument - lecture ; avec argument, la valeur est limitée à 10..10000. La valeur initiale du temps d'exécution peut être 0 si le délai n'a pas encore été spécifié ; Vous ne pouvez pas écrire 0 en utilisant cette commande.

Valeur de retour

Sans argument : int, millisecondes actuelles. Avec argument : null, pas de valeur de retour ; puis lisez UO.DressSpeed() séparément. Ce n'est pas bool.

Comportement

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

1. DressSpeed - 1 - script direct

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

  • Lisez la pause en cours et sélectionnez le minimum pour la prochaine série ; 0 signifie un délai qui n'a pas encore été spécifié.
var delay = UO.DressSpeed();
if (Truth(delay < 350))
{
    UO.DressSpeed(350);
}
return UO.DressSpeed();

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

2. DressSpeed — 2 — fonction de script

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

  • Réglez 350 ms et vérifiez la valeur stockée séparément. Vous ne pouvez pas affecter le résultat d'un setter à une variable : setter renvoie Unit.
return  RunScenario();
 object? RunScenario()
{
    UO.DressSpeed(350);
    return UO.DressSpeed();
    return null;
}

3. DressSpeed - 3 - classe de scénario

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

  • ConfigureDressDelay accepte le paramètre de script. 15000 est limité à 10000 ms ; L'assistant renvoie les millisecondes réellement enregistrées.
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 ConfigureDressDelay(15000);
        return null;
    }

    dynamic ConfigureDressDelay(dynamic requested)
    {
        UO.DressSpeed(requested);
        return UO.DressSpeed();
    }
}

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

Paramètres: Aucun paramètre.

Résultat: dynamic / Any.

Pendant un appel:

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

case "dressspeed":

                    if (arguments.Length > 0) { SetDressSpeed(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(state.DressSpeed);

UO.DressSpeed(value) — UO.DressSpeed(Any)

Paramètres: value (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "dressspeed":

                    if (arguments.Length > 0) { SetDressSpeed(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(state.DressSpeed);

UO.EnergyResist

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

Signatures C#

int UO.EnergyResist();

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

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 "energyresist": return new InjectionValue(bridge.EnergyResistance);

UO.Equip

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

Signatures C#

int UO.Equip(object? layer, object? id);

Équipe l'élément sélectionné au calque spécifié 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.
  • id - 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: " + UO.Equip(1, item));

1. Equip - 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.Equip(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. Equip - 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.Equip(1, first);
    var secondOk = UO.Equip(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. Equip - 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.Equip(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.Equip(layer, id) — UO.Equip(Any,Any)

Paramètres: layer (Any/String), 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 "equip":

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

UO.Equip(layer, id) — UO.Equip(String,Integer)

Paramètres: layer (Any/String), 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 Equip(string layer, int id) => bridge.Equip(ConvertLayer(layer), id);

UO.Equip(layer, id) — UO.Equip(String,String)

Paramètres: layer (Any/String), 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 Equip(string layer, string id) => Equip(layer, GetObject(id));

UO.EquipDressSet

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

Signatures C#

dynamic UO.EquipDressSet();

Autre nom DressSavedSet : restaure le même ensemble de vêtements sans nom.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

En fait, drapeau numérique int : 1 (condition remplie) - toutes les demandes nécessaires sont acceptées localement ou les couches nécessaires correspondent déjà ; 0 (condition non remplie) - aucune numérotation, aucune connexion ou au moins une demande a été rejetée. Inscription object ? permet cela int. Il ne s'agit pas de ID, du nombre d'articles portés ou de la confirmation du serveur.

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

  • 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.
  • Une correspondance exacte entre le ID actuel et enregistré est ignorée, sans être à nouveau utilisée/relancée. Un élément manquant n'est pas remplacé par un type similaire. L'échec d'une opération n'annule pas celles qui ont réussi et n'interfère pas avec les tentatives des autres ; Il n'y a pas de restauration automatique. Besoin d'une connexion et de trucs chargés. Une fois retiré, un véritable sac à dos est utilisé.
  • UO.Set("equipfordress", 0) sélectionne la demande d'utilisation de l'élément (mode initial) ; valeur non nulle - ramassage/équipement. La couche portable souhaitée est vérifiée dans les deux modes. Un article déjà porté ne peut pas être remplacé par un usage répété. DressSpeed est valable après la demande acceptée, le retrait respecte en outre DropDelay.
  • Dress et Arm renvoient null même en cas d'échec. Le message indiquant que les demandes ont été acceptées ne signifie pas une confirmation par le serveur. Pour une continuation en fonction de l'enfilage, vérifiez les couches réelles avec des attentes limitées.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

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

1. Utilisation directe - script direct

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

  • L'ensemble requis doit être enregistré au préalable dans le même état d'exécution. N'appelez pas SetDress/SetArm juste avant chaque restauration : cela écrasera la cible avec les éléments actuels.
return UO.EquipDressSet();

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

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

  • Une adresse d'équipement non nulle sélectionne le ramassage/l'équipement ; 350 — millisecondes DressSpeed. Ces paramètres restent au moment de l'exécution après l'exemple. Le retrait et l'enfilage sont décidés par le serveur.
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    return UO.EquipDressSet();
    return null;
}

3. Script d'assistance complet - Classe de script

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

  • lasttarget — ID éléments qui doivent être inclus dans un ensemble précédemment enregistré. La couche de contrôle 3 signifie chaussures, 1 signifie main droite. AwaitSlot effectue des vérifications jusqu'à 20 avec une pause ms de 100 et ne répète pas la commande. Cela confirme uniquement l'élément sélectionné, pas l'ensemble de l'ensemble.
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

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

        return AwaitSlot(3, expected);
        return null;
    }

    dynamic AwaitSlot(dynamic layer, dynamic expected)
    {
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
            {
                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.EquipDressSet() — UO.EquipDressSet()

Paramètres: Aucun paramètre.

Résultat: dynamic / Any.

Pendant un appel:

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

case "dresssavedset":

                case "equipdressset": return new InjectionValue(Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress."));

UO.EquipItems

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

Signatures C#

dynamic UO.EquipItems(object? items);

Équipez-vous d'un objet ou d'un ensemble d'objets. La couche de chaque article est déterminée par ses données portables, de sorte que l'article peut être enfilé à partir d'un sac à dos.

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

1. EquipItems - 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.EquipItems(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. EquipItems - 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);
    dynamic[] items = new dynamic[checked((int)(1) + 1)];
    items[0] = first;
    items[1] = second;
    return UO.EquipItems(items);
    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. EquipItems - 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.EquipItems(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.EquipItems(items) — UO.EquipItems(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 "equipitems":

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

UO.EquipLastWeapon

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

Signatures C#

void UO.EquipLastWeapon();

Demande le rééquipement des derniers éléments enregistrés de droite et de gauche.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour.

Comportement

  • Bridge stocke _lastRightHand et _lastLeftHand. Une droite non nulle serial est transmise Equip(OneHanded), une gauche non nulle - Equip(TwoHanded). Les entrées vides sont ignorées. Ce sont deux requêtes possibles, et non une récupération atomique confirmée par le serveur.

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Restaurer l'arme - script direct

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

  • Seules les mains de pont serial enregistrées sont utilisées.
UO.EquipLastWeapon();

2. S'il y a une connexion - fonction de script

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

  • Les tests de connexion sont effectués avant l'envoi des demandes.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Connected()))
    {
        UO.EquipLastWeapon();
    }

    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. Procédure de récupération - Classe de script

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

  • Un assistant entièrement déclaré provoque la restauration d’une paire de mains.
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()
    {
        RestoreWeapons();
        return null;
    }

    void RestoreWeapons()
    {
        UO.EquipLastWeapon();
    }
}

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

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 "equiplastweapon": bridge.EquipLastWeapon(); return InjectionValue.Unit;

UO.EquipT

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

Signatures C#

void UO.EquipT(object? layer, object? @type);

Paramètres

  • layer — Couche d'équipement. La ligne « Rhand » est la main droite (1), « Lhand » est la main gauche (2) ; un nombre numérique est également acceptable. Tous les noms reconnus sont répertoriés dans le tableau des couches. La chaîne "1" ne remplace pas le nombre 1 : un nom de chaîne inconnu provoque une erreur. Sélectionnez la couche réelle de l'objet lui-même : la commande ne modifie pas son emplacement valide.
  • type - Un objet graphic, par exemple 0x0F51 - un poignard. Ce n'est pas serial d'une chose particulière ni graphic d'un corps mobile. Un nombre ou une chaîne hexadécimale numérique. La couleur n'est pas spécifiée : tout hue est recherché ; la recherche inclut de manière récursive les sous-conteneurs chargés du sac à dos. -1/0xFFFF car les recherches par caractères génériques sont ici pratiquement inutiles pour choisir les armes : la première chose qui ne correspond peut-être pas à la couche sera prise.

Valeur de retour

void : Ce formulaire C# ne renvoie pas de valeur. N'attribuez pas son appel à une variable et ne l'utilisez pas dans if. Pour tester l'acceptation d'une requête avec deux arguments entiers, utilisez UO.Equipt. Dans les deux cas, vérifiez l'équipement réel après que le serveur ait répondu via ObjAtLayer et GetType.

Comportement

  • Les deux arguments sont requis. D'abord FindType recherche un article dans le sac à dos, puis Equip vérifie son adéquation. La recherche met à jour les résultats globaux FindItem/FindCount/GetFoundItems. S'il existe plusieurs correspondances, le premier élément adapté à la recherche est sélectionné ; Il n'y a pas de choix séparé pour la qualité, hue ou le nom.
  • Le client vérifie le drapeau portable, la couche réelle de l'article (1..29) et la capacité de le soulever. L'élément doit être chargé. Le serveur décide en outre si son port est autorisé ; une demande locale acceptée ne prouve pas le succès.
  • Si un élément est manquant, le formulaire void affiche le message Aucun élément trouvé ; la forme numérique renvoie 0. Si vous devez sélectionner un élément spécifique par couleur/serial, utilisez FindType et Equip séparés. UO.Equip prend ID de l'élément trouvé.
  • En attendant une réponse, ne démarrez pas en même temps un autre transfert d’article. Vérifiez les changements de calque plutôt que de répéter l'action à l'infini.

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.EquipT");
UO.EquipT("Rhand", 0x0F51);

1. Équiper le poignard par nom de couche de chaîne - script direct

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

  • La ligne Rhand sélectionne le calque de droite. Le poignard doit être accessible dans un sac à dos chargé. N'importe quelle couleur ; le nombre d'arguments est toujours de deux.
if (Truth(UO.Connected()))
{
    UO.EquipT("Rhand", 0x0F51);
}

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

2. Gérer l'échec du formulaire de numéro - Fonction de script

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

  • 1 - couche, 0x0F51 - type. La chaîne C# forme EquipT renvoie void ; L'acceptation d'une demande ne peut être vérifiée par son résultat. 300 ms - attente courte par exemple ; l'absence de chose après cela ne prouve pas une panne définitive du serveur.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.EquipT("Rhand", 0x0F51);
    await Delay(300);
    var worn = UO.ObjAtLayer(1);
    if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
    {
        UO.AddObject("equipped_dagger", worn);
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Fonction complète : mettez et attendez le type souhaité - classe de script

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

  • timeoutMs=2000 spécifie l'attente maximale en millisecondes. Vérifier chaque ms 50 n'envoie pas de rééquipement. true pour cette fonction personnalisée signifie que le client voit déjà le type souhaité sur le calque ; il s'agit d'un contrôle plus fort que l'acceptation de la demande par Equipt.
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(UO.Connected()) && !(Truth(await EnsureDagger(2000))))
        {
            UO.Print("Dagger was not confirmed within the timeout");
        }

        return null;
    }

    async Task<dynamic> EnsureDagger(dynamic timeoutMs)
    {
        var worn = UO.ObjAtLayer(1);
        if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
        {
            return true;
        }

        UO.EquipT("Rhand", 0x0F51);
        var started = Now();
        while (Truth(Now() - started < timeoutMs))
        {
            await Delay(50);
            worn = UO.ObjAtLayer(1);
            if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
            {
                return true;
            }
        }

        return false;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
    private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}

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

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

Résultat: void / Unit.

Pendant un appel:

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

public void EquipT(InjectionValue layer, InjectionValue type)

        {

            var obj = bridge.FindType(ResolveType(type), -1, bridge.Backpack, -1, true);

            if (obj == 0)

            {

                SystemMessage("No item found.");

                return;

            }



            if (layer.Kind == InjectionValueKind.String)

                Equip(layer.String, obj);

            else

                bridge.Equip(NumberConversions.ToInt(layer), obj);

        }

UO.Equipt

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

Signatures C#

int UO.Equipt(object? layer, object? @type);

Paramètres

  • layer / couche - nombre entier de la couche d'équipement. Main droite - 1, gauche - 2. Choisissez un véritable emplacement d'objet.
  • type / type - un graphic entier d'un objet, par exemple 0x0F51 pour un poignard. Ce n'est pas serial. Recherche tout hue dans le contenu chargé du sac à dos et des conteneurs imbriqués.

Valeur de retour

Ce formulaire C# renvoie int : 1 si le client a accepté la demande de tenue, 0 sinon. Passez deux entiers (numéro de couche et graphic) ; les valeurs de chaîne sélectionnent un contrat d'exécution différent et ne conviennent pas à ce formulaire. L'appel n'attend pas la confirmation du serveur. Pour un nom de couche de chaînes, utilisez UO.EquipT, qui renvoie void.

Comportement

  • Les deux arguments sont requis. D'abord FindType recherche un article dans le sac à dos, puis Equip vérifie son adéquation. La recherche met à jour les résultats globaux FindItem/FindCount/GetFoundItems. S'il existe plusieurs correspondances, le premier élément adapté à la recherche est sélectionné ; Il n'y a pas de choix séparé pour la qualité, hue ou le nom.
  • Le client vérifie le drapeau portable, la couche réelle de l'article (1..29) et la capacité de le soulever. L'élément doit être chargé. Le serveur décide en outre si son port est autorisé ; une demande locale acceptée ne prouve pas le succès.
  • Si un élément est manquant, le formulaire null affiche le message Aucun élément trouvé ; la forme numérique renvoie 0. Si vous devez sélectionner un élément spécifique par couleur/serial, utilisez FindType et Equip séparés. UO.Equip prend ID de l'élément trouvé.
  • En attendant une réponse, ne démarrez pas en même temps un autre transfert d’article. Vérifiez les changements de calque plutôt que de répéter l'action à l'infini.

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

1. Demander un équipement de dague par graphic - script direct

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

  • Les deux arguments sont des entiers : couche 1 et graphic du poignard. La valeur 1 confirme que la requête a été acceptée par le client plutôt que par le serveur.
int accepted = UO.Equipt(1, 0x0F51);
UO.Print(accepted != 0 ? "Equip request accepted locally" : "Equip request not accepted");

2. Vérifier l'emplacement après demande - fonction de script

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

  • Attendre ne remplace pas la vérification : ce qui se trouve réellement sur le calque est lu. Le script ne répète pas le transfert à l'infini.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    int accepted = UO.Equipt(1, 0x0F51);
    if (accepted == 0)
        return false;
    await WaitAsync(300);
    int worn = UO.ObjAtLayer(1);
    return worn != 0 && UO.GetType(worn) == 0x0F51;
    return null;
}

3. À porter uniquement lorsque l'article requis n'est pas disponible - classe de scénario

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

  • Tout d'abord, l'équipement actuel est vérifié ; Après une demande, la vérification est limitée à vingt tentatives.
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()
    {
        return await EnsureDagger();
        return null;
    }

    async Task<bool> EnsureDagger()
    {
        int current = UO.ObjAtLayer(1);
        if (current != 0 && UO.GetType(current) == 0x0F51)
            return true;
        if (UO.Equipt(1, 0x0F51) == 0)
            return false;
        for (int attempt = 0; attempt < 20; attempt++)
        {
            await WaitAsync(100);
            current = UO.ObjAtLayer(1);
            if (current != 0 && UO.GetType(current) == 0x0F51)
                return true;
        }

        return false;
    }
}

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.Equipt(layer, type) — UO.Equipt(Integer,Integer)

Paramètres: layer (Integer), type (Integer)

Résultat: int / Integer.

Pendant un appel:

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

public int Equipt(int layer, int type)

        {

            int item = bridge.FindType(type, -1, bridge.Backpack, -1, true);

            return item == 0 ? 0 : bridge.Equip(layer, item);

        }

UO.FireResist

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

Signatures C#

int UO.FireResist();

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

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 "fireresist": return new InjectionValue(bridge.FireResistance);

UO.Flying

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

Signatures C#

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

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

  • id - 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.Flying();
UO.Print("Flying: " + 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.Flying();
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.Flying(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.Flying()))
        {
            return true;
        }

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

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

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

        return UO.Flying();
    }

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

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

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 Flying() => bridge.Flying(bridge.Self);

UO.Flying(id) — UO.Flying(Any)

Paramètres: id (Any)

Résultat: int / Integer.

Pendant un appel:

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

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

UO.Frozen

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

Signatures C#

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

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

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.Frozen(value) — UO.Frozen(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.GetARStatus

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

Signatures C#

dynamic UO.GetARStatus();

Lit l'indicateur de reconnexion automatique de la session de gestionnaire actuelle ou du client global.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int 1 — la reconnexion automatique est activée ; 0 — désactivé.

Comportement

  • SessionControl.AutoReconnect est prioritaire. Si SessionControl est manquant, Settings.GlobalSettings.Reconnect est utilisé. Il s'agit d'un paramètre et non de l'état de la connexion actuelle ou du nombre de tentatives.

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

1. Paramètres de lecture - script direct

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

  • La lecture ne se connecte pas.
var enabled = UO.GetARStatus();
UO.Print(Convert.ToString(enabled));

2. Mapper à la connexion - Fonction de script

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

  • Le paramètre AR et la connexion réelle sont deux valeurs distinctes.
return  RunScenario();
 object? RunScenario()
{
    var enabled = UO.GetARStatus();
    var online = UO.Connected();
    UO.Print(Convert.ToString(enabled) + " " + Convert.ToString(online));
    return null;
}

3. Connexion manuelle lorsque AR est désactivé - classe de scénario

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

  • Connect autorisé manuellement lorsque la reconnexion automatique est désactivé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()
    {
        if (Truth(UO.GetARStatus() == 0) && !(Truth(UO.Connected())))
        {
            UO.Connect();
        }

        return null;
    }

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

Implémentation de la commande

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

UO.GetARStatus() — UO.GetARStatus()

Paramètres: Aucun paramètre.

Résultat: dynamic / Any.

Pendant un appel:

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

case "getarstatus": return new InjectionValue(bridge.GetAutoReconnect());

UO.GetAlive

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

Signatures C#

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

Vérifie la présence d'un objet sans signe de mort.

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

Indicateur 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 - le serial positif existe et n'est pas marqué comme mort. Le fameux item donne aussi 1 : ce n'est pas le filtre mobile. Un objet mort/manquant donne 0.

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

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 => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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.GetAlive(value) — UO.GetAlive(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 => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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

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

Signatures C#

int UO.GetArmor();

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

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

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

Signatures C#

int UO.GetColdResist();

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

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

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

Signatures C#

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

Vérifie la mort 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 IsDead, 0 n'a aucun signe ou mobile est absent. HP=0 en soi ne signifie pas la mort.

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

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.

IsDeadState

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

IsDeadState

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

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

Signatures C#

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

Lit l'agilité actuelle (Dexterity, DEX) 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.Dexterity 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.Dex(), UO.Dexterity(), UO.GetDex(), UO.GetDexterity().
  • 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.GetDex();
UO.Print("GetDex: " + 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.GetDex();
UO.Print("Dexterity: " + 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.GetDex();
    await Delay(1000);
    var after = UO.GetDex();
    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.GetDex();
        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.GetDex(id);
    var byName = UO.GetDex("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.GetDex() — UO.GetDex()

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

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

UO.GetDex(objID) — UO.GetDex(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 "getdex": return new InjectionValue(arguments.Length > 0 ? bridge.GetDexterity(Arg(0)) : bridge.Dexterity);

UO.GetDexterity

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

Signatures C#

int UO.GetDexterity();

Lit l'agilité actuelle (Dexterity, DEX) 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.Dexterity 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.Dex(), UO.Dexterity(), UO.GetDex(), UO.GetDexterity().

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

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

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


UO.GetEnergyResist

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

Signatures C#

int UO.GetEnergyResist();

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

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.

Clone this wiki locally