Repository navigation
ES UO Topic magic
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Inicio · C# · IDE · UO API · A–Z · Ejemplos · Idiomas
Hechizos, habilidades y movimiento con magia. Para una acción específica, establezca el objetivo con anticipación y verifique las condiciones de la aplicación.
Abrir catálogo completo y ejemplos
| Tema | Comandos y explicaciones |
|---|---|
| Cast | UO.Cast |
| CastToObject | UO.CastToObject |
| CastAbility | UO.CastAbility |
| Active Spell Ability | UO.IsActiveSpellAbility |
| Spell Timers | UO.TicksSpell |
UO.Cast · UO.CastToObject · UO.CastAbility · UO.IsActiveSpellAbility · UO.TicksSpell
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.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
UO.Print("Choose the character with the spell cursor");
}
else
{
UO.Print("Cure request rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros, resultado y todos los escenarios
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddGate(object? bookSerial);-
bookSeriales un valor de identificador que el script compatible guarda como una entrada de lista heredada. En el tiempo de ejecución actual, el valor se serializa en una cadena; El comando no verifica la existencia de un objeto en el mundo.
void. El equipo no confirma la disponibilidad del libro ni la creación del portal del juego.
- El valor se agrega a la lista
AddGatedel estado de ejecución actual. En ClassicUO, esta lista de compatibilidad no activa una acción de juego y no tiene un captador público documentado para leer.
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.AddGate");
UO.AddGate("0x40012345");Parámetros y flujo de ejecución:
- Guarde la identificación como datos heredados sin abrir la puerta.
UO.AddGate("0x40012345");Parámetros y flujo de ejecución:
- Utilice el valor de la cadena pasada a un script compatible.
return RunScenario();
object? RunScenario()
{
var bookSerial = "0x40012345";
UO.AddGate(bookSerial);
return null;
}Parámetros y flujo de ejecución:
- Escriba el valor en la lista de tiempo de ejecución AddGate.
- La llamada almacena datos de compatibilidad; No usa el libro en el mundo.
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()
{
RememberGateBook("0x40012345");
return null;
}
void RememberGateBook(dynamic bookSerial)
{
UO.AddGate(bookSerial);
}
}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: bookSerial (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::LegacyList:LegacyList(name). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
Código interno de implementación; no es un script independiente.
case "adddir":
case "addfindlist":
case "addgate":
case "addrecall":
case "addstep":
LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddRecall(object? bookSerial);-
bookSeriales un valor de identificador que el script compatible guarda como una entrada de lista heredada. Runtime serializa el valor pasado en una cadena.
void. La llamada no arroja resultado y no confirma la presencia del libro.
- El valor se agrega a la lista
AddRecalldel estado de ejecución actual. En ClassicUO, esta lista de compatibilidad en sí misma no envía comandos del juego y no tiene un captador público documentado para leer.
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.AddRecall");
UO.AddRecall("0x40012345");Parámetros y flujo de ejecución:
- Guarde el valor como datos de compatibilidad, no ejecute Recall.
UO.AddRecall("0x40012345");Parámetros y flujo de ejecución:
- Pase el identificador a través de una variable de cadena.
return RunScenario();
object? RunScenario()
{
var bookSerial = "0x40012345";
UO.AddRecall(bookSerial);
return null;
}3. Cada llamada agrega una entrada separada a AddRecall del tiempo de ejecución actual. - clase de guión
Parámetros y flujo de ejecución:
- Cada llamada agrega una entrada separada a AddRecall del tiempo de ejecución actual.
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.AddRecall("0x40012345");
UO.AddRecall("0x40012346");
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: bookSerial (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::LegacyList:LegacyList(name). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
Código interno de implementación; no es un script independiente.
case "adddir":
case "addfindlist":
case "addgate":
case "addrecall":
case "addstep":
LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Cast(object? spellName);Solicita el uso de un hechizo por su nombre. Exactamente un parámetro: spellName, por ejemplo UO.Cast("Heal"). El objetivo se selecciona por separado: con el mouse usando la mira que aparece o mediante WaitTargetObject antes de Cast. Aceptar una solicitud no confirma un efecto exitoso.
-
spellName- Línea obligatoria: el nombre en inglés del hechizo entre comillas: "Heal", "Cure", "Greater Heal". Los nombres no se traducen junto con la interfaz. El diccionario también reconoce alias integrados y deletrea palabras. El número ID, incluida la cadena "29", el objetivo, la distancia, la notoriedad, maxZ y la espera no son parámetros de Cast. Todos los nombres y escuelas.
int: 1/true—el cliente aceptó la solicitud; 0/false: el nombre no se reconoce o la solicitud se rechaza localmente. Puedes escribir if UO.Cast("Heal") {... } o comparar con 1/true. Estos no son hechizos ID ni pruebas de curación/daño. Un argumento faltante o adicional provoca un error. El comando no espera apuntar y completar el hechizo.
- Forma única: UO.Cast(spellName). No hay argumentos segundos ni posteriores. La búsqueda de un objetivo, la preparación de una respuesta, la espera y la limpieza se realizan mediante comandos separados.
- Para seleccionar manualmente, borre su cola anterior CancelWaitTarget, llame a Cast y haga clic en el objeto deseado con la mira. Cast por sí solo no borra la cola: el script podría haberlo preparado con antelación.
- Para un objetivo automático, primero llame a WaitTargetObject(serial/alias), luego a Cast(nombre). Esta orden le permite responder al objetivo rápido del servidor. Para hechizos sin alcance, no prepares una respuesta.
- El servidor determina la disponibilidad, los recursos, el objetivo válido, el alcance y el efecto del hechizo. Un resultado positivo sólo confirma la aceptación local de la solicitud.
- La cola preparada puede permanecer desatendida si falla el servidor. Elimínelo CancelWaitTarget después de una espera limitada o una falla local. No ejecute otros scripts en paralelo con el objetivo.
- Una solicitud aceptada actualiza TicksSpell. Cast no espera a que HP sea animado, curado o cambiado. El catálogo ID explica el protocolo interno, pero no reemplaza el nombre en el argumento.
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.Cast("Cure");
UO.Print("Cast: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- La cura es el único argumento para Cast. Después del lanzamiento, selecciona el personaje con la vista del juego. Comprueba el fallo del servidor y el resultado del juego.
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
UO.Print("Choose the character with the spell cursor");
}
else
{
UO.Print("Cure request rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros y flujo de ejecución:
- self — argumento WaitTargetObject; Sanar es el único argumento de Cast. 3000: tres segundos para apuntar en este ejemplo, no es garantía de que se complete la curación. Finalmente elimina la respuesta restante y en caso de error.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject("self");
if (Truth(UO.Cast("Heal")))
{
await Delay(3000);
}
}
finally
{
UO.CancelWaitTarget();
}
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;Parámetros y flujo de ejecución:
- spellName, objetivo, cleanupDelayMs: parámetros de su función CastAtObject, no sobrecargar UO.Cast. Internamente, Cast solo acepta spellName. ASC convierte la cadena ID en un número; 4000 — retraso en el borrado de la cola. true significa aceptación de la solicitud, no éxito del tratamiento.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var target = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(await CastAtObject("Greater Heal", target, 4000)))
{
UO.Print("Request sent; verify healing in the game");
}
return null;
}
async Task<dynamic> CastAtObject(dynamic spellName, dynamic target, dynamic cleanupDelayMs)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(target <= 0) || !(Truth(UO.Exists(target))))
{
return false;
}
dynamic accepted = false;
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject(target);
accepted = UO.Cast(spellName);
if (Truth(accepted))
{
await Delay(cleanupDelayMs);
}
}
finally
{
UO.CancelWaitTarget();
}
return accepted;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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 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: spellName (String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Cast. -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\")."). -
InjectionScript.Runtime.InjectionApiUO.CastCore:CastCore(spellName).
Código interno de implementación; no es un script independiente.
public int Cast(string spellName)
{
if (NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _))
{
SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\").");
return 0;
}
return CastCore(spellName) ? 1 : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CastAbility(object? abilityId);Alterna la habilidad actualmente seleccionada del arma actual a través de UseAbility: al llamar nuevamente a una habilidad ya seleccionada se anula su selección.
-
abilityId— Nombre de habilidad o cadena numérica resuelta por ResolveClassicUOAbilityId; el valor desconocido da 0.
int 1 — el cliente llamó a la habilidad primaria/secundaria actual; 0: sin personaje, ID desconocido o la habilidad no coincide con el arma actual.
- 1 describe la aceptación de una solicitud de cliente, en lugar de un éxito o cancelación de recursos por parte del servidor. ID, que no es la habilidad primaria/secundaria actual, devuelve 0 incluso si está en el directorio.
- GameActions.UsePrimaryAbility/UseSecondaryAbility verifique el bit 0x80. Cuando el bit esté apagado, deselecciona la otra opción y envía la habilidad seleccionada; cuando ya esté habilitado, envíe ID 0 para deshabilitarlo. Luego se cambia el bit. Al devolver 1 se confirma la llamada a esta rama del cliente, incluido el cierre.
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.CastAbility(UO.GetAbilityID("Armor Ignore"));
UO.Print("CastAbility: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- La disponibilidad en el catálogo es independiente de la combinación de armas.
var id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
var accepted = UO.CastAbility(id);
UO.Print(Convert.ToString(accepted));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros y flujo de ejecución:
- El nombre se resuelve en ID y se compara con el arma actual.
return RunScenario();
object? RunScenario()
{
var accepted = UO.CastAbility("Armor Ignore");
UO.Print(Convert.ToString(accepted));
return null;
}Parámetros y flujo de ejecución:
- Zero está fuera del directorio y devuelve 0 sin activación.
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 accepted = UO.CastAbility(0);
UO.Print(Convert.ToString(accepted));
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: abilityId (Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseAbility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseAbility:bridge.UseAbility(abilityId).
Código interno de implementación; no es un script independiente.
public int UseAbility(int abilityId) => bridge.UseAbility(abilityId);Parámetros: abilityId (Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseAbility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ResolveAbility:bridge.ResolveAbility(abilityName). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseAbility:bridge.UseAbility(abilityId).
Código interno de implementación; no es un script independiente.
public int UseAbility(string abilityName)
{
int abilityId = bridge.ResolveAbility(abilityName);
return abilityId > 0 ? bridge.UseAbility(abilityId) : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.CastToObject(object? spellName, object? objID);Coloca un objetivo de objeto en espera y envía un hechizo por nombre o numérico ID.
-
spellName- string con el nombre del hechizo, incluyendo un guión bajo en lugar de un espacio, o un ID numérico para puente.Cast. -
objID— Serie del objeto o nombre admitido de self/backpack/lasttarget/objeto guardado; Las cadenas numéricas y las cadenas 0x se resuelven en tiempo de ejecución.
int/boolean result 1: el cliente aceptó la solicitud Cast; 0 — solicitud rechazada. El servidor no confirma el éxito del hechizo.
- La forma de cadena pasa por CastAtTarget; la forma numérica pone WaitTargetObject, luego puente.Cast. Si Cast falla, el objetivo pendiente se cancela. Tras la aceptación, ticksSpell se actualiza.
- El puente rechaza spellId no positivo, sin conexión y con carácter inactivo. El cronómetro marca el envío, no el final del reparto; el resultado del impacto sobre el objeto depende del servidor.
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.CastToObject("Heal", "self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- Heal convierte a self en el objetivo del siguiente cursor del servidor.
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));Parámetros y flujo de ejecución:
- La forma numérica pasa ID 4 al cliente; 1 significa enviar una solicitud.
return RunScenario();
object? RunScenario()
{
var accepted = UO.CastToObject(4, UO.Self());
UO.Print(Convert.ToString(accepted));
return null;
}Parámetros y flujo de ejecución:
- Una verificación de existencia local ayuda a evitar el uso del lasttarget que falta.
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 target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
var accepted = UO.CastToObject("Greater Heal", target);
UO.Print(Convert.ToString(accepted));
}
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 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: spellName (Any), objID (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.CastAtTarget:CastAtTarget(arguments[0], arguments[1]). -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Cast:bridge.Cast(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelTarget:bridge.CancelTarget().
Código interno de implementación; no es un script independiente.
case "casttoobject":
if (arguments[0].Kind == InjectionValueKind.String)
return CastAtTarget(arguments[0], arguments[1]) != 0 ? InjectionValue.True : InjectionValue.False;
WaitTargetObject(Arg(1));
int castAccepted = bridge.Cast(Arg(0));
if (castAccepted != 0)
{
ticksSpell = Timer();
return InjectionValue.True;
}
bridge.CancelTarget();
return InjectionValue.False;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.IsActiveSpellAbility(object? spellName);Comprueba si el servidor ha informado del estado activo de la habilidad/hechizo seleccionado. Útil antes de reactivar una habilidad canalizada. No enciende nada, no lanza ni selecciona un objetivo.
-
spellName: el único parámetro requerido: un nombre en inglés del catálogo de hechizos o el ID completo. Por ejemplo, "Confianza" y 402 representan el mismo hechizo Bushido. El caso no es importante; los guiones bajos en el nombre se reemplazan por espacios. También se reconoce la recta numérica. No pases el carácter ID, el elemento type o el número de habilidad.
int: 1 - el servidor informó el estado activo de este ID; 0: ahora no existe tal estado activo. En C# verifica el resultado numérico: if (UO.IsActiveSpellAbility(402) != 0) { ... }. Este es un signo lógico, no el número, tiempo o resultado del último lanzamiento. Nombre desconocido, ID fuera de 1…65535 y ningún estado resultante también proporciona 0.
- La lista actualiza el paquete del servidor 0xBF/0x25: habilitar agrega ID, deshabilitarlo lo elimina. Funciona sin ventana gráfica y sin botón de hechizo en la pantalla. Cerrar una ventana guarda el estado; romper la conexión la borra. Responder 0 no prueba que el personaje no pueda lanzar el hechizo. El servidor debería enviar este estado; Esta no es una verificación universal para todos los aficionados. Para curación/recuperación instantánea, un ejemplo de este tipo no confirma un lanzamiento exitoso. Este comando no determina la duración del hechizo, el maná restante, la disponibilidad y el éxito.
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.IsActiveSpellAbility(402);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- 402 - ID Confianza. La variable activa contiene 1 o 0; true es equivalente a 1 aquí. El mensaje describe el estado recibido, no el resultado del intento de transmisión.
var active = UO.IsActiveSpellAbility(402);
if (Truth(Truth(active) == true))
{
UO.Print("Confidence is active");
}
else
{
UO.Print("No active Confidence state received");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros y flujo de ejecución:
- "Confianza" - lo mismo ID 402. Cast solo acepta el nombre. La solicitud se envía una vez si no hay ningún estado activo; no garantiza el éxito en el servidor. No ejecute este fragmento en un bucle rápido; la respuesta del servidor puede retrasarse.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsActiveSpellAbility("Confidence") == 0))
{
UO.Cast("Confidence");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros y flujo de ejecución:
- deletrear - nombre o ID; esperado: true para encender, false para apagar; timeoutMs: límite de espera en milisegundos. Main espera hasta 500 ms con comprobaciones cada 25 ms y no emite nada. La función devuelve true si hay una coincidencia; en caso contrario, false. Ésta es una expectativa limitada de un estado local, no una prueba del motivo de su cambio; El tiempo real puede aumentar si el script está en pausa o bajo carga.
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(WaitAbilityState("Confidence", true, 500)))
{
UO.Print("Active state received");
}
else
{
UO.Print("No active state before timeout");
}
return null;
}
dynamic WaitAbilityState(dynamic spell, dynamic expected, dynamic timeoutMs)
{
var elapsed = 0;
while (Truth(elapsed < timeoutMs))
{
if (Truth((UO.IsActiveSpellAbility(spell) == 1) == expected))
{
return true;
}
UO.Wait(25);
elapsed = elapsed + 25;
}
return Truth((UO.IsActiveSpellAbility(spell) == 1) == expected);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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: spellName (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ConvertSpellName:ConvertSpellName(Text(0).Replace('_', ' ')). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsActiveSpell:bridge.IsActiveSpell(spellId.Value).
Código interno de implementación; no es un script independiente.
case "isactivespellability":
{
int? spellId = arguments[0].Kind == InjectionValueKind.String
? ConvertSpellName(Text(0).Replace('_', ' '))
: (int?)Arg(0);
return new InjectionValue(spellId.HasValue ? bridge.IsActiveSpell(spellId.Value) : 0);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksSpell();Lee la marca guardada TicksSpell.
No hay parámetros.
int: marca UO.Timer en décimas de segundo desde el inicio del tiempo de ejecución. 0 - la marca aún no se ha fijado o el evento ocurrió en la primera décima de segundo; No son milisegundos ni tiempo calendario.
- Devuelve el campo ticksSpell. Se actualiza mediante Cast/CastAtTarget aceptado exitosamente; no es una observación automática de todas las actividades manuales/del servidor. El comando en sí no cambia la marca.
- UO.Timer() - la marca calcula la edad en décimas de segundo. Las marcas no se comparan entre diferentes tiempos de ejecución.
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.TicksSpell();
UO.Print("TicksSpell: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Lee la marca guardada TicksSpell.
var stamp = UO.TicksSpell();
UO.Print(stamp);Parámetros y flujo de ejecución:
- Devuelve el campo ticksSpell. Se actualiza mediante Cast/CastAtTarget aceptado exitosamente; no es una observación automática de todas las actividades manuales/del servidor. El comando en sí no cambia la marca.
return RunScenario();
object? RunScenario()
{
var stamp = UO.TicksSpell();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}Parámetros y flujo de ejecución:
- UO.Timer() - la marca calcula la edad en décimas de segundo. Las marcas no se comparan entre diferentes tiempos de ejecución.
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.TicksSpell();
UO.Wait(250);
var after = UO.TicksSpell();
UO.Print(before = after);
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: int / Integer.
Durante la llamada:
Código interno de implementación; no es un script independiente.
public int TicksSpell() => ticksSpell;ClassicUO — Bad Newbie & C# Scripts IDE