Repository navigation
FR UO Topic conversion compatibility
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Accueil · C# · IDE · UO API · A–Z · Exemples · Langues
Convertit les nombres, serial et les formats de script hérités. Un nom compatible peut avoir des restrictions ou une opération explicitement interdite - ceci est indiqué sur la carte.
| Sujet | Commandes et explications |
|---|---|
| Hex / int | UO.Hex2Int · UO.Int2Hex |
| EUO ↔ Injection | UO.EUO2ID · UO.EUO2Type · UO.EUO2Inj · UO.Inj2EUO |
| EasyUO | UO.GetEasyUO · UO.SetEasyUO |
| Conversion de types | C# et bibliothèque standard C# et bibliothèque standard C# et bibliothèque standard C# et bibliothèque standard C# et bibliothèque standard · C# et bibliothèque standard |
UO.Hex2Int · UO.Int2Hex · UO.ScanInt · UO.EUO2ID · UO.EUO2Inj · UO.EUO2Type · UO.Inj2EUO
UO.BoxHack · UO.ShutdownWindows
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
UO.Print(UO.Int2Hex(1073746484));Paramètres, résultat et tous les scénarios
var value = UO.EUO2ID("B");
UO.Print(Convert.ToString(value));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BoxHack();Imprime un avis indiquant que le correctif client natif existant BoxHack n'est pas requis par ClassicUO.
Il n'y a pas de paramètres.
void - aucune valeur de retour.
- La branche ExecuteLegacyManualAlias appelle uniquement SystemMessage. Il ne corrige pas le mouvement, la parole, les conteneurs ou le protocole réseau.
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.BoxHack");
UO.BoxHack();Paramètres et déroulement de l’exécution :
- Le message décrit le manque de besoin de l'ancien correctif.
UO.BoxHack();Paramètres et déroulement de l’exécution :
- La procédure de compatibilité ne change pas le monde du jeu.
return RunScenario();
object? RunScenario()
{
CompatibilityNotice();
return null;
}
void CompatibilityNotice()
{
UO.BoxHack();
}Paramètres et déroulement de l’exécution :
- Après le message de diagnostic, l'exécution continue.
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.BoxHack();
UO.Print("continued");
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. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"{name}: obsolete native-client patch; ClassicUO does not require it.").
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "boxhack":
case "fixtalk":
case "fixwalk":
SystemMessage($"{name}: obsolete native-client patch; ClassicUO does not require it.");
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.EUO2ID(object? euo);Décode la notation littérale EasyUO en base 26 avec A=0.
-
euo— Chaîne/valeur EasyUO. Les lettres sont converties en majuscules ; les caractères autres que des lettres sont ignorés.
int — la valeur numérique 32-bit résultante ; ce n'est pas une chaîne hexadécimale.
- Calcule séquentiellement valeur=valeur*26+(lettre-A). L'accumulateur uint fonctionne sans contrôle, donc le débordement s'enroule autour des bits 32. La chaîne vide et la chaîne sans lettres donnent 0. Ne cherche aucun objet dans le monde.
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.EUO2ID("B");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- B code le nombre 1.
var value = UO.EUO2ID("B");
UO.Print(Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le cas n’est pas important ; Le trait d'union et le point d'exclamation sont ignorés.
return RunScenario();
object? RunScenario()
{
var value = UO.EUO2ID("b-!");
UO.Print(Convert.ToString(value));
return null;
}Paramètres et déroulement de l’exécution :
- Un code zéro ; le résultat n'indique pas l'objet trouvé.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.EUO2ID("A");
UO.Print(Convert.ToString(value));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: euo (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.DecodeEasyUoId:DecodeEasyUoId(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "euo2id":
case "euo2type": return new InjectionValue(DecodeEasyUoId(Text(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.EUO2Inj(object? easyValue);Décode la notation littérale EasyUO en base 26 avec A=0.
-
easyValue— Chaîne/valeur EasyUO. Les lettres sont converties en majuscules ; les caractères autres que des lettres sont ignorés.
string est la chaîne hexadécimale de l'injection du serial résultant.
- Calcule séquentiellement valeur=valeur*26+(lettre-A). L'accumulateur uint fonctionne sans contrôle, donc le débordement s'enroule autour des bits 32. La chaîne vide et la chaîne sans lettres donnent 0. Ne cherche aucun objet dans le monde.
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.EUO2Inj("B");
UO.Print("EUO2Inj: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- B code le nombre 1.
var value = UO.EUO2Inj("B");
UO.Print(Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le cas n’est pas important ; Le trait d'union et le point d'exclamation sont ignorés.
return RunScenario();
object? RunScenario()
{
var value = UO.EUO2Inj("b-!");
UO.Print(Convert.ToString(value));
return null;
}Paramètres et déroulement de l’exécution :
- Un code zéro ; le résultat n'indique pas l'objet trouvé.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.EUO2Inj("A");
UO.Print(Convert.ToString(value));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: easyValue (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.EUO2Inj. -
InjectionScript.Runtime.InjectionValue.ToString:easyValue.ToString(). -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(unchecked((int)value)).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string EUO2Inj(InjectionValue easyValue)
{
uint value = 0;
foreach (char c in easyValue.ToString().ToUpperInvariant())
{
if (c < 'A' || c > 'Z')
continue;
value = unchecked(value * 26 + (uint)(c - 'A'));
}
return NumberConversions.ToHex(unchecked((int)value));
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.EUO2Type(object? euo);Décode la notation littérale EasyUO en base 26 avec A=0.
-
euo— Chaîne/valeur EasyUO. Les lettres sont converties en majuscules ; les caractères autres que des lettres sont ignorés.
int — la valeur numérique 32-bit résultante ; ce n'est pas une chaîne hexadécimale.
- Calcule séquentiellement valeur=valeur*26+(lettre-A). L'accumulateur uint fonctionne sans contrôle, donc le débordement s'enroule autour des bits 32. La chaîne vide et la chaîne sans lettres donnent 0. Ne cherche aucun objet dans le monde.
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.EUO2Type("B");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- B code le nombre 1.
var value = UO.EUO2Type("B");
UO.Print(Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le cas n’est pas important ; Le trait d'union et le point d'exclamation sont ignorés.
return RunScenario();
object? RunScenario()
{
var value = UO.EUO2Type("b-!");
UO.Print(Convert.ToString(value));
return null;
}Paramètres et déroulement de l’exécution :
- Un code zéro ; le résultat n'indique pas l'objet trouvé.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.EUO2Type("A");
UO.Print(Convert.ToString(value));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: euo (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.DecodeEasyUoId:DecodeEasyUoId(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "euo2id":
case "euo2type": return new InjectionValue(DecodeEasyUoId(Text(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Hex2Int(object? value);Convertit une valeur numérique ou un texte numérique en int.
-
value— int, double, double-texte ou texte hexadécimal avec 0x. Les espaces sur les bords et le panneau sont autorisés. Les chaînes d'alias "self"/"lasttarget" ne sont pas autorisées ici.
int avec les bits 32 ; l'hexagone 0xFFFFFFFF donne -1. double est tronqué à zéro avec une vérification de plage. Tableau et null dans NumberConversions.ToInt donnent 0.
- Malgré le nom, le texte décimal est accepté. Un texte invalide donne FormatException, le type non pris en charge donne InvalidCastException ; double débordement : erreur de conversion.
- Le formatage inversé est UO.Int2Hex. Une transformation ne prouve pas l'existence d'un objet.
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.Hex2Int("0x40001234");
UO.Print("Hex2Int: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Convertit une valeur numérique ou un texte numérique en int.
UO.Print(UO.Hex2Int("0x40001234"));Paramètres et déroulement de l’exécution :
- Malgré le nom, le texte décimal est accepté. Un texte invalide donne FormatException, le type non pris en charge donne InvalidCastException ; double débordement : erreur de conversion.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Hex2Int("255"));
UO.Print(UO.Hex2Int("0xFFFFFFFF"));
return null;
}Paramètres et déroulement de l’exécution :
- Le formatage inversé est UO.Int2Hex. Une transformation ne prouve pas l'existence d'un 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 = UO.Hex2Int("0x000000FF");
UO.Print(UO.Int2Hex(number));
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: value (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Hex2Int. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(value).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int Hex2Int(InjectionValue value) => NumberConversions.ToInt(value);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Inj2EUO(object? serialValue);Encode le numéro de bit 32 serial avec les lettres A..Z pour EasyUO.
-
serialValue— Numéro jusqu'à NumberConversions.ToInt, puis uint non signé avec les bits conservés. Pour un alias, obtenez d'abord GetSerial/Hex2Int.
string sont les chiffres de base habituels 26 avec A=0..Z=25. Zéro donne "A". Ce n'est pas un hexadécimal ou un nom d'objet.
- L'algorithme insère la lettre A + valeur % 26 à gauche et divise uint par 26 à zéro. Il s'agit de la propre conversion du projet, et non du numéro de colonne Excel A1.
- EUO2Inj effectue la conversion inverse en chaîne hexadécimale. L'encodage ne crée pas d'objet et ne le demande pas au client.
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.Inj2EUO(0);
UO.Print("Inj2EUO: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Encode le numéro de bit 32 serial avec les lettres A..Z pour EasyUO.
UO.Print(UO.Inj2EUO(0));Paramètres et déroulement de l’exécution :
- L'algorithme insère la lettre A + valeur % 26 à gauche et divise uint par 26 à zéro. Il s'agit de la propre conversion du projet, et non du numéro de colonne Excel A1.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Inj2EUO(26));
UO.Print(UO.Inj2EUO(25));
return null;
}Paramètres et déroulement de l’exécution :
- EUO2Inj effectue la conversion inverse en chaîne hexadécimale. L'encodage ne crée pas d'objet et ne le demande pas au client.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.Hex2Int("0x40001234");
var encoded = UO.Inj2EUO(value);
UO.Print(encoded);
UO.Print(UO.EUO2Inj(encoded));
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: serialValue (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Inj2EUO. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(serialValue).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string Inj2EUO(InjectionValue serialValue)
{
uint value = unchecked((uint)NumberConversions.ToInt(serialValue));
if (value == 0)
return "A";
var result = new StringBuilder();
while (value > 0)
{
result.Insert(0, (char)('A' + value % 26));
value /= 26;
}
return result.ToString();
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Int2Hex(object? value);Formate int sous forme de chaîne hexadécimale serial.
-
value- int ou texte numérique/hexadécimal ; double est tronqué à zéro avec un contrôle de débordement. L'alias de l'objet est introuvable.
string "0xXXXXXXX" : huit chiffres hexadécimaux, tous 32 bits int. Une valeur négative est représentée en complément à deux.
- NumberConversions.ToInt effectue la conversion, puis ToHex utilise le format X8. Par exemple -1 donne "0xFFFFFFFF". Un texte numérique non valide provoque une erreur ; ce n'est pas un test pour l'existence de serial.
- Pour représenter un nombre, la conversion suffit ; la présence de l'objet est vérifiée par UO.Exists 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.
var result = UO.Int2Hex(1073746484);
UO.Print("Int2Hex: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Formate int sous forme de chaîne hexadécimale serial.
UO.Print(UO.Int2Hex(1073746484));Paramètres et déroulement de l’exécution :
- NumberConversions.ToInt effectue la conversion, puis ToHex utilise le format X8. Par exemple -1 donne "0xFFFFFFFF". Un texte numérique non valide provoque une erreur ; ce n'est pas un test pour l'existence de serial.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Int2Hex(-1));
return null;
}Paramètres et déroulement de l’exécution :
- Pour représenter un nombre, la conversion suffit ; la présence de l'objet est vérifiée par UO.Exists séparément.
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 encoded = UO.Int2Hex(255);
UO.Print(encoded);
UO.Print(UO.Hex2Int(encoded));
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: value (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Int2Hex. -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(NumberConversions.ToInt(value)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(value).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string Int2Hex(InjectionValue value) => NumberConversions.ToHex(NumberConversions.ToInt(value));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ScanInt(object? textValue, object? startValue);Recherche le premier nombre double/hex signé dans la chaîne, en commençant à la position.
-
textValue— Texte via ToString. Recherche la première correspondance de l'expression régulière [-+]?(?:0[xX][0-9A-Fa-f]+|\d+). -
startValue— int, position zéro UTF-16. Limité à 0..text.Length ; pas d'index de 1.
int est le premier nombre de bits 32 reconnu. Il n'y a pas de correspondance ou le numéro ne correspond pas - 0 ; un vrai zéro donne aussi 0.
- Regex.Match est appliqué à Substring (start). Si la première correspondance ne parvient pas à convertir TryStr2Int, les nombres suivants ne sont pas recherchés. La partie fractionnaire, telle que .5, n'est pas incluse dans le jeton numérique.
- Un début négatif devient 0, un début au-delà de la fin de la ligne devient text.Length et le résultat est 0. La ligne originale ne change pas.
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.ScanInt("gold=123", 0);
UO.Print("ScanInt: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Recherche le premier nombre double/hex signé dans la chaîne, en commençant à la position.
UO.Print(UO.ScanInt("gold=123", 0));Paramètres et déroulement de l’exécution :
- Regex.Match est appliqué à Substring (start). Si la première correspondance ne parvient pas à convertir TryStr2Int, les nombres suivants ne sont pas recherchés. La partie fractionnaire, telle que .5, n'est pas incluse dans le jeton numérique.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ScanInt("-7 0xFF", 3));
return null;
}Paramètres et déroulement de l’exécution :
- Un début négatif devient 0, un début au-delà de la fin de la ligne devient text.Length et le résultat est 0. La ligne originale ne change pas.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var text = "count=0x20";
var amount = UO.ScanInt(text, 6);
UO.Print(amount);
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: textValue (Any), startValue (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ScanInt. -
InjectionScript.Runtime.InjectionValue.ToString:textValue.ToString(). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(startValue). -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int(match.Value, out int value).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int ScanInt(InjectionValue textValue, InjectionValue startValue)
{
string text = textValue.ToString() ?? string.Empty;
int start = Math.Max(0, Math.Min(text.Length, NumberConversions.ToInt(startValue)));
Match match = Regex.Match(text.Substring(start), @"[-+]?(?:0[xX][0-9A-Fa-f]+|\d+)", RegexOptions.CultureInvariant);
return match.Success && NumberConversions.TryStr2Int(match.Value, out int value) ? value : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ShutdownWindows(object? state);Rejette toujours une tentative d’arrêt de Windows à partir d’un script.
-
state- L'argument hérité est stocké dans la signature, mais n'est pas utilisé : tout appel est bloqué.
Il n'y a pas de résultat normal : NativeSubrutineException avec le message "shutdownwindows est intentionnellement bloqué : les scripts ne peuvent pas arrêter Windows."
- ExecuteLegacyManualAlias lève immédiatement une exception. Aucun arrêt, redémarrage ou lancement d'un processus externe n'est effectué.
- Les trois exemples montrent délibérément des appels interdits et échouent lors de leur exécution. Ils ne peuvent pas être utilisés comme condition d’un arrêt réussi.
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.
try { UO.ShutdownWindows(0); }
catch (Exception error) { UO.Print(error.Message); }Paramètres et déroulement de l’exécution :
- Rejette toujours une tentative d’arrêt de Windows à partir d’un script.
UO.ShutdownWindows(0);Paramètres et déroulement de l’exécution :
- ExecuteLegacyManualAlias lève immédiatement une exception. Aucun arrêt, redémarrage ou lancement d'un processus externe n'est effectué.
return RunScenario();
object? RunScenario()
{
UO.ShutdownWindows(1);
return null;
}Paramètres et déroulement de l’exécution :
- Les trois exemples montrent délibérément des appels interdits et échouent lors de leur exécution. Ils ne peuvent pas être utilisés comme condition d’un arrêt réussi.
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.Print("The next command is expected to fail");
UO.ShutdownWindows(0);
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: state (Any)
Résultat: void / Unit.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "shutdownwindows":
throw new NativeSubrutineException("shutdownwindows is intentionally blocked: scripts may not shut down Windows.");ClassicUO — Bad Newbie & C# Scripts IDE