Skip to content

FR UO Topic targeting

Codex edited this page Oct 12, 2026 · 4 revisions

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

Targeting

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

Réponse manuelle avec curseur cible et réponse prédéfinie WaitTarget. Fixer un objectif attendu et effectuer une action sont des opérations distinctes.

Sections

Sujet Commandes et explications
Target UO.Target
TargetID UO.TargetID
TargetToObject UO.TargetToObject
TargetToTile UO.TargetToTile
TargetToXYZ UO.TargetToXYZ
TargetByResource UO.TargetByResource
WaitTarget UO.WaitTarget
WaitTargetObject UO.WaitTargetObject
WaitTargetType UO.WaitTargetType
WaitTargetTile UO.WaitTargetTile
WaitTargetXYZ UO.WaitTargetXYZ
WaitTargetSelf UO.WaitTargetSelf
LastTarget UO.LastTarget
CancelTarget UO.CancelTarget
Client Target Response UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.WaitForClientTargetResponse · UO.ClientTargetResponse

Toutes les commandes du thème

Cibles

UO.Target · UO.TargetID · UO.Targeting · UO.TargetPresent · UO.TargetToObject · UO.TargetToTile · UO.TargetToXYZ · UO.TargetByResource · UO.LastTarget · UO.LastTargetX · UO.LastTargetY · UO.LastTile · UO.TicksTarget

Waiting / Annuler

UO.WaitTarget · UO.WaitTargetObject · UO.WaitTargetType · UO.WaitTargetObjectType · UO.WaitTargetTile · UO.WaitTargetXYZ · UO.WaitTargetSelf · UO.WaitTargetGround · UO.WaitTargetLast · UO.WaitForTarget · UO.IsWaitTargetActive · UO.CancelTarget · UO.CancelWaitTarget

Réponse du client Target

UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.ClientTargetResponse · UO.ClientTargetResponsePresent · UO.WaitForClientTargetResponse

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

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

UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");

UO.TargetToXYZ

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

if (Truth(UO.TargetPresent()))
{
    UO.TargetToXYZ(1445, 1690, 0);
}

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

Référence complète des commandes


UO.CancelTarget

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

Signatures C#

void UO.CancelTarget();

Annule le curseur actif et efface les réponses préparées en forme de croix.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • Les réponses déjà envoyées au serveur ne sont pas rappelées.
  • La cible de rappel locale est annulée ; Pour une cible de serveur active, une annulation de cible est envoyée.
  • La file d'attente est commune au client : son effacement s'applique aux réponses préparées de toutes les procédures.

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

1. Annuler la préparation - script direct

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

  • Il n'y a pas d'arguments.
  • La réponse en attente à self est supprimée.
UO.WaitTargetSelf();
UO.CancelTarget();

2. Remplacer un point - fonction de script préalablement préparé

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

  • 1445/1690/0 est un exemple d'un nouveau point dans le monde.
  • Les anciennes réponses sont supprimées avant de fixer un nouvel objectif.
return  RunScenario();
 object? RunScenario()
{
    UO.CancelTarget();
    UO.WaitTargetXYZ(1445, 1690, 0);
    return null;
}

3. Refuser après expiration du délai - classe de script

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

  • UO.Wait=1000 ms est une limitation de cet exemple.
  • La file d'attente restante est vérifiée, pas la réussite de la compétence. S'il n'y a pas de réticule du serveur, la prochaine commande étrangère ne recevra pas l'ancienne réponse.
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()
    {
        UO.WaitTargetSelf();
        UO.UseSkill("Anatomy");
        await Delay(1000);
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelTarget();
        }

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

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.

public void CancelTarget()

        {

            var waitTargetQueue = bridge.GetWaitTargetQueue();

            if (waitTargetQueue.Length > 0 || bridge.IsTargeting() != 0)

            {

                bridge.CancelTarget();

                SystemMessage("Targeting cancelled");

            }

            else

                SystemMessage("Error: no target to cancel");

        }

UO.CancelWaitTarget

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

Signatures C#

void UO.CancelWaitTarget();

Efface les réponses préparées en forme de croix.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • Les réponses déjà envoyées au serveur ne sont pas rappelées.
  • Le curseur ouvert reste actif ; il peut être traité manuellement ultérieurement.
  • La file d'attente est commune au client : son effacement s'applique aux réponses préparées de toutes les procédures.

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

1. Annuler la préparation - script direct

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

  • Il n'y a pas d'arguments.
  • La réponse en attente à self est supprimée.
UO.WaitTargetSelf();
UO.CancelWaitTarget();

2. Remplacer un point - fonction de script préalablement préparé

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

  • 1445/1690/0 est un exemple d'un nouveau point dans le monde.
  • Les anciennes réponses sont supprimées avant de fixer un nouvel objectif.
return  RunScenario();
 object? RunScenario()
{
    UO.CancelWaitTarget();
    UO.WaitTargetXYZ(1445, 1690, 0);
    return null;
}

3. Refuser après expiration du délai - classe de script

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

  • UO.Wait=1000 ms est une limitation de cet exemple.
  • La file d'attente restante est vérifiée, pas la réussite de la compétence. S'il n'y a pas de réticule du serveur, la prochaine commande étrangère ne recevra pas l'ancienne réponse.
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()
    {
        UO.WaitTargetSelf();
        UO.UseSkill("Anatomy");
        await Delay(1000);
        if (Truth(UO.IsWaitTargetActive()))
        {
            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;
}

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

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

UO.ClientRequestObjectTarget

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

Signatures C#

void UO.ClientRequestObjectTarget();

Ouvre un réticule local pour sélectionner manuellement un élément ou un personnage.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • Le résultat précédent de ce runtime est réinitialisé. La commande revient immédiatement, sans attendre un clic.
  • Le résultat se lit ClientTargetResponse après WaitForClientTargetResponse ou ClientTargetResponsePresent.
  • L'arrêt d'une procédure en cours supprime la portée qui lui appartient dans la trame la plus proche. Si une autre requête a déjà remplacé le curseur, son annulation n'est pas affectée.
  • Un réticule de l’interface client ne peut pas être utilisé simultanément pour deux sélections manuelles indépendantes. Ne démarrez pas une nouvelle demande tant que la précédente n'a pas été traitée.

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Sélectionnez un élément ou un personnage - script direct

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

  • 5000 — cliquez sur le délai d'attente en millisecondes. La nouvelle requête réinitialise le résultat précédent.
  • Un tableau de cinq champs indique l'objet sélectionné. result[0] est serial, pas type.
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Serial: " + UO.Int2Hex(result[0]));
    }
    else
    {
        UO.Print("Selection cancelled");
    }
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Cancel est une réponse, mais pas un objet - fonction de script

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

  • CancelTarget annule la sélection locale ; le rappel renvoie un résultat vide.
  • ClientTargetResponsePresent donne 1, mais la longueur du tableau est 0. N'accédez pas au résultat[0] sans vérifier la longueur.
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestObjectTarget();
    UO.CancelTarget();
    if (Truth(UO.ClientTargetResponsePresent()))
    {
        var result = UO.ClientTargetResponse();
        UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Sélectionnez un objet et enregistrez la référence nommée - Classe de script

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

  • La réponse contient cinq champs ; serial est dans le résultat[0]. Le délai d'attente et l'annulation ne produisent pas de serial utilisable.
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.ClientRequestObjectTarget();
        if (UO.WaitForClientTargetResponse(5000) == 0)
            return false;
        var result = UO.ClientTargetResponse();
        if (((object? [])result).Length != 5 || Convert.ToInt32(result[0]) == 0)
            return false;
        UO.AddObject("selected_object", result[0]);
        UO.Print($"Saved object: {UO.GetName(result[0])}");
        return true;
        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.ClientRequestObjectTarget() — UO.ClientRequestObjectTarget()

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 "clientrequestobjecttarget": bridge.RequestClientTarget(false); return InjectionValue.Unit;

UO.ClientRequestTileTarget

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

Signatures C#

void UO.ClientRequestTileTarget();

Ouvre un réticule local pour sélectionner manuellement un point/une tuile ou un objet.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • Le résultat précédent de ce runtime est réinitialisé. La commande revient immédiatement, sans attendre un clic.
  • Le résultat se lit ClientTargetResponse après WaitForClientTargetResponse ou ClientTargetResponsePresent.
  • L'arrêt d'une procédure en cours supprime la portée qui lui appartient dans la trame la plus proche. Si une autre requête a déjà remplacé le curseur, son annulation n'est pas affectée.
  • Un réticule de l’interface client ne peut pas être utilisé simultanément pour deux sélections manuelles indépendantes. Ne démarrez pas une nouvelle demande tant que la précédente n'a pas été traitée.

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Lire les coordonnées de la tuile sélectionnée - script direct

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

  • résultat[1] - graphic, résultat[2]/[3]/[4] - X/Y/Z. La tuile monde serial a un résultat[0] égal à 0.
  • Le type, les coordonnées et serial sont des champs distincts. Il n'y a pas d'index de couche statique dans ce tableau.
UO.ClientRequestTileTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Type: " + UO.Int2Hex(result[1]));
        UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
    }
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Enregistrer les coordonnées de la cellule sélectionnée - fonction script

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

  • Pour la cellule, X/Y/Z sont dans les champs 2/3/4. Chaînes de magasins mondiaux ; graphic et serial ne remplacent pas ici les coordonnées.
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestTileTarget();
    if (UO.WaitForClientTargetResponse(5000) == 0)
        return false;
    var selection = (object? [])UO.ClientTargetResponse();
    if (selection.Length != 5)
        return false;
    UO.SetGlobal("route.x", Convert.ToString(selection[2]));
    UO.SetGlobal("route.y", Convert.ToString(selection[3]));
    UO.SetGlobal("route.z", Convert.ToString(selection[4]));
    return true;
    return null;
}

