Skip to content

FR UO Topic client connection

Codex edited this page Oct 11, 2026 · 3 revisions

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

Client et connexion

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

Connexion, statut d'entrée dans le monde, latence, adresse du serveur et liste des personnages.

Sections

Sujet Commandes et explications
Connect UO.Connect
Disconnect UO.Disconnect
Connected UO.Connected
Online UO.Online
Ping UO.GetPing
Server IP UO.GameServerIPString
Shard Name UO.ShardName
Shard Path UO.ShardPath
Liste des personnages UO.GetCharsListForShard
Resend UO.Resend
CheckLag UO.CheckLag

Toutes les commandes du thème

Connexion

UO.Connect · UO.Disconnect · UO.Connected · UO.Online · UO.IsOnline · UO.ConnectedTime · UO.DisconnectedTime · UO.GetPing · UO.CheckLag · UO.GameServerIPString · UO.ShardName · UO.ShardPath · UO.GetCharsListForShard · UO.Resend · UO.CloseUO

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

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

if (Truth(Truth(UO.Connected()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

UO.GameServerIPString

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

var address = UO.GameServerIPString();
UO.Print(address);

Référence complète des commandes


UO.CheckLag

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

Signatures C#

int UO.CheckLag();
dynamic UO.CheckLag(object? arg0);
int UO.CheckLag(object? arg0, object? arg1);

Vérifie si une nouvelle réponse du serveur de jeu a été reçue dans le délai imparti. Pratique avant de poursuivre le script après un délai réseau.

Paramètres

  • timeout — timeout / timeoutMS — temps d'attente pour une tentative en millisecondes, converti en int. Une valeur négative est limitée à zéro. Avec 0 la requête peut être envoyée, mais il n'y a aucune attente de réponse ; Ce n'est pas un délai d'attente infini.
  • timeoutMS — timeout / timeoutMS — temps d'attente pour une tentative en millisecondes, converti en int. Une valeur négative est limitée à zéro. Avec 0 la requête peut être envoyée, mais il n'y a aucune attente de réponse ; Ce n'est pas un délai d'attente infini.
  • retries - tentatives - nombre TOTAL de tentatives, pas le nombre de répétitions supplémentaires. Se convertit en int et est limité de bas en haut à un. Par exemple, (250, 3) - jusqu'à trois tentatives à 250 ms ; une réponse réussie termine la vérification plus tôt.

Valeur de retour

Indicateur numérique int : 1 (condition remplie) - nouvelle réponse reçue ; 0 (condition non remplie) - la demande est impossible ou le délai est expiré. Single parameter registration object? actually returns this int. Il ne s'agit pas de la valeur du ping ni du nombre de tentatives.

Comportement

  • CheckLag() fait une tentative, en attendant jusqu'à 10000 ms. CheckLag(timeoutMS) - une tentative avec l'attente spécifiée. CheckLag(timeout, retries) répète la vérification jusqu'à ce que le succès ou le nombre total de tentatives soit épuisé.
  • L'attente retarde le script d'appel plutôt que de confirmer l'action du jeu. La commande ne se reconnecte pas et ne modifie pas les paramètres réseau. Le serveur peut ne pas répondre à l'écho : un échec en soi ne prouve pas que la connexion est rompue. Le timing dépend également de la programmation des flux ; N'appelez pas une vérification active sur chaque image. L'arrêt du script interrompt l'attente.
  • UO.GetPing · UO.CheckLag · UO.IsOnline

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

1. CheckLag - 1 - script direct

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

  • Un formulaire sans paramètres peut attendre jusqu'à 10 secondes. true signifie une nouvelle réponse d'écho. Le masquage est appelé par une commande distincte et peut être remplacé par les mécanismes du jeu.
if (Truth(Truth(UO.CheckLag()) == true))
{
    UO.UseSkill("Hiding");
}
else
{
    UO.Print("No fresh server response");
}

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

2. CheckLag — 2 — fonction de script

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

  • 250 — attente d'une tentative, 3 — nombre total de tentatives. En cas de succès, aucune autre tentative n'est effectuée ; avec 0 le script ne continue pas. Il ne s'agit pas d'une mesure de ping 250 ms ou de trois répétitions supplémentaires.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var responsive = UO.CheckLag(250, 3);
    if (Truth(responsive == 0))
    {
        UO.Print("No response after the allowed attempts");
        return null;
    }

    UO.Print("Fresh response received; the script can continue");
    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. CheckLag - 3 - classe de scénario

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

  • CanContinue(timeoutMs, tentatives) vérifie d'abord UO.IsOnline, puis la dernière réponse. false et 0 sont équivalents pour ce prédicat. Les tentatives 500 ms et 2 sont spécifiées séparément ; La fonction ne déclenche pas de reconnexion automatique.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (!(Truth(CanContinue(500, 2))))
        {
            return null;
        }

        UO.UseSkill("Hiding");
        return null;
    }

    dynamic CanContinue(dynamic timeoutMs, dynamic attempts)
    {
        if (Truth(Truth(UO.IsOnline()) == false))
        {
            return false;
        }

        return Truth(Truth(UO.CheckLag(timeoutMs, attempts)) == true);
    }

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

UO.CloseUO

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

Signatures C#

void UO.CloseUO();

Demande à l’application client actuelle de quitter via Client.Game.Exit.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour.

Comportement

  • CloseUO est envoyé vers le même pont.CloseHandle. La sortie est exécutée sur le thread de jeu ; si Client.Game est manquant, il n'y a aucune action. La commande n'est pas un arrêt d'un Gump séparé.

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Terminer le client - Script direct

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

  • L'appel demande la résiliation de l'application client.
UO.CloseUO();

2. Condition de terminaison explicite - fonction de script

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

  • L'exemple montre une condition contrôlée ; la valeur 0 maintient le client ouvert.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var finishClient = 0;
    if (Truth(finishClient))
    {
        UO.CloseUO();
    }

    return null;
}

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

3. Procédure d'achèvement - Classe de script

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

  • Un assistant entièrement déclaré permet une activation explicite de la sortie.
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()
    {
        FinishClient(0);
        return null;
    }

    void FinishClient(dynamic enabled)
    {
        if (Truth(enabled))
        {
            UO.CloseUO();
        }
    }

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

UO.Connect

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

Signatures C#

void UO.Connect();

Demande la connexion ou la reconnexion de la session client en cours.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour.

Comportement

  • Dans une session manager, appelle SessionControl.RequestConnect. Dans le client autonome, la connexion active/préparée reste inchangée.
  • Car GameScene prévoit une reconnexion enregistrée afin de ne pas changer de scène lors de sa Mise à jour. Dans LoginScene utilise le compte actuel et le mot de passe enregistré, active la reconnexion et appelle Connect avec le fragment/caractère mémorisé même lorsque la reconnexion automatique est désactivée.
  • L'équipe n'attend pas d'entrer dans le monde. Vérifiez UO.Connected après une attente séparée si d'autres actions nécessitent une connexion.

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Connecter - script direct

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

  • L'appel initie uniquement une connexion.
UO.Connect();

2. Se connecter en l'absence de connexion - fonction de script

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

  • La vérification peut éviter une nouvelle demande.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (!(Truth(UO.Connected())))
    {
        UO.Connect();
    }

    return null;
}

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

