FR UO Topic world geometry Part 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Monde et géométrie — 2

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

Parties de la référence

1 · 2

Référence complète des commandes


UO.GetZ

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

Signatures C#

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

Lit le champ Z de l'objet chargé ou du caractère actuel.

Paramètres

  • id est le Serial/ID de l'objet, pas graphic/type. Numéro, chaîne hexadécimale, nom standard self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse ou nom AddObject. L'alias doit être défini ; l'existence est vérifiée par Exists. Le formulaire enregistré sans arguments utilise self.

Valeur de retour

int est la hauteur de Z. Pour un objet inconnu, 0 est renvoyé. Zéro est également une coordonnée valide. La taille peut être négative ; Il ne s’agit pas d’une couche d’équipement ni d’un index statique.

Comportement

  • Les dernières données déjà connues du client sont lues ; la demande de mise à jour n'est pas envoyée au serveur.
  • Un objet inconnu et une propriété qui n'a pas encore été récupérée peuvent avoir une valeur nulle/vide. Vérifiez Exists et les conditions d'une action particulière.
  • Pour un personnage ou un objet au sol, il s'agit de la coordonnée mondiale. L'article à l'intérieur du conteneur a une position X/Y à l'intérieur de la gomme ; la commande ne les traduit pas dans les coordonnées mondiales du propriétaire.
  • La coordonnée actuelle de l'objet est lue. Les étapes en attente ne sont pas converties en calculs d'itinéraire par cette commande.

Exemple .csx

int z = UO.GetZ();
UO.Print($"Z = {z}");

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Lisez vos coordonnées - script direct

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

  • La forme sans argument sélectionne self, le caractère actuel.
  • position contient la hauteur de Z, pas de serial.
var position = UO.GetZ();
UO.Print("Z: " + Convert.ToString(position));

2. Comparer avec le caractère sélectionné - fonction de script

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

  • lasttarget doit pointer vers le personnage ou l'objet chargé au sol.
  • delta — différence le long d'un axe. Ce n’est pas la longueur du parcours qui compte ; la valeur peut être négative.
return  RunScenario();
 object? RunScenario()
{
    var other = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(other)))
    {
        var delta = UO.GetZ(other) - UO.GetZ();
        UO.Print("Difference: " + Convert.ToString(delta));
    }

    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. Rappelez-vous le point et comparez plus tard - classe de script

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

  • id="self" est une forme explicite de sélection de caractères. UO.Wait=500 millisecondes.
  • La comparaison montre uniquement la modification de l'axe Z. Les changements dans l'autre axe ou la rotation ne sont pas pris en compte ici.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetZ("self");
        await Delay(500);
        var after = UO.GetZ("self");
        if (Truth(before != after))
        {
            UO.Print("Coordinate changed");
        }

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

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

UO.GetZ(id) — UO.GetZ(Any)

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

Résultat: int / Any.

Pendant un appel:

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

case "getz": return new InjectionValue(bridge.GetZ(Arg(0, bridge.Self)));

UO.GetZ(id) — UO.GetZ(Integer)

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

Résultat: int / Integer.

Pendant un appel:

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

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

UO.GetZ(id) — UO.GetZ(String)

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

Résultat: int / Integer.

Pendant un appel:

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

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

UO.IsMineTile

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

Signatures C#

int UO.IsMineTile(object? x, object? y);

Vérifie les caractéristiques d'une cellule par rapport aux données cartographiques locales.

Paramètres

  • x — int X cellules de la carte actuelle ; coordonnée mondiale, pas un pixel de l'écran.
  • y — int Y cellules de la carte actuelle ; coordonnée mondiale, pas un pixel de l'écran.

Valeur de retour

Indicateur numérique int : 1 — un objet correspondant à la condition a été trouvé ; 0 - il n'y a pas d'objet de ce type ou la cellule/carte est inaccessible.

Comportement

  • AnyTileAt contourne la chaîne TNext de la cellule chargée. Condition IsMineTile : Statique/Multi avec StaticFilters.IsRock ou un nom contenant une grotte, une montagne ou un rocher, insensible à la casse.
  • La vérification décrit les données/filtres de tuiles locales. Il ne promet pas la disponibilité d'une ressource extraite, la capacité à traverser le pays, la portée ou l'autorisation du serveur pour l'exploitation minière.

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

1. Appel direct - script direct

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

  • Vérifie les caractéristiques d'une cellule par rapport aux données cartographiques locales.
UO.Print(UO.IsMineTile(UO.GetX(), UO.GetY()));

