Skip to content

FR UO Topic magic

Codex edited this page Oct 12, 2026 · 4 revisions

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

Magie

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

Sorts, capacités et mouvements avec magie. Pour une action ciblée, fixez l’objectif à l’avance et vérifiez les conditions d’application.

Sorts : tous les noms et numéros

Ouvrir le catalogue complet et les exemples

Sections

Sujet Commandes et explications
Cast UO.Cast
CastToObject UO.CastToObject
CastAbility UO.CastAbility
Active Spell Ability UO.IsActiveSpellAbility
Spell Timers UO.TicksSpell

Toutes les commandes du thème

Fonderie

UO.Cast · UO.CastToObject · UO.CastAbility · UO.IsActiveSpellAbility · UO.TicksSpell

Voyage

UO.AddRecall · UO.AddGate

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

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

UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
    UO.Print("Choose the character with the spell cursor");
}
else
{
    UO.Print("Cure request rejected");
}

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

UO.CastToObject

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

var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));

Référence complète des commandes


UO.AddGate

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

Signatures C#

void UO.AddGate(object? bookSerial);

Paramètres

  • bookSerial est une valeur d'identifiant que le script compatible enregistre en tant qu'entrée de liste héritée. Au moment de l'exécution actuelle, la valeur est sérialisée en chaîne ; La commande ne vérifie pas l'existence d'un objet dans le monde.

Valeur de retour

void. L'équipe ne confirme pas la disponibilité du livre ni la création du portail de jeu.

Comportement

  • La valeur est ajoutée à la liste AddGate de l'état d'exécution actuel. Dans ClassicUO, cette liste de compatibilité ne déclenche pas d'action de jeu et n'a pas de getter public documenté à lire.

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.AddGate");
UO.AddGate("0x40012345");

1. Enregistrez l'ID en tant que données héritées sans ouvrir le portail. - scénario direct

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

  • Enregistrez l'ID en tant que données héritées sans ouvrir le portail.
UO.AddGate("0x40012345");

2. Utilisez la valeur de la chaîne transmise à un script compatible. - fonction de script

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

  • Utilisez la valeur de la chaîne transmise à un script compatible.
return  RunScenario();
 object? RunScenario()
{
    var bookSerial = "0x40012345";
    UO.AddGate(bookSerial);
    return null;
}

3. Écrivez la valeur dans la liste d'exécution AddGate. - cours de script

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

  • Écrivez la valeur dans la liste d'exécution AddGate.
  • L'appel stocke les données de compatibilité ; il n'utilise pas le livre dans le monde.
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()
    {
        RememberGateBook("0x40012345");
        return null;
    }

    void RememberGateBook(dynamic bookSerial)
    {
        UO.AddGate(bookSerial);
    }
}

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.AddGate(bookSerial) — UO.AddGate(Any)

Paramètres: bookSerial (Any)

Résultat: void / Unit.

Pendant un appel:

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

case "adddir":

                case "addfindlist":

                case "addgate":

                case "addrecall":

                case "addstep":

                    LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));

                    break;

UO.AddRecall

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

Signatures C#

void UO.AddRecall(object? bookSerial);

Paramètres

  • bookSerial est une valeur d'identifiant que le script compatible enregistre en tant qu'entrée de liste héritée. Le runtime sérialise la valeur transmise dans une chaîne.

Valeur de retour

void. L'appel ne renvoie aucun résultat et ne confirme pas la présence du livre.

Comportement

  • La valeur est ajoutée à la liste AddRecall de l'état d'exécution actuel. Dans ClassicUO, cette liste de compatibilité elle-même n'envoie pas de commandes de jeu et n'a pas de getter public documenté à lire.

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.AddRecall");
UO.AddRecall("0x40012345");

1. Enregistrez la valeur en tant que données de compatibilité, n'exécutez pas Recall. - scénario direct

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

  • Enregistrez la valeur en tant que données de compatibilité, n'exécutez pas Recall.
UO.AddRecall("0x40012345");

2. Passez l'identifiant via une variable chaîne. - fonction de script

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

  • Passez l'identifiant via une variable chaîne.
return  RunScenario();
 object? RunScenario()
{
    var bookSerial = "0x40012345";
    UO.AddRecall(bookSerial);
    return null;
}