3. Abandonner la sélection de cellule locale - classe de script

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

  • CancelTarget remplace le curseur local. La présence d'un rappel après annulation ne signifie pas la présence d'une sélection réussie.
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()
    {
        UO.ClientRequestTileTarget();
        await WaitAsync(1000);
        UO.CancelTarget();
        if (UO.ClientTargetResponsePresent() != 0)
        {
            var result = (object? [])UO.ClientTargetResponse();
            UO.Print($"Response after cancel: {result.Length} fields");
        }

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

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 "clientrequesttiletarget": bridge.RequestClientTarget(true); return InjectionValue.Unit;

UO.ClientTargetResponse

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

Signatures C#

dynamic UO.ClientTargetResponse();

Copie le résultat du dernier ClientRequest* local dans un tableau.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

Tableau de cinq int : [0]=serial objet (0 près du sol/statique), [1]=graphic/type, [2]=X, [3]=Y, [4]=Z. Un tableau vide est renvoyé avant la sélection, après avoir été réinitialisé par une nouvelle requête, ou lors d'une annulation ou d'une sélection inappropriée. Manquant hue, carte, index de couche statique et attribut terrestre/statique. Ce n'est pas un objet avec des champs nommés.

Comportement

  • La lecture ne consomme pas le résultat : il peut être relu. Le nouveau ClientRequest* le remplace.
  • Vérifiez toujours ArrayLength(result)=5 avant d'accéder aux index.

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

1. Sélectionnez un élément ou un personnage - script direct

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

  • 5000 — cliquez sur le délai d'attente en millisecondes. La nouvelle requête réinitialise le résultat précédent.
  • Un tableau de cinq champs indique l'objet sélectionné. result[0] est serial, pas type.
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Serial: " + UO.Int2Hex(result[0]));
    }
    else
    {
        UO.Print("Selection cancelled");
    }
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Lire les coordonnées de la tuile sélectionnée - fonction script

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

  • résultat[1] - graphic, résultat[2]/[3]/[4] - X/Y/Z. La tuile monde serial a un résultat[0] égal à 0.
  • Le type, les coordonnées et serial sont des champs distincts. Il n'y a pas d'index de couche statique dans ce tableau.
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestTileTarget();
    if (Truth(UO.WaitForClientTargetResponse(5000)))
    {
        var result = UO.ClientTargetResponse();
        if (Truth(ArrayLength(result) == 5))
        {
            UO.Print("Type: " + UO.Int2Hex(result[1]));
            UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
        }
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Cancel est une réponse, mais pas un objet - classe de script

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

  • CancelTarget annule la sélection locale ; le rappel renvoie un résultat vide.
  • ClientTargetResponsePresent donne 1, mais la longueur du tableau est 0. N'accédez pas au résultat[0] sans vérifier la longueur.
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.ClientRequestObjectTarget();
        UO.CancelTarget();
        if (Truth(UO.ClientTargetResponsePresent()))
        {
            var result = UO.ClientTargetResponse();
            UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
        }

        return null;
    }

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

Implémentation de la commande

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

UO.ClientTargetResponse() — UO.ClientTargetResponse()

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 "clienttargetresponse":

                    return new InjectionValue(bridge.ClientTargetResponse().Select(value => new InjectionValue(value)).ToArray());

UO.ClientTargetResponsePresent

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

Signatures C#

dynamic UO.ClientTargetResponsePresent();

Vérifie si une réponse a été reçue à la dernière demande de sélection locale.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int 1 — le rappel a déjà répondu, y compris l'annulation ; 0 - la nouvelle sélection n'est pas encore terminée. La valeur 1 ne garantit pas l'existence de l'objet : lorsqu'elle est annulée, ClientTargetResponse renvoie un Array vide.

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

  • N'indique pas la présence d'un viseur de serveur et ne décrit pas la file d'attente WaitTarget.
  • La lecture du résultat ne réinitialise pas ce flag ; il est réinitialisé au prochain ClientRequest*.

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

1. Annuler est une réponse, mais pas un objet – script simple

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

  • CancelTarget annule la sélection locale ; le rappel renvoie un résultat vide.
  • ClientTargetResponsePresent donne 1, mais la longueur du tableau est 0. N'accédez pas au résultat[0] sans vérifier la longueur.
UO.ClientRequestObjectTarget();
UO.CancelTarget();
if (Truth(UO.ClientTargetResponsePresent()))
{
    var result = UO.ClientTargetResponse();
    UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Vérifier l'état de préparation après avoir sélectionné un objet - fonction de script

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

  • L'état de préparation de la réponse et son contenu sont vérifiés. L'attribut 1 n'est pas l'objet serial.
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestObjectTarget();
    if (UO.WaitForClientTargetResponse(5000) == 0)
        return false;
    if (UO.ClientTargetResponsePresent() == 0)
        return false;
    var response = (object? [])UO.ClientTargetResponse();
    return response.Length == 5 && Convert.ToInt32(response[0]) != 0;
    return null;
}

3. Sondage sur l'état de préparation à la sélection de cellules - Classe de script

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

  • L'interrogation est limitée à cinq secondes. S'il n'y a pas de réponse, le curseur est annulé ; Les champs X/Y/Z sont lus uniquement à partir de la réponse complète.
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()
    {
        UO.ClientRequestTileTarget();
        for (int attempt = 0; attempt < 50; attempt++)
        {
            if (UO.ClientTargetResponsePresent() != 0)
            {
                var response = (object? [])UO.ClientTargetResponse();
                if (response.Length == 5)
                    UO.Print($"Selected tile: {response[2]},{response[3]},{response[4]}");
                return null;
            }

            await WaitAsync(100);
        }

        UO.CancelTarget();
        UO.Print("Selection timed out");
        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.ClientTargetResponsePresent() — UO.ClientTargetResponsePresent()

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

UO.IsWaitTargetActive

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

Signatures C#

dynamic UO.IsWaitTargetActive();

Vérifie si les réponses préparées restent dans la file d'attente cible.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int 1 - il y a une cible différée non annulée d'un objet, d'une tuile ou une annulation de la prochaine vue ; 0 - la file d'attente est vide. Il ne s'agit pas d'avoir un curseur ouvert ; pour le curseur, utilisez TargetPresent/Targeting.

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 file d'attente entière du client est lue. Si plusieurs procédures s'exécutent simultanément, les réponses de chacune d'elles sont prises en compte.
  • Zéro signifie simplement qu’aucune réponse n’est en attente. Il ne confirme pas l'utilisation réussie d'une compétence ou d'un sort sur 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.

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

1. Préparation du chèque - script direct

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

  • Après WaitTargetSelf et avant la cible du serveur 1 est attendue.
  • CancelWaitTarget efface la file d'attente ; le test suivant donne 0.
UO.WaitTargetSelf();
UO.Print(Convert.ToString(UO.IsWaitTargetActive()));
UO.CancelWaitTarget();

2. Attendre sans relâche que la réponse soit dépensée - fonction de script

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

  • Le contrôle n'a aucun paramètre. UO.Wait=50 ms, attentes maximales de 20.
  • Si la réponse demeure, elle est annulée. Ajoutez une vérification du résultat de l'action du serveur séparément.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var attempts = 0;
    while (Truth(UO.IsWaitTargetActive()) && Truth(attempts < 20))
    {
        await Delay(50);
        attempts = attempts + 1;
    }

    if (Truth(UO.IsWaitTargetActive()))
    {
        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. Afficher la différence entre la file d'attente et la vue - classe de script

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

  • La première ligne montre les réponses différées, la seconde l'état de la vue.
  • Une file d'attente sans curseur et un curseur sans file d'attente sont possibles ; ces valeurs ne sont pas interchangeables.
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.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        UO.Print("Cursor: " + Convert.ToString(UO.TargetPresent()));
        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.IsWaitTargetActive() — UO.IsWaitTargetActive()

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 "iswaittargetactive": return new InjectionValue(Waiting());

UO.LastTarget

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

Signatures C#

int UO.LastTarget();

Lit serial du dernier objet cible enregistré.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int - serial/ID, pas type et non bool. 0 signifie l'absence d'un but-objet ; le sol et le statique ont également serial 0, bien que les coordonnées puissent être stockées. Tous les bits 32 sont conservés. Pour rechercher un ID non nul, utilisez != 0, pas > 0, ou == true.

Comportement

  • Aucun paramètre. N'allume pas le viseur, ne sélectionne pas de nouvelle cible, n'attaque pas et n'envoie pas de paquets. LastTarget est différent de LastAttack et LastStatus. Le choix normal self ne remplace pas la dernière cible ; un ClientMarkChar explicite peut le changer.
  • À SetEntity l'Entity.X/Y connue est préservée ; pour un élément dans un conteneur, il peut s'agir des coordonnées du contenu. SetLand/SetStatic sauvegarde le monde X/Y du point sélectionné. Le mouvement/suppression ultérieur de l'objet ne modifie pas les coordonnées enregistrées. Pour la position actuelle, utilisez GetX/GetY(serial).
  • Clear and World.Clear enregistrement clair, y compris lorsque les scripts sont enregistrés. Les serial inconnus dans un cadre explicite n'héritent pas des X/Y précédents : ils deviennent 0. Cela ne garantit pas que la cible existe sur le serveur.
  • La lecture de serial et X/Y par des commandes distinctes n'est pas atomique. Pour l'objet cible LastTile stocke le réseau X/Y=65535 ; il ne s'agit pas d'une position d'objet enregistrée. Pour la terre/statique LastTile(1)/(2), lisez X/Y sélectionné. lasttarget sans parenthèses est une valeur active intégrée à moins qu'elle ne soit remplacée par une variable.
  • World.Clear appelle ClearWorldState : réinitialise le rappel actif, la cible enregistrée et le paquet de relecture. Une réinitialisation normale enregistre l'historique. Le TargetLast interne envoie le paquet stocké uniquement à la cible du serveur actif ; sans historique ou pour un rappel local, il n'envoie rien et enregistre la cible. Un rappel client actif reçoit null une fois en guise d'annulation : ClientTargetResponsePresent devient 1 lorsque la réponse est vide. Une sélection terminée n'est plus notifiée.

Scripts C# autonomes

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

Exemple simple

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

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

var result = UO.LastTarget();
UO.Print("LastTarget: " + Convert.ToString(result));

1. Lire la valeur stockée - script direct

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

  • la valeur est le seul résultat de la commande ; HEX affiche ID, Convert.ToString est la coordonnée. L'appel ne sélectionne rien.
var value = UO.LastTarget();
UO.Print("Saved value: " + Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2. Comparez la position enregistrée et actuelle - fonction de script

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

  • id - enregistré serial. Exists vérifie la présence d'un objet avant GetX/GetY. Les coordonnées enregistrées et celles actuelles peuvent différer. Avec serial=0 l'exemple imprime le point sélectionné, mais 0 lui-même ne prouve pas que le point a été sélectionné.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    var x = UO.LastTargetX();
    var y = UO.LastTargetY();
    UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(id)));
    }

    return null;
}

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

3. Assistant complet ReadTargetValue - Classe de script

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

  • minimum/maximum spécifie la plage acceptable du résultat de l'assistant, pas les paramètres API. L'assistant est complètement défini ; -1 est son propre signe de sortie de portée. Pour ID, la vérification stocke tout serial non nul, y compris le bit le plus significatif, au lieu de la plage.
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 value = ReadTargetValue();
        UO.Print("Checked value: " + Convert.ToString(value));
        return null;
    }

    dynamic ReadTargetValue()
    {
        var value = UO.LastTarget();
        if (Truth(value == 0))
        {
            return -1;
        }

        return value;
    }

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

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

UO.LastTargetX

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

Signatures C#

int UO.LastTargetX();

Lit la coordonnée X enregistrée lorsque la dernière cible a été sélectionnée.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int est la coordonnée enregistrée de X, pas un pixel de l'écran. Avant/après Effacer ou pour un objet inconnu - 0 ; la coordonnée réelle 0 est également acceptable. Ce n'est pas bool. Pour le sol/statique, cela fonctionne également avec LastTarget()=0.