2. Option explicite - fonction de script

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

  • AnyTileAt contourne la chaîne TNext de la cellule chargée. Condition IsMineTile : Statique/Multi avec StaticFilters.IsRock ou un nom contenant une grotte, une montagne ou un rocher, insensible à la casse.
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX() + 1;
    var y = UO.GetY();
    if (Truth(UO.IsMineTile(x, y)))
    {
        UO.Print("Local tile predicate matched");
    }

    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 :

  • La vérification décrit les données/filtres de tuiles locales. Il ne promet pas la disponibilité d'une ressource extraite, la capacité à traverser le pays, la portée ou l'autorisation du serveur pour l'exploitation minière.
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 x = UO.GetX();
        var y = UO.GetY();
        var before = UO.IsMineTile(x, y);
        UO.Wait(500);
        UO.Print(before = UO.IsMineTile(x, y));
        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.IsMineTile(x, y) — UO.IsMineTile(Any,Any)

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

Résultat: int / Integer.

Pendant un appel:

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

public int IsMineTile(InjectionValue x, InjectionValue y) => bridge.IsMineTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));

UO.IsTreeTile

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

Signatures C#

int UO.IsTreeTile(object? x, object? y);

Vérifie les caractéristiques d'une cellule par rapport aux données cartographiques locales.

Paramètres

  • x — int X cellules de la carte actuelle ; coordonnée mondiale, pas un pixel de l'écran.
  • y — int Y cellules de la carte actuelle ; coordonnée mondiale, pas un pixel de l'écran.

Valeur de retour

Indicateur numérique int : 1 — un objet correspondant à la condition a été trouvé ; 0 - il n'y a pas d'objet de ce type ou la cellule/carte est inaccessible.

Comportement

  • AnyTileAt contourne la chaîne TNext de la cellule chargée. Condition IsTreeTile : Statique/Multi reconnu par StaticFilters.IsTree.
  • La vérification décrit les données/filtres de tuiles locales. Il ne promet pas la disponibilité d'une ressource extraite, la capacité à traverser le pays, la portée ou l'autorisation du serveur pour l'exploitation minière.

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

1. Appel direct - script direct

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

  • Vérifie les caractéristiques d'une cellule par rapport aux données cartographiques locales.
UO.Print(UO.IsTreeTile(UO.GetX(), UO.GetY()));

2. Option explicite - fonction de script

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

  • AnyTileAt contourne la chaîne TNext de la cellule chargée. Condition IsTreeTile : Statique/Multi reconnu par StaticFilters.IsTree.
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX() + 1;
    var y = UO.GetY();
    if (Truth(UO.IsTreeTile(x, y)))
    {
        UO.Print("Local tile predicate matched");
    }

    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 :

  • La vérification décrit les données/filtres de tuiles locales. Il ne promet pas la disponibilité d'une ressource extraite, la capacité à traverser le pays, la portée ou l'autorisation du serveur pour l'exploitation minière.
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 x = UO.GetX();
        var y = UO.GetY();
        var before = UO.IsTreeTile(x, y);
        UO.Wait(500);
        UO.Print(before = UO.IsTreeTile(x, y));
        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.IsTreeTile(x, y) — UO.IsTreeTile(Any,Any)

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

Résultat: int / Integer.

Pendant un appel:

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

public int IsTreeTile(InjectionValue x, InjectionValue y) => bridge.IsTreeTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));

UO.IsWaterTile

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

Signatures C#

int UO.IsWaterTile(object? x, object? y);

Vérifie les caractéristiques d'une cellule par rapport aux données cartographiques locales.

Paramètres

  • x — int X cellules de la carte actuelle ; coordonnée mondiale, pas un pixel de l'écran.
  • y — int Y cellules de la carte actuelle ; coordonnée mondiale, pas un pixel de l'écran.

Valeur de retour

Indicateur numérique int : 1 — un objet correspondant à la condition a été trouvé ; 0 - il n'y a pas d'objet de ce type ou la cellule/carte est inaccessible.

Comportement

  • AnyTileAt contourne la chaîne TNext de la cellule chargée. Condition IsWaterTile : Atterrir avec TileData.IsWet ou un objet avec un statique valide graphic et un drapeau IsWet.
  • La vérification décrit les données/filtres de tuiles locales. Il ne promet pas la disponibilité d'une ressource extraite, la capacité à traverser le pays, la portée ou l'autorisation du serveur pour l'exploitation minière.

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

1. Appel direct - script direct

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

  • Vérifie les caractéristiques d'une cellule par rapport aux données cartographiques locales.
UO.Print(UO.IsWaterTile(UO.GetX(), UO.GetY()));

2. Option explicite - fonction de script

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

  • AnyTileAt contourne la chaîne TNext de la cellule chargée. Condition IsWaterTile : Atterrir avec TileData.IsWet ou un objet avec un statique valide graphic et un drapeau IsWet.
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX() + 1;
    var y = UO.GetY();
    if (Truth(UO.IsWaterTile(x, y)))
    {
        UO.Print("Local tile predicate matched");
    }

    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 :

  • La vérification décrit les données/filtres de tuiles locales. Il ne promet pas la disponibilité d'une ressource extraite, la capacité à traverser le pays, la portée ou l'autorisation du serveur pour l'exploitation minière.
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 x = UO.GetX();
        var y = UO.GetY();
        var before = UO.IsWaterTile(x, y);
        UO.Wait(500);
        UO.Print(before = UO.IsWaterTile(x, y));
        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.IsWaterTile(x, y) — UO.IsWaterTile(Any,Any)

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