3. Chaque appel ajoute une entrée distincte à AddRecall du runtime actuel. - cours de script

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

  • Chaque appel ajoute une entrée distincte à AddRecall du runtime actuel.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.AddRecall("0x40012345");
        UO.AddRecall("0x40012346");
        return null;
    }
}

Implémentation de la commande

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

UO.AddRecall(bookSerial) — UO.AddRecall(Any)

Paramètres: bookSerial (Any)

Résultat: void / Unit.

Pendant un appel:

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

case "adddir":

                case "addfindlist":

                case "addgate":

                case "addrecall":

                case "addstep":

                    LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));

                    break;

UO.Cast

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

Signatures C#

int UO.Cast(object? spellName);

Demande l'utilisation d'un sort par nom. Exactement un paramètre : spellName, par exemple UO.Cast("Heal"). La cible est sélectionnée séparément : avec la souris en utilisant le réticule apparu ou via WaitTargetObject avant Cast. Accepter une demande ne confirme pas un effet réussi.

Paramètres

  • spellName - Ligne obligatoire - le nom anglais du sort entre guillemets : "Heal", "Cure", "Greater Heal". Les noms ne sont pas traduits avec l'interface. Le dictionnaire reconnaît également les alias intégrés et les mots orthographiés. Le numérique ID, y compris la chaîne "29", la cible, la distance, la notoriété, maxZ et l'attente ne sont pas des paramètres Cast. Tous les noms et écoles.

Valeur de retour

int : 1/true—le client a accepté la demande ; 0/false - le nom n'est pas reconnu ou la demande est localement rejetée. Vous pouvez écrire if UO.Cast("Heal") { ... } ou comparer avec 1/true. Ce ne sont pas des sorts ID ou des preuves de guérison/dégâts. Un argument manquant ou supplémentaire provoque une erreur. Le commandement ne s'attend pas à viser et à terminer le sort.

Comportement

  • Forme unique : UO.Cast(spellName). Il n’y a pas de deuxième argument ou d’argument ultérieur. La recherche d'une cible, la préparation d'une réponse, l'attente et l'effacement sont effectués par des commandes distinctes.
  • Pour sélectionner manuellement, effacez votre file d'attente précédente CancelWaitTarget, appelez Cast et cliquez sur l'objet souhaité avec votre réticule. Le Cast lui-même ne vide pas la file d'attente : le script aurait pu le préparer à l'avance.
  • Pour une cible automatique, appelez d'abord WaitTargetObject(serial/alias), puis Cast(name). Cet ordre vous permet de répondre à la visée rapide du serveur. Pour les sorts sans portée, ne préparez pas de réponse.
  • Le serveur détermine la disponibilité du sort, les ressources, la cible valide, la portée et l'effet. Un résultat positif ne fait que confirmer l'acceptation locale de la demande.
  • La file d'attente préparée peut rester sans surveillance en cas de panne du serveur. Supprimez-le CancelWaitTarget après une attente limitée ou un échec local. N'exécutez pas d'autres scripts en parallèle avec la cible.
  • Une demande acceptée met à jour TicksSpell. Cast n'attend pas que HP soit animé, soigné ou modifié. Le catalogue ID explique le protocole interne, mais ne remplace pas le nom dans l'argument.

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

1. Cure : sélectionnez la cible avec la souris - script direct

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

  • Cure est le seul argument de Cast. Après le lancement, sélectionnez le personnage à l'aide du viseur du jeu. Vérifiez la panne du serveur et le résultat dans le jeu.
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
    UO.Print("Choose the character with the spell cursor");
}
else
{
    UO.Print("Cure request rejected");
}

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

2. Guérir : cible séparée pour vous-même - fonction de script

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

  • self — argument WaitTargetObject ; Guérir est le seul argument de Cast. 3000 - trois secondes pour viser dans cet exemple, ce n'est pas une garantie d'achèvement de la guérison. Supprime enfin la réponse restante et en cas d'échec.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.CancelWaitTarget();
    try
    {
        UO.WaitTargetObject("self");
        if (Truth(UO.Cast("Heal")))
        {
            await Delay(3000);
        }
    }
    finally
    {
        UO.CancelWaitTarget();
    }

    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 pour l'allié sélectionné - classe de scénario

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

  • spellName, target, cleanupDelayMs - paramètres de votre fonction CastAtObject, pas de surcharge UO.Cast. En interne, Cast n'accepte que spellName. ASC convertit la chaîne ID en nombre ; 4000 — délai de suppression de la file d'attente. true signifie acceptation de la demande et non réussite du traitement.