3. Vérifier l'état plus tard - Classe de script

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

  • Attendre 1000 ms ne garantit pas l'entrée ; la sortie affiche le drapeau actuel réel.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.Connect();
        await Delay(1000);
        UO.Print(Convert.ToString(UO.Connected()));
        return null;
    }

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

UO.Connected

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

Signatures C#

dynamic UO.Connected();

Vérifie si la session en cours est dans le monde du jeu et si sa connexion au jeu est ouverte. À utiliser avant une action de personnage ou en attendant l'entrée.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int. 1 - il y a un joueur, une carte chargée et une prise de jeu active en même temps ; sinon 0. Une fenêtre client ouverte, une liste de caractères ou une connexion TCP lors de la phase de connexion ne signifie pas 1. Indicateur numérique int : 1 (condition remplie), 0 (condition non remplie). Il s'agit d'un indicateur numérique : dans C#, vérifiez le résultat != 0 ou le résultat == 0. La comparaison directe de int avec true/false et if (résultat) n'est pas autorisée.

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

  • Il n'y a pas de paramètres : serial, type, nom du personnage et IP ne peuvent pas être transférés. UO.Online(), UO.Connected() et UO.IsOnline() vérifient la même chose. Il s'agit de l'état du propriétaire de session donné, et non d'un autre profil de gestionnaire.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.

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

1. N'exécutez pas la compétence de jeu hors ligne - script direct

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

  • false est équivalent à 0. return termine Main à UseSkill. Le masquage est le seul paramètre de UseSkill, le nom de la compétence. Avec 1 le script demande uniquement d'utiliser la compétence ; le résultat dépend de l'état du personnage et du serveur.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