Résultat: int / Integer.

Pendant un appel:

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

public int IsWaterTile(InjectionValue x, InjectionValue y) => bridge.IsWaterTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));

UO.IsWorldCellPassable

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

Signatures C#

dynamic UO.IsWorldCellPassable(object? currX, object? currY, object? currZ, object? destX, object? destY, object? destZ, object? worldNum);

Vérifie une transition vers une cellule mondiale adjacente et renvoie le drapeau praticable ainsi que la hauteur.

Paramètres

  • currX — Coordonnée mondiale X obligatoire de la cellule source. Entier 0..65535 dans la carte chargée ; ce n'est pas une coordonnée gump.
  • currY — Coordonnée mondiale Y obligatoire de la cellule source. Entier 0..65535 dans la carte chargée ; ce n'est pas une coordonnée gump.
  • currZ — Hauteur initiale obligatoire −128..127. C'est la hauteur du monde, pas le numéro de l'étage. La hauteur non valide est rejetée et non tronquée.
  • destX — Coordonnée mondiale X obligatoire de la cellule cible. Entier 0..65535 dans la carte chargée ; ce n'est pas une coordonnée gump.
  • destY — Coordonnée mondiale Y obligatoire de la cellule cible. Entier 0..65535 dans la carte chargée ; ce n'est pas une coordonnée gump.
  • destZ — Entrée obligatoire Z de rechange, généralement CurrZ. Ce n'est pas une var : la variable ne change pas et ne fixe pas le plancher requis. Lisez la hauteur calculée à partir du résultat [1]. Ce pont rend toujours sa hauteur ; l'argument est nécessaire pour la compatibilité avec la forme Pascal.
  • worldNum — Numéro de carte obligatoire : UO.WorldNum(). Seule la carte actuelle aux dimensions connues est vérifiée ; L'autre carte ne se chargera pas.

Valeur de retour

Tableau de deux int : [0] - passabilité, 1 (condition remplie), 0 (condition non remplie) ; [1] - calculé Z. Seul le premier élément est logique. Le tableau lui-même ne peut pas être comparé à true. La taille 0/négatif est acceptable ; pour [0]=0 la hauteur ne prouve pas l'accessibilité. Le rejet des arguments renvoie [0, CurrZ].

Comportement

  • Aucun mouvement, ouverture de porte, réticule ou paquets réseau. La géométrie locale existante est lue ; le serveur peut ultérieurement rejeter l'étape. Deux requêtes peuvent voir des états différents.
  • La cellule adjacente est acceptée (la différence X/Y n'est pas supérieure à 1). Une cible plus éloignée, dépassant la carte, absence de personnage/carte et IsDestroyed donnent un refus avant calcul. Pour un itinéraire complet, utilisez GetPathArray ou NewMoveXY.
  • Le même X/Y valide donne [1, CurrZ] sans vérification de collision : aucune étape nécessaire. Il ne s’agit pas d’un test de capacité à s’échapper de la cage. L'état du personnage et les règles actuelles de Pathfinder affectent l'étape adjacente ; sans géométrie chargée, il peut être rejeté.

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.IsWorldCellPassable(UO.GetX(), UO.GetY(), UO.GetZ(), UO.GetX() + 1, UO.GetY(), UO.GetZ(), UO.WorldNum());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Vérifiez la cellule à l'est - script direct

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

  • x/y/z est la position de départ, x+1/y est la cellule adjacente, le sixième paramètre z est le Z de rechange, le dernier est la carte actuelle. result[0] est vérifié avant d'utiliser result[1].
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
var result = UO.IsWorldCellPassable(x,y,z,x+1,y,z,UO.WorldNum());
if (Truth(Truth(result[0]) == true))
{
    UO.Print("Passable, Z=" + Convert.ToString(result[1]));
}
else
{
    UO.Print("Blocked");
}

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

2. Lire Z sans changer l'argument d'entrée - fonction de script

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

  • proposedZ reste 0 après l'appel. targetZ est extrait du résultat[1], pas de l'argument. En cas d'échec, l'exemple ne fait aucune déduction sur la hauteur.
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX();
    var y = UO.GetY();
    var z = UO.GetZ();
    var proposedZ = 0;
    var result = UO.IsWorldCellPassable(x, y, z, x, y + 1, proposedZ, UO.WorldNum());
    if (Truth(result[0] == 1))
    {
        var targetZ = result[1];
        UO.Print("Input=" + Convert.ToString(proposedZ) + "; result=" + Convert.ToString(targetZ));
    }

    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 complète IsCellOpen - classe de script

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

  • L'assistant complet ci-dessous Main accepte la source X/Y/Z, la cible X/Y et la carte. Il ajoute le sixième argument requis et renvoie uniquement int 1/0, pas un tableau. Par conséquent, le résultat de IsCellOpen peut être comparé à true. Le code ne déplace pas le caractère.
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 x = UO.GetX();
        var y = UO.GetY();
        var openCell = IsCellOpen(x, y, UO.GetZ(), x + 1, y + 1, UO.WorldNum());
        if (Truth(Truth(openCell) == true))
        {
            UO.Print("Diagonal cell is locally passable");
        }

        return null;
    }

    dynamic IsCellOpen(dynamic x, dynamic y, dynamic z, dynamic toX, dynamic toY, dynamic map)
    {
        var cellResult = UO.IsWorldCellPassable(x, y, z, toX, toY, z, map);
        if (Truth(ArrayLength(cellResult) != 2))
        {
            return 0;
        }

        return cellResult[0];
    }

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

