Repository navigation
ES UO Topic conversion compatibility
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Inicio · C# · IDE · UO API · A–Z · Ejemplos · Idiomas
Convierte números, serial y formatos de secuencias de comandos heredados. Un nombre compatible puede tener restricciones o una operación explícitamente prohibida; esto se indica en la tarjeta.
| Tema | Comandos y explicaciones |
|---|---|
| Hex / int | UO.Hex2Int · UO.Int2Hex |
| EUO ↔ Injection | UO.EUO2ID · UO.EUO2Type · UO.EUO2Inj · UO.Inj2EUO |
| EasyUO | UO.GetEasyUO · UO.SetEasyUO |
| Conversión de tipo | C# y biblioteca estándar C# y biblioteca estándar C# y biblioteca estándar C# y biblioteca estándar C# y biblioteca estándar · C# y biblioteca estándar |
UO.Hex2Int · UO.Int2Hex · UO.ScanInt · UO.EUO2ID · UO.EUO2Inj · UO.EUO2Type · UO.Inj2EUO
UO.BoxHack · UO.ShutdownWindows
Cada tarjeta de comando tiene varios escenarios independientes: código directo, funciones y clases. A continuación se muestran escenarios breves seleccionados; restricciones y análisis completos están en las cartas.
Parámetros, resultado y todos los escenarios
UO.Print(UO.Int2Hex(1073746484));Parámetros, resultado y todos los escenarios
var value = UO.EUO2ID("B");
UO.Print(Convert.ToString(value));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BoxHack();Imprime un aviso de que ClassicUO no requiere el parche de cliente nativo heredado BoxHack.
No hay parámetros.
void: sin valor de retorno.
- La rama ExecuteLegacyManualAlias solo llama a SystemMessage. No corrige el movimiento, la voz, los contenedores ni el protocolo de red.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.
UO.Print("Calling UO.BoxHack");
UO.BoxHack();Parámetros y flujo de ejecución:
- El mensaje describe la falta de necesidad del parche antiguo.
UO.BoxHack();Parámetros y flujo de ejecución:
- El procedimiento de compatibilidad no cambia el mundo del juego.
return RunScenario();
object? RunScenario()
{
CompatibilityNotice();
return null;
}
void CompatibilityNotice()
{
UO.BoxHack();
}Parámetros y flujo de ejecución:
- Después del mensaje de diagnóstico, la ejecución continúa.
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 mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: Sin parámetros.
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"{name}: obsolete native-client patch; ClassicUO does not require it.").
Código interno de implementación; no es un script independiente.
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);Decodifica la notación literal EasyUO en base 26 con A=0.
-
euo— Cadena/valor de EasyUO. Las letras se convierten a mayúsculas; se omiten los caracteres que no son letras.
int: el valor numérico de 32-bit resultante; Esta no es una cadena hexadecimal.
- Calcula secuencialmente valor=valor*26+(letra-A). El acumulador uint se ejecuta sin control, por lo que el desbordamiento envuelve los bits 32. La cadena vacía y la cadena sin letras dan 0. No busca ningún objeto en el mundo.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.
object? result = UO.EUO2ID("B");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- B codifica el número 1.
var value = UO.EUO2ID("B");
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- El caso no es importante; Se omiten el guión y el signo de exclamación.
return RunScenario();
object? RunScenario()
{
var value = UO.EUO2ID("b-!");
UO.Print(Convert.ToString(value));
return null;
}Parámetros y flujo de ejecución:
- A codifica cero; el resultado no indica el objeto encontrado.
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 mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: euo (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.DecodeEasyUoId:DecodeEasyUoId(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Código interno de implementación; no es un script independiente.
case "euo2id":
case "euo2type": return new InjectionValue(DecodeEasyUoId(Text(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.EUO2Inj(object? easyValue);Decodifica la notación literal EasyUO en base 26 con A=0.
-
easyValue— Cadena/valor de EasyUO. Las letras se convierten a mayúsculas; se omiten los caracteres que no son letras.
string es la cadena hexadecimal de la inyección del serial resultante.
- Calcula secuencialmente valor=valor*26+(letra-A). El acumulador uint se ejecuta sin control, por lo que el desbordamiento envuelve los bits 32. La cadena vacía y la cadena sin letras dan 0. No busca ningún objeto en el mundo.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.
var result = UO.EUO2Inj("B");
UO.Print("EUO2Inj: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- B codifica el número 1.
var value = UO.EUO2Inj("B");
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- El caso no es importante; Se omiten el guión y el signo de exclamación.
return RunScenario();
object? RunScenario()
{
var value = UO.EUO2Inj("b-!");
UO.Print(Convert.ToString(value));
return null;
}Parámetros y flujo de ejecución:
- A codifica cero; el resultado no indica el objeto encontrado.
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 mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: easyValue (Any)
Resultado: string / String.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.EUO2Inj. -
InjectionScript.Runtime.InjectionValue.ToString:easyValue.ToString(). -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(unchecked((int)value)).
Código interno de implementación; no es un script independiente.
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);Decodifica la notación literal EasyUO en base 26 con A=0.
-
euo— Cadena/valor de EasyUO. Las letras se convierten a mayúsculas; se omiten los caracteres que no son letras.
int: el valor numérico de 32-bit resultante; Esta no es una cadena hexadecimal.
- Calcula secuencialmente valor=valor*26+(letra-A). El acumulador uint se ejecuta sin control, por lo que el desbordamiento envuelve los bits 32. La cadena vacía y la cadena sin letras dan 0. No busca ningún objeto en el mundo.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.
object? result = UO.EUO2Type("B");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- B codifica el número 1.
var value = UO.EUO2Type("B");
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- El caso no es importante; Se omiten el guión y el signo de exclamación.
return RunScenario();
object? RunScenario()
{
var value = UO.EUO2Type("b-!");
UO.Print(Convert.ToString(value));
return null;
}Parámetros y flujo de ejecución:
- A codifica cero; el resultado no indica el objeto encontrado.
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 mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: euo (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.DecodeEasyUoId:DecodeEasyUoId(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Código interno de implementación; no es un script independiente.
case "euo2id":
case "euo2type": return new InjectionValue(DecodeEasyUoId(Text(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Hex2Int(object? value);Convierte un valor numérico o texto numérico en un int.
-
value— int, double, double-texto o texto hexadecimal con 0x. Se permiten espacios alrededor de los bordes y del letrero. Las cadenas de alias "self"/"lasttarget" no están permitidas aquí.
int con bits 32; hexadecimal 0xFFFFFFFF da -1. double se trunca a cero con una verificación de rango. Matriz y null en NumberConversions.ToInt da 0.
- A pesar del nombre, se acepta texto decimal. El texto no válido indica FormatException, el tipo no admitido indica InvalidCastException; desbordamiento double: error de conversión.
- El formato inverso es UO.Int2Hex. Una transformación no prueba la existencia de un objeto.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.
var result = UO.Hex2Int("0x40001234");
UO.Print("Hex2Int: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Convierte un valor numérico o texto numérico en un int.
UO.Print(UO.Hex2Int("0x40001234"));Parámetros y flujo de ejecución:
- A pesar del nombre, se acepta texto decimal. El texto no válido indica FormatException, el tipo no admitido indica InvalidCastException; desbordamiento double: error de conversión.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Hex2Int("255"));
UO.Print(UO.Hex2Int("0xFFFFFFFF"));
return null;
}Parámetros y flujo de ejecución:
- El formato inverso es UO.Int2Hex. Una transformación no prueba la existencia de un objeto.
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 mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: value (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Hex2Int. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(value).
Código interno de implementación; no es un script independiente.
public int Hex2Int(InjectionValue value) => NumberConversions.ToInt(value);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Inj2EUO(object? serialValue);Codifica el número de bits 32 serial con las letras A..Z para EasyUO.
-
serialValue: número hasta NumberConversions.ToInt, luego uint sin firmar con bits conservados. Para un alias, primero obtenga GetSerial/Hex2Int.
string son los dígitos base habituales 26 con A=0..Z=25. Cero da "A". Este no es un hexadecimal ni un nombre de objeto.
- El algoritmo inserta la letra A + valor % 26 a la izquierda y divide uint por 26 a cero. Esta es la conversión del proyecto, no el número de columna de Excel A1.
- EUO2Inj realiza la conversión inversa a una cadena hexadecimal. La codificación no crea un objeto y no lo solicita al cliente.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.
var result = UO.Inj2EUO(0);
UO.Print("Inj2EUO: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Codifica el número de bits 32 serial con las letras A..Z para EasyUO.
UO.Print(UO.Inj2EUO(0));Parámetros y flujo de ejecución:
- El algoritmo inserta la letra A + valor % 26 a la izquierda y divide uint por 26 a cero. Esta es la conversión del proyecto, no el número de columna de Excel A1.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Inj2EUO(26));
UO.Print(UO.Inj2EUO(25));
return null;
}Parámetros y flujo de ejecución:
- EUO2Inj realiza la conversión inversa a una cadena hexadecimal. La codificación no crea un objeto y no lo solicita al cliente.
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 mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: serialValue (Any)
Resultado: string / String.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Inj2EUO. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(serialValue).
Código interno de implementación; no es un script independiente.
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);Formatea un int como una cadena serial hexadecimal.
-
value— texto int o numérico/hexadecimal; double se trunca a cero con una comprobación de desbordamiento. No se puede encontrar el alias del objeto.
string "0xXXXXXXXX": ocho dígitos hexadecimales, todos 32 bits int. Un valor negativo se representa en complemento a dos.
- NumberConversions.ToInt realiza la conversión, luego ToHex usa el formato X8. Por ejemplo -1 da "0xFFFFFFFF". El texto numérico no válido provoca un error; Esta no es una prueba de la existencia de serial.
- Para representar un número, la conversión es suficiente; la presencia del objeto se comprueba mediante UO.Exists por separado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.
var result = UO.Int2Hex(1073746484);
UO.Print("Int2Hex: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Formatea un int como una cadena serial hexadecimal.
UO.Print(UO.Int2Hex(1073746484));Parámetros y flujo de ejecución:
- NumberConversions.ToInt realiza la conversión, luego ToHex usa el formato X8. Por ejemplo -1 da "0xFFFFFFFF". El texto numérico no válido provoca un error; Esta no es una prueba de la existencia de serial.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Int2Hex(-1));
return null;
}Parámetros y flujo de ejecución:
- Para representar un número, la conversión es suficiente; la presencia del objeto se comprueba mediante UO.Exists por separado.
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 mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: value (Any)
Resultado: string / String.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Int2Hex. -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(NumberConversions.ToInt(value)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(value).
Código interno de implementación; no es un script independiente.
public string Int2Hex(InjectionValue value) => NumberConversions.ToHex(NumberConversions.ToInt(value));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ScanInt(object? textValue, object? startValue);Encuentra el primer número double/hexadecimal con signo en la cadena, comenzando en la posición.
-
textValue: envía un mensaje de texto a través de ToString. Busca la primera coincidencia de la expresión regular [-+]?(?:0[xX][0-9A-Fa-f]+|\d+). -
startValue— int, posición cero UTF-16. Limitado a 0..text.Length; no indexar desde 1.
int es el primer número de bit 32 reconocido. No hay coincidencia o el número no encaja - 0; un cero real también da 0.
- Regex.Match se aplica a la subcadena (inicio). Si la primera coincidencia no logra convertir TryStr2Int, no se buscan los siguientes números. La parte fraccionaria, como .5, no está incluida en el token numérico.
- Un inicio negativo se convierte en 0, un inicio más allá del final de la línea se convierte en texto.Longitud y el resultado es 0. La línea original no cambia.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.
var result = UO.ScanInt("gold=123", 0);
UO.Print("ScanInt: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Encuentra el primer número double/hexadecimal con signo en la cadena, comenzando en la posición.
UO.Print(UO.ScanInt("gold=123", 0));Parámetros y flujo de ejecución:
- Regex.Match se aplica a la subcadena (inicio). Si la primera coincidencia no logra convertir TryStr2Int, no se buscan los siguientes números. La parte fraccionaria, como .5, no está incluida en el token numérico.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ScanInt("-7 0xFF", 3));
return null;
}Parámetros y flujo de ejecución:
- Un inicio negativo se convierte en 0, un inicio más allá del final de la línea se convierte en texto.Longitud y el resultado es 0. La línea original no cambia.
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 mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: textValue (Any), startValue (Any)
Resultado: int / Integer.
Durante la llamada:
-
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).
Código interno de implementación; no es un script independiente.
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);Siempre rechaza un intento de apagar Windows desde un script.
-
state: el argumento heredado se almacena en la firma, pero no se utiliza: cualquier llamada se bloquea.
No hay un resultado normal: NativeSubrutineException con el mensaje "el cierre de Windows está bloqueado intencionalmente: es posible que los scripts no cierren Windows".
- ExecuteLegacyManualAlias lanza una excepción inmediatamente. No se realiza ningún apagado, reinicio o inicio de un proceso externo.
- Los tres ejemplos muestran deliberadamente llamadas prohibidas y fallan cuando se ejecutan. No pueden utilizarse como condición para un cierre exitoso.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
try { UO.ShutdownWindows(0); }
catch (Exception error) { UO.Print(error.Message); }Parámetros y flujo de ejecución:
- Siempre rechaza un intento de apagar Windows desde un script.
UO.ShutdownWindows(0);Parámetros y flujo de ejecución:
- ExecuteLegacyManualAlias lanza una excepción inmediatamente. No se realiza ningún apagado, reinicio o inicio de un proceso externo.
return RunScenario();
object? RunScenario()
{
UO.ShutdownWindows(1);
return null;
}Parámetros y flujo de ejecución:
- Los tres ejemplos muestran deliberadamente llamadas prohibidas y fallan cuando se ejecutan. No pueden utilizarse como condición para un cierre exitoso.
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 mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: state (Any)
Resultado: void / Unit.
Durante la llamada:
Código interno de implementación; no es un script independiente.
case "shutdownwindows":
throw new NativeSubrutineException("shutdownwindows is intentionally blocked: scripts may not shut down Windows.");ClassicUO — Bad Newbie & C# Scripts IDE