if (Truth(Truth(UO.Connected()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

2. Demander une connexion en l'absence de connexion - fonction script

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

  • La comparaison avec 0 vérifie la connexion actuelle, pas le paramètre de reconnexion automatique. Connect sans arguments utilise les paramètres enregistrés et n'attend pas la fin de la connexion. La répétition d'une commande lors d'une connexion déjà démarrée ne doit pas créer de deuxième session.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.Connected() == 0))
    {
        UO.Connect();
    }

    return null;
}

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

3. Attendez que le monde soit prêt avec une limite de temps - classe de scénario

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

  • WaitForWorld(timeoutMs) est une fonction définie par l'utilisateur entièrement affichée, pas une commande intégrée. 5000 — budget en ms, UO.Wait(50) — intervalle de contrôle. Une valeur négative donne false ; 0 ne permet qu'un monde tout fait. Timer mesure les secondes, donc la différence est multipliée par 1000. La pause automatique doit être désactivée à l'avance, sinon Main quitte. La fonction n'appelle pas Connect et n'annule pas l'entrée démarrée à l'expiration du délai.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
        {
            return null;
        }

        if (Truth(await WaitForWorld(5000)))
        {
            UO.UseSkill("Hiding");
        }

        return null;
    }

    async Task<dynamic> WaitForWorld(dynamic timeoutMs)
    {
        if (Truth(timeoutMs < 0))
        {
            return false;
        }

        var started = Environment.TickCount;
        while (!(Truth(UO.Connected())))
        {
            if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
            {
                return false;
            }

            await Delay(50);
        }

        return true;
    }

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

UO.ConnectedTime

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

Signatures C#

dynamic UO.ConnectedTime();

Renvoie le tampon du calendrier de la dernière entrée réussie du personnage dans le monde. Vous aide à comprendre si la connexion a changé pendant l'attente ou la pause avant de continuer la même tâche.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

double : nombre de jours de 1899-12-30, partie fractionnaire - heure de la journée (OLE Date d'automatisation). 0 signifie que ce propriétaire de session n'est pas encore entré dans le monde. Après la déconnexion, la dernière marque d'entrée est conservée. Ce n'est pas bool ou la durée en secondes.

Comportement

  • Il n'y a pas d'arguments. L'historique est commun aux scripts d'un même propriétaire de session : démarrage tardif, pause et fermeture IDE ne modifient pas les marques. Un nouveau processus de session commence une nouvelle histoire ; ce n'est pas un journal de toutes les connexions.
  • Une tentative de connexion échouée sans que le personnage n'apparaisse dans le monde n'est pas considérée comme une connexion réussie. Les contrôles hors ligne répétés ne modifient pas l'heure d'arrêt. Pour l'état actuel, utilisez UO.Connected() plutôt qu'une date non nulle.
  • Les horloges sont extraites de l'horloge locale de l'ordinateur. La différence multipliée par 86400 donne les secondes calendaires ; Changer l’horloge/le fuseau horaire peut fausser les résultats. Pour les délais d'attente, utilisez Timer() monotone. Les appels individuels ne forment pas un instantané atomique ; la même marque n'est pas une connexion ID unique.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.

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

1. Demandez la toute première entrée - script direct

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

  • 0 vérifie l'absence d'entrées dans ce processus particulier. Connect utilise le profil enregistré et demande uniquement une connexion. Cet exemple ne restaure pas intentionnellement une connexion déjà terminée.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.
if (Truth(UO.ConnectedTime() == 0))
{
    UO.Connect();
}

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

2. Réinitialiser la cible attendue après une nouvelle connexion - fonction de script

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

  • 30.0 — suivi du budget en quelques secondes Timer ; 250 — intervalle UO.Wait en ms. Après avoir modifié la marque d'entrée, CancelWaitTarget efface la cible différée précédente. S'il n'y a pas de nouvelle entrée, la boucle se termine sans cette action.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var login = UO.ConnectedTime();
    var started = Environment.TickCount;
    while (Truth(Environment.TickCount - started < 30.0))
    {
        if (Truth(UO.Connected()) && Truth(UO.ConnectedTime() != login))
        {
            UO.CancelWaitTarget();
            return null;
        }

        await Delay(250);
    }

    return null;
}

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

3. Tester la connexion avant de continuer - Classe de script

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

  • SameConnection(connexion) renvoie bool. Nous sauvegardons la marque, attendons 500 ms, puis interdisons la poursuite s'il n'y a pas de connexion ou si l'entrée change. Il s'agit d'un nouveau test et non d'une garantie de disponibilité future du serveur.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.
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 login = UO.ConnectedTime();
        await Delay(500);
        if (!(Truth(SameConnection(login))))
        {
            return null;
        }

        UO.AddToSystemJournal("Same connection; continue this batch");
        return null;
    }

    dynamic SameConnection(dynamic login)
    {
        return Truth(login != 0) && Truth(UO.Connected()) && Truth(UO.ConnectedTime() == login);
    }

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