Comportement

  • Aucun paramètre. N'allume pas le viseur, ne sélectionne pas de nouvelle cible, n'attaque pas et n'envoie pas de paquets. LastTarget est différent de LastAttack et LastStatus. Le choix normal self ne remplace pas la dernière cible ; un ClientMarkChar explicite peut le changer.
  • À SetEntity l'Entity.X/Y connue est préservée ; pour un élément dans un conteneur, il peut s'agir des coordonnées du contenu. SetLand/SetStatic sauvegarde le monde X/Y du point sélectionné. Le mouvement/suppression ultérieur de l'objet ne modifie pas les coordonnées enregistrées. Pour la position actuelle, utilisez GetX/GetY(serial).
  • Clear and World.Clear enregistrement clair, y compris lorsque les scripts sont enregistrés. Les serial inconnus dans un cadre explicite n'héritent pas des X/Y précédents : ils deviennent 0. Cela ne garantit pas que la cible existe sur le serveur.
  • La lecture de serial et X/Y par des commandes distinctes n'est pas atomique. Pour l'objet cible LastTile stocke le réseau X/Y=65535 ; il ne s'agit pas d'une position d'objet enregistrée. Pour la terre/statique LastTile(1)/(2), lisez X/Y sélectionné. lasttarget sans parenthèses est une valeur active intégrée à moins qu'elle ne soit remplacée par une variable.
  • World.Clear appelle ClearWorldState : réinitialise le rappel actif, la cible enregistrée et le paquet de relecture. Une réinitialisation normale enregistre l'historique. Le TargetLast interne envoie le paquet stocké uniquement à la cible du serveur actif ; sans historique ou pour un rappel local, il n'envoie rien et enregistre la cible. Un rappel client actif reçoit null une fois en guise d'annulation : ClientTargetResponsePresent devient 1 lorsque la réponse est vide. Une sélection terminée n'est plus notifiée.

Scripts C# autonomes

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

Exemple simple

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

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

var result = UO.LastTargetX();
UO.Print("LastTargetX: " + Convert.ToString(result));

1. Lire la valeur stockée - script direct

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

  • la valeur est le seul résultat de la commande ; HEX affiche ID, Convert.ToString est la coordonnée. L'appel ne sélectionne rien.
var value = UO.LastTargetX();
UO.Print("Saved value: " + Convert.ToString(value));

2. Comparez la position enregistrée et actuelle - fonction de script

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

  • id - enregistré serial. Exists vérifie la présence d'un objet avant GetX/GetY. Les coordonnées enregistrées et celles actuelles peuvent différer. Avec serial=0 l'exemple imprime le point sélectionné, mais 0 lui-même ne prouve pas que le point a été sélectionné.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    var x = UO.LastTargetX();
    var y = UO.LastTargetY();
    UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(id)));
    }

    return null;
}

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

3. Assistant complet ReadTargetValue - Classe de script

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

  • minimum/maximum spécifie la plage acceptable du résultat de l'assistant, pas les paramètres API. L'assistant est complètement défini ; -1 est son propre signe de sortie de portée. Pour ID, la vérification stocke tout serial non nul, y compris le bit le plus significatif, au lieu de la plage.
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 value = ReadTargetValue(0, 65535);
        UO.Print("Checked value: " + Convert.ToString(value));
        return null;
    }

    dynamic ReadTargetValue(dynamic minimum, dynamic maximum)
    {
        var value = UO.LastTargetX();
        if (Truth(value < minimum) || Truth(value > maximum))
        {
            return -1;
        }

        return value;
    }

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

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 LastTargetX() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetX : bridge.GetX(bridge.LastTarget);

UO.LastTargetY

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

Signatures C#

int UO.LastTargetY();

Lit la coordonnée Y enregistrée lorsque la dernière cible a été sélectionnée.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int est la coordonnée enregistrée de Y, pas un pixel de l'écran. Avant/après Effacer ou pour un objet inconnu - 0 ; la coordonnée réelle 0 est également acceptable. Ce n'est pas bool. Pour le sol/statique, cela fonctionne également avec LastTarget()=0.

Comportement

  • Aucun paramètre. N'allume pas le viseur, ne sélectionne pas de nouvelle cible, n'attaque pas et n'envoie pas de paquets. LastTarget est différent de LastAttack et LastStatus. Le choix normal self ne remplace pas la dernière cible ; un ClientMarkChar explicite peut le changer.
  • À SetEntity l'Entity.X/Y connue est préservée ; pour un élément dans un conteneur, il peut s'agir des coordonnées du contenu. SetLand/SetStatic sauvegarde le monde X/Y du point sélectionné. Le mouvement/suppression ultérieur de l'objet ne modifie pas les coordonnées enregistrées. Pour la position actuelle, utilisez GetX/GetY(serial).
  • Clear and World.Clear enregistrement clair, y compris lorsque les scripts sont enregistrés. Les serial inconnus dans un cadre explicite n'héritent pas des X/Y précédents : ils deviennent 0. Cela ne garantit pas que la cible existe sur le serveur.
  • La lecture de serial et X/Y par des commandes distinctes n'est pas atomique. Pour l'objet cible LastTile stocke le réseau X/Y=65535 ; il ne s'agit pas d'une position d'objet enregistrée. Pour la terre/statique LastTile(1)/(2), lisez X/Y sélectionné. lasttarget sans parenthèses est une valeur active intégrée à moins qu'elle ne soit remplacée par une variable.
  • World.Clear appelle ClearWorldState : réinitialise le rappel actif, la cible enregistrée et le paquet de relecture. Une réinitialisation normale enregistre l'historique. Le TargetLast interne envoie le paquet stocké uniquement à la cible du serveur actif ; sans historique ou pour un rappel local, il n'envoie rien et enregistre la cible. Un rappel client actif reçoit null une fois en guise d'annulation : ClientTargetResponsePresent devient 1 lorsque la réponse est vide. Une sélection terminée n'est plus notifiée.

Scripts C# autonomes

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

Exemple simple

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

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

var result = UO.LastTargetY();
UO.Print("LastTargetY: " + Convert.ToString(result));

1. Lire la valeur stockée - script direct

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

  • la valeur est le seul résultat de la commande ; HEX affiche ID, Convert.ToString est la coordonnée. L'appel ne sélectionne rien.
var value = UO.LastTargetY();
UO.Print("Saved value: " + Convert.ToString(value));

2. Comparez la position enregistrée et actuelle - fonction de script

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

  • id - enregistré serial. Exists vérifie la présence d'un objet avant GetX/GetY. Les coordonnées enregistrées et celles actuelles peuvent différer. Avec serial=0 l'exemple imprime le point sélectionné, mais 0 lui-même ne prouve pas que le point a été sélectionné.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    var x = UO.LastTargetX();
    var y = UO.LastTargetY();
    UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(id)));
    }

    return null;
}

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

3. Assistant complet ReadTargetValue - Classe de script

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

  • minimum/maximum spécifie la plage acceptable du résultat de l'assistant, pas les paramètres API. L'assistant est complètement défini ; -1 est son propre signe de sortie de portée. Pour ID, la vérification stocke tout serial non nul, y compris le bit le plus significatif, au lieu de la plage.
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 value = ReadTargetValue(0, 65535);
        UO.Print("Checked value: " + Convert.ToString(value));
        return null;
    }

    dynamic ReadTargetValue(dynamic minimum, dynamic maximum)
    {
        var value = UO.LastTargetY();
        if (Truth(value < minimum) || Truth(value > maximum))
        {
            return -1;
        }

        return value;
    }

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

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 LastTargetY() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetY : bridge.GetY(bridge.LastTarget);

UO.LastTile

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

Signatures C#

string UO.LastTile();
int UO.LastTile(object? index);

Lit la dernière cible de tuile enregistrée.

Paramètres

  • index - Facultatif int 0..3 : 0=graphic, 1=X, 2=Y, 3=Z. Hors de portée - 0. Sans index, la ligne de l'enregistrement entier est renvoyée.

Valeur de retour

Sans arguments string "graphic X Y Z" avec champs décimaux ; avec index - int d'un champ. L'entrée manquante/courte est complétée par des zéros.

Comportement

  • NormalizeLastTile complète les champs manquants à quatre. La ligne ne contient pas map/hue/serial. La valeur 0 peut signifier un vrai graphic/coordonnée ou aucun champ.
  • La commande lit uniquement la cible de tuile enregistrée ; ne crée pas de cible et ne sélectionne pas de nouvelle cellule. WaitTargetTile("lasttile") utilise une vérification de présence d'enregistrement distincte.

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

1. Appel direct - script direct

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

  • Lit la dernière cible de tuile enregistrée.
UO.Print(UO.LastTile());

2. Option explicite - fonction de script

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

  • NormalizeLastTile complète les champs manquants à quatre. La ligne ne contient pas map/hue/serial. La valeur 0 peut signifier un vrai graphic/coordonnée ou aucun champ.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.LastTile(1));
    UO.Print(UO.LastTile(2));
    UO.Print(UO.LastTile(3));
    return null;
}

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

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

  • La commande lit uniquement la cible de tuile enregistrée ; ne crée pas de cible et ne sélectionne pas de nouvelle cellule. WaitTargetTile("lasttile") utilise une vérification de présence d'enregistrement distincte.
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 graphic = UO.LastTile(0);
        var x = UO.LastTile(1);
        var y = UO.LastTile(2);
        var z = UO.LastTile(3);
        UO.Print(Convert.ToString(graphic) + " " + Convert.ToString(x) + " " + Convert.ToString(y) + " " + Convert.ToString(z));
        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.LastTile() — UO.LastTile()

Paramètres: Aucun paramètre.

Résultat: string / String.

Pendant un appel:

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

public string LastTile()

        {

            int[] tileInfo = NormalizeLastTile(bridge.LastTile());



            return $"{tileInfo[0]} {tileInfo[1]} {tileInfo[2]} {tileInfo[3]}";

        }

UO.LastTile(index) — UO.LastTile(Any)

Paramètres: index (Any)

Résultat: int / Integer.

Pendant un appel:

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

public int LastTile(InjectionValue index)

        {

            var i = NumberConversions.ToInt(index);

            if (i < 0 || i > 3)

                return 0;



            return NormalizeLastTile(bridge?.LastTile())[i];



        }

UO.Target

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

Signatures C#

void UO.Target();
void UO.Target(object? @object);
void UO.Target(object? targetKey, object? target);
void UO.Target(object? targetKey, object? target, object? targetType, object? @type, object? x, object? y, object? z);

Annule/définit la cible attendue ou envoie un paquet cible explicite.

Paramètres

  • object — Un argument : serial/alias est placé via WaitTargetObject. Sans arguments - CancelTarget.
  • targetKey — Dans les formes 2/7 des arguments int de la requête cible ID, généralement UO.TargetID(). Il est transmis directement dans le package et ne nécessite aucune pression sur une touche.
  • target — Formulaire 2 : serial/alias ou "lasttile". Forme 7 : objet serial ; "ground" laisse serial=0.
  • targetType - Formulaire 7 uniquement : cible de type de protocole, généralement objet 0, tuile 1. Réductible à byte.
  • type - 7 forme uniquement : graphic et coordonnées mondiales pour la tuile/objet inconnu ; graphic/X/Y sont réduits à ushort, Z à sbyte. Pour un pont d'entité connu, les remplace par les champs d'entité réels.
  • x - 7 forme uniquement : graphic et coordonnées mondiales pour la tuile/objet inconnu ; graphic/X/Y sont réduits à ushort, Z à sbyte. Pour un pont d'entité connu, les remplace par les champs d'entité réels.
  • y - 7 forme uniquement : graphic et coordonnées mondiales pour la tuile/objet inconnu ; graphic/X/Y sont réduits à ushort, Z à sbyte. Pour un pont d'entité connu, les remplace par les champs d'entité réels.
  • z - 7 forme uniquement : graphic et coordonnées mondiales pour la tuile/objet inconnu ; graphic/X/Y sont réduits à ushort, Z à sbyte. Pour un pont d'entité connu, les remplace par les champs d'entité réels.