Implémentation de la commande

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

UO.IsWorldCellPassable(currX, currY, currZ, destX, destY, destZ, worldNum) — UO.IsWorldCellPassable(Any,Any,Any,Any,Any,Any,Any)

Paramètres: currX (Any), currY (Any), currZ (Any), destX (Any), destY (Any), destZ (Any), worldNum (Any)

Résultat: dynamic / Array.

Pendant un appel:

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

case "isworldcellpassable":

                {

                    int destinationZFallback = Arg(5);

                    int[] step = bridge.CheckWorldStep(Arg(0), Arg(1), Arg(2), Arg(3), Arg(4), Arg(6));

                    int passable = step.Length > 0 ? step[0] : 0;

                    int destinationZ = step.Length > 1 ? step[1] : destinationZFallback;

                    return new InjectionValue(new[] { new InjectionValue(passable), new InjectionValue(destinationZ) });

                }

UO.LOSOptions

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

Signatures C#

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

Lit ou enregistre le runtime du masque de paramètres local LOS.

Paramètres

  • value - Facultatif int ; aucun argument en lecture seule. Dans ce fil, la plage et les bits individuels ne sont pas vérifiés. Le mineur byte (valeur & 0xFF) sélectionne l'algorithme 1..4 ; les autres valeurs du mineur byte dans CheckLosCell utilisent l'algorithme 3. Les algorithmes 1/2 bloquent les murs et les impraticables, 3 bloquent en plus NoShoot et 4 activent NoShoot uniquement avec 0x200 et autorisent les obstacles de fenêtre uniquement avec 0x400. Le bit 0x100 vérifie en outre les deux cellules latérales de chaque pas de faisceau diagonal pour tout algorithme sélectionné. value=0 désactive les vérifications supplémentaires CheckLosCell/diagonale, mais BadLocations et CheckWorldStep restent. Par exemple 4+0x100+0x200+0x400 sélectionne personnalisé avec trois indicateurs ; setter préserve l'algorithme int original et non normalisé.

Valeur de retour

int - état.LosOptions après un éventuel enregistrement. Il s'agit d'un code/masque de paramètre, pas de bool et non du résultat d'un contrôle de visibilité.

Comportement

  • ExecuteClientApiCompatibility attribue un état. LosOptions reçoit un argument et renvoie le même champ. L'appel n'exécute pas CheckLOS et ne vérifie pas les murs.
  • Le paramètre appartient au runtime. Cela ne garantit pas la visibilité du serveur et ne constitue pas un moyen de franchir les obstacles.
  • Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.
  • Le mineur byte (valeur & 0xFF) sélectionne l'algorithme 1..4 ; les autres valeurs du mineur byte dans CheckLosCell utilisent l'algorithme 3. Les algorithmes 1/2 bloquent les murs et les impraticables, 3 en plus NoShoot et 4 activent NoShoot uniquement avec 0x200 et autorisent les obstacles de fenêtre uniquement avec 0x400. Le bit 0x100 vérifie en outre les deux cellules latérales de chaque pas de faisceau diagonal pour tout algorithme sélectionné. value=0 désactive les vérifications supplémentaires CheckLosCell/diagonale, mais BadLocations et CheckWorldStep restent. Par exemple 4+0x100+0x200+0x400 sélectionne personnalisé avec trois indicateurs ; setter préserve l'algorithme int original et non normalisé.
  • Un faisceau de longueur non nulle lit uniquement le _world.Map/World.Map actuellement chargé : via CheckWorldStep vous avez besoin de WorldNum == _world.MapIndex et d'un Player.Pathfinder en direct. Une autre facette n'est pas chargée ou demandée ; il n'y a pas de carte/personnage/pathfinder ou l'étape n'est pas disponible - 0. L'exclusion de X/Y identiques ignore tout le cycle de cellules : avec X/Y dans 0..65535, WorldNum dans 0..255 et abs(Zfrom-Zto)<=20 renvoie 1 même sans carte chargée ou avec un numéro de carte différent. Ceci n’est pas une preuve de géométrie ou d’accessibilité. Le résultat est local, pas une solution serveur LOS.
  • CheckLosCell contourne le Land/Static/Multi/Item chargé d'une cellule. Blocs de terrain infranchissables avec abs(rayZ-land.Z)<=20. Les drapeaux Statique/Multi/Item ne sont valables que dans la plage tuile.Z-2 .. tuile.Z+max(1,Hauteur)+2; La fenêtre personnalisée autorisée est ignorée jusqu'à ce que Wall/Impassable/NoShoot soit coché. Le faisceau X/Y utilise Bresenham, pas maximum de 4096 ; Z est pris à partir des surfaces CheckWorldStep, non interpolé à Zto, la tolérance de hauteur finale est 20.

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