Sorts / Sorts

Sorts/Sorts

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 target = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(await CastAtObject("Greater Heal", target, 4000)))
        {
            UO.Print("Request sent; verify healing in the game");
        }

        return null;
    }

    async Task<dynamic> CastAtObject(dynamic spellName, dynamic target, dynamic cleanupDelayMs)
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(target <= 0) || !(Truth(UO.Exists(target))))
        {
            return false;
        }

        dynamic accepted = false;
        UO.CancelWaitTarget();
        try
        {
            UO.WaitTargetObject(target);
            accepted = UO.Cast(spellName);
            if (Truth(accepted))
            {
                await Delay(cleanupDelayMs);
            }
        }
        finally
        {
            UO.CancelWaitTarget();
        }

        return accepted;
    }

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

    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.Cast(spellName) — UO.Cast(String)

Paramètres: spellName (String)

Résultat: int / Integer.

Pendant un appel:

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

public int Cast(string spellName)

        {

            if (NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _))

            {

                SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\").");

                return 0;

            }

            return CastCore(spellName) ? 1 : 0;

        }

UO.CastAbility

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

Signatures C#

int UO.CastAbility(object? abilityId);

Bascule la capacité actuellement sélectionnée de l'arme actuelle via UseAbility : appeler à nouveau une capacité déjà sélectionnée la désélectionne.

Paramètres

  • abilityId — Nom de la capacité ou chaîne numérique résolue par ResolveClassicUOAbilityId ; la valeur inconnue donne 0.

Valeur de retour

int 1 — le client a appelé la capacité primaire/secondaire actuelle ; 0 - aucun personnage, ID inconnu ou la capacité ne correspond pas à l'arme actuelle.

Comportement

  • 1 décrit l'acceptation d'une demande client, plutôt qu'un succès ou une radiation de ressources par le serveur. ID, qui n'est pas la capacité primaire/secondaire actuelle, renvoie 0 même si elle se trouve dans le répertoire.
  • GameActions.UsePrimaryAbility/UseSecondaryAbility vérifiez le bit 0x80. Lorsque le bit est désactivé, désélectionnez l'autre option et envoyez la capacité sélectionnée ; lorsqu'il est déjà activé, envoyez ID 0 pour le désactiver. Ensuite, le bit est commuté. Le retour de 1 confirme l'appel à cette branche client, y compris l'arrêt.

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

1. Résoudre le nom de la capacité – Script direct

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

  • La disponibilité dans le catalogue est distincte de la correspondance des armes.
var id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
    var accepted = UO.CastAbility(id);
    UO.Print(Convert.ToString(accepted));
}

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

2. Appel par nom - fonction de script

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

  • Le nom se résout en ID et est comparé à l'arme actuelle.
return  RunScenario();
 object? RunScenario()
{
    var accepted = UO.CastAbility("Armor Ignore");
    UO.Print(Convert.ToString(accepted));
    return null;
}

3. ID invalide - classe de script

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

  • Zero est en dehors du répertoire et renvoie 0 sans activation.

Sorts / Sorts

Sorts/Sorts

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 accepted = UO.CastAbility(0);
        UO.Print(Convert.ToString(accepted));
        return null;
    }
}

Implémentation de la commande

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

UO.CastAbility(abilityId) — UO.CastAbility(Integer)

Paramètres: abilityId (Integer/String)

Résultat: int / Integer.

Pendant un appel:

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

public int UseAbility(int abilityId) => bridge.UseAbility(abilityId);

UO.CastAbility(abilityId) — UO.CastAbility(String)

Paramètres: abilityId (Integer/String)

Résultat: int / Integer.

Pendant un appel:

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

public int UseAbility(string abilityName)

        {

            int abilityId = bridge.ResolveAbility(abilityName);

            return abilityId > 0 ? bridge.UseAbility(abilityId) : 0;

        }

UO.CastToObject

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

Signatures C#

dynamic UO.CastToObject(object? spellName, object? objID);

Place une cible d'objet en attente et envoie un sort par nom ou numérique ID.