UO.Disconnect

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

Signatures C#

void UO.Disconnect();

Déconnecte le transport client actuel ou installé et prépare les scripts pour la reconnexion.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

void - aucune valeur de retour.

Comportement

  • Si la reconnexion automatique est désactivée, BeginScriptControlledDisconnect enregistre le travailleur qui effectue l'appel pour plus tard UO.Connect. La session gestionnaire reçoit RequestDisconnect.
  • Le client autonome appelle Socket.Disconnect et PrepareForReconnect. Lorsque la reconnexion globale est activée, elle planifie explicitement la transition de scène enregistrée. Dans LoginScene efface la fenêtre contextuelle et renvoie Main.
  • Le retour de void ne rapporte pas le résultat de la reconnexion. L'état de la connexion est lu séparément ; Les paramètres de reconnexion automatique peuvent lancer une nouvelle connexion.

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Déconnecter la session - script direct

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

  • La commande annule à la fois le transport actif et installé.
UO.Disconnect();

2. Reconnexion explicite - fonction de script

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

  • Avec AR désactivé, le travailleur appelant peut atteindre Connect lui-même.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.Disconnect();
    await Delay(1000);
    UO.Connect();
    return null;
}

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

3. Désactiver la session connectée uniquement - classe de script

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

  • La condition utilise un indicateur local pour la session en cours.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(UO.Connected()))
        {
            UO.Disconnect();
        }

        return null;
    }

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

UO.DisconnectedTime

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

Signatures C#

dynamic UO.DisconnectedTime();

Renvoie le tampon du calendrier de la dernière fois que la connexion au jeu a été perdue. Il est nécessaire pour diagnostiquer une rupture et estimer la durée d'une connexion terminée, et non pour déterminer le nombre de tentatives de connexion.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

double : nombre de jours de 1899-12-30 avec partie fractionnaire de jour. Après la pause - le moment où le client a remarqué la panne ; avant la première pause est le moment où le propriétaire de la session a été créé. Ce n'est pas un indicateur hors ligne ni des millisecondes.

Comportement

  • Il n'y a pas d'arguments. L'historique est commun aux scripts d'un même propriétaire de session : démarrage tardif, pause et fermeture IDE ne modifient pas les marques. Un nouveau processus de session commence une nouvelle histoire ; ce n'est pas un journal de toutes les connexions.
  • Une tentative de connexion échouée sans que le personnage n'apparaisse dans le monde n'est pas considérée comme une connexion réussie. Les contrôles hors ligne répétés ne modifient pas l'heure d'arrêt. Pour l'état actuel, utilisez UO.Connected() plutôt qu'une date non nulle.
  • Les horloges sont extraites de l'horloge locale de l'ordinateur. La différence multipliée par 86400 donne les secondes calendaires ; Changer l’horloge/le fuseau horaire peut fausser les résultats. Pour les délais d'attente, utilisez Timer() monotone. Les appels individuels ne forment pas un instantané atomique ; la même marque n'est pas une connexion ID unique.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.

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

1. Estimer la durée d'une connexion terminée - script direct

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

  • CompletedConnectionSeconds() renvoie les secondes ou -1 s'il n'y a pas de connexion terminée ou si l'entrée a changé entre les lectures. 86400 — secondes dans une journée. Seul le dernier couple entrée/rupture est recalculé ; La fonction ne résume pas l'historique de toutes les sessions.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.
var seconds = CompletedConnectionSeconds();
if (Truth(seconds >= 0))
{
    UO.AddToSystemJournal("Completed connection seconds: " + Convert.ToString(seconds));
}

dynamic CompletedConnectionSeconds()
{
    var login = UO.ConnectedTime();
    var loss = UO.DisconnectedTime();
    if (Truth(login == 0) || Truth(loss < login) || Truth(UO.Connected()))
    {
        return -1;
    }
    if (Truth(UO.ConnectedTime() != login))
    {
        return -1;
    }
    return (loss - login) * 86400.0;
}

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

