Repository navigation
ES UO Topic items Part 2
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Inicio · C# · IDE · UO API · A–Z · Ejemplos · Idiomas
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.MoveItem(object? id);
int UO.MoveItem(object? id, object? amount);
int UO.MoveItem(object? id, object? amount, object? targetContainer);
int UO.MoveItem(object? item, object? amount, object? container, object? x);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y);
int UO.MoveItem(object? id, object? amount, object? targetContainer, object? x, object? y, object? z);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y, object? z, object? timeout);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y, object? z, object? timeout, object? waitConfirmation);Transporta un artículo/pila específico mediante serial: capturado y arrojado a un contenedor o al suelo.
-
id— Serie de un elemento/carácter específico: número, cadena hexadecimal/decimal, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus o nombre guardado AddObject. Esto no es type. El objeto debe estar cargado; marque Exists antes de actuar. -
item— Serie de un elemento/carácter específico: número, cadena hexadecimal/decimal, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus o nombre guardado AddObject. Esto no es type. El objeto debe estar cargado; marque Exists antes de actuar. -
amount: número de unidades dentro de una pila. 0 o un valor negativo significa toda la pila; lo positivo está limitado por la cantidad disponible. NO es la cantidad de pilas lo que limita MassMove. El valor predeterminado es 0. -
targetContainer— Serie del contenedor o nombre del conjunto AddObject; backpack/self/my elige una mochila, receiving/catchbag - SetCatchBag, y sin ella una mochila. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus son válidos cuando se resuelven en el contenedor correcto. ground o 0 selecciona explícitamente tierra; -1—el mismo selector de mochila. Un nombre desconocido o no especificado provoca un error antes de capturar el elemento. Sin un argumento de destino, se utiliza la mochila. -
container— Serie del contenedor o nombre del conjunto AddObject; backpack/self/my elige una mochila, receiving/catchbag - SetCatchBag, y sin ella una mochila. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus son válidos cuando se resuelven en el contenedor correcto. ground o 0 selecciona explícitamente tierra; -1—el mismo selector de mochila. Un nombre desconocido o no especificado provoca un error antes de capturar el elemento. Sin un argumento de destino, se utiliza la mochila. -
x— Con un contenedor — X en el gump, predeterminado 65535 (automático). Cuando está en tierra: mundo X, personaje predeterminado X. -
y— Y en el gump o mundo Y; El valor predeterminado es 65535 para contenedor o el carácter Y para tierra. -
z— Altura, por defecto 0 en un contenedor o Z de un personaje en el suelo. -
timeout— Séptimo argumento: espera máxima en ms, valor predeterminado 1000; un valor negativo equivale a 0. Solo se usa con el octavo waitConfirmation=true. -
waitConfirmation— Octavo argumento: true/1 incluye la expectativa de un cambio observado en el mundo; false/0 (predeterminado) devuelve el resultado de enviar una solicitud.
int 1: el cliente aceptó la solicitud de captura y reinicio; 0: no se pudo completar la solicitud. Cuando waitConfirmation=true se requiere adicionalmente un cambio observable en el contenedor/coordenadas o una disminución en la pila original. Este no es el serial de la nueva pila ni el número de elementos transferidos. El servidor puede negarse a funcionar.
El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.
- Se admiten argumentos de todas las longitudes desde 1 hasta 8. Dado x, puede omitir y/z: para ellos se utilizan los valores predeterminados descritos.
- El nombre del destino conocido se resuelve antes de la captura. Para tierra, use ground/0 explícitamente; un error tipográfico en el nombre no debería tirar el artículo al suelo.
- El artículo puede estar en un cofre, bolso o mochila: ground establece el destino en el suelo, independientemente del contenedor original. El primer argumento especifica el serial del artículo en sí, no el cofre o type. El equipo realiza el tackle por sí mismo; No es necesario agarrar primero el elemento con el mouse.
- Cuando se activa DropCheckCoord, se rechaza el vertido al suelo más allá de dos celdas. El servidor comprueba además la disponibilidad de espacio. X/Y son celdas de mapa, no píxeles de goma; Z: altura de la superficie seleccionada, incluido el negativo. Para un contenedor, X/Y sigue significando la ubicación dentro de su goma.
- La espera de confirmación utiliza el estado del mundo del cliente: para una pila parcial - una disminución en la cantidad, para una totalidad - un contenedor, para el suelo otro X/Y/Z. Dentro del contenedor, esta expectativa no confirma la ubicación exacta del gump; La desaparición/fusión de pilas puede complicar la verificación.
- Esto no es una confirmación de una transacción separada ID. Si el artículo ya estaba en el mismo contenedor, hacer coincidir el contenedor no prueba un nuevo movimiento dentro del gump.
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.MoveItem("lasttarget");
UO.Print("MoveItem: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- botín - nombre AddObject; Falta cantidad e igual a 0, el destino es mochila.
- Se transfiere un elemento/pila, no todos los elementos de un tipo determinado.
var ok = UO.MoveItem("loot");
UO.Print("Move request: " + Convert.ToString(ok));Parámetros y flujo de ejecución:
- cantidad=10 unidades de una pila, cofre es el nombre del contenedor, x/y=60/70 dentro del gump, z=0.
- La cantidad no tiene el valor de "diez pilas" adoptado por MassMove.
return RunScenario();
object? RunScenario()
{
var ok = UO.MoveItem("loot", 10, "chest", 60, 70, 0);
return null;
}Parámetros y flujo de ejecución:
- ground selecciona explícitamente la tierra; Los X/Y/Z que faltan se toman del personaje.
- Para otro punto, pase sus coordenadas mundiales, teniendo en cuenta el rango y DropCheckCoord.
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 ok = UO.MoveItem("loot", 0, "ground");
return null;
}
}Parámetros y flujo de ejecución:
- ground_item: guardado serial del elemento seleccionado en un cofre abierto. El cofre original no se pasa como un parámetro separado. cantidad=0 toma toda la pila; por ejemplo, 10 ocupará hasta diez unidades de esta pila.
- ground selecciona claramente el terreno. x/y — coordenadas absolutas de la celda situada una celda a lo largo de X del carácter; z se toma del carácter y es adecuado si la superficie adyacente está a la misma altura. En una escalera, mesa u otro piso, establezca el Z real de la superficie deseada.
- sent=1 significa enviar una solicitud por parte del cliente; sin el octavo parámetro, no se espera la confirmación del servidor. El valor 0 significa que la solicitud falló. Esta es la bandera numérica int 1/0: cheque enviado != 0 o enviado == 0; la comparación con bool no es válida.
- Para restablecer directamente a tus pies, UO.MoveItem('ground_item', 0, 'ground') es suficiente: las tres coordenadas se tomarán del personaje. Para colocarlo dentro de un cofre, en lugar de ground, especifique serial/el nombre del cofre y las coordenadas de su gump.
UO.AddObject("ground_item");
var x = UO.GetX() + 1;
var y = UO.GetY();
var z = UO.GetZ();
var sent = UO.MoveItem("ground_item", 0, "ground", x, y, z);
if (Truth(sent == 1))
{
UO.Print("Ground move request sent");
}
else
{
UO.Print("Ground move request was not sent");
}
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:
- timeout=1500 ms se usa porque waitConfirmation=true. x/y=-1 — lugar automático.
- 0 puede indicar un tiempo de espera para una solicitud que ya se ha enviado. No repita la transferencia a ciegas; Primero verifique el estado actual del artículo.
return RunScenario();
object? RunScenario()
{
var ok = UO.MoveItem("loot", 0, "backpack", -1, -1, 0, 1500, true);
if (Truth(ok == 0))
{
UO.Print("Move was rejected or not confirmed");
}
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: id (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id }).
Código interno de implementación; no es un script independiente.
public int MoveItem(InjectionValue id)
=> CompactMoveItem(new[] { id });Parámetros: id (Any), amount (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount }).
Código interno de implementación; no es un script independiente.
public int MoveItem(InjectionValue id, InjectionValue amount)
=> CompactMoveItem(new[] { id, amount });Parámetros: id (Any), amount (Any), targetContainer (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount, targetContainer }).
Código interno de implementación; no es un script independiente.
public int MoveItem(InjectionValue id, InjectionValue amount, InjectionValue targetContainer)
=> CompactMoveItem(new[] { id, amount, targetContainer });Parámetros: item (Any), amount (Any), container (Any), x (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactMoveItem(values))Parámetros: item (Any), amount (Any), container (Any), x (Any), y (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactMoveItem(values))Parámetros: id (Any), amount (Any), targetContainer (Any), x (Any), y (Any), z (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount, targetContainer, x, y, z }).
Código interno de implementación; no es un script independiente.
public int MoveItem(InjectionValue id, InjectionValue amount, InjectionValue targetContainer, InjectionValue x, InjectionValue y, InjectionValue z)
=> CompactMoveItem(new[] { id, amount, targetContainer, x, y, z });Parámetros: item (Any), amount (Any), container (Any), x (Any), y (Any), z (Any), timeout (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactMoveItem(values))
UO.MoveItem(item, amount, container, x, y, z, timeout, waitConfirmation) — UO.MoveItem(Any,Any,Any,Any,Any,Any,Any,Any)
Parámetros: item (Any), amount (Any), container (Any), x (Any), y (Any), z (Any), timeout (Any), waitConfirmation (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactMoveItem(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MoveItems(object? container, object? itemsType, object? itemsColor, object? moveIntoID, object? x, object? y, object? z, object? delayMS);Transfiere todos los artículos adecuados directamente de un contenedor a otro o al suelo. Los elementos se seleccionan mediante graphic y hue; cada pila se transfiere por completo. Se trata de cargar cosas, no de caminar con personajes o de activar interactivamente MassMove.
-
container: número de serie del contenedor de origen, como backpack, "backpack", nombre AddObject o hexadecimal-ID. El contenido ya debe estar descargado. 0 no es una fuente válida; ground no selecciona cosas relacionadas con el personaje. Para una mochila, use backpack en lugar de self. -
itemsType- Elemento gráfico, por ejemplo 0x0EED - oro. Ni ID cosas ni mobile cuerpo. Número negativo o 0xFFFF: todos los tipos. No se acepta máscara de tipo/matriz. -
itemsColor— Tono de cosas. -1 (u otro número negativo) y 0xFFFF - cualquiera; 0 - solo hue 0. Ni serial ni notoriedad. -
moveIntoID: Serie del contenedor de destino o alias del objeto. Para tu mochila - backpack. Para terrenos: el número 0 (también ground/"ground"/UO.Ground()). El origen y el destino deben ser diferentes. -1 no es la abreviatura de backpack en este comando. Self - serial mobile en lugar de reemplazar automáticamente su mochila. -
x— Para un contenedor distinto de cero, la posición DENTRO de su goma; -1,-1 deja la ubicación al servidor. En tierra: coordenadas mundiales 0..65535, ambas son obligatorias y no negativas. Ni los píxeles de la pantalla del mundo del juego ni el punto final de la ruta. -
y— Para un contenedor distinto de cero, la posición DENTRO de su goma; -1,-1 deja la ubicación al servidor. En tierra: coordenadas mundiales 0..65535, ambas son obligatorias y no negativas. Ni los píxeles de la pantalla del mundo del juego ni el punto final de la ruta. -
z— Altura del mundo cuando se coloca en el suelo; utilice la altitud real del sitio (rango de protocolo -128..127). En el ejemplo del contenedor, indique 0. Este no es un índice de capa de equipo. -
delayMS: retraso entre solicitudes aceptadas en milisegundos. En realidad, max(GrabDelay, max(0, DelayMS)); También hay una espera después de la última transferencia enviada. 350 no significa elementos 350 y no garantiza la confirmación en 350 ms.
¿Registro object? en realidad devuelve int 1/true si se acepta al menos una solicitud de transferencia; en caso contrario, 0/false. Esto no es una cantidad de elementos ni una garantía de que TODAS las coincidencias se transferirán. Verifique el contenido después de que el servidor responda. Una cancelación de emergencia aborta el trámite y no es necesario regresar false.
- Se requieren los ocho argumentos. Una vez se crea una lista de hijos directos del contenedor original; No hay recorrido recursivo. Una vez que una bolsa se incluye en la lista, se mueve como un solo artículo junto con su contenido, en lugar de descomprimirla.
- Toma toda la pila actual de cada partido. Este comando no establece el límite en la cantidad de artículos o unidades; para tales escenarios, consulte UO.MassMove. Ignore no se utiliza como filtro adicional para esta muestra.
- Antes de cada acción, vuelve a comprobar que el artículo todavía está en su envase original. La prohibición de anidar un contenedor en sí mismo/descendiente y la falta de disponibilidad del artículo pueden dar lugar a una omisión. Una cola no es una transacción: las acciones ya enviadas no se revierten.
- Si fuente=0, fuente/destino idéntico o tierra con X/Y negativo, devuelve 0 e informa un error. El servidor determina la resolución, el alcance, la capacidad y el resultado final. No realice otras operaciones con elementos elevados al mismo tiempo.
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.MoveItems("lasttarget", 0x0EED, -1, "backpack", -1, -1, 0, 350);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- 0x0EED - type oro; -1 a ItemsColor - cualquier hue. -1,-1 después de backpack es la posición automática en el gump, no en el suelo. 350 ms: el retraso mínimo deseado, teniendo en cuenta GrabDelay. Todas las pilas de oro seguidas se toman enteras.
var source = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(source == 0) || Truth(source == UO.Backpack()) || !(Truth(UO.Exists(source))))
{
return null;
}
var sent = UO.MoveItems(source, 0x0EED, -1, "backpack", -1, -1, 0, 350);
if (Truth(Truth(sent) == false))
{
UO.Print("No gold transfer request was 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; }
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:
- 0x0E21 - vendajes, no el cuerpo humano. backpack es el origen, el destino es serial del cofre. Todos los partidos están dirigidos a un punto 30,40; el servidor puede fusionar las pilas o ajustar la posición.
return RunScenario();
object? RunScenario()
{
var destination = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(destination == 0) || Truth(destination == UO.Backpack()) || !(Truth(UO.Exists(destination))))
{
return null;
}
var sent = UO.MoveItems("backpack", 0x0E21, -1, destination, 30, 40, 0, 350);
if (Truth(sent != 0))
{
UO.Print("Transfer requested; verify the destination contents");
}
return null;
}
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;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;3. Coloque todas las pilas rectas del type seleccionado una al lado de la otra en el suelo - clase de escenario
Parámetros y flujo de ejecución:
- itemType especifica el tipo, no la cantidad; todas sus pilas rectas se llevan en una mochila. X+1/Y/Z es un ejemplo de un punto adyacente a la misma altura: para una pendiente/pared, seleccione la coordenada correcta. Se requiere la asignación 0 para el modo mundial. true solo indica una solicitud aceptada, no una mochila liberada.
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(DropTypeBesideMe(0x0EED))))
{
UO.Print("No ground drop request was accepted");
}
return null;
}
dynamic DropTypeBesideMe(dynamic itemType)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return false;
}
var x = UO.GetX() + 1;
var y = UO.GetY();
var z = UO.GetZ();
return UO.MoveItems("backpack", itemType, -1, 0, x, y, z, 350);
}
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.
UO.MoveItems(container, itemsType, itemsColor, moveIntoID, x, y, z, delayMS) — UO.MoveItems(Any,Any,Any,Any,Any,Any,Any,Any)
Parámetros: container (Any), itemsType (Any), itemsColor (Any), moveIntoID (Any), x (Any), y (Any), z (Any), delayMS (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MoveItems:bridge.MoveItems(Arg(0), ResolveType(arguments[1]), Arg(2), Arg(3), Arg(4), Arg(5), Arg(6), Arg(7)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
Código interno de implementación; no es un script independiente.
case "moveitems": return new InjectionValue(bridge.MoveItems(Arg(0), ResolveType(arguments[1]), Arg(2), Arg(3), Arg(4), Arg(5), Arg(6), Arg(7)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Name();Lee el nombre del personaje.
No hay parámetros.
string es un nombre conocido por el cliente. Una cadena vacía significa un valor vacío/desconocido o ningún objeto. Esto no es serial ni una ruta de perfil. El nombre/título del juego no está traducido al idioma IDE.
- Se leen los datos locales ya recibidos. La solicitud no abre el estado y no obliga al servidor a enviar una actualización. Después de la muerte, la transición del mapa o la eliminación de un objeto, los valores pueden cambiar entre dos llamadas.
- 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.
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.Name();
UO.Print("Name: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- No hay parámetros: se lee self.
- La cadena vacía se maneja explícitamente; este no es el texto "0".
var text = UO.Name();
if (Truth(text != ""))
{
UO.Print(text);
}
else
{
UO.Print("Text is unavailable");
}
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:
- Se lee su carácter, el valor se almacena como una línea.
- El operador + une cadenas; Convert.ToString no es necesario para este resultado.
return RunScenario();
object? RunScenario()
{
var text = UO.Name();
UO.Print("Player имя: " + text);
return null;
}Parámetros y flujo de ejecución:
- Ambas llamadas se refieren a self; UO.Wait establece la pausa 1000 ms.
- La diferencia puede significar actualizar datos o abandonar el mundo. El ejemplo no cambia el nombre ni el título.
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 previous = UO.Name();
await Delay(1000);
var current = UO.Name();
if (Truth(previous != current))
{
UO.Print("Updated text: " + current);
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue 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: string / String.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Name]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
() => bridge.GetName(bridge.Self)Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Picking();Comprueba si el cursor del cliente está ocupado por un elemento recogido.
No hay parámetros.
int 1 - ItemHold.Conjunto habilitado; 0 - no instalado. Este es un estado del cliente, no ID o confirmación de entrega del servidor. Se tiene en cuenta un objeto recogido por un ratón u otro script.
El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.
- La lectura no recoge ni deja caer un objeto.
- Para su propia transferencia, verifique también el resultado Drag/DragItem; El cursor ocupado de otra persona no significa que el elemento deseado se haya tomado con é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.
var result = UO.Picking();
UO.Print("Picking: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- No hay argumentos.
- Se muestra 1 o 0.
UO.Print(Convert.ToString(UO.Picking()));Parámetros y flujo de ejecución:
- Un argumento Drag significa toda la pila y el tiempo de espera =0.
- Picking comprueba el cursor compartido del cliente. No ejecute dos migraciones independientes al mismo tiempo.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Picking() == 0))
{
if (Truth(UO.Drag("loot")))
{
var dropped = UO.DropItem("backpack", -1, -1, 0);
}
}
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:
- La comprobación se repite hasta veinte veces con pausas de 50 ms.
- El comando no suelta el cursor ni cancela el movimiento de otra persona.
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 tries = 0;
while (Truth(UO.Picking()) && Truth(tries < 20))
{
await Delay(50);
tries = tries + 1;
}
if (Truth(UO.Picking()))
{
UO.Print("Cursor is still occupied");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue 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:
-
InjectionScript.Runtime.InjectionApiUO.Picking. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Picking:bridge.Picking().
Código interno de implementación; no es un script independiente.
public int Picking() => bridge.Picking();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ReceiveObjectName(object? id);
void UO.ReceiveObjectName(object? id, object? timeout);Solicita el nombre de un objeto con una solicitud de un solo clic.
-
id— Objeto serial/ID: int, cadena numérica/hexadecimal o alias establecido, por ejemplo "lasttarget". Esto no es graphic/type. Verifique el objeto cargado antes de actuar. -
timeout— Opcional int, milisegundos; el valor predeterminado es 0. Un valor negativo no añade anticipación.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- Bridge.ReceiveObjectName llama a Click(id), luego espera hasta max(0,timeout) hasta que GetName(id) esté vacío; pausar no más de 25 ms. Un nombre ya conocido pone fin inmediatamente a la espera.
- Sin tiempo de espera, solo se ejecuta Click. No hay nombre de retorno: lea GetName por separado; el final de la espera puede significar un tiempo de espera.
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.ReceiveObjectName");
UO.ReceiveObjectName("lasttarget");Parámetros y flujo de ejecución:
- Solicita el nombre de un objeto con una solicitud de un solo clic.
UO.ReceiveObjectName("lasttarget");Parámetros y flujo de ejecución:
- Bridge.ReceiveObjectName llama a Click(id), luego espera hasta max(0,timeout) hasta que GetName(id) esté vacío; pausar no más de 25 ms. Un nombre ya conocido pone fin inmediatamente a la espera.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.ReceiveObjectName("lasttarget", 1000);
}
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:
- Sin tiempo de espera, solo se ejecuta Click. No hay nombre de retorno: lea GetName por separado; el final de la espera puede significar un tiempo de espera.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.ReceiveObjectName(id, 1000);
UO.Print(UO.GetName(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue 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: id (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ReceiveObjectName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ReceiveObjectName:bridge.ReceiveObjectName(GetObject(id), 0). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Código interno de implementación; no es un script independiente.
public void ReceiveObjectName(InjectionValue id) => bridge.ReceiveObjectName(GetObject(id), 0);Parámetros: id (Any), timeout (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ReceiveObjectName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ReceiveObjectName:bridge.ReceiveObjectName(GetObject(id), NumberConversions.ToInt(timeout)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout).
Código interno de implementación; no es un script independiente.
public void ReceiveObjectName(InjectionValue id, InjectionValue timeout) => bridge.ReceiveObjectName(GetObject(id), NumberConversions.ToInt(timeout));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksUse();Lee la marca guardada TicksUse.
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 ticksUse. Se actualiza mediante UseObject; 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.TicksUse();
UO.Print("TicksUse: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Lee la marca guardada TicksUse.
var stamp = UO.TicksUse();
UO.Print(stamp);Parámetros y flujo de ejecución:
- Devuelve el campo ticksUse. Se actualiza mediante UseObject; 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.TicksUse();
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.TicksUse();
UO.Wait(250);
var after = UO.TicksUse();
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 TicksUse() => ticksUse;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UpdateObject(object? id);Solicita una actualización de un objeto ya cargado.
-
id— Objeto serial/ID: int, cadena numérica/hexadecimal o alias establecido, por ejemplo "lasttarget". Esto no es graphic/type. Verifique el objeto cargado antes de actuar.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- Para Móvil, se llama RequestMobileStatus(..., true), para Artículo - SingleClick. Si serial no está presente en ambas tablas locales, no se realiza ninguna acción. No se trata de descargar un objeto desconocido ni de confirmar una actualización.
- Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.
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.UpdateObject");
UO.UpdateObject(UO.GetSerial("lasttarget"));Parámetros y flujo de ejecución:
- Solicita una actualización de un objeto ya cargado.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
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:
- Para Móvil, se llama RequestMobileStatus(..., true), para Artículo - SingleClick. Si serial no está presente en ambas tablas locales, no se realiza ninguna acción. No se trata de descargar un objeto desconocido ni de confirmar una actualización.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros y flujo de ejecución:
- Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
}
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: id (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UpdateObject. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UpdateObject:bridge.UpdateObject(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Código interno de implementación; no es un script independiente.
public void UpdateObject(InjectionValue id) => bridge.UpdateObject(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseFromGround(object? @type);
int UO.UseFromGround(object? @type, object? color);Busca un objeto del graphic dado en el suelo/en el mundo e inmediatamente llama a su aplicación. Normalmente se utiliza para objetos cercanos, como abrir una mochila. Una característica importante de este tiempo de ejecución: la búsqueda se basa en FindType y también puede encontrar mobile con el mismo body; Esta no es estrictamente una selección de solo artículos. Para elementos con un radio explícito y una selección más cercana, use UseType(..., ground, ...).
-
type- Obligatorio graphic. Por ejemplo, 0x0E75 es una mochila. Número o cadena hexadecimal numérica; número negativo/0xFFFF - cualquier graphic. Los valores corporales como 0x0190 (masculino) y 0x0191 (hembra) pueden seleccionar mobile; no los sustituya por el elemento type. Por este formulario no se transmiten dos tipos al mismo tiempo. -
color- Opcional hue, predeterminado - 1 (cualquiera). Número negativo/0xFFFF - cualquiera, 0 - solo hue 0. No hay otros parámetros: contenedor, distancia, más cercano y maxZ no se agregan a este comando.
int - serial del primer objeto encontrado, pasado a UseObject o 0. Este no es el número de objetos, ni graphic ni true/false. Es posible que se encuentre el objeto, pero es posible que el servidor no permita su uso. Verifique id != 0 y el efecto esperado del juego por separado.
- Utiliza los FindDistance y FindVertical actuales, tiene en cuenta Ignore. El contenedor de búsqueda está fijo como ground, el contenido anidado no se recorre. Los móviles excluyen self; no hay ninguna restricción separada sobre la vida/visibilidad/notoriedad.
- Actualiza FindItem/FindCount/GetFoundItems con todas las coincidencias de búsqueda, pero solo aplica el primer resultado. El más cercano no está garantizado; Los objetos del mundo se verifican antes que los móviles.
- No recoge ningún objeto de la mochila, no mueve al personaje, no espera una respuesta del servidor o el final del objetivo. Si no hay coincidencia, imprime un mensaje. Para buscar sin una acción, use UO.FindType.
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.UseFromGround(0x0E75);
UO.Print("UseFromGround: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- type únicamente; cualquier hue. Se utilizan los FindDistance/FindVertical actuales. bolsa - ID del primer resultado, no necesariamente el más cercano. El contenido sólo se abrirá si el servidor lo permite.
var bag = UO.UseFromGround(0x0E75);
if (Truth(bag != 0))
{
UO.AddObject("ground_bag", bag);
}
else
{
UO.Print("No loaded ground backpack matches the search settings");
}
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:
- La búsqueda se limita a dos celdas y la misma Z. El color 0x0044 se da como ejemplo: reemplácelo con hue de su artículo. La configuración se restaura incluso si hay un error.
return RunScenario();
object? RunScenario()
{
var oldDistance = UO.FindDistance();
var oldZ = UO.FindVertical();
try
{
UO.FindDistance(2);
UO.FindVertical(0);
var bag = UO.UseFromGround(0x0E75, 0x0044);
if (Truth(bag != 0))
{
UO.AddObject("colored_ground_bag", bag);
}
}
finally
{
UO.FindDistance(oldDistance);
UO.FindVertical(oldZ);
}
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:
- El radio especifica FindDistance en lugar del tercer argumento UseFromGround. 3000 ms — tiempo para ver el ejemplo, no confirmación de apertura; tipo de ventana 3 - contenedor. Los resultados de esta búsqueda permanecen en Buscar*.
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 selected = OpenGroundBagWithin(2);
if (Truth(selected != 0))
{
await Delay(3000);
UO.CloseClientUIWindow(3, selected);
}
return null;
}
dynamic OpenGroundBagWithin(dynamic radius)
{
var previous = UO.FindDistance();
try
{
UO.FindDistance(radius);
return UO.UseFromGround(0x0E75, -1);
}
finally
{
UO.FindDistance(previous);
}
}
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: type (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseFromGround. -
InjectionScript.Runtime.InjectionApiUO.UseFromGround:UseFromGround(type, new InjectionValue(-1)).
Código interno de implementación; no es un script independiente.
public int UseFromGround(InjectionValue type) => UseFromGround(type, new InjectionValue(-1));Parámetros: type (Any), color (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseFromGround. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(id). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("No matching item found on ground.").
Código interno de implementación; no es un script independiente.
public int UseFromGround(InjectionValue type, InjectionValue color)
{
int id = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);
if (id != 0)
UseObject(id);
else
SystemMessage("No matching item found on ground.");
return id;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseItemOnMobile(object? itemSerial, object? targetSerial);Prepara el objetivo del personaje y usa el objeto.
-
itemSerial— Objeto serial/ID: int, cadena numérica/hexadecimal o alias establecido, por ejemplo "lasttarget". Esto no es graphic/type. Verifique el objeto cargado antes de actuar. -
targetSerial— Objeto serial/ID: int, cadena numérica/hexadecimal o alias establecido, por ejemplo "lasttarget". Esto no es graphic/type. Verifique el objeto cargado antes de actuar.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- ExecuteClientApiCompatibility primero llama al puente.WaitTargetObject(TargetSerial), luego al puente.UseObject(ItemSerial). Los argumentos no se intercambian. Estas llamadas de puente directas no actualizan el tiempo de ejecución de TicksTarget/TicksUse.
- No comprueba el tipo de objetivo/elemento y no espera el cursor. La preparación del objetivo antes de su uso evita que se pierda un objetivo que llega rápidamente, pero el servidor aún determina si la acción es válida.
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.UseItemOnMobile");
UO.UseItemOnMobile("0x40001234", "self");Parámetros y flujo de ejecución:
- Prepara el objetivo del personaje y usa el objeto.
UO.UseItemOnMobile("0x40001234", "self");Parámetros y flujo de ejecución:
- ExecuteClientApiCompatibility primero llama al puente.WaitTargetObject(TargetSerial), luego al puente.UseObject(ItemSerial). Los argumentos no se intercambian. Estas llamadas de puente directas no actualizan el tiempo de ejecución de TicksTarget/TicksUse.
return RunScenario();
object? RunScenario()
{
var item = UO.GetSerial("lastobject");
var mobile = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(item)) && Truth(UO.Exists(mobile)))
{
UO.UseItemOnMobile(item, mobile);
}
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:
- No comprueba el tipo de objetivo/elemento y no espera el cursor. La preparación del objetivo antes de su uso evita que se pierda un objetivo que llega rápidamente, pero el servidor aún determina si la acción es válida.
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 item = UO.GetSerial("lastobject");
if (Truth(UO.Exists(item)))
{
UO.UseItemOnMobile(item, "self");
UO.Print(UO.Waiting());
}
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: itemSerial (Any), targetSerial (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0)).
Código interno de implementación; no es un script independiente.
case "useitemonmobile": bridge.WaitTargetObject(Arg(1)); bridge.UseObject(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseObject(object? objID);Solicita el uso de un objeto por serial. Llamadas de puente GameActions.DoubleClick; El artículo no se busca type.
-
objID— Objeto serial/ID: int, cadena numérica/hexadecimal o alias establecido, por ejemplo "lasttarget". Esto no es graphic/type. Verifique el objeto cargado antes de actuar.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- GetObject permite alias; El nombre desconocido da -1. Después de la llamada, el tiempo de ejecución actualiza TicksUse con el valor de UO.Timer; Este es el momento de la solicitud, no la confirmación del servidor.
- Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.
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.UseObject");
UO.UseObject(UO.GetSerial("lasttarget"));Parámetros y flujo de ejecución:
- Solicita el uso de un objeto por serial. Llamadas de puente GameActions.DoubleClick; El artículo no se busca type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UseObject(id);
}
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:
- GetObject permite alias; El nombre desconocido da -1. Después de la llamada, el tiempo de ejecución actualiza TicksUse con el valor de UO.Timer; Este es el momento de la solicitud, no la confirmación del servidor.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UseObject(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros y flujo de ejecución:
- Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UseObject(id);
}
}
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: objID (Any/Integer/String)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "useobject": bridge.UseObject(Arg(0)); return InjectionValue.Unit;Parámetros: objID (Any/Integer/String)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseObject. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(id). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
Código interno de implementación; no es un script independiente.
public void UseObject(int id)
{
bridge.UseObject(id);
ticksUse = Timer();
}Parámetros: objID (Any/Integer/String)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Código interno de implementación; no es un script independiente.
public void UseObject(string id) => UseObject(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseType(object? @type);
int UO.UseType(object? @type, object? color);
int UO.UseType(object? @type, object? color, object? container);
int UO.UseType(object? @type, object? color, object? container, object? distance);
int UO.UseType(object? @type, object? color, object? container, object? distance, object? nearest);
int UO.UseType(object? @type, object? color, object? container, object? distance, object? nearest, object? maxZ);Encuentra un elemento del graphic/type deseado y lo aplica. Por ejemplo, bebe una poción de una mochila, abre una mochila cercana o usa un artículo de un contenedor seleccionado. Este comando no busca ni mueve el personaje. Si un elemento requiere un alcance, el objetivo debe prepararse por separado.
-
type— Gráfico del artículo: número o cadena hexadecimal; por ejemplo, 0x0F0C es un tipo de poción curativa, 0x0E75 es una mochila. Este no es un carácter serial o body. Un número negativo o 0xFFFF permite cualquier type; para una acción significativa, es mejor una graphic precisa. -
color— Tono del elemento, predeterminado - 1 (cualquiera). Cualquier número negativo o 0xFFFF elimina el filtro; 0 elige el elemento sin pintar. Ni la notoriedad ni el color del texto. -
container— Predeterminado -1: tu mochila y subcontenedores cargados. "my" significa lo mismo. "backpack" o el serial explícito del contenedor especifica la raíz del recorrido recursivo. ground/"ground"/UO.Ground(), numérico 0/1 denotan solo objetos del mundo. Self no es sinónimo de backpack; Utilice una mochila explícita. Un alias de objeto desconocido/nulo se puede resolver como una mochila: primero verifique el contenedor transferido usando Exists. -
distance: rango geométrico X/Y máximo, no longitud de ruta. El argumento predeterminado o negativo es FindDistance. 0 significa la misma celda. Para artículos en contenedor, el cliente tiene en cuenta la distancia al propietario. -
nearest— Por defecto true: selecciona lo más parecido, si es igual, el más pequeño serial. false: Se encuentra por primera vez en recorrido sin ordenar. No la cantidad de elementos ni el modo de ejecución. -
maxZ— Diferencia absoluta máxima entre la altura del mundo Z y el personaje. El argumento predeterminado o negativo es FindVertical. 0 requiere la misma Z. Para el artículo en la bolsa, se utiliza la altura del contenedor exterior en el suelo o el carácter del propietario; Las coordenadas internas de gump no se consideran coordenadas mundiales. Este es un filtro de altura, no una verificación de transitabilidad o línea de visión.
int - serial del artículo para el cual se llama UseObject; 0 si no hay coincidencias. ¿Incluso el registro con ReturnKind object? en realidad devuelve un número. Esto no es true/false ni confirmación de uso por parte del servidor: marque usado != 0 en lugar de usado == true. Se requiere una verificación por separado del estado, el contenido o el registro para que el efecto sea exitoso.
- De los argumentos 1 a 6. Para establecer el rango, especifique también el color y el contenedor. Para especificar maxZ, complete las seis posiciones. Matriz type, máscara vía | y este comando no acepta objetivos adicionales.
- Los formularios regulares con int/string y los formularios extendidos usan CompactUseType: solo elementos, Ignore, distancia y altura; Los contenedores se atraviesan de forma recursiva sobre el contenido ya cargado. El contenedor de carga no se abre automáticamente. FindItem/FindCount/GetFoundItems no son actualizados por esta rama.
- La altura de los propietarios y contenedores compartidos se calcula una vez por llamada para evitar repetir el recorrido para cada pila. Una cadena de contenedores circular o excesivamente profunda (eslabones 128 sin raíz encontrada) no se utiliza como coincidencia de altura.
- Se mantuvo un registro compatible común de dos object?: enruta una llamada al puente. UseType usando FindType sobre la mochila, actualizando Buscar* y seleccionando el primer resultado. Para una forma compacta predecible, utilice int/string en lugar de conversiones implícitas de tipos de valores inapropiados.
- UseObject envía una acción de lanzamiento, pero el comando no espera al objetivo, curación, bebida, apertura de una ventana o falla del servidor. El rango de búsqueda no amplía el rango de uso permitido por el servidor.
- Si no hay ninguna coincidencia, el formulario compacto imprime el mensaje y devuelve 0. Si no hay carácter/conexión, el resultado no debe considerarse permiso para actuar. Para ID preciso, utilice UO.UseObject.
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.UseType(0x0F0C);
UO.Print("UseType: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- 0x0F0C es un ejemplo de un tipo estándar de poción curativa. El servidor puede rechazar la acción debido a la condición del carácter, latencia o sus propias reglas. El color y la gama no se especifican por separado: se aplican los valores predeterminados.
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return null;
}
var used = UO.UseType(0x0F0C);
if (Truth(used == 0))
{
UO.Print("No matching healing potion in the loaded backpack");
}
else
{
UO.Print("Potion use requested; check health and the game message");
}
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:
- 0x0E75 — type de una mochila, -1 — cualquier hue, ground — objetos del mundo. 2 - celdas X/Y, true - más cercanas, 4 - diferencia Z. Bolsa de devolución — ID. El acceso al contenido lo determina el servidor; el equipo no recoge la mochila.
return RunScenario();
object? RunScenario()
{
var bag = UO.UseType(0x0E75, -1, "ground", 2, true, 4);
if (Truth(bag != 0))
{
UO.AddObject("nearby_bag", bag);
}
else
{
UO.Print("No suitable ground backpack within the selected bounds");
}
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:
- itemType - graphic cosas, fuente - contenedor serial separado. El ayudante devuelve serial/0 igual que UseType. Incluso el servidor puede prohibir el uso de un elemento encontrado desde un contenedor remoto o de otra persona.
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 source = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(source == 0) || !(Truth(UO.Exists(source))))
{
return null;
}
UO.AddObject("supply", source);
var used = UseFromNamedSupply(0x0F0C);
if (Truth(used == 0))
{
UO.Print("Supply item was not found with these filters");
}
return null;
}
dynamic UseFromNamedSupply(dynamic itemType)
{
var source = Asc(UO.GetSerial("supply"), 0);
if (Truth(source == 0) || !(Truth(UO.Exists(source))))
{
return 0;
}
return UO.UseType(itemType, 0, source, 2, false, 16);
}
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;
}
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: type (Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(type, -1).
Código interno de implementación; no es un script independiente.
public int UseType(int type) => UseType(type, -1);Parámetros: type (Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Código interno de implementación; no es un script independiente.
public int UseType(string type) => UseType(ResolveType(type));Parámetros: type (Any/Integer/String), color (Any/Integer/String)
Resultado: int / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseType:bridge.UseType(ResolveType(arguments[0]), arguments.Length > 1 ? Arg(1) : -1). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
Código interno de implementación; no es un script independiente.
case "usetype": return new InjectionValue(bridge.UseType(ResolveType(arguments[0]), arguments.Length > 1 ? Arg(1) : -1));Parámetros: type (Any/Integer/String), color (Any/Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(new[] { new InjectionValue(type), new InjectionValue(color) }).
Código interno de implementación; no es un script independiente.
public int UseType(int type, int color) => CompactUseType(new[]
{
new InjectionValue(type),
new InjectionValue(color)
});Parámetros: type (Any/Integer/String), color (Any/Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(type, NumberConversions.ToInt(color)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Código interno de implementación; no es un script independiente.
public int UseType(int type, string color) => UseType(type, NumberConversions.ToInt(color));Parámetros: type (Any/Integer/String), color (Any/Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type), color). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Código interno de implementación; no es un script independiente.
public int UseType(string type, int color) => UseType(ResolveType(type), color);Parámetros: type (Any/Integer/String), color (Any/Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type), NumberConversions.ToInt(color)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Código interno de implementación; no es un script independiente.
public int UseType(string type, string color) => UseType(ResolveType(type), NumberConversions.ToInt(color));Parámetros: type (Any), color (Any), container (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactUseType(values))Parámetros: type (Any), color (Any), container (Any), distance (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactUseType(values))Parámetros: type (Any), color (Any), container (Any), distance (Any), nearest (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactUseType(values))Parámetros: type (Any), color (Any), container (Any), distance (Any), nearest (Any), maxZ (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactUseType(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseWorldObject(object? serialOrName);Habilita serialOrName hasta GetObject y llama a UseObject. El nombre de la cadena es un alias de objeto, no el nombre graphic/type.
-
serialOrName— Objeto serial/ID: int, cadena numérica/hexadecimal o alias establecido, por ejemplo "lasttarget". Esto no es graphic/type. Verifique el objeto cargado antes de actuar.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- Registrado en metadatos directamente a UserObject. Este es un uso común de serial, no para buscar en todo el mundo del servidor.
- Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.
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.UseWorldObject");
UO.UseWorldObject(UO.GetSerial("lasttarget"));Parámetros y flujo de ejecución:
- Habilita serialOrName hasta GetObject y llama a UseObject. El nombre de la cadena es un alias de objeto, no el nombre graphic/type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(id);
}
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:
- Registrado en metadatos directamente a UserObject. Este es un uso común de serial, no para buscar en todo el mundo del servidor.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros y flujo de ejecución:
- Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(id);
}
}
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: serialOrName (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UserObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(serialOrName)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(serialOrName).
Código interno de implementación; no es un script independiente.
public void UserObject(InjectionValue serialOrName)
=> UseObject(GetObject(serialOrName));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UserObject(object? serialOrName);Habilita serialOrName hasta GetObject y llama a UseObject. El nombre de la cadena es un alias de objeto, no el nombre graphic/type.
-
serialOrName— Objeto serial/ID: int, cadena numérica/hexadecimal o alias establecido, por ejemplo "lasttarget". Esto no es graphic/type. Verifique el objeto cargado antes de actuar.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- Misma ruta de uso que UO.UseWorldObject. El comando no crea un objeto personalizado ni agrega el nombre AddObject.
- Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.
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.UserObject");
UO.UserObject(UO.GetSerial("lasttarget"));Parámetros y flujo de ejecución:
- Habilita serialOrName hasta GetObject y llama a UseObject. El nombre de la cadena es un alias de objeto, no el nombre graphic/type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UserObject(id);
}
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:
- Misma ruta de uso que UO.UseWorldObject. El comando no crea un objeto personalizado ni agrega el nombre AddObject.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UserObject(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros y flujo de ejecución:
- Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UserObject(id);
}
}
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: serialOrName (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UserObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(serialOrName)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(serialOrName).
Código interno de implementación; no es un script independiente.
public void UserObject(InjectionValue serialOrName)
=> UseObject(GetObject(serialOrName));ClassicUO — Bad Newbie & C# Scripts IDE