FR UO Topic journal - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · 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? str);Ajoute un filtre de texte local pour les entrées du journal de jeu ClassicUO.
-
str- 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.AddJournalIgnore("You see");
UO.AddJournalIgnore("vendor");
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: str (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddJournalIgnore:bridge.AddJournalIgnore(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "addjournalignore": bridge.AddJournalIgnore(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToJournal(object? text);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var 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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: text (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "addtojournal":
case "addtosystemjournal":
case "clientprint":
SystemMessage(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToSystemJournal(object? text);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var 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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: text (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "addtojournal":
case "addtosystemjournal":
case "clientprint":
SystemMessage(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToSystemJournalEx(object? text, object? textColor, object? bgColor, object? fontSize, object? fontName);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var 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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
UO.AddToSystemJournalEx(text, textColor, bgColor, fontSize, fontName) — UO.AddToSystemJournalEx(Any,Any,Any,Any,Any)
Paramètres: text (Any), textColor (Any), bgColor (Any), fontSize (Any), fontName (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PrintFormattedJournal:bridge.PrintFormattedJournal(Text(0), Arg(1), Arg(2), Arg(3), Text(4)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "addtosystemjournalex":
bridge.PrintFormattedJournal(Text(0), Arg(1), Arg(2), Arg(3), Text(4)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ChangeJournalLength(object? newLength);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.ChangeJournalLength(0);
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: newLength (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, 100). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLength:bridge.SetJournalLength(state.JournalLength).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "changejournallength": state.JournalLength = Math.Max(1, Arg(0, 100)); bridge.SetJournalLength(state.JournalLength); break;Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var text = UO.Journal(0);
UO.ClearJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.DeleteJournal:DeleteJournal().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "clearjournal": DeleteJournal(); return InjectionValue.Unit;Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.ClearJournalIgnore();
UO.ClearJournalIgnore();
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearJournalIgnore:bridge.ClearJournalIgnore().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "clearjournalignore": bridge.ClearJournalIgnore(); return InjectionValue.Unit;Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var text = UO.Journal(0);
UO.ClearSystemJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DeleteSystemJournal:bridge.DeleteSystemJournal(). -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(null).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "clearsystemjournal": bridge.DeleteSystemJournal(); SelectJournalEntry(null); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.DeleteJournal();
void UO.DeleteJournal(object? text);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var 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));C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.DeleteJournal. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DeleteJournal:bridge.DeleteJournal(). -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(null).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void DeleteJournal()
{
bridge.DeleteJournal();
SelectJournalEntry(null);
}Paramètres: text (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.DeleteJournal. -
InjectionScript.Runtime.InjectionApiUO.DeleteJournal:DeleteJournal((string)text).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void DeleteJournal(InjectionValue text) => DeleteJournal((string)text);Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "foundedparamid":
return new InjectionValue(foundedTextId >= 0 ? foundedTextId : 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: string / String.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string GetFoundedText() => selectedJournalEntry?.Text ?? string.Empty;Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: string / String.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string GetFoundedTextColor() => selectedJournalEntry != null ? $"0x{selectedJournalEntry.Color:X4}" : "0x0000";Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int GetFoundedTextID() => foundedTextId >= 0 ? foundedTextId : 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int GetFoundedTextIndex() => selectedJournalEntry != null && bridge is IApiJournalReader reader
? reader.FindJournalEntryIndex(selectedJournalEntry.Identity) : foundedTextIndex;Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: string / String.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string GetFoundedTextSerial() => selectedJournalEntry != null
? $"0x{unchecked((uint)selectedJournalEntry.Serial):X8}" : "0x00000000";Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetFoundedTextTimer. -
InjectionScript.Runtime.InjectionApiUO.JournalEntryTime:JournalEntryTime(selectedJournalEntry.Timestamp).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int GetFoundedTextTimer() => selectedJournalEntry != null ? JournalEntryTime(selectedJournalEntry.Timestamp) : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournal(object? index);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.
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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var 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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: index (Integer)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetJournalText. -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(ReadJournalSnapshot(index)). -
InjectionScript.Runtime.InjectionApiUO.ReadJournalSnapshot:ReadJournalSnapshot(index).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string GetJournalText(int index)
{
SelectJournalEntry(ReadJournalSnapshot(index));
return selectedJournalEntry?.Text ?? string.Empty;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournalColor(object? index);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.GetJournalColor(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: index (Integer)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.JournalColor. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalColor:bridge.JournalColor(index).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string JournalColor(int index) => bridge.JournalColor(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournalSerial(object? index);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.GetJournalSerial(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: index (Integer)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.JournalSerial. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalSerial:bridge.JournalSerial(index).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string JournalSerial(int index) => bridge.JournalSerial(index);Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var 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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalEntryCount:bridge.JournalEntryCount().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "highjournal": return new InjectionValue(bridge.JournalEntryCount() == 0 ? -1 : bridge.JournalEntryCount() - 1);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.InJournal(object? pattern);
int UO.InJournal(object? pattern, object? maxLinesOrIgnoreCase);
int UO.InJournal(object? pattern, object? serial, object? color);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime, object? endTime);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime, object? endTime, object? newestOnly);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime, object? endTime, object? newestOnly, object? caseSensitive);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. -
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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var 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 RunScenario();
object? RunScenario()
{
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;C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: pattern (Any/String)
Résultat: int / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournal:InJournal(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "injournal": return new InjectionValue(InJournal(Text(0)));Paramètres: pattern (Any/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.InJournal. -
InjectionScript.Runtime.InjectionApiUO.InJournalCore:InJournalCore(pattern, -1, ignoreCase: false).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int InJournal(string pattern)
=> InJournalCore(pattern, -1, ignoreCase: false);Paramètres: pattern (String), maxLinesOrIgnoreCase (Integer)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.InJournal. -
InjectionScript.Runtime.InjectionApiUO.InJournalCore:InJournalCore(pattern, maxLinesOrIgnoreCase == -1 ? -1 : Math.Max(0, maxLinesOrIgnoreCase), ignoreCase: maxLinesOrIgnoreCase == -1).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int InJournal(string pattern, int maxLinesOrIgnoreCase)
=> InJournalCore(pattern,
maxLinesOrIgnoreCase == -1 ? -1 : Math.Max(0, maxLinesOrIgnoreCase),
ignoreCase: maxLinesOrIgnoreCase == -1);Paramètres: pattern (Any), serial (Any), color (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactInJournal(values))Paramètres: pattern (Any), serial (Any), color (Any), startTime (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactInJournal(values))Paramètres: pattern (Any), serial (Any), color (Any), startTime (Any), endTime (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactInJournal(values))
UO.InJournal(pattern, serial, color, startTime, endTime, newestOnly) — UO.InJournal(Any,Any,Any,Any,Any,Any)
Paramètres: pattern (Any), serial (Any), color (Any), startTime (Any), endTime (Any), newestOnly (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactInJournal(values))
UO.InJournal(pattern, serial, color, startTime, endTime, newestOnly, caseSensitive) — UO.InJournal(Any,Any,Any,Any,Any,Any,Any)
Paramètres: pattern (Any), serial (Any), color (Any), startTime (Any), endTime (Any), newestOnly (Any), caseSensitive (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
values => new InjectionValue(CompactInJournal(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.InJournalBetweenTimes(object? pattern, object? startTime);
int UO.InJournalBetweenTimes(object? pattern, object? startTime, object? endTime);
int UO.InJournalBetweenTimes(object? pattern, object? startTime, object? endTime, object? limit);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. -
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.
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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var 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();
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: pattern (Any/String), startTime (Any/Integer)
Résultat: int / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1)).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "injournalbetweentimes":
if (arguments.Length > 3)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)));
if (arguments.Length > 2)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2)));
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1)));Paramètres: pattern (Any/String), startTime (Any/Integer)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimesCore:InJournalBetweenTimesCore(pattern, startTime, CurrentJournalTime(), -1, ignoreCase: false). -
InjectionScript.Runtime.InjectionApiUO.CurrentJournalTime:CurrentJournalTime().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int InJournalBetweenTimes(string pattern, int startTime)
=> InJournalBetweenTimesCore(pattern, startTime, CurrentJournalTime(), -1, ignoreCase: false);Paramètres: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer)
Résultat: int / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1)).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "injournalbetweentimes":
if (arguments.Length > 3)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)));
if (arguments.Length > 2)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2)));
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1)));
UO.InJournalBetweenTimes(pattern, startTime, endTime) — UO.InJournalBetweenTimes(String,Integer,Integer)
Paramètres: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimesCore:InJournalBetweenTimesCore(pattern, startTime, endTime, -1, ignoreCase: false).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int InJournalBetweenTimes(string pattern, int startTime, int endTime)
=> InJournalBetweenTimesCore(pattern, startTime, endTime, -1, ignoreCase: false);
UO.InJournalBetweenTimes(pattern, startTime, endTime, limit) — UO.InJournalBetweenTimes(Any,Any,Any,Any)
Paramètres: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer), limit (Any/Integer)
Résultat: int / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1)).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "injournalbetweentimes":
if (arguments.Length > 3)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)));
if (arguments.Length > 2)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2)));
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1)));
UO.InJournalBetweenTimes(pattern, startTime, endTime, limit) — UO.InJournalBetweenTimes(String,Integer,Integer,Integer)
Paramètres: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer), limit (Any/Integer)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimesCore:InJournalBetweenTimesCore(pattern, startTime, endTime, limit == -1 ? -1 : Math.Max(0, limit), ignoreCase: limit == -1).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int InJournalBetweenTimes(string pattern, int startTime, int endTime, int limit)
=> InJournalBetweenTimesCore(pattern, startTime, endTime,
limit == -1 ? -1 : Math.Max(0, limit), ignoreCase: limit == -1);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Journal(object? index);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.
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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var 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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: index (Any/Integer)
Résultat: string / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GetJournalText:GetJournalText(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "journal": return new InjectionValue(GetJournalText(Arg(0)));Paramètres: index (Any/Integer)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetJournalText. -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(ReadJournalSnapshot(index)). -
InjectionScript.Runtime.InjectionApiUO.ReadJournalSnapshot:ReadJournalSnapshot(index).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string GetJournalText(int index)
{
SelectJournalEntry(ReadJournalSnapshot(index));
return selectedJournalEntry?.Text ?? string.Empty;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.JournalColor(object? index);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.JournalColor(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: index (Integer)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.JournalColor. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalColor:bridge.JournalColor(index).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string JournalColor(int index) => bridge.JournalColor(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.JournalSerial(object? index);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.JournalSerial(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: index (Integer)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.JournalSerial. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalSerial:bridge.JournalSerial(index).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string JournalSerial(int index) => bridge.JournalSerial(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.JournalTimer(object? index);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.JournalTimer(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: index (Integer)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.JournalTimer. -
InjectionScript.Runtime.InjectionApiUO.JournalEntryTime:JournalEntryTime(index).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int JournalTimer(int index) => JournalEntryTime(index);Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var found = UO.InJournal("needle");
var matched = UO.GetFoundedText();
var latest = UO.LastJournalMessage();
UO.Print("Found: " + matched);
UO.Print("Latest: " + latest);
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GetJournalText:GetJournalText(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "lastjournalmessage": return new InjectionValue(GetJournalText(0));Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var found = UO.InJournal("needle");
var matched = UO.GetFoundedText();
var latest = UO.LastMessage();
UO.Print("Found: " + matched);
UO.Print("Latest: " + latest);
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.LastMessage. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastMessage:bridge.LastMessage().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string LastMessage() => bridge.LastMessage();Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var result = UO.InJournal("ore", -1, -1, 0, 0, true, false);
var checkedMatches = UO.LineCount();
UO.Print(Convert.ToString(checkedMatches));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalMatchCount:bridge.JournalMatchCount().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "linecount": return new InjectionValue(bridge.JournalMatchCount());Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "lineid": return new InjectionValue(selectedJournalEntry?.Serial ?? 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GetFoundedTextIndex:GetFoundedTextIndex().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "lineindex": return new InjectionValue(GetFoundedTextIndex());Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "linemsgtype": return new InjectionValue(selectedJournalEntry?.MessageType ?? 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "linename": return new InjectionValue(selectedJournalEntry?.Name ?? string.Empty);Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "linetextcolor":
return new InjectionValue(selectedJournalEntry?.Color ?? 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "linetextfont": return new InjectionValue(selectedJournalEntry?.Font ?? 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "linetime": return new InjectionValue(selectedJournalEntry?.Timestamp ?? 0d);Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.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;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "linetype": return new InjectionValue(selectedJournalEntry?.TextType ?? 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
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;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalEntryCount:bridge.JournalEntryCount().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "lowjournal": return new InjectionValue(bridge.JournalEntryCount() == 0 ? -1 : 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetJournalLine(object? index);
void UO.SetJournalLine(object? stringIndex, object? text);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.
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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SetJournalLine(0);
var found = UO.InJournal("notice", -1);
UO.Print(Convert.ToString(found));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: index (Integer)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.SetJournalLine. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(index).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void SetJournalLine(int index) => bridge.SetJournalLine(index);Paramètres: stringIndex (Any/Integer), text (Any/String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(Arg(0)).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setjournalline":
if (arguments.Length > 1) bridge.SetJournalLine(Arg(0), Text(1));
else bridge.SetJournalLine(Arg(0));
return InjectionValue.Unit;Paramètres: stringIndex (Any/Integer), text (Any/String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.SetJournalLine. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(index, text).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void SetJournalLine(int index, string text) => bridge.SetJournalLine(index, text);