FR UO Topic multis houses - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Multis & Maisons

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

Objets composites du monde : maisons et autres multi, leurs parties et position sur la carte.

Sections

Sujet Commandes et explications
GetMultis UO.GetMultis
Multi Parts UO.GetMultiAllParts
Parts at Position UO.GetMultiPartsAtPosition
IsHouse UO.IsHouse

Toutes les commandes du thème

Multis / Maisons

UO.GetMultis · UO.GetMultiAllParts · UO.GetMultiPartsAtPosition · UO.IsHouse

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

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

var items = UO.GetMultis();
UO.Print(Convert.ToString(ArrayLength(items)));

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

UO.GetMultiAllParts

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

var houses = UO.GetMultis();
if (Truth(ArrayLength(houses) == 0))
{
    return null;
}
var parts = UO.GetMultiAllParts(houses[0]);
UO.Print(Convert.ToString(ArrayLength(parts)));

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;

Référence complète des commandes


UO.GetMultiAllParts

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

Signatures C#

dynamic UO.GetMultiAllParts(object? multiID);

Lit les enregistrements d'un composant d'une maison.

Paramètres

  • multiID — Série/ID d'un objet spécifique : int, chaîne décimale/hexadécimale ou alias défini self, backpack, lasttarget, lastobject ou nom AddObject. Ce n'est pas graphic/type. Il devrait y avoir ID chargé à la maison dans HouseManager.

Valeur de retour

Tableau<Array>. Chaque ligne contient 9 champs : [0] graphic/type composants, [1] hue, [2] monde X, [3] monde Y, [4] monde Z, [5] multiOffsetX - décalage X du multi, [6] multiOffsetY - décalage Y, [7] multiOffsetZ - décalage Z, [8] multiSerial - serial à la maison. Aucun composant - tableau vide. Le graphique n'est pas ID ; Les différents composants statiques n'ont pas ici leur propre serial.

Comportement

  • Les données déjà téléchargées par le client sont lues. La commande n'ouvre pas le conteneur, ne déplace pas les éléments et ne télécharge pas les objets depuis l'ensemble du serveur.
  • Array - tableau avec des indices commençant à 0. Enregistrez-le dans var, vérifiez ArrayLength avant d'y accéder. Des éléments peuvent disparaître du monde après avoir pris un instantané : vérifiez Exists(serial) avant d'agir.
  • Les composants connus et non supprimés HouseManager sont renvoyés. Les cartes statiques et les terrains séparés ne sont pas inclus dans cette liste. Les lignes sont un instantané ; l'ordre fixe ou le tri Z n'est pas promis.

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.

var multis = (object?[])UO.GetMultis();
if (multis.Length > 0) {
    var parts = (object?[])UO.GetMultiAllParts(multis[0]);
    UO.Print("Parts: " + parts.Length);
}

1. Compter les composants - script direct

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

  • Tout d'abord, une maison chargée est sélectionnée.
  • La longueur est le nombre de composants, et non leur hauteur ou le nombre de maisons.
var houses = UO.GetMultis();
if (Truth(ArrayLength(houses) == 0))
{
    return null;
}
var parts = UO.GetMultiAllParts(houses[0]);
UO.Print(Convert.ToString(ArrayLength(parts)));

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 graphic et position du premier composant - fonction de script

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

  • parts[0] est la première ligne du tableau. Son [0] - type, [2]/[3]/[4] - monde X/Y/Z.
  • Les indices [5]/[6]/[7] contiennent à la place des décalages relatifs.
return  RunScenario();
 object? RunScenario()
{
    var houses = UO.GetMultis();
    if (Truth(ArrayLength(houses) == 0))
    {
        return null;
    }

    var parts = UO.GetMultiAllParts(houses[0]);
    if (Truth(ArrayLength(parts) > 0))
    {
        var part = parts[0];
        UO.Print("Type: 0x" + Hex(part[0]));
        UO.Print(Convert.ToString(part[2]) + "," + Convert.ToString(part[3]) + "," + Convert.ToString(part[4]));
    }

    return null;
}

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

3. Composants Traverse et propriétaires de sortie - Classe de script

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

  • [8] est serial à la maison, [7] est le décalage des composants Z.
  • Ne transmettez pas part[0] à une commande attendant serial à la maison : c'est graphic d'un composant distinct.
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 houses = UO.GetMultis();
        if (Truth(ArrayLength(houses) == 0))
        {
            return null;
        }

        var parts = UO.GetMultiAllParts(houses[0]);
        var i = 0;
        while (Truth(i < ArrayLength(parts)))
        {
            var part = parts[i];
            UO.Print("Multi: 0x" + Hex(part[8]) + ", offset Z: " + Convert.ToString(part[7]));
            i = i + 1;
        }

        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    string Hex(object? value) => Convert.ToInt64(value).ToString("X");
    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.GetMultiAllParts(multiID) — UO.GetMultiAllParts(Any)