1. Appel direct - script direct

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

  • Lit ou enregistre le runtime du masque de paramètres local LOS.
UO.Print(UO.LOSOptions());

2. Option explicite - fonction de script

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

  • ExecuteClientApiCompatibility attribue un état. LosOptions reçoit un argument et renvoie le même champ. L'appel n'exécute pas CheckLOS et ne vérifie pas les murs.
return  RunScenario();
 object? RunScenario()
{
    var before = UO.LOSOptions();
    UO.Print(UO.LOSOptions(0));
    UO.LOSOptions(before);
    return null;
}

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

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

  • Le paramètre appartient au runtime. Cela ne garantit pas la visibilité du serveur et ne constitue pas un moyen de franchir les obstacles.
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 original = UO.LOSOptions();
        UO.LOSOptions(original);
        UO.Print(Convert.ToString(UO.LOSOptions() == original));
        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.LOSOptions() — UO.LOSOptions()

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 "losoptions": if (arguments.Length > 0) state.LosOptions = Arg(0); return new InjectionValue(state.LosOptions);

UO.LOSOptions(value) — UO.LOSOptions(Any)

Paramètres: value (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "losoptions": if (arguments.Length > 0) state.LosOptions = Arg(0); return new InjectionValue(state.LosOptions);

UO.PrivateGetTile

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

Signatures C#

string UO.PrivateGetTile(object? x, object? y, object? unknown, object? minTile, object? maxTile);

Recherche le premier graphic dans la plage donnée dans la cellule locale.

Paramètres

  • x — int coordonnées mondiales de la carte actuelle.
  • y — int coordonnées mondiales de la carte actuelle.
  • unknown — L'ancien paramètre int est conservé dans la syntaxe, mais le pont ne l'utilise pas.
  • minTile - int limites inclusives graphic. L'ordre ne change pas automatiquement ; minTile>maxTile ne correspond pas.
  • maxTile - int limites inclusives graphic. L'ordre ne change pas automatiquement ; minTile>maxTile ne correspond pas.

Valeur de retour

string "0xXXXX" du premier graphic correspondant ; "0x0000" - aucune correspondance ou carte non chargée. Le réel graphic=0 a également cette représentation.

Comportement

  • PrivateGetTile parcourt la chaîne TNext de tous les objets de cellule dans l'ordre de la carte et compare graphic>=minTile && graphic<=maxTile. Seul Statique ne filtre pas et ne prend pas en compte hue/hauteur.
  • Aucune demande Pathfinder/serveur. Pour une géométrie structurée précise, utilisez GetWorldCell/ReadStaticsXY. Le gardien d'une carte manquante renvoie la sentinelle précédente sans match.

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.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535);
UO.Print("PrivateGetTile: " + Convert.ToString(result));

1. Appel direct - script direct

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

  • Recherche le premier graphic dans la plage donnée dans la cellule locale.
UO.Print(UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535));

2. Option explicite - fonction de script

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

  • PrivateGetTile parcourt la chaîne TNext de tous les objets de cellule dans l'ordre de la carte et compare graphic>=minTile && graphic<=maxTile. Seul Statique ne filtre pas et ne prend pas en compte hue/hauteur.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0x0E21, 0x0E21));
    return null;
}

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

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

  • Aucune demande Pathfinder/serveur. Pour une géométrie structurée précise, utilisez GetWorldCell/ReadStaticsXY. Le gardien d'une carte manquante renvoie la sentinelle précédente sans match.
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 tile = UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535);
        if (Truth(tile != "0x0000"))
        {
            UO.Print(tile);
        }

        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.PrivateGetTile(x, y, unknown, minTile, maxTile) — UO.PrivateGetTile(Integer,Integer,Integer,Integer,Integer)