Valeur de retour

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

Comportement

  • Les formulaires sans argument suivent ExecuteLegacyManualAlias et contrôlent la file d'attente. Les formulaires 2/7 appellent Target directement et envoient Send_TargetObject, pas la file d'attente de la cible suivante.
  • Sous la forme 2, « lasttile » prend le graphic/X/Y/Z de la tuile cible stockée ; son absence affiche un message. Un alias d'objet inconnu affiche également un message. La forme 7 avec targetType=0 tente de résoudre serial ; les autres types laissent serial=0.
  • Bridge.Target ne vérifie pas le curseur/correspondance actif targetKey ; passer le courant ID. N'utilisez pas l'ancienne clé de la demande précédente. L'appel n'attend pas d'être accepté par le serveur.
  • Les formes explicites des arguments 2/7 envoient le paquet directement : le serial négatif devient 0, targetKey est réduit à uint ; cette branche n'efface pas le curseur/la file d'attente locale ni ne met à jour TicksTarget. TargetToObject/TargetToTile utilisent un chemin différent pour la visée active du client.

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

1. Appel direct - script direct

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

  • Annule/définit la cible attendue ou envoie un paquet cible explicite.
UO.Target("self");
UO.Print(UO.Waiting());
UO.Target();

2. Option explicite - fonction de script

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

  • Les formulaires sans argument suivent ExecuteLegacyManualAlias et contrôlent la file d'attente. Les formulaires 2/7 appellent Target directement et envoient Send_TargetObject, pas la file d'attente de la cible suivante.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.TargetPresent()))
    {
        UO.Target(UO.TargetID(), "self");
    }

    return null;
}

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

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

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

  • Bridge.Target ne vérifie pas le curseur/correspondance actif targetKey ; passer le courant ID. N'utilisez pas l'ancienne clé de la demande précédente. L'appel n'attend pas d'être accepté par le serveur.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.TargetPresent()))
        {
            UO.Target(UO.TargetID(), "ground", 1, 0, UO.GetX(), UO.GetY(), UO.GetZ());
        }

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

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 "target":

                    if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());

                    else CancelTarget();

                    break;

UO.Target(object) — UO.Target(Any)

Paramètres: object (Any)

Résultat: void / Unit.

Pendant un appel:

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

case "target":

                    if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());

                    else CancelTarget();

                    break;

UO.Target(targetKey, target) — UO.Target(Any,Any)

Paramètres: targetKey (Any), target (Any)

Résultat: void / Unit.

Pendant un appel:

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

public void Target(InjectionValue targetKey, InjectionValue target)

        {

            int key = NumberConversions.ToInt(targetKey);

            string selector = target.Kind == InjectionValueKind.String ? target.String : string.Empty;



            if (selector.Equals("lasttile", StringComparison.OrdinalIgnoreCase))

            {

                int[] tile = bridge.LastTile() ?? Array.Empty<int>();

                if (tile.Length >= 4)

                    bridge.Target(key, 0, 1, tile[0], tile[1], tile[2], tile[3]);

                else

                    SystemMessage("UO.Target: lasttile is unavailable");

                return;

            }



            if (TryGetObject(target, out int serial))

                bridge.Target(key, serial, 0, 0, 0, 0, 0);

            else

                SystemMessage($"UO.Target: invalid target '{selector}'");

        }

UO.Target(targetKey, target, targetType, type, x, y, z) — UO.Target(Any,Any,Any,Any,Any,Any,Any)

Paramètres: targetKey (Any), target (Any), targetType (Any), type (Any), x (Any), y (Any), z (Any)

Résultat: void / Unit.

Pendant un appel:

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

public void Target

        (

            InjectionValue targetKey,

            InjectionValue target,

            InjectionValue targetType,

            InjectionValue type,

            InjectionValue x,

            InjectionValue y,

            InjectionValue z

        )

        {

            int targetTypeValue = NumberConversions.ToInt(targetType);

            string selector = target.Kind == InjectionValueKind.String ? target.String : string.Empty;

            int serial = 0;



            if (targetTypeValue == 0 && !selector.Equals("ground", StringComparison.OrdinalIgnoreCase))

                TryGetObject(target, out serial);



            bridge.Target

            (

                NumberConversions.ToInt(targetKey),

                serial,

                targetTypeValue,

                ResolveType(type),

                NumberConversions.ToInt(x),

                NumberConversions.ToInt(y),

                NumberConversions.ToInt(z)

            );

        }

UO.TargetByResource

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

Signatures C#

void UO.TargetByResource(object? objID, object? resource);

Recherche un élément à graphic, prépare une cible donnée et utilise l'élément trouvé.

Paramètres

  • objID — Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir.
  • resource — Graphique/type d'élément à rechercher, ResolveType autorisé ; ce n'est pas le numéro du champ ressource de Pascal API.

Valeur de retour

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

Comportement

  • Dans cette implémentation, FindType(ResolveType(Resource), -1, 0, -1, true) recherche un élément. Si trouvé != 0, d'abord bridge.WaitTargetObject(ObjID), puis bridge.UseObject(found).
  • Rien n'a été trouvé - rien n'est installé ou utilisé. La commande n’envoie pas de paquet de ressource-cible distinct ; scope=0 sélectionne les éléments avec RootContainer=Player.Serial, y compris le contenu/l'équipement de l'inventaire ; recursive=true est passé à bridge, mais cette branche scope0 elle-même utilise RootContainer.

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.TargetByResource");
UO.TargetByResource("self", "0x0E21");

1. Appel direct - script direct

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

  • Recherche un élément à graphic, prépare une cible donnée et utilise l'élément trouvé.
UO.TargetByResource("self", "0x0E21");

2. Option explicite - fonction de script

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

  • Dans cette implémentation, FindType(ResolveType(Resource), -1, 0, -1, true) recherche un élément. Si trouvé != 0, d'abord bridge.WaitTargetObject(ObjID), puis bridge.UseObject(found).
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        UO.TargetByResource("lasttarget", "0x0E21");
    }

    return null;
}

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

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

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

  • Rien n'a été trouvé - rien n'est installé ou utilisé. La commande n’envoie pas de paquet de ressource-cible distinct ; scope=0 sélectionne les éléments avec RootContainer=Player.Serial, y compris le contenu/l'équipement de l'inventaire ; recursive=true est passé à bridge, mais cette branche scope0 elle-même utilise RootContainer.
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.TargetByResource("self", "0x0E21");
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        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.TargetByResource(objID, resource) — UO.TargetByResource(Any,Any)

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

Résultat: void / Unit.

Pendant un appel:

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

case "targetbyresource":

                {

                    int found = bridge.FindType(ResolveType(arguments[1]), -1, 0, -1, true);

                    if (found != 0) { bridge.WaitTargetObject(Arg(0)); bridge.UseObject(found); }

                    return InjectionValue.Unit;

                }

UO.TargetID

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

Signatures C#

dynamic UO.TargetID();

Lit l'ID du curseur cible actuel.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int - 32 bit ID du curseur, pas serial du dernier objet. S'il n'y a pas de curseur, 0 est renvoyé. Si le bit de poids fort est activé, int est négatif ; Int2Hex sauvegarde ses bits. Le réel cursorID=0 et la portée locale peuvent également donner 0 : vérifiez TargetPresent pour l'activité. Dans ce client, la substitution spéciale non nulle du nul ID n'est pas utilisée.

Comportement

  • LastTarget/GetSerial("lasttarget") fait référence à l'objet sélectionné, TargetID fait référence à la requête cible. Ces valeurs ne peuvent pas être remplacées les unes par les autres.

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

1. Imprimer ID du curseur actif - script direct

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

  • Il n'y a pas d'arguments.
  • Int2Hex vous permet de voir tous les bits de ID, y compris le bit le plus significatif.
if (Truth(UO.TargetPresent()))
{
    UO.Print(UO.Int2Hex(UO.TargetID()));
}

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

2. Distinguer deux types ID - fonction de script

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

  • curseur — ID de la vue, object — serial de l'objet.
  • Dans TargetToObject, object est passé, pas le curseur.
return  RunScenario();
 object? RunScenario()
{
    var cursor = UO.TargetID();
    var targetSerial = UO.GetSerial("lasttarget");
    UO.Print("Cursor: " + UO.Int2Hex(cursor));
    UO.Print("Object: " + targetSerial);
    return null;
}

3. Vérification après attente - Classe de script

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

  • 1000 — délai d'attente en millisecondes.
  • Le signe d'occurrence est le résultat WaitForTarget ; Le signe du curseur n'est pas vérifié pour cela.
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.WaitForTarget(1000)))
        {
            var cursor = UO.TargetID();
            UO.Print("Request: " + UO.Int2Hex(cursor));
        }
        else
        {
            UO.Print("No cursor arrived");
        }

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

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

UO.TargetPresent

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

Signatures C#

dynamic UO.TargetPresent();

Vérifie un curseur de sélection de cible actif dans le client.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int 1 - TargetManager.IsTargeting installé ; 0 - aucun curseur actif. La cible de rappel locale est également prise en compte. Ce n'est pas serial ou l'état de file d'attente WaitTarget.

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 l'état une fois ; n'attend pas que le curseur apparaisse.
  • Pour attendre un réticule du serveur après une action de jeu, utilisez WaitForTarget. Pour le résultat du local ClientRequest* - WaitForClientTargetResponse.

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

1. Afficher l'état - script direct

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

  • Il n'y a pas d'arguments.
  • 1 ou 0 s'affiche.
UO.Print(Convert.ToString(UO.TargetPresent()));