2. Demander une connexion après une courte attente hors ligne - fonction de script

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

  • Lorsque la pause automatique est activée, ce contrôleur se ferme immédiatement ; Pour travailler hors ligne, il doit être éteint au préalable. Après UO.Wait(1000) hors ligne et la marque de rupture précédente sont à nouveau vérifiées. Connect ne garantit pas le succès et ne remplace pas le paramètre de reconnexion automatique.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
    {
        return null;
    }

    if (Truth(UO.Connected()))
    {
        return null;
    }

    var loss = UO.DisconnectedTime();
    await Delay(1000);
    if (!(Truth(UO.Connected())) && Truth(UO.DisconnectedTime() == loss))
    {
        UO.Connect();
    }

    return null;
}

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

3. Notez la pause entre les vérifications - classe de script

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

  • La comparaison avec previousLoss remarque une pause même après la rentrée. 30 secondes limitent la surveillance pendant l'exécution du script, WaitAsync(250) libère le thread entre les vérifications. Plusieurs interruptions peuvent être combinées en une seule notification.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.
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 previousLoss = UO.DisconnectedTime();
        var started = Environment.TickCount;
        while (Truth(Environment.TickCount - started < 30.0))
        {
            if (Truth(UO.DisconnectedTime() != previousLoss))
            {
                UO.AddToSystemJournal("A connection loss occurred; check the session");
                return null;
            }

            await Delay(250);
        }

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

UO.GameServerIPString

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

Signatures C#

dynamic UO.GameServerIPString();

Lit l'adresse du serveur configurée à partir des paramètres globaux du client.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

string — Settings.GlobalSettings.IP ou une chaîne vide s'il n'y a pas de valeur.

Comportement

  • GameServerAddress dans le pont actuel lit le paramètre global IP. Il ne s'agit pas d'une requête DNS/réseau, ni d'une vérification de l'adresse réelle du homologue ; une session gestionnaire peut avoir ses propres paramètres de connexion.

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

1. Lire l'adresse - script direct

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

  • Le paramètre global actuel IP est renvoyé.
var address = UO.GameServerIPString();
UO.Print(address);

2. Rechercher une adresse vide - fonction de script

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

  • Une valeur vide indique aucune configuration et non une défaillance réseau mesurée.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var address = UO.GameServerIPString();
    if (Truth(Len(address) == 0))
    {
        UO.Print("no configured address");
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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. Enregistrer un instantané - Classe de script

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

  • La variable stocke la chaîne obtenue par le premier appel.
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 address = UO.GameServerIPString();
        await Delay(100);
        UO.Print(address);
        return null;
    }

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

UO.GetCharsListForShard

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

Signatures C#

dynamic UO.GetCharsListForShard();

Renvoie les noms de caractères de la partition actuelle connus du client.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

Tableau de chaînes. Il n'y a aucun nom connu et le caractère actuel est un tableau vide.

Comportement

  • La session du gestionnaire lit SessionControl.Characters. En mode autonome, LastCharacterManager est utilisé en premier pour le compte/serveur ; si la liste est vide, lisez LoginScene. Caractères sans noms vides ; alors le Player.Name actuel est utilisé comme seul élément.
  • Ce sont des noms localement connus ; la commande ne demande pas une liste complète au serveur et ne garantit pas la fraîcheur du cache.

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

1. Imprimer les noms - script direct

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

  • La boucle fonctionne sur un véritable tableau de noms connus.
var names = UO.GetCharsListForShard();
for (int i = (int)(0); i <= ArrayLength(names)-1; i += (int)(1))
{
    UO.Print(names[i]);
}

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

2. Prénom connu – Fonction de script

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

  • L'index 0 n'est utilisé que pour un tableau non vide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var names = UO.GetCharsListForShard();
    if (Truth(ArrayLength(names) > 0))
    {
        UO.Print(names[0]);
    }

    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. Nombre de noms - classe de script

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

  • La taille de la liste n'indique pas le nombre d'emplacements de compte sur le serveur.
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 names = UO.GetCharsListForShard();
        UO.Print(Convert.ToString(ArrayLength(names)));
        return null;
    }

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

UO.GetPing

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

Signatures C#

int UO.GetPing();
int UO.GetPing(object? arg0);

Lit le délai de réponse du serveur de jeu. Sans argument, utilise la dernière dimension ; avec un délai d'attente demande une nouvelle réponse.