Paramètres: multiID (Any)

Résultat: dynamic / Any.

Pendant un appel:

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

case "getmultiallparts":

                    return new InjectionValue((bridge.GetMultiAllParts(Arg(0)) ?? Array.Empty<int[]>())

                        .Select(part => new InjectionValue((part ?? Array.Empty<int>()).Select(value => new InjectionValue(value)).ToArray())).ToArray());

UO.GetMultiPartsAtPosition

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

Signatures C#

dynamic UO.GetMultiPartsAtPosition(object? x, object? y);

Lit les composants des maisons dans la cellule mondiale spécifiée.

Paramètres

  • x — Coordonnée mondiale X de la cellule actuelle de la carte, pas le décalage à l'intérieur de la maison.
  • y — Coordonnée mondiale Y de la cellule. Les composants de toutes les maisons chargées dans cette cellule, à toutes les hauteurs Z, sont renvoyés.

Valeur de retour

Tableau<Array>. Chaque ligne contient 9 champs : [0] graphic/type composants, [1] hue, [2] monde X, [3] monde Y, [4] monde Z, [5] multiOffsetX - décalage X du multi, [6] multiOffsetY - décalage Y, [7] multiOffsetZ - décalage Z, [8] multiSerial - serial à la maison. Aucun composant - tableau vide. Le graphique n'est pas ID ; Les différents composants statiques n'ont pas ici leur propre serial.

Comportement

  • Les données déjà téléchargées par le client sont lues. La commande n'ouvre pas le conteneur, ne déplace pas les éléments et ne télécharge pas les objets depuis l'ensemble du serveur.
  • Array - tableau avec des indices commençant à 0. Enregistrez-le dans var, vérifiez ArrayLength avant d'y accéder. Des éléments peuvent disparaître du monde après avoir pris un instantané : vérifiez Exists(serial) avant d'agir.
  • Les composants connus et non supprimés HouseManager sont renvoyés. Les cartes statiques et les terrains séparés ne sont pas inclus dans cette liste. Les lignes sont un instantané ; l'ordre fixe ou le tri Z n'est pas promis.

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

1. Compter les composants - script direct

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

  • X/Y - la position actuelle du personnage.
  • La longueur est le nombre de composants, et non leur hauteur ou le nombre de maisons.
var parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
UO.Print(Convert.ToString(ArrayLength(parts)));

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

2. Lire graphic et position du premier composant - fonction de script

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

  • parts[0] est la première ligne du tableau. Son [0] - type, [2]/[3]/[4] - monde X/Y/Z.
  • Les indices [5]/[6]/[7] contiennent à la place des décalages relatifs.
return  RunScenario();
 object? RunScenario()
{
    var parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
    if (Truth(ArrayLength(parts) > 0))
    {
        var part = parts[0];
        UO.Print("Type: 0x" + Hex(part[0]));
        UO.Print(Convert.ToString(part[2]) + "," + Convert.ToString(part[3]) + "," + Convert.ToString(part[4]));
    }

    return null;
}

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

3. Composants Traverse et propriétaires de sortie - Classe de script

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

  • [8] est serial à la maison, [7] est le décalage des composants Z.
  • Ne transmettez pas part[0] à une commande attendant serial à la maison : c'est graphic d'un composant distinct.
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 parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
        var i = 0;
        while (Truth(i < ArrayLength(parts)))
        {
            var part = parts[i];
            UO.Print("Multi: 0x" + Hex(part[8]) + ", offset Z: " + Convert.ToString(part[7]));
            i = i + 1;
        }

        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    string Hex(object? value) => Convert.ToInt64(value).ToString("X");
    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.GetMultiPartsAtPosition(x, y) — UO.GetMultiPartsAtPosition(Any,Any)

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

Résultat: dynamic / Any.

Pendant un appel:

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

case "getmultipartsatposition":

                    return new InjectionValue((bridge.GetMultiPartsAtPosition(Arg(0), Arg(1)) ?? Array.Empty<int[]>())

                        .Select(part => new InjectionValue((part ?? Array.Empty<int>()).Select(value => new InjectionValue(value)).ToArray())).ToArray());

UO.GetMultis

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

Signatures C#

dynamic UO.GetMultis();

Liste des objets chargés reconnus par le client comme home/multi.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

Array est serial d'éléments du monde pour lesquels IsHouse renvoie 1. Un tableau vide s'il n'existe pas de tels objets. Il s'agit de maisons ID, pas d'une liste de composants graphiques, ni de coordonnées, ni d'une liste de toutes les maisons sur le serveur.