Paramètres

  • spellName - string avec le nom du sort, y compris un trait de soulignement au lieu d'un espace, ou un numérique ID pour bridge.Cast.
  • objID — Numéro de série de l'objet ou nom pris en charge de l'objet self/backpack/lasttarget/saved ; les chaînes numériques et les chaînes 0x sont résolues par l'exécution.

Valeur de retour

int/boolean result 1 — le client a accepté la demande Cast ; 0 — demande rejetée. La réussite du sort n'est pas confirmée par le serveur.

Comportement

  • La forme chaîne passe par CastAtTarget ; la forme numérique met WaitTargetObject, puis bridge.Cast. Si Cast échoue, la cible en attente est annulée. Après acceptation, ticksSpell est mis à jour.
  • Bridge rejette spellId non positif, aucune connexion et caractère mort. Le minuteur marque l'envoi, pas la fin du casting ; le résultat de l'impact sur l'objet dépend du 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.

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

1. Offrez-vous - script direct

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

  • Heal fait de self la cible du prochain curseur du serveur.
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));

2. Numérique ID - fonction de script

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

  • La forme numérique transmet ID 4 au client ; 1 signifie envoyer une demande.
return  RunScenario();
 object? RunScenario()
{
    var accepted = UO.CastToObject(4, UO.Self());
    UO.Print(Convert.ToString(accepted));
    return null;
}

3. Vérifier l'objet sélectionné - Classe de script

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

  • Une vérification d'existence locale permet d'éviter d'utiliser le lasttarget manquant.

Sorts / Sorts

Sorts/Sorts

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 target = UO.LastTarget();
        if (Truth(UO.Exists(target)))
        {
            var accepted = UO.CastToObject("Greater Heal", target);
            UO.Print(Convert.ToString(accepted));
        }

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

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

Résultat: dynamic / Any.

Pendant un appel:

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

case "casttoobject":

                    if (arguments[0].Kind == InjectionValueKind.String)

                        return CastAtTarget(arguments[0], arguments[1]) != 0 ? InjectionValue.True : InjectionValue.False;



                    WaitTargetObject(Arg(1));

                    int castAccepted = bridge.Cast(Arg(0));

                    if (castAccepted != 0)

                    {

                        ticksSpell = Timer();

                        return InjectionValue.True;

                    }



                    bridge.CancelTarget();

                    return InjectionValue.False;

UO.IsActiveSpellAbility

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

Signatures C#

dynamic UO.IsActiveSpellAbility(object? spellName);

Vérifie si le serveur a signalé l'état actif de la capacité/du sort sélectionné. Utile avant de réactiver une capacité canalisée. Il n'allume rien, ne lance ni ne sélectionne de cible.

Paramètres

  • spellName - Le seul paramètre obligatoire : un nom anglais du catalogue de sorts ou l'intégralité du ID. Par exemple, « Confiance » et 402 représentent le même sort Bushido. Le cas n’est pas important ; les traits de soulignement dans le nom sont remplacés par des espaces. La droite numérique est également reconnue. Ne transmettez pas le caractère ID, le type d'objet ou le numéro de compétence.

Valeur de retour

int : 1 - le serveur a signalé l'état actif de ce ID ; 0 - il n'existe actuellement aucun état actif de ce type. Dans C# vérifiez le résultat numérique : if (UO.IsActiveSpellAbility(402) != 0) { ... }. Il s'agit d'un signe logique, pas du numéro, de l'heure ou du résultat du dernier lancer. Nom inconnu, ID en dehors de 1…65535 et aucun état résultant donne également 0.

Comportement

  • La liste met à jour le package serveur 0xBF/0x25 : l'activation ajoute ID, la désactivation le supprime. Fonctionne sans fenêtre graphique et sans bouton orthographique à l'écran. La fermeture d'une fenêtre enregistre l'état ; rompre la connexion l'efface. Répondre 0 ne prouve pas que le personnage est incapable de lancer le sort. Le serveur doit envoyer ce statut ; Ce n’est pas une vérification universelle pour tous les buffs. Pour les soins/rappels instantanés, un tel exemple ne confirme pas un lancer réussi. La durée du sort, le mana restant, la disponibilité et le succès ne sont pas déterminés par cette commande.

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

1. Vérification de l'état à l'aide de ID - script direct

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

  • 402 - ID Confiance. La variable active contient soit 1, soit 0 ; true équivaut ici à 1. Le message décrit l'état reçu, et non le résultat de la tentative de diffusion.