2. Annuler le curseur ouvert - fonction de script

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

  • La condition est vérifiée par le curseur actif.
  • CancelTarget dans ce client efface également les réponses préparées.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.TargetPresent()))
    {
        UO.CancelTarget();
    }

    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. Après avoir demandé une action de jeu - classe de script

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

  • UseSkill demande la compétence, WaitForTarget attend jusqu'à 3000 ms.
  • TargetToObject répond uniquement à la cible du serveur actif ; S'il y a un délai d'attente, la branche n'est pas exécuté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()
    {
        UO.UseSkill("Anatomy");
        if (Truth(UO.WaitForTarget(3000)))
        {
            if (Truth(UO.TargetPresent()))
            {
                UO.TargetToObject("self");
            }
        }

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

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 "targetpresent": return new InjectionValue(IsTargeting());

UO.TargetToObject

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

Signatures C#

void UO.TargetToObject(object? objID);

Répond immédiatement à un objet serial cible de serveur déjà actif.

Paramètres

  • objID — Série/ID d'un élément ou d'un caractère, d'un nombre ou d'une chaîne hexadécimale/décimale, self/backpack/lasttarget/lastobject ou d'un nom enregistré AddObject. Ce n'est pas type. Avant d'agir sur un objet nommé, vérifiez Exists ; un alias non résolu donne serial 0.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • Sans curseur de serveur actif, il ne fait rien et ne crée pas de réponse différée. Pour une préparation préliminaire, utilisez WaitTargetObject/WaitTargetTile/WaitTargetXYZ.
  • Les ClientRequest* locaux et autres vues de rappel ne sont pas traités par cette commande.
  • Le serveur détermine si la cible est valide. Pour un serial saturé de mémoire, ID est envoyé avec zéro champ graphique/coordonnée.

Scripts C# autonomes

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

Exemple simple

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

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

UO.Print("Calling UO.TargetToObject");
UO.TargetToObject("self");

1. Répondre à open Sight - script direct

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

  • Les paramètres définissent le personnage lui-même.
  • Rien n’est ajouté à la future file d’attente des portées.
if (Truth(UO.TargetPresent()))
{
    UO.TargetToObject("self");
}

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

2. Attendez d'abord la vue - fonction de script

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

  • 3000 — attente maximale en millisecondes ; L'action qui a demandé la vue doit être effectuée préalablement.
  • La commande n'est appelée qu'après l'apparition du viseur ; l'action du jeu peut alors se terminer par une panne du serveur.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitForTarget(3000)))
    {
        UO.TargetToObject("self");
    }
    else
    {
        UO.Print("Target timeout");
    }

    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. Vérifier la réponse différée - classe de script

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

  • CancelTarget ferme l'ancien viseur et efface la file d'attente.
  • En l’absence d’un nouveau périmètre, le défi ne crée pas d’anticipation. La sortie de la file d'attente reste 0 à moins qu'un autre script ne la modifie.
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.CancelTarget();
        UO.TargetToObject("self");
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        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.TargetToObject(objID) — UO.TargetToObject(Any)

Paramètres: objID (Any)

Résultat: void / Unit.

Pendant un appel:

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

case "targettoobject": bridge.TargetToObject(Arg(0)); return InjectionValue.Unit;

UO.TargetToTile

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

Signatures C#

void UO.TargetToTile(object? tile, object? x, object? y, object? z);

Répond immédiatement à une cible de serveur déjà active avec les coordonnées des tuiles.

Paramètres

  • tile - Tuile Graphique/type, 0..65535, pas serial. Zéro indique une cible de coordonnées sans graphiques spécifiés.
  • x — Coordonnée du monde X sur la carte actuelle, 0..65535. Il ne s'agit pas d'un pixel d'écran ou d'une coordonnée Gump.
  • y — Coordonnée Y du monde sur la carte actuelle, 0..65535.
  • z - Hauteur du point de jeu, pour une cible réseau, utilisez -128..127. Il ne s'agit pas d'un sol ou d'une couche d'équipement.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • Sans curseur de serveur actif, il ne fait rien et ne crée pas de réponse différée. Pour une préparation préliminaire, utilisez WaitTargetObject/WaitTargetTile/WaitTargetXYZ.
  • Les ClientRequest* locaux et autres vues de rappel ne sont pas traités par cette commande.
  • Une cible avec graphic=0 nécessite un réticule ; Le viseur d'objet n'accepte pas le sol.

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.TargetToTile");
UO.TargetToTile(0x0CCA, 1445, 1690, 0);

1. Répondre à open Sight - script direct

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

  • Les paramètres donnent un exemple de point réel : remplacez les coordonnées et graphic par les valeurs souhaitées.
  • Rien n’est ajouté à la future file d’attente des portées.
if (Truth(UO.TargetPresent()))
{
    UO.TargetToTile(0x0CCA, 1445, 1690, 0);
}

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

2. Attendez d'abord la vue - fonction de script

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

  • 3000 — attente maximale en millisecondes ; L'action qui a demandé la vue doit être effectuée préalablement.
  • La commande n'est appelée qu'après l'apparition du viseur ; l'action du jeu peut alors se terminer par une panne du serveur.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitForTarget(3000)))
    {
        UO.TargetToTile(0x0CCA, 1445, 1690, 0);
    }
    else
    {
        UO.Print("Target timeout");
    }

    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. Vérifier la réponse différée - classe de script

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

  • CancelTarget ferme l'ancien viseur et efface la file d'attente.
  • En l’absence d’un nouveau périmètre, le défi ne crée pas d’anticipation. La sortie de la file d'attente reste 0 à moins qu'un autre script ne la modifie.
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.CancelTarget();
        UO.TargetToTile(0x0CCA, 1445, 1690, 0);
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        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.TargetToTile(tile, x, y, z) — UO.TargetToTile(Any,Any,Any,Any)

Paramètres: tile (Any), x (Any), y (Any), z (Any)

Résultat: void / Unit.

Pendant un appel:

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

case "targettotile":

                    bridge.TargetToTile(Arg(0), Arg(1), Arg(2), Arg(3)); return InjectionValue.Unit;

UO.TargetToXYZ

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

Signatures C#

void UO.TargetToXYZ(object? x, object? y, object? z);

Répond immédiatement à une cible de serveur déjà active avec les coordonnées des tuiles.

Paramètres

  • x — Coordonnée du monde X sur la carte actuelle, 0..65535. Il ne s'agit pas d'un pixel d'écran ou d'une coordonnée Gump.
  • y — Coordonnée Y du monde sur la carte actuelle, 0..65535.
  • z - Hauteur du point de jeu, pour une cible réseau, utilisez -128..127. Il ne s'agit pas d'un sol ou d'une couche d'équipement.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • Sans curseur de serveur actif, il ne fait rien et ne crée pas de réponse différée. Pour une préparation préliminaire, utilisez WaitTargetObject/WaitTargetTile/WaitTargetXYZ.
  • Les ClientRequest* locaux et autres vues de rappel ne sont pas traités par cette commande.
  • Une cible avec graphic=0 nécessite un réticule ; Le viseur d'objet n'accepte pas le sol.

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.TargetToXYZ");
UO.TargetToXYZ(1445, 1690, 0);

1. Répondre à open Sight - script direct

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

  • Les paramètres donnent un exemple de point réel : remplacez les coordonnées et graphic par les valeurs souhaitées.
  • Rien n’est ajouté à la future file d’attente des portées.
if (Truth(UO.TargetPresent()))
{
    UO.TargetToXYZ(1445, 1690, 0);
}

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

2. Attendez d'abord la vue - fonction de script

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

  • 3000 — attente maximale en millisecondes ; L'action qui a demandé la vue doit être effectuée préalablement.
  • La commande n'est appelée qu'après l'apparition du viseur ; l'action du jeu peut alors se terminer par une panne du serveur.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitForTarget(3000)))
    {
        UO.TargetToXYZ(1445, 1690, 0);
    }
    else
    {
        UO.Print("Target timeout");
    }

    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. Vérifier la réponse différée - classe de script

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

  • CancelTarget ferme l'ancien viseur et efface la file d'attente.
  • En l’absence d’un nouveau périmètre, le défi ne crée pas d’anticipation. La sortie de la file d'attente reste 0 à moins qu'un autre script ne la modifie.
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.CancelTarget();
        UO.TargetToXYZ(1445, 1690, 0);
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        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.TargetToXYZ(x, y, z) — UO.TargetToXYZ(Any,Any,Any)

Paramètres: x (Any), y (Any), z (Any)

Résultat: void / Unit.

Pendant un appel:

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

case "targettoxyz":

                    bridge.TargetToTile(0, Arg(0), Arg(1), Arg(2)); return InjectionValue.Unit;

UO.Targeting

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

Signatures C#

int UO.Targeting();

Vérifie un curseur de sélection de cible actif dans le client.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int 1 - TargetManager.IsTargeting installé ; 0 - aucun curseur actif. La cible de rappel locale est également prise en compte. Ce n'est pas serial ou l'état de file d'attente WaitTarget.

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 l'état une fois ; n'attend pas que le curseur apparaisse.
  • Pour attendre un réticule du serveur après une action de jeu, utilisez WaitForTarget. Pour le résultat du local ClientRequest* - WaitForClientTargetResponse.

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

1. Afficher l'état - script direct

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

  • Il n'y a pas d'arguments.
  • 1 ou 0 s'affiche.
UO.Print(Convert.ToString(UO.Targeting()));

2. Annuler le curseur ouvert - fonction de script

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

  • La condition est vérifiée par le curseur actif.
  • CancelTarget dans ce client efface également les réponses préparées.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Targeting()))
    {
        UO.CancelTarget();
    }

    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. Après avoir demandé une action de jeu - classe de script

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

  • UseSkill demande la compétence, WaitForTarget attend jusqu'à 3000 ms.
  • TargetToObject répond uniquement à la cible du serveur actif ; S'il y a un délai d'attente, la branche n'est pas exécuté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()
    {
        UO.UseSkill("Anatomy");
        if (Truth(UO.WaitForTarget(3000)))
        {
            if (Truth(UO.Targeting()))
            {
                UO.TargetToObject("self");
            }
        }

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

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

UO.TicksTarget

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

Signatures C#

int UO.TicksTarget();

Lit le dernier horodatage de provisionnement de la cible via WaitTargetObject/WaitTargetTile et leurs shells appelants.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int — la valeur de UO.Timer au moment de la préparation, en dixièmes de seconde à partir du début de l'exécution. Avant la première formation de ce type - 0. Il s'agit d'une marque, pas d'une durée d'attente, pas d'une milliseconde, ni d'un objectif ID.

Comportement

  • Immédiat TargetToObject/TargetToTile/TargetToXYZ ne prépare pas la file d'attente et ne met pas à jour cette marque.
  • Certaines commandes de recherche transmettent la réponse directement via le pont ; TicksTarget n'est pas le temps universel de tout changement de cible.

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

1. Rappelez-vous le moment de la préparation - script direct

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

  • Il n’y a pas d’arguments ; WaitTargetSelf met à jour l'élévation.
  • le timbre se mesure en dixièmes de seconde.
UO.WaitTargetSelf();
var stamp = UO.TicksTarget();
UO.Print(Convert.ToString(stamp));
UO.CancelWaitTarget();

2. Calculer le temps écoulé - Fonction de script

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

  • UO.Wait=250 millisecondes.
  • En raison de la nature discrète de la marque, le temps écoulé est généralement 2 ou 3 plutôt que 250.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.WaitTargetObject("self");
    await Delay(250);
    var elapsed = UO.Timer() - UO.TicksTarget();
    UO.Print("Tenths: " + Convert.ToString(elapsed));
    UO.CancelWaitTarget();
    return null;
}

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

3. Assurez-vous de la même heure pour le numérique serial - classe de scénario

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

  • selfId - int serial de votre personnage.
  • La forme numérique met à jour la marque comme la forme chaîne ; TicksTarget n'a aucun paramètre.
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 selfId = UO.Hex2Int(UO.GetSerial("self"));
        UO.WaitTargetObject(selfId);
        UO.Print(Convert.ToString(UO.TicksTarget()));
        UO.CancelWaitTarget();
        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.TicksTarget() — UO.TicksTarget()

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 TicksTarget() => ticksTarget;

UO.WaitForClientTargetResponse

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

Signatures C#

dynamic UO.WaitForClientTargetResponse(object? maxWaitTimeMS);

Attend la fin de la sélection locale ClientRequestObjectTarget/ClientRequestTileTarget.

Paramètres

  • maxWaitTimeMS — Durée maximale en millisecondes. 0 et les valeurs négatives donnent un chèque, sans attendre indéfiniment.

Valeur de retour

