FR UO Topic profiles configuration - 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
Profils, paramètres d'enregistrement, valeurs globales et raccourcis clavier. La valeur d'exécution globale et la variable de procédure locale ont des durées de vie différentes.
| Sujet | Commandes et explications |
|---|---|
| GetProfile | UO.GetProfile |
| ProfileName | UO.ProfileName |
| ProfileShardName | UO.ProfileShardName |
| ChangeProfile | UO.ChangeProfile |
| ExtChangeProfile | UO.ExtChangeProfile |
| ResetProfile | UO.ResetProfile |
| SaveConfig | UO.SaveConfig |
| Global Variables | UO.GetGlobal · UO.SetGlobal · UO.GListGet · UO.GListSet · UO.GListSize |
| EasyUO Variables | UO.GetEasyUO · UO.SetEasyUO |
| MUL Path | UO.SetMulPath |
UO.GetProfile · UO.ProfileName · UO.ProfileShardName · UO.ChangeProfile · UO.ExtChangeProfile · UO.ResetProfile · UO.SaveConfig · UO.ReqProfile · UO.ClientProfilePath · UO.ClientPath · UO.SetMulPath
UO.GetGlobal · UO.SetGlobal · UO.GetEasyUO · UO.SetEasyUO · UO.GListClear · UO.GListGet · UO.GListPosName · UO.GListPosValue · UO.GListSet · UO.GListSize
UO.LoadHotkeys · UO.SaveHotkeys · UO.Set · UO.SetDefault
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 text = UO.GetGlobal("manual.delay");
var delayMs = 350;
if (Truth(text != "N/A") && Truth(IsNumeric(text)))
{
var parsed = Val(text);
if (Truth(parsed >= 50) && Truth(parsed <= 5000))
{
delayMs = checked((int)parsed);
}
}
await Delay(delayMs);
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;Paramètres, résultat et tous les scénarios
UO.SetGlobal("manual.delay", 350);
UO.SetGlobal("manual.delay", 600);
var text = UO.GetGlobal("manual.delay");
if (Truth(IsNumeric(text)))
{
await Delay(Val(text));
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ChangeProfile(object? name);Modifie le profil sélectionné pour la prochaine connexion auto-client lorsque la session est déconnectée.
-
name— Profil/nom de personnage enregistré résolu par TryResolveProfileCharacter pour le fragment sélectionné. Un nom vide/inconnu donne -4.
int : 0 — la sélection est préparée ; -2 — la session de gestionnaire ou le monde de connexion/de jeu est actif ; -3 — plus d'un script est exécuté ; -4 - le nom/le fragment de profil n'est pas autorisé.
- ChangeProfile transmet un fragment/caractère vide ; ExtChangeProfile autorise un fragment et un caractère explicites. Dans la session du gestionnaire, vous devez sélectionner une autre session dans ClassicUO Manager - la session en cours enregistre son profil.
- En cas de succès, enregistre et décharge le profil actuel, modifie LastServerName, enregistre les paramètres et attribue le caractère suivant. La connexion elle-même ne démarre pas ; Connect est appelé séparément.
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.ChangeProfile("ExampleProfile");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Utilisez le nom du profil réellement enregistré ; un code négatif décrit un échec.
var status = UO.ChangeProfile("ExampleProfile");
UO.Print(Convert.ToString(status));Paramètres et déroulement de l’exécution :
- Un client autonome désactivé sans autre violation renvoie -4 pour un nom vide.
return RunScenario();
object? RunScenario()
{
var status = UO.ChangeProfile("");
UO.Print(Convert.ToString(status));
return null;
}Paramètres et déroulement de l’exécution :
- Connect n'est appelé qu'après le code 0 ; La réponse du serveur n'a pas encore été confirmé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 status = UO.ChangeProfile("ExampleProfile");
if (Truth(status == 0))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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: name (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ChangeProfileSelection:bridge.ChangeProfileSelection(Text(0), string.Empty, string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "changeprofile":
return new InjectionValue(bridge.ChangeProfileSelection(Text(0), string.Empty, string.Empty));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.ClientPath();Renvoie le répertoire d'installation/exécutable du client.
Il n'y a pas de paramètres.
string — chemin d'accès au répertoire. Ce n'est pas bool, ni un tableau, ni ID. Un chemin vide signifie que la valeur n'est pas disponible ; ne l'utilisez pas comme dossier de travail actuel par défaut.
- Lisez CUOEnviroment.ExecutablePath. Il ne s'agit pas d'un itinéraire routier, d'une liste de waypoints, d'un dossier de script ou d'un chemin d'accès aux données de jeu.
- La commande lit uniquement le chemin, n'ouvre, ne crée ni n'enregistre rien. Le délimiteur de fin ne doit pas être supposé ; l'exemple d'assistance l'ajoute si nécessaire.
- Le nom est le nom du jeu/client API et s'écrit avec UO. ClientPath renvoie le répertoire client, ClientProfilePath renvoie le répertoire du profil actif.
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.ClientPath();
UO.Print("ClientPath: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Il n'y a pas d'arguments. dossier - chaîne ; une valeur vide est traitée séparément.
var folder = UO.ClientPath();
if (Truth(folder == ""))
{
UO.Print("Folder is not available");
return null;
}
UO.Print(folder);
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 :
- Ces dossiers ont des objectifs différents. Le script affiche les deux lignes sans modifier la configuration ou le profil.
return RunScenario();
object? RunScenario()
{
var client = UO.ClientPath();
var profile = UO.ClientProfilePath();
UO.Print("Client: " + client);
if (Truth(profile == ""))
{
UO.Print("No current profile");
}
else
{
UO.Print("Profile: " + profile);
}
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 :
- ChildPath est affiché dans son intégralité : dossier est le répertoire résultant, feuille est le nom du fichier. Il s'agit d'une concaténation de chaînes pour un nom donné, et non d'un normalisateur de chemin universel.
- Le fichier n'est ni créé ni lu ; Vous pouvez d’abord vérifier la chaîne résultante.
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 folder = UO.ClientPath();
var filePath = ChildPath(folder, "sample.json");
if (Truth(filePath != ""))
{
UO.Print("Example path: " + filePath);
}
return null;
}
dynamic ChildPath(dynamic folder, dynamic leaf)
{
if (Truth(folder == ""))
{
return "";
}
var last = Right(folder, 1);
if (Truth(last == "/") || Truth(last == "\\"))
{
return folder + leaf;
}
return folder + "/" + leaf;
}
string Right(object? value, int count)
{
string text = Convert.ToString(value) ?? "";
return text[Math.Max(0, text.Length - count)..];
}
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:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientPath:bridge.ClientPath.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "clientpath": return new InjectionValue(bridge.ClientPath);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.ClientProfilePath();Renvoie le répertoire du profil client actuel.
Il n'y a pas de paramètres.
string — chemin d'accès au répertoire. Ce n'est pas bool, ni un tableau, ni ID. Un chemin vide signifie que la valeur n'est pas disponible ; ne l'utilisez pas comme dossier de travail actuel par défaut.
- Lisez ProfileManager.ProfilePath ; si le profil n'a pas encore été sélectionné, une chaîne vide est renvoyée. L'appel lui-même ne crée pas de profil et ne transfère pas les paramètres.
- La commande lit uniquement le chemin, n'ouvre, ne crée ni n'enregistre rien. Le délimiteur de fin ne doit pas être supposé ; l'exemple d'assistance l'ajoute si nécessaire.
- Le nom est le nom du jeu/client API et s'écrit avec UO. ClientPath renvoie le répertoire client, ClientProfilePath renvoie le répertoire du profil actif.
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.ClientProfilePath();
UO.Print("ClientProfilePath: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Il n'y a pas d'arguments. dossier - chaîne ; une valeur vide est traitée séparément.
var folder = UO.ClientProfilePath();
if (Truth(folder == ""))
{
UO.Print("Folder is not available");
return null;
}
UO.Print(folder);
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 :
- Ces dossiers ont des objectifs différents. Le script affiche les deux lignes sans modifier la configuration ou le profil.
return RunScenario();
object? RunScenario()
{
var client = UO.ClientPath();
var profile = UO.ClientProfilePath();
UO.Print("Client: " + client);
if (Truth(profile == ""))
{
UO.Print("No current profile");
}
else
{
UO.Print("Profile: " + profile);
}
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 :
- ChildPath est affiché dans son intégralité : dossier est le répertoire résultant, feuille est le nom du fichier. Il s'agit d'une concaténation de chaînes pour un nom donné, et non d'un normalisateur de chemin universel.
- Le fichier n'est ni créé ni lu ; Vous pouvez d’abord vérifier la chaîne résultante.
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 folder = UO.ClientProfilePath();
var filePath = ChildPath(folder, "sample.json");
if (Truth(filePath != ""))
{
UO.Print("Example path: " + filePath);
}
return null;
}
dynamic ChildPath(dynamic folder, dynamic leaf)
{
if (Truth(folder == ""))
{
return "";
}
var last = Right(folder, 1);
if (Truth(last == "/") || Truth(last == "\\"))
{
return folder + leaf;
}
return folder + "/" + leaf;
}
string Right(object? value, int count)
{
string text = Convert.ToString(value) ?? "";
return text[Math.Max(0, text.Length - count)..];
}
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:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CurrentProfilePath:bridge.CurrentProfilePath.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "shardpath":
case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ExtChangeProfile(object? profileName);
dynamic UO.ExtChangeProfile(object? profileName, object? shardName);
dynamic UO.ExtChangeProfile(object? profileName, object? shardName, object? charName);Modifie le profil sélectionné pour la prochaine connexion auto-client lorsque la session est déconnectée.
-
profileName— Profil/nom de personnage enregistré résolu par TryResolveProfileCharacter pour le fragment sélectionné. Un nom vide/inconnu donne -4. -
shardName— Nom de partition facultatif. Une valeur vide utilise CurrentProfile.ServerName, World.ServerName ou LastServerName. -
charName- Nom du personnage facultatif. Une valeur vide utilise le nom du profil enregistré.
int : 0 — la sélection est préparée ; -2 — la session de gestionnaire ou le monde de connexion/de jeu est actif ; -3 — plus d'un script est exécuté ; -4 - le nom/le fragment de profil n'est pas autorisé.
- ChangeProfile transmet un fragment/caractère vide ; ExtChangeProfile autorise un fragment et un caractère explicites. Dans la session du gestionnaire, vous devez sélectionner une autre session dans ClassicUO Manager - la session en cours enregistre son profil.
- En cas de succès, enregistre et décharge le profil actuel, modifie LastServerName, enregistre les paramètres et attribue le caractère suivant. La connexion elle-même ne démarre pas ; Connect est appelé séparément.
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.ExtChangeProfile("ExampleProfile");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Utilisez le nom du profil réellement enregistré ; un code négatif décrit un échec.
var status = UO.ExtChangeProfile("ExampleProfile");
UO.Print(Convert.ToString(status));Paramètres et déroulement de l’exécution :
- Un client autonome désactivé sans autre violation renvoie -4 pour un nom vide.
return RunScenario();
object? RunScenario()
{
var status = UO.ExtChangeProfile("");
UO.Print(Convert.ToString(status));
return null;
}Paramètres et déroulement de l’exécution :
- Connect n'est appelé qu'après le code 0 ; La réponse du serveur n'a pas encore été confirmé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 status = UO.ExtChangeProfile("ExampleProfile");
if (Truth(status == 0))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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: profileName (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ChangeProfileSelection:bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "extchangeprofile":
{
string requestedProfile = Text(0);
string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;
string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;
return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));
}Paramètres: profileName (Any), shardName (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ChangeProfileSelection:bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "extchangeprofile":
{
string requestedProfile = Text(0);
string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;
string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;
return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));
}Paramètres: profileName (Any), shardName (Any), charName (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ChangeProfileSelection:bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "extchangeprofile":
{
string requestedProfile = Text(0);
string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;
string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;
return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GListClear();Efface toute la liste temporaire avant une nouvelle série d'actions.
Il n'y a pas de paramètres.
void - aucun résultat. Après effacement, GListSize() renvoie 0.
- La liste appartient à l'instance d'exécution. Les autres exécutions de script ont leurs propres listes. GList n'est pas un stockage partagé entre profils ; ces commandes n'écrivent pas de fichier et n'entrent pas dans un état de profil enregistré. Le nouveau runtime obtient une liste vide. Ce n'est pas non plus une déclaration var/variable et non UO.SetGlobal.
- Le nouveau nom est ajouté à la fin. La répétition d'un nom qui ne respecte pas la casse remplace la signification et l'orthographe du nom à sa place d'origine. La lecture ne supprime rien. Vous ne pouvez pas effacer ou ajouter des enregistrements au milieu d'une recherche si vous avez besoin d'index stables.
- Les opérations sont locales : pas de paquets, pas de recherches d'objets, pas de latence. Set/Get recherche le nom de manière séquentielle ; pour des ensembles plus grands, utilisez Dictionary. Il n'existe pas de commande distincte pour supprimer une clé dans cette famille ; Effacer efface toutes les entré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.GListClear");
UO.GListClear();Paramètres et déroulement de l’exécution :
- Clear supprime les deux règles, Size confirme le vide. Les objets du personnage restent en place.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListClear();
if (Truth(UO.GListSize() == 0))
{
UO.Print("Batch rules cleared");
}
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 :
- Les anciennes règles sont supprimées avant l'ajout du minerai ; la recherche affiche uniquement la nouvelle règle avec graphic 0x19B9.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListClear();
UO.GListSet("ore", 0x19B9);
var i = 0;
while (Truth(i < UO.GListSize()))
{
var name = UO.GListPosName(i);
var graphic = UO.GListPosValue(i);
UO.Print(name + " | graphic: " + Convert.ToString(graphic));
i = i + 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Un numéro précédemment lu et retenu reste disponible une fois la liste effacée. La liste contient déjà des entrées 0.
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.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var retained = UO.GListGet("bandage");
UO.GListClear();
UO.Print("Retained graphic: " + Convert.ToString(retained));
UO.Print("Remaining entries: " + Convert.ToString(UO.GListSize()));
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:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void GListClear() => globalList.Clear();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GListGet(object? nameValue);Lit une valeur dans une liste temporaire par nom de règle ou de compteur.
-
nameValue— object ? est converti en chaîne. Les noms sont comparés sans tenir compte de la casse : "bandage" et "BANDAGE" sont une clé. Un nom de chaîne non vide est recommandé ; un nom vide est également acceptable.
object ? — valeur enregistrée avec le même type. S'il n'y a pas de clé, int 0. Le 0 préservé est impossible à distinguer du GListGet absent ; vérifiez les noms.
- La liste appartient à l'instance d'exécution. Les autres exécutions de script ont leurs propres listes. GList n'est pas un stockage partagé entre profils ; ces commandes n'écrivent pas de fichier et n'entrent pas dans un état de profil enregistré. Le nouveau runtime obtient une liste vide. Ce n'est pas non plus une déclaration var/variable et non UO.SetGlobal.
- Le nouveau nom est ajouté à la fin. La répétition d'un nom qui ne respecte pas la casse remplace la signification et l'orthographe du nom à sa place d'origine. La lecture ne supprime rien. Vous ne pouvez pas effacer ou ajouter des enregistrements au milieu d'une recherche si vous avez besoin d'index stables.
- Les opérations sont locales : pas de paquets, pas de recherches d'objets, pas de latence. Set/Get recherche le nom de manière séquentielle ; pour des ensembles plus grands, utilisez Dictionary. Il n'existe pas de commande distincte pour supprimer une clé dans cette famille ; Effacer efface toutes les entré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.
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.
UO.GListSet("simple_value", 42);
object? result = UO.GListGet("simple_value");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- BANDAGE trouve la clé du bandage. 0x0E21 - Bandage graphic, pas son unique serial.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var graphic = UO.GListGet("BANDAGE");
if (Truth(graphic == 0x0E21))
{
UO.Print("Bandage rule selected");
}
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 fonction complète HasEntry parcourt les noms ; donc 0 en traitement est différent de manquant. Pour les clés propres, les noms ASCII sont utilisés ici.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("processed", 0);
if (Truth(HasEntry("processed")))
{
var count = UO.GListGet("processed");
UO.Print("Recorded count: " + Convert.ToString(count));
}
if (!(Truth(HasEntry("missing"))))
{
UO.Print("No entry named missing");
}
return null;
}
dynamic HasEntry(dynamic name)
{
var i = 0;
while (Truth(i < UO.GListSize()))
{
if (Truth(Convert.ToString(UO.GListPosName(i)) == Convert.ToString(name)))
{
return true;
}
i = i + 1;
}
return false;
}
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 :
- délai — nombre de millisecondes ; UO.Wait est appelé uniquement pour une valeur comprise dans la plage 50–5000. L'exemple attend 350 ms.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.GListClear();
UO.GListSet("delay", 350);
var delayMs = UO.GListGet("delay");
if (Truth(delayMs >= 50) && Truth(delayMs <= 5000))
{
await Delay(delayMs);
}
else
{
UO.Print("Delay outside the accepted range");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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: nameValue (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GListGet. -
InjectionScript.Runtime.InjectionValue.ToString:nameValue.ToString().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public InjectionValue GListGet(InjectionValue nameValue)
{
string name = nameValue.ToString();
int index = globalList.FindIndex(pair => pair.Key.Equals(name, StringComparison.OrdinalIgnoreCase));
return index >= 0 ? globalList[index].Value : InjectionValue.Zero;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GListPosName(object? index);Lit le nom de l'enregistrement par sa position pour énumérer les règles.
-
index- int : indice de 0 à GListSize()-1 inclus. Ce n'est pas serial, graphic ou le nombre d'unités dans la pile.
string est le nom dans le dernier formulaire enregistré du registre. L'index invalide renvoie "" ; une clé vide renvoie également "".
- La liste appartient à l'instance d'exécution. Les autres exécutions de script ont leurs propres listes. GList n'est pas un stockage partagé entre profils ; ces commandes n'écrivent pas de fichier et n'entrent pas dans un état de profil enregistré. Le nouveau runtime obtient une liste vide. Ce n'est pas non plus une déclaration var/variable et non UO.SetGlobal.
- Le nouveau nom est ajouté à la fin. La répétition d'un nom qui ne respecte pas la casse remplace la signification et l'orthographe du nom à sa place d'origine. La lecture ne supprime rien. Vous ne pouvez pas effacer ou ajouter des enregistrements au milieu d'une recherche si vous avez besoin d'index stables.
- Les opérations sont locales : pas de paquets, pas de recherches d'objets, pas de latence. Set/Get recherche le nom de manière séquentielle ; pour des ensembles plus grands, utilisez Dictionary. Il n'existe pas de commande distincte pour supprimer une clé dans cette famille ; Effacer efface toutes les entré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.
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.
UO.GListClear();
UO.GListSet("simple_value", 42);
var result = UO.GListPosName(0);
UO.Print("GListPosName: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'index 0 signifie la première règle. Avant la lecture, on vérifie que la liste n'est pas vide.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
if (Truth(UO.GListSize() > 0))
{
var first = UO.GListPosName(0);
UO.Print("First rule: " + first);
}
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 :
- HasEntry renvoie true pour un compteur nul écrit et false pour un nom manquant.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("processed", 0);
if (Truth(HasEntry("processed")))
{
var count = UO.GListGet("processed");
UO.Print("Recorded count: " + Convert.ToString(count));
}
if (!(Truth(HasEntry("missing"))))
{
UO.Print("No entry named missing");
}
return null;
}
dynamic HasEntry(dynamic name)
{
var i = 0;
while (Truth(i < UO.GListSize()))
{
if (Truth(Convert.ToString(UO.GListPosName(i)) == Convert.ToString(name)))
{
return true;
}
i = i + 1;
}
return false;
}
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 répétition de BANDAGE modifie l'orthographe du nom en première position ; l’or reste deuxième.
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.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListSet("BANDAGE", 0x0E21);
var i = 0;
while (Truth(i < UO.GListSize()))
{
var name = UO.GListPosName(i);
var graphic = UO.GListPosValue(i);
UO.Print(name + " | graphic: " + Convert.ToString(graphic));
i = i + 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string GListPosName(int index) => index >= 0 && index < globalList.Count ? globalList[index].Key : string.Empty;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GListPosValue(object? index);Lit la valeur d'une entrée par position, telle que graphic, à partir d'une liste pré-remplie.
-
index- int : indice de 0 à GListSize()-1 inclus. Ce n'est pas serial, graphic ou le nombre d'unités dans la pile.
object ? — valeur avec type conservé ; l'index invalide renvoie int 0. Vérifiez les limites, car le vrai 0 est acceptable.
- La liste appartient à l'instance d'exécution. Les autres exécutions de script ont leurs propres listes. GList n'est pas un stockage partagé entre profils ; ces commandes n'écrivent pas de fichier et n'entrent pas dans un état de profil enregistré. Le nouveau runtime obtient une liste vide. Ce n'est pas non plus une déclaration var/variable et non UO.SetGlobal.
- Le nouveau nom est ajouté à la fin. La répétition d'un nom qui ne respecte pas la casse remplace la signification et l'orthographe du nom à sa place d'origine. La lecture ne supprime rien. Vous ne pouvez pas effacer ou ajouter des enregistrements au milieu d'une recherche si vous avez besoin d'index stables.
- Les opérations sont locales : pas de paquets, pas de recherches d'objets, pas de latence. Set/Get recherche le nom de manière séquentielle ; pour des ensembles plus grands, utilisez Dictionary. Il n'existe pas de commande distincte pour supprimer une clé dans cette famille ; Effacer efface toutes les entré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.
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.
UO.GListClear();
UO.GListSet("simple_value", 42);
object? result = UO.GListPosValue(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'index 1 sélectionne la deuxième règle or. La vérification des limites précède la lecture de la valeur.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var index = 1;
if (Truth(index >= 0) && Truth(index < UO.GListSize()))
{
var graphic = UO.GListPosValue(index);
UO.Print("Second rule graphic: " + Convert.ToString(graphic));
}
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 force brute recherche le bandage graphic dans les règles, pas l'objet dans le monde ; aucune demande de jeu n'est envoyée.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var total = UO.GListSize();
var i = 0;
while (Truth(i < total))
{
var graphic = UO.GListPosValue(i);
if (Truth(graphic == 0x0E21))
{
UO.Print("Bandage rule at index " + Convert.ToString(i));
}
i = i + 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- L'index 0 existe, donc la valeur 0 est un compteur valide ; vérifier la valeur non nulle serait une erreur ici.
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.GListClear();
UO.GListSet("processed", 0);
var index = 0;
if (Truth(index < UO.GListSize()))
{
var count = UO.GListPosValue(index);
UO.Print("Valid zero count: " + Convert.ToString(count));
}
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: index (Integer)
Résultat: dynamic / Any.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public InjectionValue GListPosValue(int index) => index >= 0 && index < globalList.Count ? globalList[index].Value : InjectionValue.Zero;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GListSet(object? nameValue, object? value);Écrit une valeur nommée dans une liste temporaire : par exemple, graphic règles de butin ou compteur d'objets traités.
-
nameValue— object ? est converti en chaîne. Les noms sont comparés sans tenir compte de la casse : "bandage" et "BANDAGE" sont une clé. Un nom de chaîne non vide est recommandé ; un nom vide est également acceptable.
void - aucun résultat ; une commande distincte, sans affectation.
- La liste appartient à l'instance d'exécution. Les autres exécutions de script ont leurs propres listes. GList n'est pas un stockage partagé entre profils ; ces commandes n'écrivent pas de fichier et n'entrent pas dans un état de profil enregistré. Le nouveau runtime obtient une liste vide. Ce n'est pas non plus une déclaration var/variable et non UO.SetGlobal.
- Le nouveau nom est ajouté à la fin. La répétition d'un nom qui ne respecte pas la casse remplace la signification et l'orthographe du nom à sa place d'origine. La lecture ne supprime rien. Vous ne pouvez pas effacer ou ajouter des enregistrements au milieu d'une recherche si vous avez besoin d'index stables.
- Les opérations sont locales : pas de paquets, pas de recherches d'objets, pas de latence. Set/Get recherche le nom de manière séquentielle ; pour des ensembles plus grands, utilisez Dictionary. Il n'existe pas de commande distincte pour supprimer une clé dans cette famille ; Effacer efface toutes les entré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.GListSet");
UO.GListSet("gold", 0x0EED);Paramètres et déroulement de l’exécution :
- le bandage et l'or sont les noms des règles, les chiffres sont graphic. BANDAGE remplace la première entrée, n'en crée pas une troisième ; la sortie montre la commande.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListSet("BANDAGE", 0x0E21);
var i = 0;
while (Truth(i < UO.GListSize()))
{
var name = UO.GListPosName(i);
var graphic = UO.GListPosValue(i);
UO.Print(name + " | graphic: " + Convert.ToString(graphic));
i = i + 1;
}
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 :
- traité commence par 0. Trois étapes incrémentent le compteur stocké jusqu'à 3 ; les objets du jeu ne bougent pas ici.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("processed", 0);
for (int i = (int)(1); i <= 3; i += (int)(1))
{
UO.GListSet("processed", UO.GListGet("processed") + 1);
}
UO.Print("Recorded count: " + Convert.ToString(UO.GListGet("processed")));
return null;
}Paramètres et déroulement de l’exécution :
- mode — chaîne, limite — nombre 2. Le mode sélectionne la branche, le numéro limite le traitement à deux étapes.
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.GListClear();
UO.GListSet("mode", "inspect");
UO.GListSet("limit", 2);
if (Truth(UO.GListGet("mode") == "inspect"))
{
for (int i = (int)(1); i <= UO.GListGet("limit"); i += (int)(1))
{
UO.Print("Inspect batch: " + Convert.ToString(i));
}
}
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: nameValue (Any), value (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GListSet. -
InjectionScript.Runtime.InjectionValue.ToString:nameValue.ToString().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void GListSet(InjectionValue nameValue, InjectionValue value)
{
string name = nameValue.ToString();
int index = globalList.FindIndex(pair => pair.Key.Equals(name, StringComparison.OrdinalIgnoreCase));
var entry = new KeyValuePair<string, InjectionValue>(name, value);
if (index >= 0)
globalList[index] = entry;
else
globalList.Add(entry);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GListSize();Compte les entrées nommées dans une liste temporaire pour vérifier le vide ou limiter la force brute.
Il n'y a pas de paramètres.
int >= 0 — le nombre de noms uniques, pas le nombre d'éléments ou d'unités dans les piles.
- La liste appartient à l'instance d'exécution. Les autres exécutions de script ont leurs propres listes. GList n'est pas un stockage partagé entre profils ; ces commandes n'écrivent pas de fichier et n'entrent pas dans un état de profil enregistré. Le nouveau runtime obtient une liste vide. Ce n'est pas non plus une déclaration var/variable et non UO.SetGlobal.
- Le nouveau nom est ajouté à la fin. La répétition d'un nom qui ne respecte pas la casse remplace la signification et l'orthographe du nom à sa place d'origine. La lecture ne supprime rien. Vous ne pouvez pas effacer ou ajouter des enregistrements au milieu d'une recherche si vous avez besoin d'index stables.
- Les opérations sont locales : pas de paquets, pas de recherches d'objets, pas de latence. Set/Get recherche le nom de manière séquentielle ; pour des ensembles plus grands, utilisez Dictionary. Il n'existe pas de commande distincte pour supprimer une clé dans cette famille ; Effacer efface toutes les entré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.
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.GListSize();
UO.Print("GListSize: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Un ensemble vide arrête la procédure avant que les règles ne soient traitées.
UO.GListClear();
if (Truth(UO.GListSize() == 0))
{
UO.Print("No batch rules; stop here");
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 :
- Les deux règles sont itérées sur les indices 0 et 1 ; la condition i < Taille ne permet pas d'accéder à l'index 2.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var i = 0;
while (Truth(i < UO.GListSize()))
{
var name = UO.GListPosName(i);
var graphic = UO.GListPosValue(i);
UO.Print(name + " | graphic: " + Convert.ToString(graphic));
i = i + 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- La substitution BANDAGE n'augmente pas le nombre de noms ; avant et après La taille est 2.
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.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var before = UO.GListSize();
UO.GListSet("BANDAGE", 0x0E21);
if (Truth(UO.GListSize() == before))
{
UO.Print("Existing rule updated without an extra entry");
}
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 GListSize() => globalList.Count;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetEasyUO(object? number);Lit une chaîne du registre Windows de l'utilisateur EasyUO.
-
number- int/valeur convertie par NumberConversions.ToInt. Forme la valeur de registre du nom décimal.
string — valeur HKCU\Software\EasyUO<numéro> ; s'il n'est pas présent, le nom *<numéro> est coché. Si la clé/valeur est manquante ou en dehors de Windows, une chaîne vide est renvoyée.
- La lecture ne crée pas de clé et n'accède pas au monde du jeu. L'interface de registre héritée est différente de GetGlobal. Une erreur d'accès au registre système peut se propager ; il n'y a pas de prise séparée dans le pont.
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.GetEasyUO(1);
UO.Print("GetEasyUO: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Le nom est lu d'abord 1, puis *1.
var value = UO.GetEasyUO(1);
UO.Print(value);Paramètres et déroulement de l’exécution :
- Une chaîne vide ne peut contenir aucune valeur ou un texte vide stocké.
return RunScenario();
object? RunScenario()
{
var value = UO.GetEasyUO(999);
if (Truth(Len(value) == 0))
{
UO.Print("empty");
}
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;Paramètres et déroulement de l’exécution :
- Le numéro définit la valeur de registre, pas le serial de l'objet.
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 number = 2;
var value = UO.GetEasyUO(number);
UO.Print(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: number (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetEasyUO. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetEasyUO:bridge.GetEasyUO(NumberConversions.ToInt(number)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(number).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string GetEasyUO(InjectionValue number) => bridge.GetEasyUO(NumberConversions.ToInt(number));string UO.GetGlobal(object? name);
dynamic UO.GetGlobal(object? globalRegion, object? varName);SetGlobal et GetGlobal partagent les valeurs entre tous les scripts, profils et processus Full Client/Client. Les valeurs sont des chaînes ; une clé absente donne "N/A". La casse compte ; les formes region utilisent region/name. Manager/Game Manager/CSharp/globals.json persiste et se relit sous verrou interprocessus. Les formes Shared utilisent le même stockage.
-
globalRegion— Espace de noms associé au nom de clé. -
name— Nom de clé partagée sensible à la casse. -
varName— Nom de clé partagée sensible à la casse.
Chaque bloc est un .csx complet. Remplacez les serials, types et coordonnées de démonstration. L’ordre et les arguments C# nommés suivent la signature.
#getglobal team.target
#get global team.message
Chaque bloc est un .csx complet. Remplacez les serials, types et coordonnées de démonstration. L’ordre et les arguments C# nommés suivent la signature.
string value = UO.GetGlobal("team.target");
UO.Print(value);string value = UO.GetGlobal("team.delay");
if (int.TryParse(value, out int milliseconds))
UO.Print(milliseconds.ToString());UO.Print(Convert.ToString(UO.GetGlobal("team", "delay")));new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
string value = api.GetGlobal("team.target");
api.Print(value);
}
}CSharpGameApi.GetGlobal
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.RegisterClientApiCompatibility
-> InjectionScript.Runtime.State.Globals.GetGlobal
Globals -> SharedGlobalStore -> named mutex -> atomic JSON replacement
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetProfile(object? serial);Lit la description du caractère public que le serveur envoie pour la fenêtre Profil. Utile pour lire des notes ou rechercher du texte dans la description du personnage sélectionné. Ce ne sont pas des paramètres de profil de gestionnaire.
-
serial— Character Serial : un nombre, une chaîne avec ID 0x... ou un sélecteur d'objet tel que "self" ou "lasttarget". Il ne s'agit pas d'un type de corps, d'un nom de fichier ou d'un profil de gestionnaire.
string — texte de la description principale, sans titre ni signature. Une description vide est légale ; un résultat vierge est également possible s'il n'y a pas de réponse dans les 3 secondes. Ce n'est pas true/false. Une demande est envoyée à chaque appel ; si la description est déjà enregistrée dans la session, elle est renvoyée immédiatement, incluant un brouillon de la fenêtre ouverte. Cela ne garantit pas une nouvelle réponse du serveur.
- La description et son brouillon appartiennent à la séance. La fermeture de la fenêtre de jeu les enregistre sans les publier, leur ouverture restaure la fenêtre Profil. La fermeture explicite de votre propre profil envoie le texte modifié une fois ; le texte de quelqu'un d'autre n'est pas envoyé. La nouvelle réponse du serveur remplace les anciennes données, la déconnexion de la connexion les efface. GetProfile ne modifie rien lui-même.
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.GetProfile("self");
UO.Print("GetProfile: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- "self" - description de votre personnage ; pas la configuration du compte. Le texte reçu du serveur ou déjà enregistré dans la session est affiché.
var note = UO.GetProfile("self");
if (Truth(note != ""))
{
UO.Print(note);
}
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 :
- Nécessite un lasttarget existant. FindText recherche le mot « Guérisseur » sensible à la casse dans le texte libre. S'il y a une correspondance, AddObject enregistre le serial sélectionné sous le nom healerNote. Il s'agit d'une note d'utilisateur et non d'un justificatif de profession NPC.
return RunScenario();
object? RunScenario()
{
if (!(Truth(UO.Exists("lasttarget"))))
{
return null;
}
var note = UO.GetProfile("lasttarget");
if (Truth(FindText(note, "Healer") > 0))
{
UO.AddObject("healerNote", "lasttarget");
}
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 :
- La fonction entière HasPublicNote est donnée ci-dessous. Teste l'existence d'un objet et d'une sous-chaîne, renvoyant true/false. "Guilde" - texte de démonstration ; une réponse vide ne confirme pas l'absence d'un tel enregistrement sur le serveur.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(HasPublicNote("lasttarget", "Guild")))
{
UO.AddObject("guildNote", "lasttarget");
}
return null;
}
dynamic HasPublicNote(dynamic serial, dynamic phrase)
{
if (!(Truth(UO.Exists(serial))))
{
return false;
}
return FindText(UO.GetProfile(serial), phrase) > 0;
}
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;
}
}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: serial (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetProfile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetProfile:bridge.GetProfile(GetObject(serial)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(serial).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string GetProfile(InjectionValue serial) => bridge.GetProfile(GetObject(serial));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.LoadHotkeys();Charge les macros et les raccourcis clavier enregistrés.
Il n'y a pas de paramètres.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- LoadHotkeys appelle _world.Macros.Load via Invoke. La table de macros actuelle est remplacée par les données de profil local.
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
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.LoadHotkeys");
UO.LoadHotkeys();Paramètres et déroulement de l’exécution :
- Charge les macros et les raccourcis clavier enregistrés.
UO.LoadHotkeys();Paramètres et déroulement de l’exécution :
- LoadHotkeys appelle _world.Macros.Load via Invoke. La table de macros actuelle est remplacée par les données de profil local.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ProfileName());
UO.LoadHotkeys();
return null;
}Paramètres et déroulement de l’exécution :
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.LoadHotkeys();
UO.Print("Macros loaded");
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.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LoadHotkeys:bridge.LoadHotkeys().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "loadhotkeys": bridge.LoadHotkeys(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ProfileName();Lit le nom du profil actuel.
Il n'y a pas de paramètres.
string — texte du champ du pont.ProfileName; sans données disponibles, une chaîne vide est possible. Ce n'est pas un signe de connexion et ce n'est pas un ID numérique.
- ExecuteClientApiCompatibility renvoie bridge.ProfileName sans modifier le profil ou la sélection du serveur.
- Lit l'état local actuel. Il n’y a pas de package, de cible ou de mise à jour automatique ; les lectures individuelles peuvent voir différents états.
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.ProfileName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Lit le nom du profil actuel.
var value = UO.ProfileName();
UO.Print(value);Paramètres et déroulement de l’exécution :
- ExecuteClientApiCompatibility renvoie bridge.ProfileName sans modifier le profil ou la sélection du serveur.
return RunScenario();
object? RunScenario()
{
var value = UO.ProfileName();
if (Truth(Len(value) > 0))
{
UO.TextPrint(value);
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Lit l'état local actuel. Il n’y a pas de package, de cible ou de mise à jour automatique ; les lectures individuelles peuvent voir différents états.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.ProfileName();
UO.Wait(500);
var after = UO.ProfileName();
UO.Print(before = after);
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.ProfileName:bridge.ProfileName.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "profilename": return new InjectionValue(bridge.ProfileName);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ProfileShardName();Lit le nom du fragment.
Il n'y a pas de paramètres.
string — texte du champ du pont.ShardName; sans données disponibles, une chaîne vide est possible. Ce n'est pas un signe de connexion et ce n'est pas un ID numérique.
- ExecuteClientApiCompatibility renvoie bridge.ShardName sans modifier le profil ou la sélection du serveur.
- Lit l'état local actuel. Il n’y a pas de package, de cible ou de mise à jour automatique ; les lectures individuelles peuvent voir différents états.
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.ProfileShardName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Lit le nom du fragment.
var value = UO.ProfileShardName();
UO.Print(value);Paramètres et déroulement de l’exécution :
- ExecuteClientApiCompatibility renvoie bridge.ShardName sans modifier le profil ou la sélection du serveur.
return RunScenario();
object? RunScenario()
{
var value = UO.ProfileShardName();
if (Truth(Len(value) > 0))
{
UO.TextPrint(value);
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Lit l'état local actuel. Il n’y a pas de package, de cible ou de mise à jour automatique ; les lectures individuelles peuvent voir différents états.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.ProfileShardName();
UO.Wait(500);
var after = UO.ProfileShardName();
UO.Print(before = after);
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.ShardName:bridge.ShardName.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "shardname":
case "profileshardname": return new InjectionValue(bridge.ShardName);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ReqProfile();
void UO.ReqProfile(object? mobile);Imprime le texte du profil connu du personnage.
-
mobile- Facultatif serial/alias. Sans argument - "lasttarget". Il ne s'agit pas d'un profil de paramètres locaux ClassicUO.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- ExecuteLegacyManualAlias appelle GetProfile, puis SystemMessage. Bridge.GetProfile envoie RequestProfile, puis jusqu'à 3 secondes vérifie CharacterPanels.Profile.CurrentText avec des pauses 25 ms. Le texte déjà existant peut être renvoyé immédiatement ; avec timeout, il affiche un message et donne une ligne vide. Cette commande imprime le texte mais ne le renvoie pas.
- Pour la valeur de string, utilisez UO.GetProfile. La présence de texte ne constitue pas une preuve d'un changement de nom réussi ou du statut du personnage.
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.ReqProfile");
UO.ReqProfile();Paramètres et déroulement de l’exécution :
- Imprime le texte du profil connu du personnage.
UO.ReqProfile();Paramètres et déroulement de l’exécution :
- ExecuteLegacyManualAlias appelle GetProfile, puis SystemMessage. Bridge.GetProfile envoie RequestProfile, puis jusqu'à 3 secondes vérifie CharacterPanels.Profile.CurrentText avec des pauses 25 ms. Le texte déjà existant peut être renvoyé immédiatement ; avec timeout, il affiche un message et donne une ligne vide. Cette commande imprime le texte mais ne le renvoie pas.
return RunScenario();
object? RunScenario()
{
UO.ReqProfile("self");
return null;
}Paramètres et déroulement de l’exécution :
- Pour la valeur de string, utilisez UO.GetProfile. La présence de texte ne constitue pas une preuve d'un changement de nom réussi ou du statut du personnage.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.ReqProfile(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget"))). -
InjectionScript.Runtime.InjectionApiUO.GetProfile:GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "reqprofile":
SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")));
break;Paramètres: mobile (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget"))). -
InjectionScript.Runtime.InjectionApiUO.GetProfile:GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "reqprofile":
SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ResetProfile();Réinitialise le profil actif aux valeurs par défaut.
Il n'y a pas de paramètres.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- ResetProfile appelle ProfileManager.ResetCurrentProfileToDefault ; s'il n'y a pas de profil actif, une erreur s'affiche. Modifie les paramètres locaux, de sorte que les valeurs utilisateur enregistrées peuvent être perdues.
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
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.ResetProfile");
UO.ResetProfile();Paramètres et déroulement de l’exécution :
- Réinitialise le profil actif aux valeurs par défaut.
UO.ResetProfile();Paramètres et déroulement de l’exécution :
- ResetProfile appelle ProfileManager.ResetCurrentProfileToDefault ; s'il n'y a pas de profil actif, une erreur s'affiche. Modifie les paramètres locaux, de sorte que les valeurs utilisateur enregistrées peuvent être perdues.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ProfileName());
UO.ResetProfile();
return null;
}Paramètres et déroulement de l’exécution :
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.ResetProfile();
UO.SaveConfig();
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.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ResetProfile:bridge.ResetProfile().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "resetprofile": bridge.ResetProfile(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SaveConfig();Enregistre le profil ClassicUO actuel.
Il n'y a pas de paramètres.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- SaveConfig appelle ProfileManager.SaveCurrentProfile via Invoke. La commande écrit les paramètres du profil local ; le chemin provient de ProfileManager.
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
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.SaveConfig");
UO.SaveConfig();Paramètres et déroulement de l’exécution :
- Enregistre le profil ClassicUO actuel.
UO.SaveConfig();Paramètres et déroulement de l’exécution :
- SaveConfig appelle ProfileManager.SaveCurrentProfile via Invoke. La commande écrit les paramètres du profil local ; le chemin provient de ProfileManager.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ProfileName());
UO.SaveConfig();
return null;
}Paramètres et déroulement de l’exécution :
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SaveConfig();
UO.Print(UO.ShardPath());
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.SaveConfig. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SaveConfig:bridge.SaveConfig().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void SaveConfig() => bridge.SaveConfig();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SaveHotkeys();Enregistre les macros et les raccourcis clavier.
Il n'y a pas de paramètres.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- SaveHotkeys appelle _world.Macros.Save via Invoke. La table de macros locales du profil actuel est enregistrée.
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
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.SaveHotkeys");
UO.SaveHotkeys();Paramètres et déroulement de l’exécution :
- Enregistre les macros et les raccourcis clavier.
UO.SaveHotkeys();Paramètres et déroulement de l’exécution :
- SaveHotkeys appelle _world.Macros.Save via Invoke. La table de macros locales du profil actuel est enregistrée.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ProfileName());
UO.SaveHotkeys();
return null;
}Paramètres et déroulement de l’exécution :
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SaveHotkeys();
UO.LoadHotkeys();
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.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SaveHotkeys:bridge.SaveHotkeys().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "savehotkeys": bridge.SaveHotkeys(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Set(object? name, object? value);Modifie l'un des trois paramètres hérités.
-
name— Chaîne insensible à la casse : "finddistance", "grabdelay" ou "equipfordress". Le nom inconnu est ignoré en silence. -
value- int ou double/0x-text. Pour la forme chaîne TryStr2Int ; un texte incorrect devient 0, pas une erreur.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- finddistance appelle bridge.SetFindDistance, grabdelay appelle bridge.SetGrabDelay, equipfordress attribue l'état.UseEquipForDress. Il s'agit de trois paramètres distincts ; Il n’existe pas de paramètre universel pour les propriétés arbitraires.
- La valeur de chaîne est d'abord convertie TryStr2Int avec fallback=0. Par conséquent, une faute de frappe peut écrire 0 dans le paramètre reconnu. Set lui-même ne cherche pas d'objets et ne change pas de vêtements.
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.Set");
UO.Set("finddistance", 10);Paramètres et déroulement de l’exécution :
- Modifie l'un des trois paramètres hérités.
UO.Set("finddistance", 10);Paramètres et déroulement de l’exécution :
- finddistance appelle bridge.SetFindDistance, grabdelay appelle bridge.SetGrabDelay, equipfordress attribue l'état.UseEquipForDress. Il s'agit de trois paramètres distincts ; Il n’existe pas de paramètre universel pour les propriétés arbitraires.
return RunScenario();
object? RunScenario()
{
UO.Set("grabdelay", "250");
return null;
}Paramètres et déroulement de l’exécution :
- La valeur de chaîne est d'abord convertie TryStr2Int avec fallback=0. Par conséquent, une faute de frappe peut écrire 0 dans le paramètre reconnu. Set lui-même ne cherche pas d'objets et ne change pas de vêtements.
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.Set("equipfordress", 1);
UO.Print(UO.FindDistance());
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: name (String), value (Integer/String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Set. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetFindDistance:bridge.SetFindDistance(value). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGrabDelay:bridge.SetGrabDelay(value).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void Set(string name, int value)
{
if (name.Equals("finddistance", StringComparison.OrdinalIgnoreCase))
{
bridge.SetFindDistance(value);
}
else if (name.Equals("grabdelay", StringComparison.OrdinalIgnoreCase))
{
bridge.SetGrabDelay(value);
}
else if (name.Equals("equipfordress", StringComparison.OrdinalIgnoreCase))
{
state.UseEquipForDress = value;
}
}Paramètres: name (String), value (Integer/String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Set. -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int(valueStr, out var value). -
InjectionScript.Runtime.InjectionApiUO.Set:Set(name, valueInt).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void Set(string name, string valueStr)
{
int valueInt = NumberConversions.TryStr2Int(valueStr, out var value) ? value : 0;
Set(name, valueInt);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetDefault(object? name, object? @object);Enregistre l'alias nommé serial dans l'état d'exécution.
-
name— Nommez l'alias sous forme de texte, la casse gère le dictionnaire d'objets. -
object— Série/alias via Arg/GetObject. Le nom et serial vont dans cet ordre.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- ExecuteLegacyManualAlias appelle state.Objects.Set(Text(0),Arg(1)). Il n'y a pas de choix interactif ; l'existence de serial n'est pas vérifiée.
- Il s'agit d'enregistrer le nom de l'objet, de ne pas réinitialiser le profil ni de modifier tous les paramètres par défaut. Lors des appels suivants, l'alias est à nouveau résolu.
- Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.
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.SetDefault");
UO.SetDefault("manualObject", UO.Self());Paramètres et déroulement de l’exécution :
- Enregistre l'alias nommé serial dans l'état d'exécution.
UO.SetDefault("manualObject", UO.Self());Paramètres et déroulement de l’exécution :
- ExecuteLegacyManualAlias appelle state.Objects.Set(Text(0),Arg(1)). Il n'y a pas de choix interactif ; l'existence de serial n'est pas vérifiée.
return RunScenario();
object? RunScenario()
{
UO.SetDefault("manualBag", UO.Backpack());
UO.Print(UO.GetSerial("manualBag"));
return null;
}Paramètres et déroulement de l’exécution :
- Il s'agit d'enregistrer le nom de l'objet, de ne pas réinitialiser le profil ni de modifier tous les paramètres par défaut. Lors des appels suivants, l'alias est à nouveau résolu.
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 id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.SetDefault("manualTarget", id);
UO.Print(UO.GetName("manualTarget"));
}
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: name (Any), object (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.State.RuntimeDictionary.Set:state.Objects.Set(Text(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(1).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setdefault":
if (arguments.Length > 1) state.Objects.Set(Text(0), Arg(1));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetEasyUO(object? number, object? value);Écrit une valeur de chaîne dans le registre Windows EasyUO.
-
number— Numéro de valeur int, formaté double sans préfixe *. -
value— Envoyez du texte via ToString ; enregistré comme transmis.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Sous Windows, ouvre/crée HKCU\Software\EasyUO avec autorisation d'écriture, SetValue(decimalNumber,value,RegistryValueKind.string). Sur d'autres systèmes d'exploitation, il affiche un message et ne l'enregistre pas.
- Il s'agit d'une entrée permanente externe dans le registre de l'utilisateur actuel, sans portée globale du runtime ni du jeu serial. Les erreurs d'accès au registre ne sont pas masquées par cette fonction.
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.SetEasyUO");
UO.SetEasyUO(9001, "manual-example");Paramètres et déroulement de l’exécution :
- Écrit une valeur de chaîne dans le registre Windows EasyUO.
UO.SetEasyUO(9001, "manual-example");Paramètres et déroulement de l’exécution :
- Sous Windows, ouvre/crée HKCU\Software\EasyUO avec autorisation d'écriture, SetValue(decimalNumber,value,RegistryValueKind.String). Sur d'autres systèmes d'exploitation, il affiche un message et ne l'enregistre pas.
return RunScenario();
object? RunScenario()
{
UO.SetEasyUO(9001, "");
return null;
}Paramètres et déroulement de l’exécution :
- Il s'agit d'une entrée permanente externe dans le registre de l'utilisateur actuel, sans portée globale du runtime ni du jeu serial. Les erreurs d'accès au registre ne sont pas masquées par cette fonction.
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.SetEasyUO(9001, "manual-example");
UO.Print(UO.GetEasyUO(9001));
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: number (Any), value (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.SetEasyUO. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetEasyUO:bridge.SetEasyUO(NumberConversions.ToInt(number), value.ToString()). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(number). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void SetEasyUO(InjectionValue number, InjectionValue value)
=> bridge.SetEasyUO(NumberConversions.ToInt(number), value.ToString());void UO.SetGlobal(object? name, object? value);
void UO.SetGlobal(object? globalRegion, object? varName, object? varValue);SetGlobal et GetGlobal partagent les valeurs entre tous les scripts, profils et processus Full Client/Client. Les valeurs sont des chaînes ; une clé absente donne "N/A". La casse compte ; les formes region utilisent region/name. Manager/Game Manager/CSharp/globals.json persiste et se relit sous verrou interprocessus. Les formes Shared utilisent le même stockage.
-
globalRegion— Espace de noms associé au nom de clé. -
name— Nom de clé partagée sensible à la casse. -
value— Valeur enregistrée comme texte. -
varName— Nom de clé partagée sensible à la casse. -
varValue— Valeur enregistrée comme texte.
Chaque bloc est un .csx complet. Remplacez les serials, types et coordonnées de démonstration. L’ordre et les arguments C# nommés suivent la signature.
#setglobal team.target 0x40001234
#set global team.message Привіт усім
Chaque bloc est un .csx complet. Remplacez les serials, types et coordonnées de démonstration. L’ordre et les arguments C# nommés suivent la signature.
UO.SetGlobal("team.target", 0x40001234);
UO.Print(UO.GetGlobal("team.target"));UO.SetGlobal("team.message", "Привіт");
UO.Print(UO.GetGlobal("team.message"));UO.SetGlobal("team", "delay", "350");
UO.Print(Convert.ToString(UO.GetGlobal("team", "delay")));new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
api.SetGlobal("team.target", 0x40001234);
api.Print(api.GetGlobal("team.target"));
}
}CSharpGameApi.SetGlobal
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.RegisterClientApiCompatibility
-> InjectionScript.Runtime.State.Globals.SetGlobal
Globals -> SharedGlobalStore -> named mutex -> atomic JSON replacement
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetMulPath(object? pathValue);Enregistre la chaîne de chemin mulPath au moment de l'exécution.
-
pathValue— Envoyez du texte via ToString ; enregistré comme transmis.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Attribue mulPath = ToString ou la chaîne vide. Le fichier ne s'ouvre pas, les données cartographiques ne sont pas rechargées et la disponibilité du chemin n'est pas vérifiée par cette fonction.
- Il s'agit du stockage de compatibilité du runtime actuel. Il n'y a aucun consommateur dans le projet privé mulPath/showZ ; le changement ne recharge pas les ressources et ne modifie pas l'affichage de la hauteur.
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.SetMulPath");
UO.SetMulPath("C:\\Ultima Online");Paramètres et déroulement de l’exécution :
- Enregistre la chaîne de chemin mulPath au moment de l'exécution.
UO.SetMulPath("C:\\Ultima Online");Paramètres et déroulement de l’exécution :
- Attribue mulPath = ToString ou la chaîne vide. Le fichier ne s'ouvre pas, les données cartographiques ne sont pas rechargées et la disponibilité du chemin n'est pas vérifiée par cette fonction.
return RunScenario();
object? RunScenario()
{
UO.SetMulPath("");
return null;
}Paramètres et déroulement de l’exécution :
- Il s'agit du stockage de compatibilité du runtime actuel. Il n'y a aucun consommateur dans le projet privé mulPath/showZ ; le changement ne recharge pas les ressources et ne modifie pas l'affichage de la hauteur.
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()
{
ApplyValue("C:\\Ultima Online");
return null;
}
void ApplyValue(dynamic value)
{
UO.SetMulPath(value);
}
}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: pathValue (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.SetMulPath. -
InjectionScript.Runtime.InjectionValue.ToString:pathValue.ToString().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void SetMulPath(InjectionValue pathValue) => mulPath = pathValue.ToString() ?? string.Empty;