var active = UO.IsActiveSpellAbility(402);
if (Truth(Truth(active) == true))
{
    UO.Print("Confidence is active");
}
else
{
    UO.Print("No active Confidence state received");
}

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

2. Ne pas répéter la capacité active – Fonction de script

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

  • "Confiance" - le même ID 402. Cast n'accepte que le nom. La demande est envoyée une fois s'il n'y a pas de statut actif ; cela ne garantit pas le succès sur le serveur. N'exécutez pas cet extrait dans une boucle rapide ; la réponse du serveur peut être retardée.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsActiveSpellAbility("Confidence") == 0))
    {
        UO.Cast("Confidence");
    }

    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. En attente d'un accusé de réception avec limite - Classe de script

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

  • épeler - nom ou ID ; attendu — true pour allumer, false pour éteindre ; timeoutMs — limite d'attente en millisecondes. Main attend jusqu'à 500 ms avec des vérifications toutes les 25 ms et ne lance rien. La fonction renvoie true s'il y a une correspondance, sinon false. Il s’agit là d’une attente limitée d’un État local, et non d’une preuve de la raison de son changement ; le temps réel peut augmenter si le script est en pause ou en charge.

Sorts / Sorts

Sorts/Sorts

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(WaitAbilityState("Confidence", true, 500)))
        {
            UO.Print("Active state received");
        }
        else
        {
            UO.Print("No active state before timeout");
        }

        return null;
    }

    dynamic WaitAbilityState(dynamic spell, dynamic expected, dynamic timeoutMs)
    {
        var elapsed = 0;
        while (Truth(elapsed < timeoutMs))
        {
            if (Truth((UO.IsActiveSpellAbility(spell) == 1) == expected))
            {
                return true;
            }

            UO.Wait(25);
            elapsed = elapsed + 25;
        }

        return Truth((UO.IsActiveSpellAbility(spell) == 1) == expected);
    }

    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.IsActiveSpellAbility(spellName) — UO.IsActiveSpellAbility(Any)

Paramètres: spellName (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "isactivespellability":

                {

                    int? spellId = arguments[0].Kind == InjectionValueKind.String

                        ? ConvertSpellName(Text(0).Replace('_', ' '))

                        : (int?)Arg(0);

                    return new InjectionValue(spellId.HasValue ? bridge.IsActiveSpell(spellId.Value) : 0);

                }

UO.TicksSpell

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

Signatures C#

int UO.TicksSpell();

Lit la marque enregistrée TicksSpell.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int — marque UO.Timer en dixièmes de seconde à partir du début de l'exécution. 0 - la marque n'a pas encore été posée ou l'événement s'est produit dans le premier dixième de seconde ; ce ne sont pas des millisecondes ou l’heure du calendrier.

Comportement

  • Renvoie le champ ticksSpell. Il est mis à jour par le Cast/CastAtTarget accepté avec succès ; il ne s'agit pas d'une observation automatique de toutes les activités manuelles/serveurs. La commande elle-même ne modifie pas la marque.
  • UO.Timer() - la marque calcule l'âge en dixièmes de seconde. Les marques ne sont pas comparées entre les différentes exécutions.

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

1. Appel direct - script direct

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

  • Lit la marque enregistrée TicksSpell.
var stamp = UO.TicksSpell();
UO.Print(stamp);

2. Option explicite - fonction de script

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

  • Renvoie le champ ticksSpell. Il est mis à jour par le Cast/CastAtTarget accepté avec succès ; il ne s'agit pas d'une observation automatique de toutes les activités manuelles/serveurs. La commande elle-même ne modifie pas la marque.
return  RunScenario();
 object? RunScenario()
{
    var stamp = UO.TicksSpell();
    var ageTenths = UO.Timer() - stamp;
    UO.Print(ageTenths);
    return null;
}

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

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

  • UO.Timer() - la marque calcule l'âge en dixièmes de seconde. Les marques ne sont pas comparées entre les différentes exécutions.

Sorts / Sorts

Sorts/Sorts

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.TicksSpell();
        UO.Wait(250);
        var after = UO.TicksSpell();
        UO.Print(before = after);
        return null;
    }
}

Implémentation de la commande

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

UO.TicksSpell() — UO.TicksSpell()

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 TicksSpell() => ticksSpell;

Clone this wiki locally