Repository navigation
FR UO Topic journal
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Accueil · C# · IDE · UO API · A–Z · Exemples · Langues
Recherchez et attendez les messages, les index de ligne, l'heure, la couleur et l'auteur serial. Séparez les anciennes lignes de journal du message que vous attendez après l'action.
| Sujet | Commandes et explications |
|---|---|
| Journal | UO.Journal |
| InJournal | UO.InJournal |
| InJournalBetweenTimes | UO.InJournalBetweenTimes |
| WaitJournalLine | UO.WaitJournalLine |
| System Journal | UO.AddToSystemJournal · UO.AddToSystemJournalEx · UO.ClearSystemJournal · UO.WaitJournalLineSystem |
| Journal Ignore | UO.AddJournalIgnore · UO.ClearJournalIgnore |
| Journal Color | UO.JournalColor · UO.GetJournalColor |
| Journal Serial | UO.JournalSerial · UO.GetJournalSerial |
| Journal Timer | UO.JournalTimer |
| Found Text | UO.GetFoundedText · UO.GetFoundedTextColor · UO.GetFoundedTextID · UO.GetFoundedTextIndex · UO.GetFoundedTextSerial · UO.GetFoundedTextTimer |
UO.Journal · UO.GetJournal · UO.InJournal · UO.InJournalBetweenTimes · UO.LowJournal · UO.HighJournal · UO.ClearJournal · UO.DeleteJournal · UO.ChangeJournalLength · UO.SetJournalLine · UO.AddToJournal · UO.LastJournalMessage · UO.LastMessage
UO.WaitJournalLine · UO.WaitJournalLineSystem · UO.WaitingForJournalText
UO.AddToSystemJournal · UO.AddToSystemJournalEx · UO.ClearSystemJournal
UO.AddJournalIgnore · UO.ClearJournalIgnore
UO.JournalColor · UO.GetJournalColor · UO.JournalSerial · UO.GetJournalSerial · UO.JournalTimer · UO.LineCount · UO.LineID · UO.LineIndex · UO.LineMsgType · UO.LineName · UO.LineTextColor · UO.LineTextFont · UO.LineTime · UO.LineType
UO.FoundedParamId · UO.GetFoundedText · UO.GetFoundedTextColor · UO.GetFoundedTextID · UO.GetFoundedTextIndex · UO.GetFoundedTextSerial · UO.GetFoundedTextTimer
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.
Paramètres, résultat et tous les scénarios
var found = UO.InJournal("You see");
if (Truth(found > 0))
{
var text = UO.GetFoundedText();
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres, résultat et tous les scénarios
var started = Now();
var found = UO.WaitJournalLine(started, "success|failed", 3000);
if (Truth(found))
{
UO.Print(UO.GetFoundedText());
}
else
{
UO.Print("Timeout");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddJournalIgnore(object? arg0);Ajoute un filtre de texte local pour les entrées du journal de jeu ClassicUO.
-
Convert.ToString- fragment de texte non vide à rechercher dans le texte de l'entrée de journal.
void. La commande ne renvoie pas le nombre de correspondances.
- Le texte est coupé sur les bords ; aucune ligne vide n'est ajoutée. Lors de la vérification d'un enregistrement, la recherche d'une sous-chaîne est effectuée sans tenir compte de la casse. L'entrée correspondante est masquée localement dans le journal client ; le serveur ne reçoit pas le filtre.
UO.ClearJournalIgnore()efface tous les filtres de texte ajoutés. Les entrées déjà affichées ne sont pas restaurées une fois effacées.
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.
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.AddJournalIgnore");
UO.AddJournalIgnore("You see");Paramètres et déroulement de l’exécution :
- Masquer les nouveaux messages contenant cette phrase.
UO.AddJournalIgnore("You see");Paramètres et déroulement de l’exécution :
- Le filtre recherche une sous-chaîne qui ne respecte pas la casse.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var phrase = "vendor";
UO.AddJournalIgnore(phrase);
return null;
}Paramètres et déroulement de l’exécution :
- Plusieurs appels ajoutent des filtres de texte indépendants.
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.AddJournalIgnore("You see");
UO.AddJournalIgnore("vendor");
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToJournal(object? arg0);Affiche un message local sur la progression du script ou la condition d'arrêt. Vous le voyez, pas les autres joueurs.
Un appel à une méthode avec un type de retour void est écrit sous la forme d'une instruction autonome C# ; le résultat ne peut pas être attribué ou vérifié. Le fait de remplir la déclaration ne constitue pas une confirmation de la part du serveur de jeu.
- Le message va dans la zone inférieure gauche de la fenêtre de jeu et dans le journal local. Une copie est disponible en sortie IDE. Dans le journal général du manager, activez le filtre des messages du script : l'entrée est disponible sans la fenêtre de jeu. Le filtre de messages du système serveur ne sélectionne pas ces enregistrements. Le paquet vocal réseau n'est pas envoyé. Pour l'inscription au dessus de la tête il y a UO.CharPrint.
-
UO.Printajoute une nouvelle entrée au journal des messages du jeu : lisez ou enregistrez d'abord la chaîne/le résultat de recherche souhaité, puis enregistrez le message de diagnostic. Dans une boucle rapide, enregistrez les messages lorsque des changements se produisent plutôt qu'à chaque itération. - La couleur des messages système de ce runtime de script est utilisée : initialement 0x0440, modifiée UO.ConColor. Il s'agit d'une entrée locale ; le nom de la commande ne signifie pas son envoi au serveur.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
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.
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.AddToJournal");
UO.AddToJournal("Script started");Paramètres et déroulement de l’exécution :
- Processed=12 — nombre de démonstration d'éléments déjà traités. Convert.ToString le transforme en chaîne. Cet exemple ne rapporte qu'un nombre ; il ne transfère pas les objets eux-mêmes.
var processed = 12;
UO.AddToJournal("Processed item entries: " + Convert.ToString(processed));Paramètres et déroulement de l’exécution :
- Le poids et le maximum du personnage sont lus. Un maximum nul/inconnu n’est pas considéré comme une surcharge. Si poids >= maximum, une ligne est imprimée et Main se termine ; les objets ne sont pas jetés.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.AddToJournal("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Main se souvient du poids, attend 1000 millisecondes et appelle le ReportWeight entièrement déclaré. L'assistant n'imprime que si le poids a changé et renvoie le nouveau poids pour le prochain contrôle. Il ne crée pas lui-même une boucle infinie.
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.AddToJournal("Weight changed: " + Convert.ToString(current));
}
return current;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToSystemJournal(object? arg0);Affiche un message local sur la progression du script ou la condition d'arrêt. Vous le voyez, pas les autres joueurs.
Un appel à une méthode avec un type de retour void est écrit sous la forme d'une instruction autonome C# ; le résultat ne peut pas être attribué ou vérifié. Le fait de remplir la déclaration ne constitue pas une confirmation de la part du serveur de jeu.
- Le message va dans la zone inférieure gauche de la fenêtre de jeu et dans le journal local. Une copie est disponible en sortie IDE. Dans le journal général du manager, activez le filtre des messages du script : l'entrée est disponible sans la fenêtre de jeu. Le filtre de messages du système serveur ne sélectionne pas ces enregistrements. Le paquet vocal réseau n'est pas envoyé. Pour l'inscription au dessus de la tête il y a UO.CharPrint.
-
UO.Printajoute une nouvelle entrée au journal des messages du jeu : lisez ou enregistrez d'abord la chaîne/le résultat de recherche souhaité, puis enregistrez le message de diagnostic. Dans une boucle rapide, enregistrez les messages lorsque des changements se produisent plutôt qu'à chaque itération. - La couleur des messages système de ce runtime de script est utilisée : initialement 0x0440, modifiée UO.ConColor. Il s'agit d'une entrée locale ; le nom de la commande ne signifie pas son envoi au serveur.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
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.
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.AddToSystemJournal");
UO.AddToSystemJournal("Script started");Paramètres et déroulement de l’exécution :
- Processed=12 — nombre de démonstration d'éléments déjà traités. Convert.ToString le transforme en chaîne. Cet exemple ne rapporte qu'un nombre ; il ne transfère pas les objets eux-mêmes.
var processed = 12;
UO.AddToSystemJournal("Processed item entries: " + Convert.ToString(processed));Paramètres et déroulement de l’exécution :
- Le poids et le maximum du personnage sont lus. Un maximum nul/inconnu n’est pas considéré comme une surcharge. Si poids >= maximum, une ligne est imprimée et Main se termine ; les objets ne sont pas jetés.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.AddToSystemJournal("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Main se souvient du poids, attend 1000 millisecondes et appelle le ReportWeight entièrement déclaré. L'assistant n'imprime que si le poids a changé et renvoie le nouveau poids pour le prochain contrôle. Il ne crée pas lui-même une boucle infinie.
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.AddToSystemJournal("Weight changed: " + Convert.ToString(current));
}
return current;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToSystemJournalEx(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4);Affiche une ligne locale dans la fenêtre de jeu et se connecte avec un affichage approximatif de la conception spécifiée. Utile pour les messages de diagnostic de script distinctifs.
-
TextColor— Couleur du texte au format 0xRRGGBB, pas UO hue. Le canal alpha n'est pas utilisé. Exemple 0xFF8800 - orange ; le moteur sélectionne la couleur la plus proche dans la palette UO. -
BGColor- Nombre négatif - arrière-plan par défaut ; non négatif - RGB 0xRRGGBB. L'arrière-plan demandé est écrit dans la sortie de IDE, mais un rectangle de couleur distinct derrière la ligne n'est pas dessiné dans la fenêtre de jeu. -
FontSize— Taille demandée en points : la valeur <= 0 est remplacée par 10, puis la plage 4..72 est appliquée. Le numéro de police du jeu est calculé sous la forme (taille + 1) / 3 ; Il n'y a pas de taille exacte du bureau dans la fenêtre de jeu. -
FontName— Nom de la police pour écrire les informations de conception dans la sortie IDE. Les espaces autour des bords sont supprimés ; une valeur vide signifie Consolas. Cette commande ne charge pas de police Windows arbitraire dans la fenêtre de jeu.
Un appel à une méthode avec un type de retour void est écrit sous la forme d'une instruction autonome C# ; le résultat ne peut pas être attribué ou vérifié. Le fait de remplir la déclaration ne constitue pas une confirmation de la part du serveur de jeu.
- Les cinq arguments sont requis : Text, TextColor, BGColor, FontSize, FontName. Le texte est visible localement ; dans IDE, le design demandé est également enregistré. La couleur d’arrière-plan et le nom de la police sont des éléments de conception et il n’est pas garanti qu’ils soient reproduits exactement. ConColor ne change pas le RGB explicitement passé.
- Le message va dans la zone inférieure gauche de la fenêtre de jeu et dans le journal local. Une copie est disponible en sortie IDE. Dans le journal général du manager, activez le filtre des messages du script : l'entrée est disponible sans la fenêtre de jeu. Le filtre de messages du système serveur ne sélectionne pas ces enregistrements. Le paquet vocal réseau n'est pas envoyé. Pour l'inscription au dessus de la tête il y a UO.CharPrint.
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
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.
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.AddToSystemJournalEx");
UO.AddToSystemJournalEx("Route started", 0xFF8800, -1, 12, "Consolas");Paramètres et déroulement de l’exécution :
- Message orange, arrière-plan par défaut - 1, taille 12 : cela donne à la police du jeu 4. Les consoles sont stockées dans les informations IDE. La couleur peut varier du RGB exact en raison de la palette du jeu.
UO.AddToSystemJournalEx("Route started", 0xFF8800, -1, 12, "Consolas");Paramètres et déroulement de l’exécution :
- Une valeur BGColor positive de 0x112233 stocke la demande d'arrière-plan dans IDE. Pour FontSize=0 10 est utilisé, FontName vide devient Consolas. Dans la fenêtre de jeu, l'arrière-plan n'est pas repeint selon ce paramètre.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.AddToSystemJournalEx("Formatting details", 0x33AAFF, 0x112233, 0, "");
return null;
}Paramètres et déroulement de l’exécution :
- ReportCount est une procédure entièrement déclarée. Il signale uniquement les changements de quantité, en sélectionnant le vert RGB pour augmenter et le rouge pour diminuer. Renvoie une nouvelle quantité pour la prochaine comparaison ; le résultat appartient à ReportCount, pas à AddToSystemJournalEx.
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 previous = 10;
previous = ReportCount(previous, 12);
return null;
}
dynamic ReportCount(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
var textColor = 0xCC3333;
if (Truth(current > previous))
{
textColor = 0x33AA66;
}
UO.AddToSystemJournalEx("Count: " + Convert.ToString(current), textColor, -1, 10, "Consolas");
}
return current;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ChangeJournalLength(object? arg0);Modifie la limite de l'historique des journaux client conservée.
-
newLength— Nombre d'enregistrements à convertir en int. Limites d'exécution ci-dessous à 1 ; JournalManager limites des constantes supérieures.MAX_JOURNAL_HISTORY_COUNT.
void - aucune valeur de retour.
- Enregistre l'état.JournalLength, puis appelle SetJournalLength. JournalManager réduit l'historique existant en supprimant les entrées les plus anciennes vers une nouvelle limite. Les entrées filtrées et l'affichage du journal sont des mécanismes distincts.
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.
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.ChangeJournalLength");
UO.ChangeJournalLength(100);Paramètres et déroulement de l’exécution :
- La nouvelle limite limite le nombre d'enregistrements enregistrés.
UO.ChangeJournalLength(100);Paramètres et déroulement de l’exécution :
- Lorsque la limite est réduite, les anciennes entrées sont supprimées.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.ChangeJournalLength(1);
return null;
}Paramètres et déroulement de l’exécution :
- Le zéro est normalisé à 1 plutôt que d'effacer le journal.
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.ChangeJournalLength(0);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearJournal();Supprime les lignes du journal local partagé.
Il n'y a pas de paramètres.
void - aucune valeur de retour. Ne renvoie pas le nombre de lignes supprimées. Le compteur d'accès et la sélection de script actuelle sont réinitialisés.
- Le buffer partagé est disponible pour tous les scripts : les lignes supprimées ne sont plus présentes. Les instantanés précédemment enregistrés par d'autres scripts peuvent rester, mais leur index deviendra -1.
- Sans filtre de texte, l'intégralité du tampon Classic UO est effacée, y compris le système. Le fichier journal local et les messages du serveur ne sont pas supprimés.
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.
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.ClearJournal");
UO.ClearJournal();Paramètres et déroulement de l’exécution :
- Il n'y a pas d'arguments. Toutes les lignes du buffer partagé sont supprimées.
- Le dernier compteur de recherche devient 0 ; Print peut ajouter une nouvelle ligne après l'effacement.
UO.ClearJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));Paramètres et déroulement de l’exécution :
- La suppression a lieu avant que l'horodatage ne soit enregistré. 1000 - attente limitée en millisecondes.
- Un horodatage suffit généralement pour exclure les anciens messages ; Le nettoyage affecte également d'autres scripts.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.ClearJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}Paramètres et déroulement de l’exécution :
- Après avoir nettoyé le script actuel index=-1, même si seule une partie du tampon a été supprimée.
- La variable texte stocke la copie précédemment lue et GetFoundedText a déjà été effacé.
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 text = UO.Journal(0);
UO.ClearJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearJournalIgnore();Supprime tous les filtres de texte JournalManager.
Il n'y a pas de paramètres.
void - aucune valeur de retour.
- La suppression des filtres ne supprime pas l'historique ni n'annule les filtres de nom AddChatUserIgnore.
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.
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.ClearJournalIgnore");
UO.ClearJournalIgnore();Paramètres et déroulement de l’exécution :
- Supprime tous les filtres de texte JournalManager.
UO.ClearJournalIgnore();Paramètres et déroulement de l’exécution :
- Autorisez le texte Vous voyez à s’afficher à nouveau.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.AddJournalIgnore("You see");
UO.ClearJournalIgnore();
return null;
}Paramètres et déroulement de l’exécution :
- Effacer un ensemble vide est acceptable et ne crée pas de nouveau paramètre.
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.ClearJournalIgnore();
UO.ClearJournalIgnore();
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearSystemJournal();Supprime les lignes avec le nom d'auteur System.
Il n'y a pas de paramètres.
void - aucune valeur de retour. Ne renvoie pas le nombre de lignes supprimées. Le compteur d'accès et la sélection de script actuelle sont réinitialisés.
- Le buffer partagé est disponible pour tous les scripts : les lignes supprimées ne sont plus présentes. Les instantanés précédemment enregistrés par d'autres scripts peuvent rester, mais leur index deviendra -1.
- Le système est reconnu par le nom de l'auteur, sans tenir compte de la casse ; Il s'agit du filtre de journal général ClassicUO.
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.
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.ClearSystemJournal");
UO.ClearSystemJournal();Paramètres et déroulement de l’exécution :
- Il n'y a pas d'arguments. Seules les lignes Système sont supprimées.
- Le dernier compteur de recherche devient 0 ; Print peut ajouter une nouvelle ligne après l'effacement.
UO.ClearSystemJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));Paramètres et déroulement de l’exécution :
- La suppression a lieu avant que l'horodatage ne soit enregistré. 1000 - attente limitée en millisecondes.
- Un horodatage suffit généralement pour exclure les anciens messages ; Le nettoyage affecte également d'autres scripts.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.ClearSystemJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}Paramètres et déroulement de l’exécution :
- Après avoir nettoyé le script actuel index=-1, même si seule une partie du tampon a été supprimée.
- La variable texte stocke la copie précédemment lue et GetFoundedText a déjà été effacé.
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 text = UO.Journal(0);
UO.ClearSystemJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.DeleteJournal();
void UO.DeleteJournal(object? arg0);Supprime les lignes du journal local partagé.
-
text— La sous-chaîne recherchée ou plusieurs alternatives via |, par exemple success|failed. Les espaces aux bords de chaque alternative sont supprimés, les alternatives vides sont ignorées. Il s'agit d'un texte brut, pas d'une expression régulière. Utilisez un modèle non vide. Facultatif uniquement pour DeleteJournal : lors de la transmission, les chaînes correspondantes sont supprimées sans tenir compte de la casse ; sans argument, la totalité du tampon est supprimée.
void - aucune valeur de retour. Ne renvoie pas le nombre de lignes supprimées. Le compteur d'accès et la sélection de script actuelle sont réinitialisés.
- Le buffer partagé est disponible pour tous les scripts : les lignes supprimées ne sont plus présentes. Les instantanés précédemment enregistrés par d'autres scripts peuvent rester, mais leur index deviendra -1.
- Sans filtre de texte, l'intégralité du tampon Classic UO est effacée, y compris le système. Le fichier journal local et les messages du serveur ne sont pas supprimés.
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.
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.DeleteJournal");
UO.DeleteJournal();Paramètres et déroulement de l’exécution :
- Il n'y a pas d'arguments. Toutes les lignes du buffer partagé sont supprimées.
- Le dernier compteur de recherche devient 0 ; Print peut ajouter une nouvelle ligne après l'effacement.
UO.DeleteJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));Paramètres et déroulement de l’exécution :
- La suppression a lieu avant que l'horodatage ne soit enregistré. 1000 - attente limitée en millisecondes.
- Un horodatage suffit généralement pour exclure les anciens messages ; Le nettoyage affecte également d'autres scripts.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.DeleteJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}Paramètres et déroulement de l’exécution :
- Après avoir nettoyé le script actuel index=-1, même si seule une partie du tampon a été supprimée.
- La variable texte stocke la copie précédemment lue et GetFoundedText a déjà été effacé.
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 text = UO.Journal(0);
UO.DeleteJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}Paramètres et déroulement de l’exécution :
- le texte contient deux sous-chaînes. Les lignes de l'un d'entre eux sont supprimées sans tenir compte de la casse ; les messages restants restent.
- found=0 s'il n'y a pas de nouveaux messages correspondants après la suppression. Le modèle vide dans cette implémentation correspond à toutes les chaînes.
UO.DeleteJournal("notice|warning");
var found = UO.InJournal("notice|warning", -1);
UO.Print(Convert.ToString(found));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.FoundedParamId();Renvoie le numéro de l’alternative au modèle de recherche correspondant.
Il n'y a pas de paramètres.
int est l'index de 0 dans la liste des alternatives non vides jusqu'à | : success|failed donne 0 pour le succès et 1 pour l'échec. S'il existe plusieurs alternatives appropriées, la première du modèle est retenue. Sans match ou après un Journal direct également 0. Ce n'est pas le serial de l'auteur, ni le numéro de ligne, ni le type du message.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Vérifiez d'abord le résultat de la recherche > 0. La valeur de 0 ne confirme pas en soi le succès. Les espaces de bord et les alternatives vides sont supprimés avant la numérotation.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; . Dans cette adaptation, ID signifie alternative, les champs auteur et type sont disponibles séparément via LineID/LineMsgType.
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.
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.FoundedParamId();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- le succès est une alternative à 0, l'échec est une alternative à 1. Le succès de la recherche est vérifié séparément.
- Il s'agit d'une analyse de texte et non d'une confirmation d'une opération de jeu par le serveur.
if (Truth(UO.InJournal("success|failed") > 0))
{
var outcome = UO.FoundedParamId();
if (Truth(outcome == 0))
{
UO.Print("Success text");
}
else
{
UO.Print("Failure text");
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- -1 désactive le registre. Les résultats 0, 1, 2 correspondent à l'ordre des alternatives.
- Si la chaîne contient plusieurs options, le premier modèle correspondant dans l'ordre est renvoyé.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.InJournal("mining|ore|empty", -1) > 0))
{
var kind = UO.FoundedParamId();
UO.Print("Alternative: " + Convert.ToString(kind));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) modifie le choix et réinitialise les alternatives ID, afin que le résultat soit stocké à l'avance.
- Le nouvel appel getter après Journal ne décrit plus le modèle précédent.
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.InJournal("success|failed") > 0))
{
var outcome = UO.FoundedParamId();
var latest = UO.Journal(0);
UO.Print("Saved outcome: " + Convert.ToString(outcome));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedText();Renvoie le texte de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
string — texte de l'entrée sélectionnée ; ligne vide sans sélection. Un texte vide est acceptable pour une entrée existante.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
- Répertoire principal : https://forum.yoko.com.ua/viewtopic.php?p=27633.
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.
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.GetFoundedText();
UO.Print("GetFoundedText: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- string — texte de l'entrée sélectionnée ; ligne vide sans sélection. Un texte vide est acceptable pour une entrée existante.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedText();
UO.Print("Text: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedText();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.GetFoundedText();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedTextColor();Renvoie la couleur de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
string - UO hue au format 0x0044 (4 chiffres hexadécimaux). Pas le choix - 0x0000 ; hue=0 est également acceptable pour un message. Ce n'est pas RGB.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
- Répertoire principal : https://forum.yoko.com.ua/viewtopic.php?p=27633.
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.
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.GetFoundedTextColor();
UO.Print("GetFoundedTextColor: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- string - UO hue au format 0x0044 (4 chiffres hexadécimaux). Pas le choix - 0x0000 ; hue=0 est également acceptable pour un message. Ce n'est pas RGB.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextColor();
UO.Print("Hue: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextColor();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.GetFoundedTextColor();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextID();Renvoie le numéro de l’alternative au modèle de recherche correspondant.
Il n'y a pas de paramètres.
int est l'index de 0 dans la liste des alternatives non vides jusqu'à | : success|failed donne 0 pour le succès et 1 pour l'échec. S'il existe plusieurs alternatives appropriées, la première du modèle est retenue. Sans match ou après un Journal direct également 0. Ce n'est pas le serial de l'auteur, ni le numéro de ligne, ni le type du message.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Vérifiez d'abord le résultat de la recherche > 0. La valeur de 0 ne confirme pas en soi le succès. Les espaces de bord et les alternatives vides sont supprimés avant la numérotation.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; . Dans cette adaptation, ID signifie alternative, les champs auteur et type sont disponibles séparément via LineID/LineMsgType.
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.
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.GetFoundedTextID();
UO.Print("GetFoundedTextID: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- le succès est une alternative à 0, l'échec est une alternative à 1. Le succès de la recherche est vérifié séparément.
- Il s'agit d'une analyse de texte et non d'une confirmation d'une opération de jeu par le serveur.
if (Truth(UO.InJournal("success|failed") > 0))
{
var outcome = UO.GetFoundedTextID();
if (Truth(outcome == 0))
{
UO.Print("Success text");
}
else
{
UO.Print("Failure text");
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- -1 désactive le registre. Les résultats 0, 1, 2 correspondent à l'ordre des alternatives.
- Si la chaîne contient plusieurs options, le premier modèle correspondant dans l'ordre est renvoyé.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.InJournal("mining|ore|empty", -1) > 0))
{
var kind = UO.GetFoundedTextID();
UO.Print("Alternative: " + Convert.ToString(kind));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) modifie le choix et réinitialise les alternatives ID, afin que le résultat soit stocké à l'avance.
- Le nouvel appel getter après Journal ne décrit plus le modèle précédent.
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.InJournal("success|failed") > 0))
{
var outcome = UO.GetFoundedTextID();
var latest = UO.Journal(0);
UO.Print("Saved outcome: " + Convert.ToString(outcome));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextIndex();Renvoie l'index actuel de l'entrée sélectionnée, si elle est toujours stockée dans le journal.
Il n'y a pas de paramètres.
int est l'index actuel de 0 (ligne la plus récente). -1 signifie qu'il n'y a pas de choix ou que l'entrée sélectionnée a déjà été supprimée/préemptée. Ce n'est pas le résultat de InJournal : 1 n'a pas besoin d'être soustrait de l'index.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- L'index est recalculé en fonction de l'identité de l'enregistrement. Les nouveaux messages l’augmentent. L'ancien index stocké n'est pas constant ID ; pour le texte, GetFoundedText est plus sûr.
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.
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.GetFoundedTextIndex();
UO.Print("GetFoundedTextIndex: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Getter sans arguments lit la sélection du script actuel. 0 — nouvelle ligne, -1 — aucune ligne dans le tampon actuel.
- Le texte est extrait de l'entrée enregistrée afin que de nouveaux messages ne le remplacent pas.
if (Truth(UO.InJournal("notice") > 0))
{
var index = UO.GetFoundedTextIndex();
var text = UO.GetFoundedText();
UO.Print(Convert.ToString(index) + ": " + text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne la dernière entrée ; la vérification exclut un journal vide.
- Un texte vide est autorisé pour une entrée valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Attendre 100 ms permet l'arrivée de nouveaux messages. après trouve à nouveau la même entrée.
- après peut augmenter ou devenir -1 une fois supprimé ; GetFoundedText contient toujours le texte enregistré.
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.InJournal("needle") > 0))
{
var before = UO.GetFoundedTextIndex();
UO.Wait(100);
var after = UO.GetFoundedTextIndex();
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedTextSerial();Renvoie serial l'auteur de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
string - serial de l'auteur au format 0x00001234 (8 chiffres hexadécimaux). Pas le choix - 0x00000000. Il ne s'agit pas d'un type d'un sujet ou d'un index de revue.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
- Répertoire principal : https://forum.yoko.com.ua/viewtopic.php?p=27633.
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.
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.GetFoundedTextSerial();
UO.Print("GetFoundedTextSerial: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- string - serial de l'auteur au format 0x00001234 (8 chiffres hexadécimaux). Pas le choix - 0x00000000. Il ne s'agit pas d'un type d'un sujet ou d'un index de revue.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextSerial();
UO.Print("Speaker serial: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextSerial();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.GetFoundedTextSerial();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextTimer();Renvoie l'horodatage en millisecondes de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
int — moment d'enregistrement en millisecondes à partir du début de l'exécution, compatible avec Now(). Les inscriptions avant le départ donnent 0. Sans choix également 0 ; une marque de calendrier incorrecte donne -1. Ce n'est pas du passé ni des dixièmes de seconde UO.Timer().
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
- Répertoire principal : https://forum.yoko.com.ua/viewtopic.php?p=27633.
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.
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.GetFoundedTextTimer();
UO.Print("GetFoundedTextTimer: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- int — moment d'enregistrement en millisecondes à partir du début de l'exécution, compatible avec Now(). Les inscriptions avant le départ donnent 0. Sans choix également 0 ; une marque de calendrier incorrecte donne -1. Ce n'est pas du passé ni des dixièmes de seconde UO.Timer().
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextTimer();
UO.Print("Timestamp ms: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextTimer();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.GetFoundedTextTimer();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournal(object? arg0);Lit le texte d'une ligne à l'index actuel et sélectionne cette entrée pour GetFoundedText/Line*.
-
index- Obligatoire int - index actuel : 0 signifie la ligne la plus récente, 1 - la précédente. Les index sont décalés lorsque les messages arrivent. Ce n'est pas une variante serial, ni une variante ID du modèle, ni un résultat positif de InJournal. -
StringIndex- Obligatoire int - index actuel : 0 signifie la ligne la plus récente, 1 - la précédente. Les index sont décalés lorsque les messages arrivent. Ce n'est pas une variante serial, ni une variante ID du modèle, ni un résultat positif de InJournal.
string — texte de la chaîne, ou une chaîne vide si l'index est incorrect/le journal est vide. Une ligne existante peut également avoir du texte vide : après lecture, LineIndex >= 0 confirme que l'entrée a été sélectionnée. Ce n'est pas le nombre de lignes.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- La lecture directe réinitialise les alternatives ID ; GetFoundedTextID/FoundedParamId est suivi de 0. Journal lui-même ne recalcule pas LineCount.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
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.
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.GetJournal(0);
UO.Print("GetJournal: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0 est la ligne la plus récente. Tout d'abord, le texte et l'auteur sont lus, puis le résultat est affiché.
- Print peut ajouter un message ; le texte/auteur enregistré fait référence à l'entrée sélectionnée précédemment.
var text = UO.GetJournal(0);
var author = UO.LineName();
UO.Print(author + ": " + text);Paramètres et déroulement de l’exécution :
- 1 est l'entrée précédente, HighJournal est l'index maximum disponible.
- Le journal peut changer entre les appels. Pour les données d'une ligne déjà trouvée, utilisez GetFoundedText.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var text = UO.GetJournal(1);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- LineIndex=-1 signifie que l'entrée sélectionnée est manquante/supprimée. Len(text)=0 en soi ne signifie pas cela.
- Conservez le résultat du test jusqu'à ce que la sortie de diagnostic soit ajoutée au journal.
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 text = UO.GetJournal(0);
var index = UO.LineIndex();
if (Truth(index < 0))
{
UO.Print("No record");
}
else
{
UO.Print("Text length: " + Convert.ToString(Len(text)));
}
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournalColor(object? arg0);Lit le champ hue de la ligne à l'index actuel sans modifier l'entrée sélectionnée.
-
index- Obligatoire int - index actuel : 0 signifie la ligne la plus récente, 1 - la précédente. Les index sont décalés lorsque les messages arrivent. Ce n'est pas une variante serial, ni une variante ID du modèle, ni un résultat positif de InJournal.
string - UO hue comme 0x0044 ; si l'index 0x0000 est incorrect. Ce n'est pas RGB.
- Chaque appel lit la position actuelle. Pour un texte et des champs cohérents du même enregistrement, d'abord Journal(index), puis GetFoundedText/Line*. Les valeurs nulles peuvent être des données réelles.
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.
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.GetJournalColor(0);
UO.Print("GetJournalColor: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0 est l'index de la nouvelle ligne. La présence d'un tampon est vérifiée.
- string - UO hue comme 0x0044 ; si l'index 0x0000 est incorrect. Ce n'est pas RGB.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.GetJournalColor(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- 1 est la ligne précédente, pas serial=1.
- L'entrée GetFoundedText/Ligne* sélectionnée par la recherche n'est pas modifiée.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.GetJournalColor(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- value copie le champ au moment de l'appel. Attendre ne met pas à jour la variable.
- Pour relire la ligne actuelle 0, appelez à nouveau la commande ; il s'agit peut-être déjà d'une autre entrée.
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 value = UO.GetJournalColor(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournalSerial(object? arg0);Lit le champ serial de la ligne à l'index actuel sans modifier l'entrée sélectionnée.
-
index- Obligatoire int - index actuel : 0 signifie la ligne la plus récente, 1 - la précédente. Les index sont décalés lorsque les messages arrivent. Ce n'est pas une variante serial, ni une variante ID du modèle, ni un résultat positif de InJournal.
string - serial de l'auteur comme 0x00001234 ; si l'index 0x00000000 est incorrect.
- Chaque appel lit la position actuelle. Pour un texte et des champs cohérents du même enregistrement, d'abord Journal(index), puis GetFoundedText/Line*. Les valeurs nulles peuvent être des données réelles.
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.
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.GetJournalSerial(0);
UO.Print("GetJournalSerial: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0 est l'index de la nouvelle ligne. La présence d'un tampon est vérifiée.
- string - serial de l'auteur comme 0x00001234 ; si l'index 0x00000000 est incorrect.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.GetJournalSerial(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- 1 est la ligne précédente, pas serial=1.
- L'entrée GetFoundedText/Ligne* sélectionnée par la recherche n'est pas modifiée.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.GetJournalSerial(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- value copie le champ au moment de l'appel. Attendre ne met pas à jour la variable.
- Pour relire la ligne actuelle 0, appelez à nouveau la commande ; il s'agit peut-être déjà d'une autre entrée.
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 value = UO.GetJournalSerial(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.HighJournal();Renvoie l'index de journal maximum disponible.
Il n'y a pas de paramètres.
int : -1 lorsque le magasin est vide ; sinon, le nombre d'enregistrements stockés moins 1 est l'index du plus ancien enregistrement disponible. Journal/GetJournal utilise des index zéro du nouvel enregistrement à l'ancien ; un résultat positif InJournal utilise un compte unique différent.
- Les nouveaux messages et le nettoyage changent les limites. L'ordre ici est Journal(0) de la nouvelle entrée à l'ancienne entrée.
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.
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.HighJournal();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Une limite négative signifie un tampon vide.
- Si le tampon n'est pas vide, Journal(0) lit une nouvelle entrée.
if (Truth(UO.HighJournal() >= 0))
{
var text = UO.Journal(0);
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- HighJournal=-1 lorsque le log est vide, donc total=0. LowJournal décrit la limite inférieure, pas le nombre de lignes.
- Il s'agit du nombre total de lignes stockées localement ; LineCount fait référence à la dernière recherche.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var total = UO.HighJournal() + 1;
UO.Print("Rows: " + Convert.ToString(total));
return null;
}Paramètres et déroulement de l’exécution :
- L'index est transmis directement au Journal, sans en soustraire un.
- L'index peut changer avec les messages entrants ; Le tampon n'est pas gelé entre les appels.
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 index = UO.HighJournal();
if (Truth(index >= 0))
{
var text = UO.Journal(index);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.InJournal(object? arg0);
int UO.InJournal(object? arg0, object? arg1);
int UO.InJournal(object? arg0, object? arg1, object? arg2);
int UO.InJournal(object? arg0, object? arg1, object? arg2, object? arg3);
int UO.InJournal(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4);
int UO.InJournal(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5);
int UO.InJournal(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5, object? arg6);Recherche un message dans le journal local et enregistre l'enregistrement trouvé avec ses champs.
-
pattern— La sous-chaîne recherchée ou plusieurs alternatives via |, par exemple success|failed. Les espaces aux bords de chaque alternative sont supprimés, les alternatives vides sont ignorées. Il s'agit d'un texte brut, pas d'une expression régulière. Utilisez un modèle non vide. -
Convert.ToString— La sous-chaîne recherchée ou plusieurs alternatives via |, par exemple success|failed. Les espaces aux bords de chaque alternative sont supprimés, les alternatives vides sont ignorées. Il s'agit d'un texte brut, pas d'une expression régulière. Utilisez un modèle non vide. -
maxLinesOrIgnoreCase— Uniquement sous la forme de deux arguments : -1 — l'intégralité du journal disponible, non sensible à la casse ; 0 - ne cochez aucune ligne ; nombre positif - ne vérifiez pas plus que ce nombre de dernières lignes, sensible à la casse. Les autres valeurs négatives sont limitées à 0. -
serial— Le troisième argument et les suivants incluent la forme étendue. Le deuxième argument de ce formulaire est le numérique serial de l'auteur du message, et non graphic/type. -1 désactive le filtre ; 0 sélectionne serial=0. Une chaîne hexadécimale contenant un nombre est également convertie en nombre ; le nom d'alias d'objet n'est pas autorisé ici. -
color— Le troisième argument de la forme étendue est numérique UO hue ; -1 ou 0xFFFF désactive le filtre. 0 sélectionne hue=0. Ce n'est pas RGB. -
startTime— Étiquette de démarrage facultative Now(), int en millisecondes. Étant donné un endTime positif, la valeur startTime=0 signifie le début de l'exécution. Si les deux marques sont manquantes/non positives, il n'y a pas de filtre temporel. -
endTime— Étiquette de fin facultative Now(), int en millisecondes. Absent ou 0 - heure actuelle. L’ordre des frontières positives n’est pas significatif. Le futur label est limité à l'heure actuelle. -
newestOnly- Facultatif bool, par défaut false. true arrête la recherche après la première correspondance ; LineCount puis 0 ou 1. false compte toutes les lignes correspondantes, en choisissant toujours la plus récente. -
caseSensitive— Forme étendue bool facultative, par défaut false. true est sensible à la casse. En revanche, un formulaire composé uniquement de modèles est toujours sensible à la casse.
int : 0 – il n'y a pas de ligne appropriée ; un nombre positif est la position de l'entrée correspondante la plus récente, en comptant à partir de la fin de l'ensemble du journal, en commençant par 1. Il ne s'agit pas du nombre de correspondances ni du numéro alternatif du modèle. Pour l'index zéro, utilisez LineIndex/GetFoundedTextIndex, pour le nombre de correspondances, utilisez LineCount, pour le numéro alternatif, utilisez GetFoundedTextID. Les nouveaux messages ultérieurs peuvent modifier l'index, mais les champs enregistrés de l'enregistrement sélectionné restent disponibles.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- La recherche n'attend pas de nouveau texte. Le modèle vide dans le InJournal actuel correspond à n'importe quelle chaîne, mais ne donne pas d'alternative à ID ; pour vérifier les chaînes, utilisez HighJournal/LowJournal.
- La forme à deux arguments spécifie la limite/le cas, pas serial. Pour serial il est obligatoire de transmettre également la couleur. Un SetJournalLine à un seul argument peut limiter la zone de recherche.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
Now() fournit l'hôte de l'exécution en cours : il s'agit d'un nombre entier de millisecondes de la même horloge native que celle utilisée par le journal. Ne le remplacez pas par Environment.TickCount, l'heure Unix, ou votre propre Chronomètre : l'origine sera différente. Dans un programme .cs/.csproj normal, appelez context.Now() sur les CSharpScriptGlobals passés.
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.
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.InJournal("You see");
UO.Print("InJournal: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- pattern=Vous voyez, c'est une sous-chaîne, la casse est importante. found=0 signifie absent.
- Le texte est copié à partir de l'entrée trouvée ; l'arrivée d'un nouveau message ne le remplace pas.
var found = UO.InJournal("You see");
if (Truth(found > 0))
{
var text = UO.GetFoundedText();
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Le deuxième argument -1 supprime la limite de ligne et désactive le respect de la casse.
- result=0 pour le succès, 1 pour l'échec ; c'est le numéro de l'alternative, pas le ID du locuteur.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var found = UO.InJournal("success|failed", -1);
if (Truth(found > 0))
{
var outcome = UO.GetFoundedTextID();
UO.Print("Alternative: " + Convert.ToString(outcome));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- 20 - nombre maximum de lignes à vérifier, la casse est importante. matches - le nombre de lignes correspondantes dans la zone cochée.
- trouvé contient la position plus 1, pas de correspondances. L'écriture d'un texte de diagnostic peut également être ajoutée au journal.
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 found = UO.InJournal("bank", 20);
var matches = UO.LineCount();
UO.Print("Matches: " + Convert.ToString(matches));
return null;
}
}Paramètres et déroulement de l’exécution :
- serial=0x00001234 — exemple de l'auteur, color=0x0044 — hue. Remplacez par de vraies valeurs. démarré/endTime — marques en millisecondes.
- true arrête la recherche à la première ligne ; false n'est pas sensible à la casse. En attendant 350 ms séparément, InJournal ne s'attend pas.
var started = Now();
UO.Wait(350);
var found = UO.InJournal("hello", 0x00001234, 0x0044, started, Now(), true, false);
if (Truth(found > 0))
{
UO.Print(UO.GetFoundedText());
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- serial=-1 et color=-1 désactivent les deux filtres. Deux marqueurs limitent le temps.
- newestOnly et caseSensitive sont omis : false et false. Sans correspondance, 0 est renvoyé.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var started = Now();
UO.Wait(100);
var found = UO.InJournal("notice", -1, -1, started, Now());
if (Truth(found == 0))
{
UO.Print("No matching message");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.InJournalBetweenTimes(object? arg0, object? arg1);
int UO.InJournalBetweenTimes(object? arg0, object? arg1, object? arg2);
int UO.InJournalBetweenTimes(object? arg0, object? arg1, object? arg2, object? arg3);Recherche une chaîne entre deux horodatages d'exécution et stocke l'entrée correspondante la plus récente.
-
pattern— La sous-chaîne recherchée ou plusieurs alternatives via |, par exemple success|failed. Les espaces aux bords de chaque alternative sont supprimés, les alternatives vides sont ignorées. Il s'agit d'un texte brut, pas d'une expression régulière. Utilisez un modèle non vide. -
text— La sous-chaîne recherchée ou plusieurs alternatives via |, par exemple success|failed. Les espaces aux bords de chaque alternative sont supprimés, les alternatives vides sont ignorées. Il s'agit d'un texte brut, pas d'une expression régulière. Utilisez un modèle non vide. -
startTime— Étiquette obligatoire Now() : int millisecondes à partir du début de l'exécution. 0 - début de l'exécution. Il ne s'agit pas de l'âge du dossier ni de la date fractionnaire LineTime. -
endTime— Étiquette de fin facultative Now(). En cas d'omission ou de non-positif, l'heure actuelle est utilisée. Les limites positives peuvent être transmises dans l’ordre inverse ; la limite future est limitée à l'heure actuelle. -
limit- Quatrième argument facultatif : -1 - aucune limite et insensible à la casse ; nombre positif : nombre maximum de lignes dans l'intervalle, sensible à la casse ; 0 et valeurs négatives sauf -1 - ne vérifient pas les chaînes. -
maxLinesOrIgnoreCase— Un autre nom pour le quatrième argument à limiter dans l'enregistrement compatible : -1 désactive la limite et la sensibilité à la casse, sinon limite de lignes non négative.
int : 0 – il n'y a pas de ligne appropriée ; un nombre positif est la position de l'entrée correspondante la plus récente, en comptant à partir de la fin de l'ensemble du journal, en commençant par 1. Il ne s'agit pas du nombre de correspondances ni du numéro alternatif du modèle. Pour l'index zéro, utilisez LineIndex/GetFoundedTextIndex, pour le nombre de correspondances, utilisez LineCount, pour le numéro alternatif, utilisez GetFoundedTextID. Les nouveaux messages ultérieurs peuvent modifier l'index, mais les champs enregistrés de l'enregistrement sélectionné restent disponibles.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Les formulaires avec deux ou trois arguments sont sensibles à la casse. Les bordures sont incluses. Le calcul de l'intervalle ne met pas le script en pause.
- Ici, transmettez des étiquettes entières à Now(). LineTime renvoie une autre unité. Répertoire principal : .
Now() fournit l'hôte de l'exécution en cours : il s'agit d'un nombre entier de millisecondes de la même horloge native que celle utilisée par le journal. Ne le remplacez pas par Environment.TickCount, l'heure Unix, ou votre propre Chronomètre : l'origine sera différente. Dans un programme .cs/.csproj normal, appelez context.Now() sur les CSharpScriptGlobals passés.
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.
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.InJournalBetweenTimes("You see", 0, Now());
UO.Print("InJournalBetweenTimes: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- démarré est enregistré jusqu'à UseSkill. endTime omis - jusqu'à l'heure actuelle ; Hidden est un exemple de texte côté serveur.
- Le cas est pris en compte. Le message ne prouve pas l'état actuel ; UO.Hidden() lit l'état du personnage.
var started = Now();
UO.UseSkill("Hiding");
UO.Wait(500);
if (Truth(UO.InJournalBetweenTimes("hidden", started) > 0))
{
UO.Print(UO.GetFoundedText());
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- startTime=0 — début de l'exécution ; terminé - étiquette de fin enregistrée en millisecondes.
- Les nouveaux messages après la fin ne sont pas inclus. Les anciens enregistrements avant l'exécution sont également en dehors de l'intervalle.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var ended = Now();
var found = UO.InJournalBetweenTimes("notice", 0, ended);
UO.Print("Search result: " + Convert.ToString(found));
return null;
}Paramètres et déroulement de l’exécution :
- Le dernier -1 supprime la limite de ligne et désactive la casse. Le troisième argument est l'étiquette de fin, pas le délai.
- Résultat ID : 0 pour réussite, 1 pour échec. La vérification de trouvé > 0 est requise.
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 started = Now();
UO.Wait(350);
var found = UO.InJournalBetweenTimes("success|failed", started, Now(), -1);
if (Truth(found > 0))
{
UO.Print(Convert.ToString(UO.GetFoundedTextID()));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Journal(object? arg0);Lit le texte d'une ligne à l'index actuel et sélectionne cette entrée pour GetFoundedText/Line*.
-
index- Obligatoire int - index actuel : 0 signifie la ligne la plus récente, 1 - la précédente. Les index sont décalés lorsque les messages arrivent. Ce n'est pas une variante serial, ni une variante ID du modèle, ni un résultat positif de InJournal. -
StringIndex- Obligatoire int - index actuel : 0 signifie la ligne la plus récente, 1 - la précédente. Les index sont décalés lorsque les messages arrivent. Ce n'est pas une variante serial, ni une variante ID du modèle, ni un résultat positif de InJournal.
string — texte de la chaîne, ou une chaîne vide si l'index est incorrect/le journal est vide. Une ligne existante peut également avoir du texte vide : après lecture, LineIndex >= 0 confirme que l'entrée a été sélectionnée. Ce n'est pas le nombre de lignes.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- La lecture directe réinitialise les alternatives ID ; GetFoundedTextID/FoundedParamId est suivi de 0. Journal lui-même ne recalcule pas LineCount.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
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.
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.Journal(0);
UO.Print("Journal: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0 est la ligne la plus récente. Tout d'abord, le texte et l'auteur sont lus, puis le résultat est affiché.
- Print peut ajouter un message ; le texte/auteur enregistré fait référence à l'entrée sélectionnée précédemment.
var text = UO.Journal(0);
var author = UO.LineName();
UO.Print(author + ": " + text);Paramètres et déroulement de l’exécution :
- 1 est l'entrée précédente, HighJournal est l'index maximum disponible.
- Le journal peut changer entre les appels. Pour les données d'une ligne déjà trouvée, utilisez GetFoundedText.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var text = UO.Journal(1);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- LineIndex=-1 signifie que l'entrée sélectionnée est manquante/supprimée. Len(text)=0 en soi ne signifie pas cela.
- Conservez le résultat du test jusqu'à ce que la sortie de diagnostic soit ajoutée au journal.
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 text = UO.Journal(0);
var index = UO.LineIndex();
if (Truth(index < 0))
{
UO.Print("No record");
}
else
{
UO.Print("Text length: " + Convert.ToString(Len(text)));
}
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.JournalColor(object? arg0);Lit le champ hue de la ligne à l'index actuel sans modifier l'entrée sélectionnée.
-
index- Obligatoire int - index actuel : 0 signifie la ligne la plus récente, 1 - la précédente. Les index sont décalés lorsque les messages arrivent. Ce n'est pas une variante serial, ni une variante ID du modèle, ni un résultat positif de InJournal.
string - UO hue comme 0x0044 ; si l'index 0x0000 est incorrect. Ce n'est pas RGB.
- Chaque appel lit la position actuelle. Pour un texte et des champs cohérents du même enregistrement, d'abord Journal(index), puis GetFoundedText/Line*. Les valeurs nulles peuvent être des données réelles.
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.
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.JournalColor(0);
UO.Print("JournalColor: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0 est l'index de la nouvelle ligne. La présence d'un tampon est vérifiée.
- string - UO hue comme 0x0044 ; si l'index 0x0000 est incorrect. Ce n'est pas RGB.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalColor(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- 1 est la ligne précédente, pas serial=1.
- L'entrée GetFoundedText/Ligne* sélectionnée par la recherche n'est pas modifiée.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalColor(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- value copie le champ au moment de l'appel. Attendre ne met pas à jour la variable.
- Pour relire la ligne actuelle 0, appelez à nouveau la commande ; il s'agit peut-être déjà d'une autre entrée.
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 value = UO.JournalColor(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.JournalSerial(object? arg0);Lit le champ serial de la ligne à l'index actuel sans modifier l'entrée sélectionnée.
-
index- Obligatoire int - index actuel : 0 signifie la ligne la plus récente, 1 - la précédente. Les index sont décalés lorsque les messages arrivent. Ce n'est pas une variante serial, ni une variante ID du modèle, ni un résultat positif de InJournal.
string - serial de l'auteur comme 0x00001234 ; si l'index 0x00000000 est incorrect.
- Chaque appel lit la position actuelle. Pour un texte et des champs cohérents du même enregistrement, d'abord Journal(index), puis GetFoundedText/Line*. Les valeurs nulles peuvent être des données réelles.
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.
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.JournalSerial(0);
UO.Print("JournalSerial: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0 est l'index de la nouvelle ligne. La présence d'un tampon est vérifiée.
- string - serial de l'auteur comme 0x00001234 ; si l'index 0x00000000 est incorrect.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalSerial(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- 1 est la ligne précédente, pas serial=1.
- L'entrée GetFoundedText/Ligne* sélectionnée par la recherche n'est pas modifiée.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalSerial(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- value copie le champ au moment de l'appel. Attendre ne met pas à jour la variable.
- Pour relire la ligne actuelle 0, appelez à nouveau la commande ; il s'agit peut-être déjà d'une autre entrée.
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 value = UO.JournalSerial(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.JournalTimer(object? arg0);Lit le champ d'horodatage d'une ligne à l'index actuel sans modifier l'entrée sélectionnée.
-
index- Obligatoire int - index actuel : 0 signifie la ligne la plus récente, 1 - la précédente. Les index sont décalés lorsque les messages arrivent. Ce n'est pas une variante serial, ni une variante ID du modèle, ni un résultat positif de InJournal.
int — étiquette d'enregistrement en millisecondes à partir du début de l'exécution, compatible avec Now(). 0 pour l'enregistrement avant l'exécution ; -1 pour un index/heure invalide. Ce n'est pas l'âge du record ni les dixièmes de seconde UO.Timer().
- Chaque appel lit la position actuelle. Pour un texte et des champs cohérents du même enregistrement, d'abord Journal(index), puis GetFoundedText/Line*. Les valeurs nulles peuvent être des données réelles.
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.
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.JournalTimer(0);
UO.Print("JournalTimer: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0 est l'index de la nouvelle ligne. La présence d'un tampon est vérifiée.
- int — étiquette d'enregistrement en millisecondes à partir du début de l'exécution, compatible avec Now(). 0 pour l'enregistrement avant l'exécution ; -1 pour un index/heure invalide. Ce n'est pas l'âge du record ni les dixièmes de seconde UO.Timer().
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalTimer(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- 1 est la ligne précédente, pas serial=1.
- L'entrée GetFoundedText/Ligne* sélectionnée par la recherche n'est pas modifiée.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalTimer(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- value copie le champ au moment de l'appel. Attendre ne met pas à jour la variable.
- Pour relire la ligne actuelle 0, appelez à nouveau la commande ; il s'agit peut-être déjà d'une autre entrée.
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 value = UO.JournalTimer(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastJournalMessage();Lit le texte de la dernière entrée du journal local.
Il n'y a pas de paramètres.
string — texte de la nouvelle entrée ; chaîne vide s'il n'y a pas de journal ou si l'entrée elle-même contient du texte vide.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Met à jour la sélection et les champs Ligne* de la même manière que Journal(0).
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.
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.LastJournalMessage();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Il n’y a pas d’arguments ; text copie la dernière ligne actuelle.
- L'impression après lecture peut elle-même devenir le dernier message.
var text = UO.LastJournalMessage();
UO.Print(text);Paramètres et déroulement de l’exécution :
- FindText renvoie la position de 1 ou 0. Seule la dernière ligne est vérifiée.
- Pour rechercher dans l'intégralité du journal, utilisez InJournal.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.LastJournalMessage();
if (Truth(FindText(text, "bank") > 0))
{
UO.Print("Text contains bank");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
string input = Convert.ToString(text) ?? "";
return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}Paramètres et déroulement de l’exécution :
- correspondant est enregistré jusqu'à ce que le dernier soit lu, il ne change donc pas avec une nouvelle sélection.
- Le dernier message peut être différent de celui trouvé ; trouvé > 0 signifie une recherche réussie.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var found = UO.InJournal("needle");
var matched = UO.GetFoundedText();
var latest = UO.LastJournalMessage();
UO.Print("Found: " + matched);
UO.Print("Latest: " + latest);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.LastMessage();Lit le texte de la dernière entrée du journal local.
Il n'y a pas de paramètres.
string — texte de la nouvelle entrée ; chaîne vide s'il n'y a pas de journal ou si l'entrée elle-même contient du texte vide.
- Ce getter lit la nouvelle entrée mais conserve l'ancienne sélection GetFoundedText/Line*. Pour sélectionner la dernière entrée, utilisez LastJournalMessage ou Journal(0).
- Répertoire principal : https://forum.yoko.com.ua/viewtopic.php?p=27633.
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.
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.LastMessage();
UO.Print("LastMessage: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Il n’y a pas d’arguments ; text copie la dernière ligne actuelle.
- L'impression après lecture peut elle-même devenir le dernier message.
var text = UO.LastMessage();
UO.Print(text);Paramètres et déroulement de l’exécution :
- FindText renvoie la position de 1 ou 0. Seule la dernière ligne est vérifiée.
- Pour rechercher dans l'intégralité du journal, utilisez InJournal.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.LastMessage();
if (Truth(FindText(text, "bank") > 0))
{
UO.Print("Text contains bank");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
string input = Convert.ToString(text) ?? "";
return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}Paramètres et déroulement de l’exécution :
- correspondant est enregistré jusqu'à ce que le dernier soit lu, il ne change donc pas avec une nouvelle sélection.
- Le dernier message peut être différent de celui trouvé ; trouvé > 0 signifie une recherche réussie.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var found = UO.InJournal("needle");
var matched = UO.GetFoundedText();
var latest = UO.LastMessage();
UO.Print("Found: " + matched);
UO.Print("Latest: " + latest);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineCount();Lit le nombre de lignes correspondantes de la dernière recherche.
Il n'y a pas de paramètres.
int est le nombre d'enregistrements correspondants dans la dernière zone cochée. 0 s'il n'y a pas de correspondance ; pour newestOnly=true pas plus de 1. Il ne s'agit pas du nombre de lignes dans l'ensemble du journal, ni du nombre d'occurrences d'une sous-chaîne dans un message, ni de la position du texte trouvé.
- La recherche prend en compte la limite, le temps, serial, hue et un seul argument SetJournalLine. Direct Journal/GetJournal ne recalcule pas le compteur. Le nettoyage le réinitialise. Le compteur appartient au pont du script courant.
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.
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.LineCount();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Recherchez sans limite et inscrivez-vous. Les lignes sont comptées et non le nombre de minerais à l'intérieur de la ligne.
- résultat — position plus 1 ; allumettes - une quantité distincte.
var result = UO.InJournal("ore", -1);
var matches = UO.LineCount();
UO.Print(Convert.ToString(matches));Paramètres et déroulement de l’exécution :
- 10 — nombre maximum de lignes à vérifier ; le cas est pris en compte.
- Le décompte peut aller de 0 à 10, même s'il existe de nombreuses correspondances plus anciennes.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var result = UO.InJournal("ore", 10);
UO.Print(Convert.ToString(UO.LineCount()));
return null;
}Paramètres et déroulement de l’exécution :
- serial/color=-1, time=0/0 — les filtres sont désactivés. true arrête la recherche à la première ligne correspondante.
- checkedMatches est égal à 0 ou 1 et n'indique pas le nombre total de correspondances dans l'ensemble du journal.
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 result = UO.InJournal("ore", -1, -1, 0, 0, true, false);
var checkedMatches = UO.LineCount();
UO.Print(Convert.ToString(checkedMatches));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineID();Renvoie le chiffre serial de l'auteur de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
int - 32-bit serial de l'auteur. Pas le choix - 0. Le bit le plus significatif peut donner lieu à un nombre négatif en raison du signe int ; GetFoundedTextSerial préserve la représentation hexadécimale complète. Ce n'est pas graphic/type.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
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.
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.LineID();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- int - 32-bit serial de l'auteur. Pas le choix - 0. Le bit le plus significatif peut donner lieu à un nombre négatif en raison du signe int ; GetFoundedTextSerial préserve la représentation hexadécimale complète. Ce n'est pas graphic/type.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineID();
UO.Print("Speaker serial: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineID();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.LineID();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineIndex();Renvoie l'index actuel de l'entrée sélectionnée, si elle est toujours stockée dans le journal.
Il n'y a pas de paramètres.
int est l'index actuel de 0 (ligne la plus récente). -1 signifie qu'il n'y a pas de choix ou que l'entrée sélectionnée a déjà été supprimée/préemptée. Ce n'est pas le résultat de InJournal : 1 n'a pas besoin d'être soustrait de l'index.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- L'index est recalculé en fonction de l'identité de l'enregistrement. Les nouveaux messages l’augmentent. L'ancien index stocké n'est pas constant ID ; pour le texte, GetFoundedText est plus sûr.
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.
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.LineIndex();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Getter sans arguments lit la sélection du script actuel. 0 — nouvelle ligne, -1 — aucune ligne dans le tampon actuel.
- Le texte est extrait de l'entrée enregistrée afin que de nouveaux messages ne le remplacent pas.
if (Truth(UO.InJournal("notice") > 0))
{
var index = UO.LineIndex();
var text = UO.GetFoundedText();
UO.Print(Convert.ToString(index) + ": " + text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne la dernière entrée ; la vérification exclut un journal vide.
- Un texte vide est autorisé pour une entrée valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
if (Truth(UO.LineIndex() >= 0))
{
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Attendre 100 ms permet l'arrivée de nouveaux messages. après trouve à nouveau la même entrée.
- après peut augmenter ou devenir -1 une fois supprimé ; GetFoundedText contient toujours le texte enregistré.
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.InJournal("needle") > 0))
{
var before = UO.LineIndex();
UO.Wait(100);
var after = UO.LineIndex();
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineMsgType();Renvoie le type de message réseau de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
int - code MessageType : 0 Regular, 1 System, 2 Emote, 3 Limit3Spell, 6 Label, 7 Focus, 8 Whisper, 9 Yell, 10 Sort, 13 Guilde, 14 Alliance, 15 Commande, 16 GmChat, 192 Encodé, 255 Fête. Pas le choix 0. Ce sont les codes Classiques UO ; ne les remplacez pas par des numéros différents d’exemples tiers.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
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.
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.LineMsgType();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- int - code MessageType : 0 Regular, 1 System, 2 Emote, 3 Limit3Spell, 6 Label, 7 Focus, 8 Whisper, 9 Yell, 10 Sort, 13 Guilde, 14 Alliance, 15 Commande, 16 GmChat, 192 Encodé, 255 Fête. Pas le choix 0. Ce sont les codes Classiques UO ; ne les remplacez pas par des numéros différents d’exemples tiers.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineMsgType();
UO.Print("Message type: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineMsgType();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.LineMsgType();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineName();Renvoie le nom de l'auteur de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
string — le nom de l'auteur de l'entrée sélectionnée, par exemple System ou le nom du personnage ; chaîne vide sans sélection/sans nom. Un nom ne garantit pas le caractère unique d'un personnage.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
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.
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.LineName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- string — le nom de l'auteur de l'entrée sélectionnée, par exemple System ou le nom du personnage ; chaîne vide sans sélection/sans nom. Un nom ne garantit pas le caractère unique d'un personnage.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineName();
UO.Print("Speaker: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineName();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.LineName();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTextColor();Renvoie la couleur numérique de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
int - UO hue de l'entrée sélectionnée (0…65535) ; pas le choix 0. Zéro est acceptable comme couleur. Ce n'est pas le RGB ou le ID de l'auteur.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
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.
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.LineTextColor();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- int - UO hue de l'entrée sélectionnée (0…65535) ; pas le choix 0. Zéro est acceptable comme couleur. Ce n'est pas le RGB ou le ID de l'auteur.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTextColor();
UO.Print("Hue: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTextColor();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.LineTextColor();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTextFont();Renvoie la police de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
int — UO police ID de l'enregistrement sélectionné (0…255 dans le client) ; pas le choix 0. Il s'agit de la police du jeu ID, pas de la taille de police IDE.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
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.
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.LineTextFont();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- int — UO police ID de l'enregistrement sélectionné (0…255 dans le client) ; pas le choix 0. Il s'agit de la police du jeu ID, pas de la taille de police IDE.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTextFont();
UO.Print("Font ID: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTextFont();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.LineTextFont();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTime();Renvoie l'horodatage du calendrier de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
double — OLE Date d'automatisation, nombre de jours à partir de 30.12.1899, la partie fractionnaire spécifie l'heure de la journée. Pas le choix 0. Ce n'est pas des millisecondes Now() ou un horodatage Unix complet. La différence entre deux de ces marques est multipliée par 86400000 pour les millisecondes.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
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.
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.LineTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- double — OLE Date d'automatisation, nombre de jours à partir de 30.12.1899, la partie fractionnaire spécifie l'heure de la journée. Pas le choix 0. Ce n'est pas des millisecondes Now() ou un horodatage Unix complet. La différence entre deux de ces marques est multipliée par 86400000 pour les millisecondes.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTime();
UO.Print("OLE date: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTime();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.LineTime();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineType();Renvoie la catégorie de texte de l'entrée de journal sélectionnée.
Il n'y a pas de paramètres.
int - catégorie TextType du client : 0 CLIENT, 1 SYSTEM, 2 OBJECT, 3 GUILD_ALLY. No choice 0. Il s'agit d'une catégorie d'affichage, ni serial, ni graphic, ni MessageType.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Getter n'exécute pas de recherche et ne sélectionne pas la ligne la plus récente. Les valeurs nulles/vides peuvent être des données valides ; considérez le résultat de la recherche.
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.
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.LineType();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- notice — un exemple du texte recherché. Getter est appelé sans paramètres uniquement après une recherche réussie.
- int - catégorie TextType du client : 0 CLIENT, 1 SYSTEM, 2 OBJECT, 3 GUILD_ALLY. No choice 0. Il s'agit d'une catégorie d'affichage, ni serial, ni graphic, ni MessageType.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineType();
UO.Print("Text category: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Journal(0) sélectionne une nouvelle entrée. l'index et la valeur sont lus jusqu'à Print.
- La vérification d'index permet de faire la distinction entre l'absence d'enregistrement et un champ nul ou vide valide.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineType();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La première recherche sélectionne le succès, la seconde remplace ou réinitialise la sélection. enregistré contient déjà une copie du champ obligatoire.
- Le var enregistré ne change pas avec une nouvelle recherche, un effacement ou une réception de messages.
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.InJournal("success") > 0))
{
var saved = UO.LineType();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LowJournal();Renvoie l'index de journal minimum disponible.
Il n'y a pas de paramètres.
int : -1 lorsque le magasin est vide ; sinon, 0 est l'index du dernier enregistrement disponible. Journal/GetJournal utilise des index zéro du nouvel enregistrement à l'ancien ; un résultat positif InJournal utilise un compte unique différent.
- Les nouveaux messages et le nettoyage changent les limites. L'ordre ici est Journal(0) de la nouvelle entrée à l'ancienne entrée.
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.
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.LowJournal();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Une limite négative signifie un tampon vide.
- Si le tampon n'est pas vide, Journal(0) lit une nouvelle entrée.
if (Truth(UO.LowJournal() >= 0))
{
var text = UO.Journal(0);
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- L'index est transmis directement au Journal, sans en soustraire un.
- L'index peut changer avec les messages entrants ; Le tampon n'est pas gelé entre les appels.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var index = UO.LowJournal();
if (Truth(index >= 0))
{
var text = UO.Journal(index);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- LowJournal et HighJournal forment les frontières des indices. Ce n'est pas le nombre de lignes ; le contenu du journal peut changer entre les appels.
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()
{
int first = UO.LowJournal();
int last = UO.HighJournal();
if (first > last)
return null;
for (int index = first; index <= last; index++)
UO.Print($"{index}: {UO.Journal(index)}");
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetJournalLine(object? arg0);
void UO.SetJournalLine(object? arg0, object? arg1);Modifie le texte d'une ligne ; un formulaire distinct à un argument spécifie la limite inférieure de la recherche.
-
index— Pour le formulaire (index, texte) : index actuel de 0, où 0 est une nouvelle ligne. Pour le formulaire (index) : le nombre d'anciennes lignes à sauter depuis le début du buffer interne, pas l'index du Journal ; 0 supprime la restriction. La limite négative à un argument est limitée à 0. -
StringIndex— Nom de l'index dans la journalisation compatible à deux arguments : l'index actuel du Journal de 0. -
text— Nouveau texte d'une ligne existante, y compris une ligne vide. Obligatoire dans le formulaire de remplacement de texte. -
Text— Même valeur de texte dans l'enregistrement compatible.
void - aucune valeur de retour. Si l'index n'est pas valide, la forme à deux arguments ne change rien. La forme à un argument ne modifie pas le texte.
- Le remplacement est local, rien n'est envoyé au serveur. Les champs auteur/heure sont conservés. Un instantané de texte déjà sélectionné reste le même jusqu'à ce que Journal ou que la recherche soit répétée.
- La limite à un argument est une extension obsolète : le nombre d'anciennes lignes dans le tampon actuel ; lorsque les enregistrements sont évincés/supprimés, sa signification change. Pour une limite fiable entre les actions, utilisez InJournalBetweenTimes avec Now().
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.
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.SetJournalLine");
UO.SetJournalLine(0);Paramètres et déroulement de l’exécution :
- 0 — nouvelle ligne ; le deuxième argument est son nouveau texte intégral.
- Cela modifie le tampon local. Entre la lecture et l’écriture, de nouveaux messages peuvent arriver ; l'indice n'est pas constant ID.
if (Truth(UO.HighJournal() >= 0))
{
var text = UO.Journal(0);
UO.SetJournalLine(0, "[read] " + text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Une ligne vide remplace le texte, mais ne supprime pas l'entrée ni son auteur.
- L'index invalide est ignoré. existe peut être true même avec text="".
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.SetJournalLine(0, "");
var text = UO.Journal(0);
var exists = UO.LineIndex() >= 0;
UO.Print(Convert.ToString(exists));
return null;
}Paramètres et déroulement de l’exécution :
- Un argument 0 signifie ne pas sauter les anciennes lignes ; c'est une autre forme de commandement.
- Recherche sans restrictions et insensible à la casse. Aucun texte n'est remplacé par ce formulaire.
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.SetJournalLine(0);
var found = UO.InJournal("notice", -1);
UO.Print(Convert.ToString(found));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitJournalLine(object? arg0, object? arg1, object? arg2);Attend un message approprié dans le journal local.
-
StartTime- Étiquette de début requise : int Now() en millisecondes, 0 - début de l'exécution. La double date OLE de LineTime (dates modernes 20000…100000 jours) est également acceptée. Les 20000…100000 entiers sont toujours des millisecondes, pas une date. Ne communiquez pas l’âge de l’entrée. -
Convert.ToString— La sous-chaîne recherchée ou plusieurs alternatives via |, par exemple success|failed. Les espaces aux bords de chaque alternative sont supprimés, les alternatives vides sont ignorées. Il s'agit d'un texte brut, pas d'une expression régulière. Utilisez un modèle non vide. Recherche insensible à la casse. -
MaxWaitTimeMS— Délai d'expiration int obligatoire en millisecondes ; une valeur positive limite l'attente, 0 signifie attendre sans limite. Les valeurs négatives sont limitées à 0. L'arrêt du script interrompt l'attente.
bool - true si le texte est trouvé, false s'il y a un timeout positif sans correspondance. Ce n'est pas un indice ou une quantité. Les valeurs booléennes peuvent également être affichées sous la forme 1/0 dans le script.
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é.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- La limite initiale est fixée lors de l'appel, l'interrogation a lieu environ toutes les 25 ms. L'anticipation elle-même ne déclenche pas la compétence ou l'objet. LineCount après attente fait référence à la dernière recherche.
- Pour filtrer uniquement les chaînes système, utilisez WaitJournalLineSystem.
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.
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.WaitJournalLine(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- commencé - la limite avant d'attendre. 3000 — attente maximale en millisecondes. Le modèle contient deux résultats.
- false — le texte n'a pas été trouvé pendant cette période ; le serveur aurait pu utiliser une formulation différente.
var started = Now();
var found = UO.WaitJournalLine(started, "success|failed", 3000);
if (Truth(found))
{
UO.Print(UO.GetFoundedText());
}
else
{
UO.Print("Timeout");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- 0 - démarrage du runtime, sans désactivation du délai d'attente. 100 - délai d'attente.
- La ligne trouvée se trouve peut-être déjà dans le journal avant l'appel.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.WaitJournalLine(0, "notice", 100)))
{
var author = UO.LineName();
UO.Print(author);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- le tampon enregistre double LineTime sans Convert.ToInt32/Convert.ToString : il s'agit d'une date du calendrier, pas de Now(). 1500 — millisecondes à attendre.
- La frontière est activée. La chaîne sélectionnée elle-même peut convenir si elle contient une réponse.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
if (Truth(UO.LineIndex() >= 0))
{
var stamp = UO.LineTime();
var found = UO.WaitJournalLine(stamp, "response", 1500);
UO.Print(Convert.ToString(found));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitJournalLineSystem(object? arg0, object? arg1, object? arg2);Attend un message approprié avec le nom de l'auteur du système.
-
StartTime- Étiquette de début requise : int Now() en millisecondes, 0 - début de l'exécution. La double date OLE de LineTime (dates modernes 20000…100000 jours) est également acceptée. Les 20000…100000 entiers sont toujours des millisecondes, pas une date. Ne communiquez pas l’âge de l’entrée. -
Convert.ToString— La sous-chaîne recherchée ou plusieurs alternatives via |, par exemple success|failed. Les espaces aux bords de chaque alternative sont supprimés, les alternatives vides sont ignorées. Il s'agit d'un texte brut, pas d'une expression régulière. Utilisez un modèle non vide. Recherche insensible à la casse. -
MaxWaitTimeMS— Délai d'expiration int obligatoire en millisecondes ; une valeur positive limite l'attente, 0 signifie attendre sans limite. Les valeurs négatives sont limitées à 0. L'arrêt du script interrompt l'attente.
bool - true si le texte est trouvé, false s'il y a un timeout positif sans correspondance. Ce n'est pas un indice ou une quantité. Les valeurs booléennes peuvent également être affichées sous la forme 1/0 dans le script.
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é.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- La limite initiale est fixée lors de l'appel, l'interrogation a lieu environ toutes les 25 ms. L'anticipation elle-même ne déclenche pas la compétence ou l'objet. LineCount après attente fait référence à la dernière recherche.
- Dans cette adaptation, System est identifié par le nom de l'auteur, sans tenir compte de la casse ; L'équipe travaille avec la revue généraliste ClassicUO.
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.
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.WaitJournalLineSystem(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- commencé - la limite avant d'attendre. 3000 — attente maximale en millisecondes. Le modèle contient deux résultats.
- false — le texte n'a pas été trouvé pendant cette période ; le serveur aurait pu utiliser une formulation différente.
var started = Now();
var found = UO.WaitJournalLineSystem(started, "success|failed", 3000);
if (Truth(found))
{
UO.Print(UO.GetFoundedText());
}
else
{
UO.Print("Timeout");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- 0 - démarrage du runtime, sans désactivation du délai d'attente. 100 - délai d'attente.
- La ligne trouvée se trouve peut-être déjà dans le journal avant l'appel.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.WaitJournalLineSystem(0, "notice", 100)))
{
var author = UO.LineName();
UO.Print(author);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- le tampon enregistre double LineTime sans Convert.ToInt32/Convert.ToString : il s'agit d'une date du calendrier, pas de Now(). 1500 — millisecondes à attendre.
- La frontière est activée. La chaîne sélectionnée elle-même peut convenir si elle contient une réponse.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
if (Truth(UO.LineIndex() >= 0))
{
var stamp = UO.LineTime();
var found = UO.WaitJournalLineSystem(stamp, "response", 1500);
UO.Print(Convert.ToString(found));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitingForJournalText(object? arg0, object? arg1, object? arg2);
void UO.WaitingForJournalText(object? arg0, object? arg1, object? arg2, object? arg3);
void UO.WaitingForJournalText(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4);
void UO.WaitingForJournalText(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5);Attend du texte avec des modes de comparaison supplémentaires et un lancement optionnel de compétences/objets.
-
startTime— Étiquette obligatoire Now(), int millisecondes à partir du début de l'exécution. Les lignes avec une étiquette au moins startTime sont vérifiées ; 0 inclut les entrées avec une étiquette zéro. -
maxDelay— Attente maximale obligatoire en millisecondes. 0 et les valeurs négatives signifient un passage immédiat plutôt qu'une attente infinie. -
text— La sous-chaîne recherchée ou plusieurs alternatives via |, par exemple success|failed. Les espaces aux bords de chaque alternative sont supprimés, les alternatives vides sont ignorées. Il s'agit d'un texte brut, pas d'une expression régulière. Utilisez un modèle non vide. -
equals- Facultatif int : 0 (par défaut) - sous-chaîne ; valeur non nulle - tout le texte doit correspondre à une alternative. -
ignoreCase- Facultatif int : 0 (par défaut) - sensible à la casse ; différent de zéro - ignorer. -
skillNameOrObjectId- Compétence facultative par nom, serial/chaîne hexadécimale ou alias d'objet résoluble. Le nom de la compétence est reconnu en premier, sinon l'objet est utilisé. 0/ligne vide désactive l'action. La compétence/l'objet est déclenché une fois avant la recherche.
void - pas de valeur de retour, n'attribue pas l'appel à une variable. Une fois terminé, GetFoundedTextIndex >= 0 signifie que l'entrée sélectionnée est toujours disponible ; -1 - introuvable/enregistrement supprimé. GetFoundedTextID affiche l'alternative correspondante uniquement si la sélection est réussie.
- Recherche et Journal/GetJournal/LastJournalMessage enregistrent le texte et les champs d'une seule entrée dans le script actuel. Les nouveaux messages ne remplacent pas ces champs. Si un enregistrement est expulsé d'un journal limité, les champs conservés restent, mais LineIndex/GetFoundedTextIndex renvoie -1. La recherche ou la lecture suivante sélectionne une autre entrée ; une recherche infructueuse, un index invalide et un effacement via ce script réinitialisent la sélection.
- Sondage avec pause jusqu'à 25 ms ; l'arrêt du script l'interrompt. Une liste d'alternatives vide ne trouve pas de texte. Pour le résultat bool, utilisez WaitJournalLine avec ses propres paramètres et la signification d'un timeout nul.
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.
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.WaitingForJournalText");
UO.WaitingForJournalText(Now(), 2000, "notice");Paramètres et déroulement de l’exécution :
- startTime — marquez avant d'attendre ; maxDelay=2000 ms ; comparaison de sous-chaînes sensibles à la casse.
- La commande ne renvoie pas true/false : l'entrée sélectionnée est vérifiée.
var started = Now();
UO.WaitingForJournalText(started, 2000, "notice");
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
UO.Print(UO.GetFoundedText());
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- startTime=0; maxDelay=0 - un passage. equals=1 — tout le texte, ignoreCase=1 — aucun cas.
- Le numéro alternatif 0 ou 1 s'affiche ; une longue ligne avec des mots supplémentaires ne fonctionnera pas.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.WaitingForJournalText(0, 0, "success|failed", 1, 1);
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
UO.Print(Convert.ToString(UO.GetFoundedTextID()));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Le sixième argument de Hiding exécute la compétence une fois. equals=0 — sous-chaîne, ignoreCase=1 — aucun cas.
- Les mots masqué/échec sont des exemples, remplacez-les par le texte de votre serveur. Au lieu d'une compétence, vous pouvez spécifier serial ou lastobject pour utiliser l'objet.
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 started = Now();
UO.WaitingForJournalText(started, 3000, "hidden|failed", 0, 1, "Hiding");
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
UO.Print(UO.GetFoundedText());
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}ClassicUO — Bad Newbie & C# Scripts IDE