Paramètres: x (Integer), y (Integer), unknown (Integer), minTile (Integer), maxTile (Integer)

Résultat: string / String.

Pendant un appel:

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

public string PrivateGetTile(int x, int y, int unknown, int minTile, int maxTile)

            => bridge.PrivateGetTile(x, y, unknown, minTile, maxTile);

UO.ReadStaticsXY

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

Signatures C#

dynamic UO.ReadStaticsXY(object? x, object? y, object? worldNum);

Lit les enregistrements statiques plats de la carte actuelle dans la cellule.

Paramètres

  • x — int coordonnées mondiales de la cellule.
  • y — int coordonnées mondiales de la cellule.
  • worldNum — numéro int de la carte actuelle. Une autre carte ne se charge pas et donne un tableau vide.

Valeur de retour

Tableau int, triples [graphic, Z, hue, graphic, Z, hue, ...]. Aucune map/incompatibilité WorldNum est un tableau vide.

Comportement

  • Bridge.GetStaticTiles inclut Static, Multi et Item de la chaîne TNext de la cellule ; Le terrain est exclu. Il ne s'agit pas d'un enregistrement Pascal ou d'un tableau d'enregistrements imbriqués à trois éléments.
  • Nombre d'enregistrements = ArrayLength(résultat)/3. Seules les données téléchargées sont lues ; il n'y a aucune demande de géométrie inconnue au 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.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Appel direct - script direct

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

  • Lit les enregistrements statiques plats de la carte actuelle dans la cellule.
var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
UO.Print(UO.GetArrayLength(records) / 3);

2. Option explicite - fonction de script

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

  • Bridge.GetStaticTiles inclut Static, Multi et Item de la chaîne TNext de la cellule ; Le terrain est exclu. Il ne s'agit pas d'un enregistrement Pascal ou d'un tableau d'enregistrements imbriqués à trois éléments.
return  RunScenario();
 object? RunScenario()
{
    var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
    if (Truth(UO.GetArrayLength(records) >= 3))
    {
        UO.Print(records[0]);
        UO.Print(records[1]);
        UO.Print(records[2]);
    }

    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 :

  • Nombre d'enregistrements = ArrayLength(résultat)/3. Seules les données téléchargées sont lues ; il n'y a aucune demande de géométrie inconnue au 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()
    {
        var map = UO.WorldNum();
        var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), map);
        var i = 0;
        while (Truth(i + 2 < UO.GetArrayLength(records)))
        {
            UO.Print(Convert.ToString(records[i]) + " " + Convert.ToString(records[i + 1]) + " " + Convert.ToString(records[i + 2]));
            i = i + 3;
        }

        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.ReadStaticsXY(x, y, worldNum) — UO.ReadStaticsXY(Any,Any,Any)

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

Résultat: dynamic / Any.

Pendant un appel:

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

case "readstaticsxy":

                    return new InjectionValue(bridge.GetStaticTiles(Arg(0), Arg(1), Arg(2)).Select(value => new InjectionValue(value)).ToArray());

UO.RemoveUserStatic

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

Signatures C#

dynamic UO.RemoveUserStatic(object? id);

Supprime l'enregistrement statique de l'utilisateur à ID.

Paramètres

  • id - int ID, renvoyé AddUserStatic ; pas graphic/type.

Valeur de retour

Indicateur numérique int : 1 - l'enregistrement a été supprimé, 0 - ID manquait.

Comportement

  • Premier état.UserStatics.Supprimer ; seulement si la suppression réussit, bridge.RemoveUserStatic(id) est appelé. La suppression ne s'applique pas aux fichiers de cartes statiques standard.
  • La géométrie personnalisée locale est supprimée de l'état actuel. Les éléments du serveur et autres éléments ID ne changent pas.
  • Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.

Scripts C# autonomes

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

Exemple simple

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

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

1. Appel direct - script direct

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

  • Supprime l'enregistrement statique de l'utilisateur à ID.
UO.Print(UO.RemoveUserStatic(1));