Paramètres

  • timeout — timeout / timeoutMS — temps d'attente pour une tentative en millisecondes, converti en int. Une valeur négative est limitée à zéro. Avec 0 la requête peut être envoyée, mais il n'y a aucune attente de réponse ; Ce n'est pas un délai d'attente infini.

Valeur de retour

int, millisecondes. Valeur >= 0 – mesure ; Les ms 0 sont également acceptables. -1 - pas de mesure : pour un formulaire argumenté, la demande n'a pas été complétée ou la réponse n'a pas été reçue à temps. Ce n'est PAS bool ; 0 ne peut pas être considéré comme un échec et -1 comme une réussite.

Comportement

  • GetPing() n'envoie rien et lit immédiatement le dernier ServerPing. L'ancienne valeur en elle-même ne prouve pas que la connexion fonctionne désormais. Il s'agit de la dernière mesure d'écho du serveur, pas du ping de l'indicateur TCP lissé/sauvegardé et non du ping ICMP (hôte). GetPing(timeout) attend une nouvelle réponse puis lit la dernière mesure du serveur.
  • L'attente retarde le script d'appel plutôt que de confirmer l'action du jeu. La commande ne se reconnecte pas et ne modifie pas les paramètres réseau. Le serveur peut ne pas répondre à l'écho : un échec en soi ne prouve pas que la connexion est rompue. Le timing dépend également de la programmation des flux ; N'appelez pas une vérification active sur chaque image. L'arrêt du script interrompt l'attente.
  • UO.GetPing · UO.CheckLag · UO.IsOnline

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

1. GetPing - 1 - script direct

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

  • Lire le cache sans nouvelle requête réseau. L'exemple sélectionne 50 ou 200 ms pour attendre le script lui-même à un seuil de 250 ms. La dimension inconnue est traitée séparément. Ces chiffres sont un exemple de paramètre et non une limite universelle de serveur.
var pingMs = UO.GetPing();
if (Truth(pingMs < 0))
{
    UO.Print("No server latency sample");
    return null;
}
var delayMs = 50;
if (Truth(pingMs > 250))
{
    delayMs = 200;
}
await Delay(delayMs);

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;

2. GetPing — 2 — fonction de script

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

  • 1000 — attente maximale d'une nouvelle réponse en millisecondes. A -1 la procédure se termine. Si la mesure réussit, le masquage est demandé ; une réponse d'écho ne prouve pas une utilisation réussie de la compétence.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var pingMs = UO.GetPing(1000);
    if (Truth(pingMs == -1))
    {
        UO.Print("No fresh server response");
        return null;
    }

    UO.UseSkill("Hiding");
    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. GetPing - 3 - classe de scénario

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

  • MeanPing(échantillons, timeoutMs) affiché dans son intégralité : 3 tentatives de 500 ms ; les mesures infructueuses sont exclues de la moyenne. S'il n'y en a pas, -1 est renvoyé. échantillons limités à 1 – 10 ; UO.Wait(100) réduit le taux de requêtes entre les tentatives.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var meanMs = await MeanPing(3, 500);
        if (Truth(meanMs < 0))
        {
            UO.Print("No successful samples");
        }
        else
        {
            UO.Print("Measured mean, ms: " + Convert.ToString(meanMs));
        }

        return null;
    }

    async Task<dynamic> MeanPing(dynamic samples, dynamic timeoutMs)
    {
        if (Truth(samples < 1) || Truth(samples > 10))
        {
            return -1;
        }

        var total = 0;
        var count = 0;
        for (int i = (int)(1); i <= samples; i += (int)(1))
        {
            var current = UO.GetPing(timeoutMs);
            if (Truth(current >= 0))
            {
                total = total + current;
                count = count + 1;
            }

            await Delay(100);
        }

        if (Truth(count == 0))
        {
            return -1;
        }

        return total / count;
    }

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

UO.IsOnline

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

Signatures C#

int UO.IsOnline();

Vérifie si la session en cours est dans le monde du jeu et si sa connexion au jeu est ouverte. À utiliser avant une action de personnage ou en attendant l'entrée.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int. 1 - il y a un joueur, une carte chargée et une prise de jeu active en même temps ; sinon 0. Une fenêtre client ouverte, une liste de caractères ou une connexion TCP lors de la phase de connexion ne signifie pas 1. Indicateur numérique int : 1 (condition remplie), 0 (condition non remplie). Il s'agit d'un indicateur numérique : dans C#, vérifiez le résultat != 0 ou le résultat == 0. La comparaison directe de int avec true/false et if (résultat) n'est pas autorisée.

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

  • Il n'y a pas de paramètres : serial, type, nom du personnage et IP ne peuvent pas être transférés. UO.Online(), UO.Connected() et UO.IsOnline() vérifient la même chose. Il s'agit de l'état du propriétaire de session donné, et non d'un autre profil de gestionnaire.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.

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