int 1 - la réponse a déjà été reçue, y compris l'annulation ; 0 - le délai d'attente a expiré. Pour 1, vérifiez toujours la longueur de ClientTargetResponse. Avec 0, le curseur lui-même ne se ferme pas automatiquement.

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

  • L'attente se produit dans le thread de script à des intervalles allant jusqu'à 25 ms et est interrompue par l'arrêt du script.
  • Sans le précédent ClientRequest*, la nouvelle sélection ne démarre pas.

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

1. Sélectionnez un élément ou un personnage - script direct

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

  • 5000 — cliquez sur le délai d'attente en millisecondes. La nouvelle requête réinitialise le résultat précédent.
  • Un tableau de cinq champs indique l'objet sélectionné. result[0] est serial, pas type.
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Serial: " + UO.Int2Hex(result[0]));
    }
    else
    {
        UO.Print("Selection cancelled");
    }
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Lire les coordonnées de la tuile sélectionnée - fonction script

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

  • résultat[1] - graphic, résultat[2]/[3]/[4] - X/Y/Z. La tuile monde serial a un résultat[0] égal à 0.
  • Le type, les coordonnées et serial sont des champs distincts. Il n'y a pas d'index de couche statique dans ce tableau.
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestTileTarget();
    if (Truth(UO.WaitForClientTargetResponse(5000)))
    {
        var result = UO.ClientTargetResponse();
        if (Truth(ArrayLength(result) == 5))
        {
            UO.Print("Type: " + UO.Int2Hex(result[1]));
            UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
        }
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Délai d'expiration séparé de la structure de réponse complète - classe de script

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

  • Le délai d'attente est spécifié en millisecondes. Une attente réussie signifie une réponse dont le contenu doit être vérifié séparément.
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.ClientRequestTileTarget();
        int ready = UO.WaitForClientTargetResponse(3000);
        if (ready == 0)
        {
            UO.CancelTarget();
            UO.Print("Selection timed out");
            return false;
        }

        var response = (object? [])UO.ClientTargetResponse();
        if (response.Length != 5)
            return false;
        UO.Print($"Tile coordinates: {response[2]}, {response[3]}, {response[4]}");
        return true;
        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.WaitForClientTargetResponse(maxWaitTimeMS) — UO.WaitForClientTargetResponse(Any)

Paramètres: maxWaitTimeMS (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "waitforclienttargetresponse": return new InjectionValue(bridge.WaitForClientTargetResponse(Arg(0)));

UO.WaitForTarget

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

Signatures C#

dynamic UO.WaitForTarget(object? maxWaitTimeMS);

Attend que le curseur cible actif apparaisse dans le délai imparti.

Paramètres

  • maxWaitTimeMS — Attente maximale en millisecondes. Les valeurs nulles et négatives donnent un contrôle immédiat ; Ce n'est pas une attente interminable.

Valeur de retour

int 1 — le curseur était actif lors de la vérification ; 0 - timeout sans curseur. La cible de rappel locale satisfait également à ce test. Ceci ne constitue pas une confirmation de l'utilisation du WaitTarget préparé : la réponse automatique a peut-être déjà utilisé le curseur avant la vérification.

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 vérification est effectuée avec des pauses allant jusqu'à 25 ms dans le fil de script et peut être interrompue en l'arrêtant.
  • La méthode elle-même ne crée pas de réticule ni ne sélectionne de cible.

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

1. Attendez la vue des compétences - script direct

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

  • MaxWaitTimeMS=3000, alors self est sélectionné.
  • WaitTargetSelf n'est pas prédéfini : cet exemple répond explicitement.
UO.UseSkill("Anatomy");
if (Truth(UO.WaitForTarget(3000)))
{
    UO.TargetToObject("self");
}

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

2. Une vérification - fonction de script

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

  • MaxWaitTimeMS=0.
  • prêt - 1 ou 0 ; Il n'y a pas de longue pause.
return  RunScenario();
 object? RunScenario()
{
    var ready = UO.WaitForTarget(0);
    UO.Print(Convert.ToString(ready));
    return null;
}

3. Gérer le délai d'attente - Classe de script

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

  • 500 - une demi-seconde.
  • L'absence de vue peut signifier que l'action a échoué ou est en cours de traitement automatique : consultez le journal de jeu.
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.WaitForTarget(500) == 0))
        {
            UO.CancelWaitTarget();
            UO.Print("Cursor did not arrive");
        }

        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.WaitForTarget(maxWaitTimeMS) — UO.WaitForTarget(Any)

Paramètres: maxWaitTimeMS (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "waitfortarget": return new InjectionValue(bridge.WaitUntilTargeting(Arg(0)));

UO.WaitTarget

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

Signatures C#

void UO.WaitTarget(object? target);
void UO.WaitTarget(object? target, object? @type);
void UO.WaitTarget(object? target, object? @type, object? color);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety, object? nearest);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety, object? nearest, object? maxZ);

Place serial dans la file d'attente de la prochaine demande de cible, ou sélectionne une cible à l'aide de filtres.

Paramètres

  • target — Positif autorisé serial/alias est défini directement, les autres paramètres sont ignorés. 0 ou -1 active la recherche ; une autre sentinelle numérique annule la cible suivante.
  • type - Facultatif graphic/type ou masque de type ; -1 sans limitation. Les types nommés sont résolus par ResolveType/ParseTypeMask.
  • color - Optionnel hue : -1 ou 0xFFFF sans limitation.
  • distance — Distance maximale facultative dans les cellules ; la valeur par défaut est GetFindDistance. L'analyse ResolveCompactDistance autorise des valeurs spéciales en fonction du paramètre de recherche.
  • notoriety - Notoriété numéro/masque optionnelle. Un masque non vide restreint les candidats mobiles ; sans cela, les mobiles et les articles world sont pris en compte.
  • nearest - Optionnel bool, par défaut true : trie par distance, puis serial.
  • maxZ — Abs maximum facultatif (Z-selfZ), par défaut GetFindVertical.

Valeur de retour

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

Comportement

  • Lors de la recherche, exclut self, serial=0, la liste d'ignorés standard et les filtres sélectionnés nommés type ; les doublons sont supprimés. Le positif direct serial ne passe pas ces filtres.
  • La recherche lit uniquement les objets chargés. Aucune correspondance/sentinelle invalide - message et CancelNextTarget. Une sélection réussie appelle WaitTargetObject et met à jour TicksTarget. WaitTarget lui-même n'utilise pas l'élément, n'ouvre pas la cible et n'attend pas que le serveur le traite.

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.WaitTarget");
UO.WaitTarget("self");

1. Appel direct - script direct

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

  • Place serial dans la file d'attente de la prochaine demande de cible, ou sélectionne une cible à l'aide de filtres.
UO.WaitTarget("self");

2. Option explicite - fonction de script

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

  • Lors de la recherche, exclut self, serial=0, la liste d'ignorés standard et les filtres sélectionnés nommés type ; les doublons sont supprimés. Le positif direct serial ne passe pas ces filtres.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTarget(0, -1, -1, 10, 3, true, 20);
    return null;
}

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

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

  • La recherche lit uniquement les objets chargés. Aucune correspondance/sentinelle invalide - message et CancelNextTarget. Une sélection réussie appelle WaitTargetObject et met à jour TicksTarget. WaitTarget lui-même n'utilise pas l'élément, n'ouvre pas la cible et n'attend pas que le serveur le traite.
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.WaitTarget("lasttarget");
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        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.WaitTarget(target) — UO.WaitTarget(Any)

Paramètres: target (Any)

Résultat: void / Unit.

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.

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type) — UO.WaitTarget(Any,Any)

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

Résultat: void / Unit.

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.

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color) — UO.WaitTarget(Any,Any,Any)

Paramètres: target (Any), type (Any), color (Any)

Résultat: void / Unit.

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.

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance) — UO.WaitTarget(Any,Any,Any,Any)

Paramètres: target (Any), type (Any), color (Any), distance (Any)

Résultat: void / Unit.

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.

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance, notoriety) — UO.WaitTarget(Any,Any,Any,Any,Any)

Paramètres: target (Any), type (Any), color (Any), distance (Any), notoriety (Any)

Résultat: void / Unit.

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.

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance, notoriety, nearest) — UO.WaitTarget(Any,Any,Any,Any,Any,Any)

Paramètres: target (Any), type (Any), color (Any), distance (Any), notoriety (Any), nearest (Any)

Résultat: void / Unit.

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.

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance, notoriety, nearest, maxZ) — UO.WaitTarget(Any,Any,Any,Any,Any,Any,Any)

Paramètres: target (Any), type (Any), color (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any)

Résultat: void / Unit.

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.

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTargetGround

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

Signatures C#

void UO.WaitTargetGround(object? @type);
void UO.WaitTargetGround(object? @type, object? color);

Recherche un élément à graphic/hue et le place dans la file d'attente de la cible suivante.

Paramètres

  • type - Graphique/type int, chaîne hexadécimale ou ensemble nommé type. Ce n'est pas un article serial.
  • color - Facultatif int hue ; par défaut -1 - n'importe quelle couleur.

Valeur de retour

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

Comportement

  • Portée : ground/sélecteur de conteneur 1 sans recherche récursive. Bridge.FindType renvoie le serial trouvé ; lorsque serial>0 bridge.WaitTargetObject est appelé. Ces méthodes ne mettent pas directement à jour le runtime TicksTarget.
  • Aucun élément - message et CancelNextTarget. La recherche peut modifier le général FindItem/FoundItems ; La commande n'utilise pas l'élément trouvé et n'attend pas le curseur.

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.WaitTargetGround");
UO.WaitTargetGround("0x0E21");

1. Appel direct - script direct

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

  • Recherche un élément à graphic/hue et le place dans la file d'attente de la cible suivante.
UO.WaitTargetGround("0x0E21");

2. Option explicite - fonction de script

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

  • Portée : ground/sélecteur de conteneur 1 sans recherche récursive. Bridge.FindType renvoie le serial trouvé ; lorsque serial>0 bridge.WaitTargetObject est appelé. Ces méthodes ne mettent pas directement à jour le runtime TicksTarget.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTargetGround("0x0E21", -1);
    return null;
}

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

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

  • Aucun élément - message et CancelNextTarget. La recherche peut modifier le général FindItem/FoundItems ; La commande n'utilise pas l'élément trouvé et n'attend pas le curseur.
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.WaitTargetGround("0x0E21", -1);
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        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.WaitTargetGround(type) — UO.WaitTargetGround(Any)

Paramètres: type (Any)

Résultat: void / Unit.

Pendant un appel:

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

public void WaitTargetGround(InjectionValue type) => WaitTargetGround(type, new InjectionValue(-1));

UO.WaitTargetGround(type, color) — UO.WaitTargetGround(Any,Any)

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

Résultat: void / Unit.

Pendant un appel:

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

public void WaitTargetGround(InjectionValue type, InjectionValue color)

        {

            int item = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);

            if (item <= 0)

            {

                SystemMessage("No ground item found. Next target request will be canceled");

                bridge.CancelNextTarget();

            }

            else

                bridge.WaitTargetObject(item);

        }

UO.WaitTargetLast

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

Signatures C#

void UO.WaitTargetLast();