2. Option explicite - fonction de script

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

  • Premier état.UserStatics.Supprimer ; seulement si la suppression réussit, bridge.RemoveUserStatic(id) est appelé. La suppression ne s'applique pas aux fichiers de cartes statiques standard.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.UserStaticExists(1)))
    {
        UO.Print(UO.RemoveUserStatic(1));
    }

    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 :

  • La géométrie personnalisée locale est supprimée de l'état actuel. Les éléments du serveur et autres éléments ID ne changent pas.
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 records = UO.GetUserStatics();
        if (Truth(UO.GetArrayLength(records) > 0))
        {
            var id = records[0][0];
            UO.Print(UO.RemoveUserStatic(id));
            UO.Print(UO.UserStaticExists(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;
}

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

Paramètres: id (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "removeuserstatic":

                {

                    int id = Arg(0);

                    bool removed = state.UserStatics.Remove(id);

                    if (removed) bridge.RemoveUserStatic(id);

                    return new InjectionValue(removed ? 1 : 0);

                }

UO.UserStaticExists

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

Signatures C#

int UO.UserStaticExists(object? id);

Vérifie la présence de ID dans les enregistrements statiques utilisateur.

Paramètres

  • id — int ID AddUserStatic ; pas graphic/type et non serial.

Valeur de retour

Drapeau numérique int : 1 - la clé est dans l'état. UserStatics, 0 - absents.

Comportement

  • Seul ContainsKey est vérifié dans le dictionnaire d'exécution. La visibilité d'un objet sur la carte, la création réussie d'un objet pont et le monde du serveur ne sont pas vérifiés.
  • Lit l'état local actuel. Il n’y a pas de package, de cible ou de mise à jour automatique ; les lectures individuelles peuvent voir différents états.
  • Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.

Scripts C# autonomes

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

Exemple simple

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

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

1. Appel direct - script direct

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

  • Vérifie la présence de ID dans les enregistrements statiques utilisateur.
UO.Print(UO.UserStaticExists(1));

2. Option explicite - fonction de script

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

  • Seul ContainsKey est vérifié dans le dictionnaire d'exécution. La visibilité d'un objet sur la carte, la création réussie d'un objet pont et le monde du serveur ne sont pas vérifiés.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.UserStaticExists(1)))
    {
        UO.Print(UO.GetUserStatic(1));
    }

    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 :

  • Lit l'état local actuel. Il n’y a pas de package, de cible ou de mise à jour automatique ; les lectures individuelles peuvent voir différents états.
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 records = UO.GetUserStatics();
        if (Truth(UO.GetArrayLength(records) > 0))
        {
            UO.Print(UO.UserStaticExists(records[0][0]));
        }

        return null;
    }

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

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

Paramètres: id (Any)

Résultat: int / Integer.

Pendant un appel:

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

public int UserStaticExists(InjectionValue id)

            => state.UserStatics.ContainsKey(NumberConversions.ToInt(id)) ? 1 : 0;

UO.WorldNum

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

Signatures C#

dynamic UO.WorldNum();

Lit le numéro de carte actuel à partir du modèle client.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int — index de la carte actuelle du client, généralement 0=Felucca, 1=Trammel, 2=Ilshenar, 3=Malas, 4=Tokuno, 5=Ter Mur. Le serveur utilisateur peut utiliser un jeu de cartes différent. 0 est une carte à part entière, pas le signe d'une erreur.

Comportement

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

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Afficher la valeur actuelle de votre personnage - script direct

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

  • L'appel sans arguments fait référence à self. Le numéro de carte actuel est stocké en valeur.
  • Convert.ToString convertit le nombre à sortir et ne change pas la signification du résultat.
var value = UO.WorldNum();
UO.Print("WorldNum: " + Convert.ToString(value));

2. Utiliser la valeur dans la validation de l'application - Fonction de script

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

  • La valeur est lue une fois sans aucun argument. Le numéro de carte actuel est utilisé dans le calcul ou la condition indiquée.
  • Les seuils numériques sont des exemples de conditions de script et non de nouvelles limites client. Le champ stocke les unités de serveur et les restrictions décrites ci-dessus.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.WorldNum();
    var land = UO.GetLandscapeTile(UO.GetX(), UO.GetY(), value);
    UO.Print("Land record length: " + Convert.ToString(ArrayLength(land)));
    return null;
}

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

3. Regardez le changement en une seconde - cours de script

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

  • Les deux appels sans argument lisent leur valeur actuelle. UO.Wait(1000) donne une pause en millisecondes entre les prises de vue.
  • Le changement comparé est le numéro de la carte actuelle. Un exemple ne change rien au monde et n’attend pas indéfiniment. Les événements au cours de cette seconde peuvent être manqués.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.WorldNum();
        await Delay(1000);
        var after = UO.WorldNum();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        }

        return null;
    }

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

Implémentation de la commande

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

UO.WorldNum() — UO.WorldNum()

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

UO.X

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

Signatures C#

int UO.X();

Lit la coordonnée X à partir du modèle client.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int est la coordonnée X de l'objet chargé. Pour un élément de personnage/monde, il s'agit de la cellule du monde ; pour un article dans le sac, il s'agit des coordonnées à l'intérieur du conteneur. Un objet inconnu donne 0, mais X=0 est également valide.

Comportement

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

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Afficher la valeur actuelle de votre personnage - script direct

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

  • L'appel sans arguments fait référence à self. La coordonnée x est stockée en valeur.
  • Convert.ToString convertit le nombre à sortir et ne change pas la signification du résultat.
var value = UO.X();
UO.Print("X: " + Convert.ToString(value));