1. N'exécutez pas la compétence de jeu hors ligne - script direct

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

  • false est équivalent à 0. return termine Main à UseSkill. Le masquage est le seul paramètre de UseSkill, le nom de la compétence. Avec 1 le script demande uniquement d'utiliser la compétence ; le résultat dépend de l'état du personnage et du serveur.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
if (Truth(Truth(UO.IsOnline()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

2. Demander une connexion en l'absence de connexion - fonction script

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

  • La comparaison avec 0 vérifie la connexion actuelle, pas le paramètre de reconnexion automatique. Connect sans arguments utilise les paramètres enregistrés et n'attend pas la fin de la connexion. La répétition d'une commande lors d'une connexion déjà démarrée ne doit pas créer de deuxième session.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.IsOnline() == 0))
    {
        UO.Connect();
    }

    return null;
}

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

3. Attendez que le monde soit prêt avec une limite de temps - classe de scénario

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

  • WaitForWorld(timeoutMs) est une fonction définie par l'utilisateur entièrement affichée, pas une commande intégrée. 5000 — budget en ms, UO.Wait(50) — intervalle de contrôle. Une valeur négative donne false ; 0 ne permet qu'un monde tout fait. Timer mesure les secondes, donc la différence est multipliée par 1000. La pause automatique doit être désactivée à l'avance, sinon Main quitte. La fonction n'appelle pas Connect et n'annule pas l'entrée démarrée à l'expiration du délai.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
        {
            return null;
        }

        if (Truth(await WaitForWorld(5000)))
        {
            UO.UseSkill("Hiding");
        }

        return null;
    }

    async Task<dynamic> WaitForWorld(dynamic timeoutMs)
    {
        if (Truth(timeoutMs < 0))
        {
            return false;
        }

        var started = Environment.TickCount;
        while (!(Truth(UO.IsOnline())))
        {
            if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
            {
                return false;
            }

            await Delay(50);
        }

        return true;
    }

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

UO.Online

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

Signatures C#

int UO.Online();

Vérifie si la session en cours est dans le monde du jeu et si sa connexion au jeu est ouverte. À utiliser avant une action de personnage ou en attendant l'entrée.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

int. 1 - il y a un joueur, une carte chargée et une prise de jeu active en même temps ; sinon 0. Une fenêtre client ouverte, une liste de caractères ou une connexion TCP lors de la phase de connexion ne signifie pas 1. Indicateur numérique int : 1 (condition remplie), 0 (condition non remplie). Il s'agit d'un indicateur numérique : dans C#, vérifiez le résultat != 0 ou le résultat == 0. La comparaison directe de int avec true/false et if (résultat) n'est pas autorisée.

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

  • Il n'y a pas de paramètres : serial, type, nom du personnage et IP ne peuvent pas être transférés. UO.Online(), UO.Connected() et UO.IsOnline() vérifient la même chose. Il s'agit de l'état du propriétaire de session donné, et non d'un autre profil de gestionnaire.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
  • UO.Wait prend des millisecondes. La pause automatique en cas de perte de connexion et la pause manuelle retardent l'exécution des exemples : la vérification du délai d'attente ne se poursuivra qu'après la suppression de la pause. Ces commandes ne se réactivent pas et ne permettent pas la reconnexion automatique.

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

1. N'exécutez pas la compétence de jeu hors ligne - script direct

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

  • false est équivalent à 0. return termine Main à UseSkill. Le masquage est le seul paramètre de UseSkill, le nom de la compétence. Avec 1 le script demande uniquement d'utiliser la compétence ; le résultat dépend de l'état du personnage et du serveur.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
if (Truth(Truth(UO.Online()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

2. Demander une connexion en l'absence de connexion - fonction script

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

  • La comparaison avec 0 vérifie la connexion actuelle, pas le paramètre de reconnexion automatique. Connect sans arguments utilise les paramètres enregistrés et n'attend pas la fin de la connexion. La répétition d'une commande lors d'une connexion déjà démarrée ne doit pas créer de deuxième session.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.Online() == 0))
    {
        UO.Connect();
    }

    return null;
}

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

3. Attendez que le monde soit prêt avec une limite de temps - classe de scénario

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

  • WaitForWorld(timeoutMs) est une fonction définie par l'utilisateur entièrement affichée, pas une commande intégrée. 5000 — budget en ms, UO.Wait(50) — intervalle de contrôle. Une valeur négative donne false ; 0 ne permet qu'un monde tout fait. Timer mesure les secondes, donc la différence est multipliée par 1000. La pause automatique doit être désactivée à l'avance, sinon Main quitte. La fonction n'appelle pas Connect et n'annule pas l'entrée démarrée à l'expiration du délai.
  • La commande lit uniquement l'état local. Il n'envoie pas de ping, ne se connecte pas, ne fait pas de pause et ne vérifie pas la disponibilité d'Internet. Après lecture, la connexion peut changer ; 1 ne garantit pas le succès de l'action suivante.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
        {
            return null;
        }

        if (Truth(await WaitForWorld(5000)))
        {
            UO.UseSkill("Hiding");
        }

        return null;
    }

    async Task<dynamic> WaitForWorld(dynamic timeoutMs)
    {
        if (Truth(timeoutMs < 0))
        {
            return false;
        }

        var started = Environment.TickCount;
        while (!(Truth(UO.Online())))
        {
            if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
            {
                return false;
            }

            await Delay(50);
        }

        return true;
    }

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

UO.Resend

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

Signatures C#

void UO.Resend();

Envoie une demande pour resynchroniser le monde.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

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

Comportement

  • Resync envoie NetClient.Socket.Send_Resync sur le fil de discussion du jeu. Il s'agit d'une demande de mise à jour, pas d'une reconnexion ou d'un accusé de réception de données.
  • Dans les exemples, UO.Wait spécifie uniquement une pause de script ; la fin de la pause ne prouve pas que le serveur a complété la requête.

Scripts C# autonomes

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

Exemple simple

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

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

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

1. Appel direct - script direct

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

  • Envoie une demande pour resynchroniser le monde.
UO.Resend();

2. Option explicite - fonction de script

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

  • Resync envoie NetClient.Socket.Send_Resync sur le fil de discussion du jeu. Il s'agit d'une demande de mise à jour, pas d'une reconnexion ou d'un accusé de réception de données.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.IsOnline()))
    {
        UO.Resend();
    }

    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 :

  • Dans les exemples, UO.Wait spécifie uniquement une pause de script ; la fin de la pause ne prouve pas que le serveur a complété la requête.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.Resend();
        UO.Wait(500);
        UO.Print(UO.GetX());
        return null;
    }
}