Prépare une réponse à la prochaine cible du serveur via l'alias lasttarget.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • L'équipe prépare uniquement une réponse : elle n'utilise pas l'objet, la compétence ou le sort lui-même. La cible serveur suivante reçoit la cible préparée lors du traitement de la trame client.
  • Les appels consécutifs forment une file d'attente client commune. Les objets et les coordonnées cibles sont traités un par un ; les fenêtres de sélection locale ClientRequest*/Info/container ne le consomment pas.
  • CancelWaitTarget efface la file d'attente. TerminateAll le nettoie entièrement ; l'arrêt d'une procédure en cours d'exécution invalide également ses propres réponses en attente. L'exécution d'une courte procédure n'annule normalement pas la cible préparée.
  • L'envoi d'une réponse ne garantit pas une action sur le serveur : il vérifie la portée, l'accessibilité de l'objet, la visibilité et les règles d'action. Pour contrôler, utilisez le résultat du jeu et le journal.

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

1. Préparer la cible - script direct

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

  • Il n’y a pas d’arguments ; lasttarget est utilisé.
  • La commande n'ouvre pas le viseur et n'effectue pas l'action elle-même.
UO.WaitTargetLast();

2. Vérifier la présence de l'objet sélectionné - fonction script

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

  • lasttarget doit se résoudre sur le personnage chargé pour cette compétence.
  • La vérification Exists élimine l'objet inconnu ; le choix du type d'objet et la validité des compétences restent des conditions du script.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        UO.CancelWaitTarget();
        UO.WaitTargetLast();
        UO.UseSkill("Anatomy");
    }

    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. Annuler la cible préparée - Classe de script

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

  • IsWaitTargetActive vérifie la file d'attente de réponses.
  • CancelWaitTarget annule la préparation sans fermer le réticule personnalisé déjà ouvert.
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.WaitTargetLast();
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelWaitTarget();
        }

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

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.

public void WaitTargetLast() => WaitTargetObject("lasttarget");

UO.WaitTargetObject

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

Signatures C#

void UO.WaitTargetObject(object? objID);
void UO.WaitTargetObject(object? id1, object? id2);

Prépare une ou deux réponses serial consécutives aux vues du serveur.

Paramètres

  • objID / id1 / id2 — Série/ID d'un élément ou d'un caractère, d'un nombre ou d'une chaîne hexadécimale/décimale, self/backpack/lasttarget/lastobject ou d'un nom enregistré AddObject. Ce n'est pas type. Avant d'agir sur un objet nommé, cochez Exists ; un alias non résolu donne serial 0. Un seul argument spécifie un objectif. Les formes numériques et chaîne mettent à jour TicksTarget de la même manière.
  • objID — Série/ID d'un élément ou d'un caractère, d'un nombre ou d'une chaîne hexadécimale/décimale, self/backpack/lasttarget/lastobject ou d'un nom enregistré AddObject. Ce n'est pas type. Avant d'agir sur un objet nommé, cochez Exists ; un alias non résolu donne serial 0. Un seul argument spécifie un objectif. Les formes numériques et chaîne mettent à jour TicksTarget de la même manière.
  • id1 — Série/ID d'un élément ou d'un caractère, d'un nombre ou d'une chaîne hexadécimale/décimale, self/backpack/lasttarget/lastobject ou d'un nom enregistré AddObject. Ce n'est pas type. Avant d'agir sur un objet nommé, vérifiez Exists ; un alias non résolu donne serial 0. Le premier objectif du formulaire est constitué de deux lignes.
  • id2 — Série/ID d'un élément ou d'un caractère, d'un nombre ou d'une chaîne hexadécimale/décimale, self/backpack/lasttarget/lastobject ou d'un nom enregistré AddObject. Ce n'est pas type. Avant d'agir sur un objet nommé, vérifiez Exists ; un alias non résolu donne serial 0. Le deuxième objectif du formulaire est composé de deux lignes ; s’applique au périmètre individuel suivant.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • L'équipe prépare uniquement une réponse : elle n'utilise pas l'objet, la compétence ou le sort lui-même. La cible serveur suivante reçoit la cible préparée lors du traitement de la trame client.
  • Les appels consécutifs forment une file d'attente client commune. Les objets et les coordonnées cibles sont traités un par un ; les fenêtres de sélection locale ClientRequest*/Info/container ne le consomment pas.
  • CancelWaitTarget efface la file d'attente. TerminateAll le nettoie entièrement ; l'arrêt d'une procédure en cours d'exécution invalide également ses propres réponses en attente. L'exécution d'une courte procédure n'annule normalement pas la cible préparée.
  • L'envoi d'une réponse ne garantit pas une action sur le serveur : il vérifie la portée, l'accessibilité de l'objet, la visibilité et les règles d'action. Pour contrôler, utilisez le résultat du jeu et le journal.

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.WaitTargetObject");
UO.WaitTargetObject("self");

1. Pré-sélectionnez-vous pour une compétence - script direct

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

  • id="self" - serial de votre personnage. CancelWaitTarget supprime les réponses précédemment préparées.
  • UseSkill demande une compétence ; son viseur de serveur reçoit une cible préparée.
UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");

2. Sélectionnez un objet connu par numérique serial - fonction de script

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

  • objectId - exemple serial : remplacez par le vôtre. Ce n'est pas graphic/type.
  • Ici, la cible vient d'être préparée. L'étape suivante du script doit appeler une action qui attend réellement la cible.
return  RunScenario();
 object? RunScenario()
{
    var objectId = 0x40001234;
    if (Truth(UO.Exists(objectId)))
    {
        UO.WaitTargetObject(objectId);
        UO.Print("Object target prepared");
    }

    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. Deux vues : le premier objet et le deuxième objet - la classe de script

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

  • la source et la destination sont des noms prédéfinis AddObject. GetSerial renvoie les lignes correspondant au formulaire id1/id2.
  • Le premier serveur utilise le premier, le second - le second. Convient uniquement pour l'action avec deux viseurs séquentiels ; Éliminez une deuxième cible inutile avant d’entreprendre une autre action.
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 first = UO.GetSerial("source");
        var second = UO.GetSerial("destination");
        if (Truth(UO.Exists(first)) && Truth(UO.Exists(second)))
        {
            UO.CancelWaitTarget();
            UO.WaitTargetObject(first, second);
        }

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

Paramètres: objID (Any/String)

Résultat: void / Unit.

Pendant un appel:

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

case "waittargetobject": WaitTargetObject(Arg(0)); return InjectionValue.Unit;

UO.WaitTargetObject(objID) — UO.WaitTargetObject(String)

Paramètres: objID (Any/String)

Résultat: void / Unit.

Pendant un appel:

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

public void WaitTargetObject(string id) => WaitTargetObject(GetObject(id));

UO.WaitTargetObject(id1, id2) — UO.WaitTargetObject(String,String)

Paramètres: id1 (String), id2 (String)

Résultat: void / Unit.

Pendant un appel:

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

public void WaitTargetObject(string id1, string id2) => WaitTargetObject(GetObject(id1), GetObject(id2));

UO.WaitTargetObjectType

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

Signatures C#

void UO.WaitTargetObjectType(object? id, object? @type);
void UO.WaitTargetObjectType(object? id, object? @type, object? color);

Prépare deux cibles séquentielles : un objet donné et un objet trouvé au sol.

Paramètres

  • id — Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir.
  • type — Graphique/type du deuxième élément, int/hex/type nommé.
  • color - Optionnel hue du deuxième sujet ; -1 n'importe lequel par défaut.

Valeur de retour

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

Comportement

  • Autorise d'abord serial à GetObject ; le second recherche FindType(type,color,1,-1,false). Si les deux sont positifs, appelle bridge.WaitTargetObject(premier,second). L'ordre des cibles est maintenu.
  • Si au moins un objectif est manquant/non positif - message et CancelNextTarget, les deux objectifs ne sont pas définis. La branche ne met pas à jour TicksTarget et n'utilise pas l'élément.

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.WaitTargetObjectType");
UO.WaitTargetObjectType("self", "0x0E21");

1. Appel direct - script direct

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

  • Prépare deux cibles séquentielles : un objet donné et un objet trouvé au sol.
UO.WaitTargetObjectType("self", "0x0E21");

2. Option explicite - fonction de script

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

  • Autorise d'abord serial à GetObject ; le second recherche FindType(type,color,1,-1,false). Si les deux sont positifs, appelle bridge.WaitTargetObject(premier,second). L'ordre des cibles est maintenu.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTargetObjectType("lasttarget", "0x0E21", -1);
    return null;
}

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

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

  • Si au moins un objectif est manquant/non positif - message et CancelNextTarget, les deux objectifs ne sont pas définis. La branche ne met pas à jour TicksTarget et n'utilise pas l'élément.
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.WaitTargetObjectType("self", "0x0E21", -1);
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        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.WaitTargetObjectType(id, type) — UO.WaitTargetObjectType(Any,Any)

Paramètres: id (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 WaitTargetObjectType(InjectionValue id, InjectionValue type)

            => WaitTargetObjectType(id, type, new InjectionValue(-1));

UO.WaitTargetObjectType(id, type, color) — UO.WaitTargetObjectType(Any,Any,Any)

Paramètres: id (Any), type (Any), color (Any)

Résultat: void / Unit.

Pendant un appel:

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

public void WaitTargetObjectType(InjectionValue id, InjectionValue type, InjectionValue color)

        {

            int first = GetObject(id);

            int second = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);

            if (first <= 0 || second <= 0)

            {

                SystemMessage("UO.WaitTargetObjectType: object or ground item not found");

                bridge.CancelNextTarget();

                return;

            }

            bridge.WaitTargetObject(first, second);

        }

UO.WaitTargetSelf

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

Signatures C#

void UO.WaitTargetSelf();

Prépare une réponse à la prochaine cible du serveur via l'alias self.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • L'équipe prépare uniquement une réponse : elle n'utilise pas l'objet, la compétence ou le sort lui-même. La cible serveur suivante reçoit la cible préparée lors du traitement de la trame client.
  • Les appels consécutifs forment une file d'attente client commune. Les objets et les coordonnées cibles sont traités un par un ; les fenêtres de sélection locale ClientRequest*/Info/container ne le consomment pas.
  • CancelWaitTarget efface la file d'attente. TerminateAll le nettoie entièrement ; l'arrêt d'une procédure en cours d'exécution invalide également ses propres réponses en attente. L'exécution d'une courte procédure n'annule normalement pas la cible préparée.
  • L'envoi d'une réponse ne garantit pas une action sur le serveur : il vérifie la portée, l'accessibilité de l'objet, la visibilité et les règles d'action. Pour contrôler, utilisez le résultat du jeu et le journal.

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

1. Préparer la cible - script direct

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

  • Il n’y a pas d’arguments ; self est utilisé.
  • La commande n'ouvre pas le viseur et n'effectue pas l'action elle-même.
UO.WaitTargetSelf();

2. Vérifier la présence de l'objet sélectionné - fonction script

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

  • self doit se résoudre sur le personnage chargé pour cette compétence.
  • La vérification Exists élimine l'objet inconnu ; le choix du type d'objet et la validité des compétences restent des conditions du script.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("self")))
    {
        UO.CancelWaitTarget();
        UO.WaitTargetSelf();
        UO.UseSkill("Anatomy");
    }

    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. Annuler la cible préparée - Classe de script

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

  • IsWaitTargetActive vérifie la file d'attente de réponses.
  • CancelWaitTarget annule la préparation sans fermer le réticule personnalisé déjà ouvert.
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.WaitTargetSelf();
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelWaitTarget();
        }

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

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.