2. Utiliser la valeur dans la validation de l'application - Fonction de script

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

  • La valeur est lue une fois sans aucun argument. La coordonnée x est utilisée dans le calcul ou la condition affichée.
  • Les seuils numériques sont des exemples de conditions de script et non de nouvelles limites client. Le champ stocke les unités de serveur et les restrictions décrites ci-dessus.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.X();
    UO.Print("Two tiles east would be X=" + Convert.ToString(value + 2));
    return null;
}

3. Regardez le changement en une seconde - cours de script

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

  • Les deux appels sans argument lisent leur valeur actuelle. UO.Wait(1000) donne une pause en millisecondes entre les prises de vue.
  • Le changement est comparé : la coordonnée X. L’exemple ne change rien au monde et n’attend pas indéfiniment. Les événements au cours de cette seconde peuvent être manqués.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.X();
        await Delay(1000);
        var after = UO.X();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        }

        return null;
    }

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

Implémentation de la commande

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

UO.X() — UO.X()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.

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

() => bridge.GetX(bridge.Self)

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


UO.Y

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

Signatures C#

int UO.Y();

Lit la coordonnée Y à partir du modèle client.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int — Coordonnée Y de l'objet chargé. Pour un objet de personnage/monde, il s'agit de la cellule du monde, pour un objet dans le sac, il s'agit de la position à l'intérieur du conteneur. Un objet inconnu donne 0.

Comportement

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

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Afficher la valeur actuelle de votre personnage - script direct

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

  • L'appel sans arguments fait référence à self. La coordonnée y est stockée en valeur.
  • Convert.ToString convertit le nombre à sortir et ne change pas la signification du résultat.
var value = UO.Y();
UO.Print("Y: " + Convert.ToString(value));

2. Utiliser la valeur dans la validation de l'application - Fonction de script

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

  • La valeur est lue une fois sans aucun argument. La coordonnée y est utilisée dans le calcul ou la condition affichée.
  • Les seuils numériques sont des exemples de conditions de script et non de nouvelles limites client. Le champ stocke les unités de serveur et les restrictions décrites ci-dessus.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Y();
    UO.Print("Two tiles south would be Y=" + Convert.ToString(value + 2));
    return null;
}

3. Regardez le changement en une seconde - cours de script

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

  • Les deux appels sans argument lisent leur valeur actuelle. UO.Wait(1000) donne une pause en millisecondes entre les prises de vue.
  • Le changement est comparé : la coordonnée Y. L’exemple ne change rien au monde et n’attend pas indéfiniment. Les événements au cours de cette seconde peuvent être manqués.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Y();
        await Delay(1000);
        var after = UO.Y();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        }

        return null;
    }

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

Implémentation de la commande

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

UO.Y() — UO.Y()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.

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

() => bridge.GetY(bridge.Self)

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


UO.Z

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

Signatures C#

int UO.Z();

Lit la hauteur Z à partir du modèle client.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int est la hauteur de l'objet en unités mondiales, généralement -128..127. Il ne s'agit pas d'un numéro d'étage ou d'une couche d'équipement. 0 peut être la hauteur réelle ou le résultat de l'absence d'un objet.

Comportement

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

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Afficher la valeur actuelle de votre personnage - script direct

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

  • L'appel sans arguments fait référence à self. La hauteur z est stockée en valeur.
  • Convert.ToString convertit le nombre à sortir et ne change pas la signification du résultat.
var value = UO.Z();
UO.Print("Z: " + Convert.ToString(value));

2. Utiliser la valeur dans la validation de l'application - Fonction de script

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

  • La valeur est lue une fois sans aucun argument. La hauteur z est utilisée dans le calcul ou la condition indiquée.
  • Les seuils numériques sont des exemples de conditions de script et non de nouvelles limites client. Le champ stocke les unités de serveur et les restrictions décrites ci-dessus.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Z();
    var land = UO.GetLandscapeTile(UO.GetX(), UO.GetY(), UO.WorldNum());
    if (Truth(ArrayLength(land) >= 3))
    {
        UO.Print("Height above land: " + Convert.ToString(value - land[1]));
    }

    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. Regardez le changement en une seconde - cours de script

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

  • Les deux appels sans argument lisent leur valeur actuelle. UO.Wait(1000) donne une pause en millisecondes entre les prises de vue.
  • Le changement comparé est la hauteur Z. L'exemple ne change rien au monde et n'attend pas indéfiniment. Les événements au cours de cette seconde peuvent être manqués.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Z();
        await Delay(1000);
        var after = UO.Z();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        }

        return null;
    }

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

Implémentation de la commande

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

UO.Z() — UO.Z()

Paramètres: Aucun paramètre.

Résultat: int / Integer.

Pendant un appel:

L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.

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

() => bridge.GetZ(bridge.Self)

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

⚠️ **GitHub.com Fallback** ⚠️