UO.ShardName

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

Signatures C#

dynamic UO.ShardName();

Lit le nom du fragment.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

string — texte du champ du pont.ShardName; sans données disponibles, une chaîne vide est possible. Ce n'est pas un signe de connexion et ce n'est pas un ID numérique.

Comportement

  • ExecuteClientApiCompatibility renvoie bridge.ShardName sans modifier le profil ou la sélection du serveur.
  • 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.

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.ShardName();
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 le nom du fragment.
var value = UO.ShardName();
UO.Print(value);

2. Option explicite - fonction de script

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

  • ExecuteClientApiCompatibility renvoie bridge.ShardName sans modifier le profil ou la sélection du serveur.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var value = UO.ShardName();
    if (Truth(Len(value) > 0))
    {
        UO.TextPrint(value);
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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. 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 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.ShardName();
        UO.Wait(500);
        var after = UO.ShardName();
        UO.Print(before = after);
        return null;
    }
}

UO.ShardPath

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

Signatures C#

dynamic UO.ShardPath();

Lit le chemin du profil actuel.

Paramètres

Il n'y a pas de paramètres.

Valeur de retour

string — texte du champ du pont.CurrentProfilePath; sans données disponibles, une chaîne vide est possible. Ce n'est pas un signe de connexion et ce n'est pas un ID numérique.

Comportement

  • ExecuteClientApiCompatibility renvoie bridge.CurrentProfilePath sans modifier le profil ou la sélection du serveur.
  • 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.

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.ShardPath();
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 le chemin du profil actuel.
var value = UO.ShardPath();
UO.Print(value);

2. Option explicite - fonction de script

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

  • ExecuteClientApiCompatibility renvoie bridge.CurrentProfilePath sans modifier le profil ou la sélection du serveur.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var value = UO.ShardPath();
    if (Truth(Len(value) > 0))
    {
        UO.TextPrint(value);
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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. 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 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.ShardPath();
        UO.Wait(500);
        var after = UO.ShardPath();
        UO.Print(before = after);
        return null;
    }
}

Clone this wiki locally