public void WaitTargetSelf() => WaitTargetObject("self");

UO.WaitTargetTile

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

Signatures C#

void UO.WaitTargetTile(object? selector);
void UO.WaitTargetTile(object? x, object? y, object? z);
void UO.WaitTargetTile(object? @type, object? x, object? y, object? z);

Prépare une cible de coordonnées avec des graphiques de tuiles facultatifs.

Paramètres

  • selector - Uniquement sous forme d'un seul argument : la chaîne "lasttile" répétant le point stocké.
  • type - Tuile Graphique/type, 0..65535, pas serial. Zéro indique une cible de coordonnées sans graphiques spécifiés. Présenté sous forme de quatre arguments ; sous la forme x/y/z est égal à 0.
  • x — Coordonnée du monde X sur la carte actuelle, 0..65535. Il ne s'agit pas d'un pixel d'écran ou d'une coordonnée Gump.
  • y — Coordonnée Y du monde sur la carte actuelle, 0..65535.
  • z - Hauteur du point de jeu, pour une cible réseau, utilisez -128..127. Il ne s'agit pas d'un sol ou d'une couche d'équipement.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • L'équipe prépare uniquement une réponse : elle n'utilise pas l'objet, la compétence ou le sort lui-même. La cible serveur suivante reçoit la cible préparée lors du traitement de la trame client.
  • Les appels consécutifs forment une file d'attente client commune. Les objets et les coordonnées cibles sont traités un par un ; les fenêtres de sélection locale ClientRequest*/Info/container ne le consomment pas.
  • CancelWaitTarget efface la file d'attente. TerminateAll le nettoie entièrement ; l'arrêt d'une procédure en cours d'exécution invalide également ses propres réponses en attente. L'exécution d'une courte procédure n'annule normalement pas la cible préparée.
  • L'envoi d'une réponse ne garantit pas une action sur le serveur : il vérifie la portée, l'accessibilité de l'objet, la visibilité et les règles d'action. Pour contrôler, utilisez le résultat du jeu et le journal.

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.WaitTargetTile");
UO.WaitTargetTile("lasttile");

1. Coordonnées sans graphic - script direct

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

  • x=1445, y=1690, z=0 ; le type manquant est 0.
  • C'est le but du monde. La commande ne déplace pas le personnage et ne place pas l'objet dans le gump.
UO.CancelWaitTarget();
UO.WaitTargetTile(1445, 1690, 0);

2. Spécifiez explicitement la tuile graphic - fonction de script

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

  • type=0x0CCA — exemples de graphiques ; utiliser le type réel de la tuile sélectionnée. x/y/z est sa position mondiale.
  • Le graphique et les coordonnées doivent décrire l'objet cartographique souhaité ; le serveur vérifie la validité de la cible.
return  RunScenario();
 object? RunScenario()
{
    UO.CancelWaitTarget();
    UO.WaitTargetTile(0x0CCA, 1445, 1690, 0);
    return null;
}

3. Répéter le point enregistré de la dernière cible - classe de script

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

  • le sélecteur autorise uniquement la chaîne lasttile, non sensible à la casse. Une autre chaîne ou un autre nombre sous forme d'un seul argument provoque une erreur.
  • Les derniers champs de la tuile en TargetManager sont utilisés. Avant le premier choix, ils peuvent être nuls : sélectionnez d'abord le point souhaité dans le jeu. Trois ou quatre arguments vous permettent de le définir explicitement.
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.WaitTargetTile("lasttile");
        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.WaitTargetTile(selector) — UO.WaitTargetTile(Any)

Paramètres: selector (Any)

Résultat: void / Unit.

Pendant un appel:

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

public void WaitTargetTile(InjectionValue selector)

        {

            string name = selector.Kind == InjectionValueKind.String

                ? (selector.String ?? string.Empty).Trim()

                : string.Empty;

            if (!name.Equals("lasttile", StringComparison.OrdinalIgnoreCase))

                throw new NativeSubrutineException("UO.WaitTargetTile(one argument) accepts only 'lasttile'.");



            int[] tile = bridge.LastTile() ?? Array.Empty<int>();

            if (tile.Length < 4)

            {

                SystemMessage("UO.WaitTargetTile: lasttile is unavailable; next target request canceled.");

                bridge.CancelNextTarget();

                return;

            }

            bridge.WaitTargetTile(tile[0], tile[1], tile[2], tile[3]);

            ticksTarget = Timer();

        }

UO.WaitTargetTile(x, y, z) — UO.WaitTargetTile(Any,Any,Any)

Paramètres: x (Any), y (Any), z (Any)

Résultat: void / Unit.

Pendant un appel:

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

public void WaitTargetTile(InjectionValue x, InjectionValue y, InjectionValue z)

            => WaitTargetTile(new InjectionValue(0), x, y, z);

UO.WaitTargetTile(type, x, y, z) — UO.WaitTargetTile(Any,Any,Any,Any)

Paramètres: type (Any), x (Any), y (Any), z (Any)

Résultat: void / Unit.

Pendant un appel:

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

public void WaitTargetTile(InjectionValue type, InjectionValue x, InjectionValue y, InjectionValue z)

        {

            bridge.WaitTargetTile(ResolveType(type), NumberConversions.ToInt(x), NumberConversions.ToInt(y), NumberConversions.ToInt(z));

            ticksTarget = Timer();

        }

UO.WaitTargetType

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

Signatures C#

void UO.WaitTargetType(object? @type);
void UO.WaitTargetType(object? @type, object? color);

Recherche un élément à graphic/hue et le place dans la file d'attente de la cible suivante.

Paramètres

  • type - Graphique/type int, chaîne hexadécimale ou ensemble nommé type. Ce n'est pas un article serial.
  • color - Facultatif int hue ; par défaut -1 - n'importe quelle couleur.

Valeur de retour

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

Comportement

  • Portée : Sac à dos avec recherche récursive. Bridge.FindType renvoie le serial trouvé ; lorsque serial>0 bridge.WaitTargetObject est appelé. Ces méthodes ne mettent pas directement à jour le runtime TicksTarget.
  • Aucun élément - message et CancelNextTarget. La recherche peut modifier le général FindItem/FoundItems ; La commande n'utilise pas l'élément trouvé et n'attend pas le curseur.

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.WaitTargetType");
UO.WaitTargetType("0x0E21");

1. Appel direct - script direct

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

  • Recherche un élément à graphic/hue et le place dans la file d'attente de la cible suivante.
UO.WaitTargetType("0x0E21");

2. Option explicite - fonction de script

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

  • Portée : Sac à dos avec recherche récursive. Bridge.FindType renvoie le serial trouvé ; lorsque serial>0 bridge.WaitTargetObject est appelé. Ces méthodes ne mettent pas directement à jour le runtime TicksTarget.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTargetType("0x0E21", -1);
    return null;
}

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

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

  • Aucun élément - message et CancelNextTarget. La recherche peut modifier le général FindItem/FoundItems ; La commande n'utilise pas l'élément trouvé et n'attend pas le curseur.
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.WaitTargetType("0x0E21", -1);
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        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.WaitTargetType(type) — UO.WaitTargetType(Any)

Paramètres: type (Any)

Résultat: void / Unit.

Pendant un appel:

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

public void WaitTargetType(InjectionValue type) => WaitTargetType(ResolveType(type), -1);

UO.WaitTargetType(type, color) — UO.WaitTargetType(Any,Any)

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

Résultat: void / Unit.

Pendant un appel:

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

public void WaitTargetType(InjectionValue type, InjectionValue color)

            => WaitTargetType(ResolveType(type), NumberConversions.ToInt(color));

UO.WaitTargetXYZ

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

Signatures C#

void UO.WaitTargetXYZ(object? x, object? y, object? z);

Prépare une cible de coordonnées avec graphic=0 pour la prochaine vue du serveur.

Paramètres

  • x — Coordonnée du monde X sur la carte actuelle, 0..65535. Il ne s'agit pas d'un pixel d'écran ou d'une coordonnée Gump.
  • y — Coordonnée Y du monde sur la carte actuelle, 0..65535.
  • z - Hauteur du point de jeu, pour une cible réseau, utilisez -128..127. Il ne s'agit pas d'un sol ou d'une couche d'équipement.

Valeur de retour

void - aucune valeur de retour. Appelez sur une ligne séparée ; ne pas utiliser comme true/false, serial ou type. Métadonnées object ? pour les formulaires compatibles ne change pas le résultat réel void.

Comportement

  • L'équipe prépare uniquement une réponse : elle n'utilise pas l'objet, la compétence ou le sort lui-même. La cible serveur suivante reçoit la cible préparée lors du traitement de la trame client.
  • Les appels consécutifs forment une file d'attente client commune. Les objets et les coordonnées cibles sont traités un par un ; les fenêtres de sélection locale ClientRequest*/Info/container ne le consomment pas.
  • CancelWaitTarget efface la file d'attente. TerminateAll le nettoie entièrement ; l'arrêt d'une procédure en cours d'exécution invalide également ses propres réponses en attente. L'exécution d'une courte procédure n'annule normalement pas la cible préparée.
  • L'envoi d'une réponse ne garantit pas une action sur le serveur : il vérifie la portée, l'accessibilité de l'objet, la visibilité et les règles d'action. Pour contrôler, utilisez le résultat du jeu et le journal.

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.WaitTargetXYZ");
UO.WaitTargetXYZ(1445, 1690, 0);

1. Spécifier un point dans le monde - script direct

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

  • X=1445, Y=1690, Z=0. Le graphique est égal à 0.
  • La réponse sera envoyée lorsque la vue des coordonnées du serveur apparaîtra.
UO.WaitTargetXYZ(1445, 1690, 0);

2. Utiliser le point sous le caractère - fonction de script

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

  • X/Y/Z sont lus à partir de votre propre personnage.
  • Il s'agit d'une cible de coordonnées, pas d'une cible object sur le serial du personnage. Pour ce dernier, vous avez besoin de WaitTargetSelf.
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX();
    var y = UO.GetY();
    var z = UO.GetZ();
    UO.WaitTargetXYZ(x, y, z);
    return null;
}

3. Préparer le point d'outil - Classe de script

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

  • Remplacez les coordonnées par le point d'extraction. UseType recherche une pelle type=0x0F39 de n'importe quelle couleur dans le sac à dos.
  • Si aucun outil adapté n'est disponible, retirez la préparation via CancelWaitTarget avant de passer à une autre action.
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.CancelWaitTarget();
        UO.WaitTargetXYZ(1445, 1690, 0);
        UO.UseType(0x0F39, -1);
        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.WaitTargetXYZ(x, y, z) — UO.WaitTargetXYZ(Any,Any,Any)

Paramètres: x (Any), y (Any), z (Any)

Résultat: void / Unit.

Pendant un appel:

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

case "waittargetxyz": WaitTargetTile(new InjectionValue(0), arguments[0], arguments[1], arguments[2]); return InjectionValue.Unit;

Clone this wiki locally