Comportement

  • Les données déjà téléchargées par le client sont lues. La commande n'ouvre pas le conteneur, ne déplace pas les éléments et ne télécharge pas les objets depuis l'ensemble du serveur.
  • Array - tableau avec des indices commençant à 0. Enregistrez-le dans var, vérifiez ArrayLength avant d'y accéder. Des éléments peuvent disparaître du monde après avoir pris un instantané : vérifiez Exists(serial) avant d'agir.
  • Les données sont lues à partir des éléments du monde chargés. Pour les composants d'une maison, utilisez GetMultiAllParts(serial).

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

1. Obtenir la taille de la liste - script direct

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

  • Il n'y a aucun paramètre ; Les éléments maison/multi chargés sont sélectionnés.
  • Longueur - nombre d'enregistrements/ID. Ce n'est pas le montant du montant en piles. La liste vide donne 0.
var items = UO.GetMultis();
UO.Print(Convert.ToString(ArrayLength(items)));

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

2. Parcourez tous les éléments trouvés ID - fonction de script

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

  • Il n'y a aucun paramètre ; Les éléments maison/multi chargés sont sélectionnés.
  • items[i] — numérique serial. Hex est utilisé uniquement pour la sortie. La boucle n'accède pas au dernier index.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetMultis();
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
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 le premier enregistrement avant de lire - Classe de script

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

  • Il n'y a aucun paramètre ; Les éléments maison/multi chargés sont sélectionnés.
  • Deux choses différentes sont vérifiées : l'enregistrement dans l'instantané et l'existence actuelle de l'objet. Ordre sans tri explicite ne signifie pas proximité.
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 items = UO.GetMultis();
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

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

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

                    return new InjectionValue(bridge.GetWorldItems().Where(id => bridge.IsHouse(id) != 0).Select(id => new InjectionValue(id)).ToArray());

UO.IsHouse

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

Signatures C#

int UO.IsHouse(object? objID);

Vérifie le drapeau multi pour un objet chargé : une maison, un navire ou une autre structure multi-tuiles.

Paramètres

  • objID — Obligatoire serial/ID d'un objet spécifique : int, chaîne hexadécimale ou alias self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse ou nom AddObject. Ce n'est pas graphic/type. Le nom non spécifié se résout en 0 ; la commande n'ouvre aucune nouvelle cible.

Valeur de retour

int 1 : un élément avec l'attribut IsMulti. int 0 - élément régulier, objet mobile, inconnu ou distant. Le nom ne limite pas le résultat aux maisons : un navire peut aussi donner 1. L'équipe ne rend pas le propriétaire de la maison, la région ou la zone.

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

  • Le modèle client local est lu ; Il n'y a aucune requête au serveur, pas d'attente ni de déplacement.
  • Le résultat fait référence au moment de la lecture. Après UO.Wait ou une autre action, l'objet et ses drapeaux peuvent changer.

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

1. Vérifiez le design sélectionné - script direct

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

  • la cible doit contenir le serial du multi-objet, pas le graphic du mur individuel.
  • 1 signifie classe multi ; Cela ne prouve pas que la structure soit un immeuble résidentiel.
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsHouse(target)))
{
    UO.Print("Loaded multi structure");
}

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

2. Séparer le multi de l'élément régulier - fonction de script

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

  • Tout d'abord, la présence est vérifiée, puis le mobile est exclu.
  • Un zéro sans Exists pourrait signifier aucun objet, plutôt qu'un objet ordinaire.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(target)))
    {
        if (Truth(UO.IsNPC(target) == 0))
        {
            if (Truth(UO.IsHouse(target)))
            {
                UO.Print("Multi");
            }
            else
            {
                UO.Print("Ordinary item");
            }
        }
    }

    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. Ne pas confondre la position du personnage avec l'objet maison - classe scénario

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

  • self est mobile, donc le premier résultat est 0 même à l'intérieur de la maison.
  • Pour tester une construction, transmettez son propre serial ; l'équipe ne cherche pas une maison autour du personnage.
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 selfIsMulti = UO.IsHouse("self");
        var selectedIsMulti = UO.IsHouse("lasttarget");
        UO.Print("Self: " + Convert.ToString(selfIsMulti));
        UO.Print("Selected object: " + Convert.ToString(selectedIsMulti));
        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.IsHouse(objID) — UO.IsHouse(Any)

Paramètres: objID (Any)

Résultat: int / Integer.

Pendant un appel:

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

case "ishouse": return new InjectionValue(bridge.IsHouse(Arg(0)));
⚠️ **GitHub.com Fallback** ⚠️