Repository navigation
ES UO Topic character Part 5
Українська · Русский · 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.Undress();Elimina ropa y armadura de las capas 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Las manos, el cabello, la barba, la mochila, la montura y el banco no se ven afectados.
No hay parámetros.
Bandera numérica int: 1 (condición cumplida) - operación local aceptada, 0 (condición no cumplida) - negativa. Esto no es una confirmación del servidor, ni ID, ni una cantidad. El servidor puede fallar más tarde; Verifique el equipo real después de responder.
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ó.
- Necesita elementos cargados y arrastre con las manos libres. Cuando se retira, se requiere la mochila self real: la GrabBag de repuesto no se utiliza. Se rechazan los artículos desconocidos, destruidos o inadecuados. Los artículos de otras personas no se pueden eliminar mediante UnequipItems. Un conjunto no es una transacción atómica.
- EquipItems/UnequipItems aplica DressSpeed después de la operación aceptada antes del siguiente elemento; Disarm/Undress - después de cada capa ocupada. El retiro también respeta DropDelay cuando se acepta el acarreo. Las mismas configuraciones de otros tiempos de ejecución no cambian; La aceleración no anula las limitaciones del servidor.
- Un formulario de llamada incorrecto, un nombre de capa desconocido o un valor que no se puede convertir en un número pueden provocar un error de secuencia de comandos en lugar de 0. La instantánea del equipo solo contiene datos que ya se han cargado. En el asistente, ChangeAndConfirm capa=1 es la mano derecha: por otra cosa, pasa su capa real.
- Para una matriz, 1 significa que se aceptan todas las operaciones enumeradas; en caso de rechazo, se devuelve 0. Los elementos restantes aún se procesan, no hay reversión. Una matriz vacía produce 1 sin acción. Disarm/Undress dé 1 también cuando las capas requeridas ya estén vacías; el fallo parcial da 0.
- UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx
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.Undress();
UO.Print("Undress: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Primero, selecciona el elemento apropiado en el juego: lasttarget - es ID. En el ejemplo Equip/WearItem, la capa 1 requiere un arma de mano izquierda. Unequip(1) quita la mano derecha; Disarm/Undress funcionan con sus propias capas fijas. No hay repeticiones automáticas después de un rechazo.
return UO.Undress();Parámetros y flujo de ejecución:
- Para equipar, 0x0F5E es un ejemplo de espada, 0x1B76 es un ejemplo de escudo. FindType los busca entre los elementos cargados de la mochila, ASC convierte el hexadecimal devuelto-ID. Para eliminarlas se leen las propias capas actuales. Si el elemento requerido no está disponible, el script finaliza. La matriz almacena dos ID; Cada artículo se transfiere en su totalidad.
return RunScenario();
object? RunScenario()
{
var first = UO.ObjAtLayerEx(5, UO.Self());
var second = UO.ObjAtLayerEx(4, UO.Self());
if (Truth(first == 0) || Truth(second == 0))
{
return 0;
}
UO.AddObject("saved_first", first);
UO.AddObject("saved_second", second);
return UO.Undress();
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:
- ChangeAndConfirm ejecuta el comando una vez. Luego verifica el estado real hasta 20 veces con una pausa de 100 ms. 1 - la verificación vio el estado esperado, 0 - falla o espera vencida. Este es el resultado de nuestro asistente, no un nuevo comando integrado. Llamar a la operación en sí también puede llevar tiempo.
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()
{
return ChangeAndConfirm();
return null;
}
dynamic ChangeAndConfirm()
{
if (!(Truth(UO.Undress())))
{
return 0;
}
dynamic[] layers = new dynamic[checked((int)(16) + 1)];
layers[0] = 3;
layers[1] = 4;
layers[2] = 5;
layers[3] = 6;
layers[4] = 7;
layers[5] = 8;
layers[6] = 10;
layers[7] = 12;
layers[8] = 13;
layers[9] = 14;
layers[10] = 17;
layers[11] = 18;
layers[12] = 19;
layers[13] = 20;
layers[14] = 22;
layers[15] = 23;
layers[16] = 24;
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
dynamic empty = true;
for (int i = (int)(0); i <= ArrayLength(layers) - 1; i += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layers[i], UO.Self()) != 0))
{
empty = false;
}
}
if (Truth(empty))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
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.Undress. -
InjectionScript.Runtime.InjectionApiUO.Unequip:Unequip(dressLayers, "Clothing removed.").
Código interno de implementación; no es un script independiente.
public int Undress()
=> Unequip(dressLayers, "Clothing removed.");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Unequip(object? layer);Saca su objeto de la capa especificada y lo coloca en su propia mochila.
-
layer- Número de capa, por ejemplo 1 - mano derecha, 2 - izquierda. Equip y Unequip también aceptan un nombre de capa, como "Rhand". WearItem usa una capa numérica. La capa debe coincidir con la capa portátil del artículo; no es graphic ni ID.
Bandera numérica int: 1 (condición cumplida) - operación local aceptada, 0 (condición no cumplida) - negativa. Esto no es una confirmación del servidor, ni ID, ni una cantidad. El servidor puede fallar más tarde; Verifique el equipo real después de responder.
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ó.
- Necesita elementos cargados y arrastre con las manos libres. Cuando se retira, se requiere la mochila self real: la GrabBag de repuesto no se utiliza. Se rechazan los artículos desconocidos, destruidos o inadecuados. Los artículos de otras personas no se pueden eliminar mediante UnequipItems. Un conjunto no es una transacción atómica.
- EquipItems/UnequipItems aplica DressSpeed después de la operación aceptada antes del siguiente elemento; Disarm/Undress - después de cada capa ocupada. El retiro también respeta DropDelay cuando se acepta el acarreo. Las mismas configuraciones de otros tiempos de ejecución no cambian; La aceleración no anula las limitaciones del servidor.
- Un formulario de llamada incorrecto, un nombre de capa desconocido o un valor que no se puede convertir en un número pueden provocar un error de secuencia de comandos en lugar de 0. La instantánea del equipo solo contiene datos que ya se han cargado. En el asistente, ChangeAndConfirm capa=1 es la mano derecha: por otra cosa, pasa su capa real.
- UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx
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.Unequip(1);
UO.Print("Unequip: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Primero, selecciona el elemento apropiado en el juego: lasttarget - es ID. En el ejemplo Equip/WearItem, la capa 1 requiere un arma de mano izquierda. Unequip(1) quita la mano derecha; Disarm/Undress funcionan con sus propias capas fijas. No hay repeticiones automáticas después de un rechazo.
return UO.Unequip(1);Parámetros y flujo de ejecución:
- Para equipar, 0x0F5E es un ejemplo de espada, 0x1B76 es un ejemplo de escudo. FindType los busca entre los elementos cargados de la mochila, ASC convierte el hexadecimal devuelto-ID. Para eliminarlas se leen las propias capas actuales. Si el elemento requerido no está disponible, el script finaliza. La matriz almacena dos ID; Cada artículo se transfiere en su totalidad.
return RunScenario();
object? RunScenario()
{
var first = UO.ObjAtLayerEx(1, UO.Self());
var second = UO.ObjAtLayerEx(2, UO.Self());
if (Truth(first == 0) || Truth(second == 0))
{
return 0;
}
UO.AddObject("saved_first", first);
UO.AddObject("saved_second", second);
var firstOk = UO.Unequip(1);
var secondOk = UO.Unequip(2);
return firstOk != 0 && secondOk != 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:
- ChangeAndConfirm ejecuta el comando una vez. Luego verifica el estado real hasta 20 veces con una pausa de 100 ms. 1 - la verificación vio el estado esperado, 0 - falla o espera vencida. Este es el resultado de nuestro asistente, no un nuevo comando integrado. Llamar a la operación en sí también puede llevar tiempo.
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.ObjAtLayerEx(1, UO.Self());
return ChangeAndConfirm(1, item);
return null;
}
dynamic ChangeAndConfirm(dynamic layer, dynamic item)
{
if (Truth(item == 0))
{
return 0;
}
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) != item))
{
return 0;
}
if (!(Truth(UO.Unequip(layer))))
{
return 0;
}
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == 0))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
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: layer (Any/String)
Resultado: int / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.Unequip:Unequip(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Unequip:bridge.Unequip(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "unequip":
return new InjectionValue(arguments[0].Kind == InjectionValueKind.String ? Unequip(Text(0)) : bridge.Unequip(Arg(0)));Parámetros: layer (Any/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Unequip. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Unequip:bridge.Unequip(ConvertLayer(layer)). -
InjectionScript.Runtime.InjectionApiUO.ConvertLayer:ConvertLayer(layer).
Código interno de implementación; no es un script independiente.
public int Unequip(string layer) => bridge.Unequip(ConvertLayer(layer));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.UnequipItems(object? items);Lleva los artículos personales enumerados en la mochila. ID del elemento de otra persona no elimina su elemento de la misma capa.
-
items: ID obligatorio o conjunto ID de elementos. Los elementos de la matriz son números o cadenas hexadecimales numéricas. El argumento único también acepta "lasttarget"/nombre AddObject. Para una matriz, use los elementos de declaración de variables [1] para dos elementos en los índices 0 y 1. Se transmiten cosas, no números de capa ni type.
Bandera numérica int: 1 (condición cumplida) - operación local aceptada, 0 (condición no cumplida) - negativa. Esto no es una confirmación del servidor, ni ID, ni una cantidad. El servidor puede fallar más tarde; Verifique el equipo real después de responder.
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ó.
- Necesita elementos cargados y arrastre con las manos libres. Cuando se retira, se requiere la mochila self real: la GrabBag de repuesto no se utiliza. Se rechazan los artículos desconocidos, destruidos o inadecuados. Los artículos de otras personas no se pueden eliminar mediante UnequipItems. Un conjunto no es una transacción atómica.
- EquipItems/UnequipItems aplica DressSpeed después de la operación aceptada antes del siguiente elemento; Disarm/Undress - después de cada capa ocupada. El retiro también respeta DropDelay cuando se acepta el acarreo. Las mismas configuraciones de otros tiempos de ejecución no cambian; La aceleración no anula las limitaciones del servidor.
- Un formulario de llamada incorrecto, un nombre de capa desconocido o un valor que no se puede convertir en un número pueden provocar un error de secuencia de comandos en lugar de 0. La instantánea del equipo solo contiene datos que ya se han cargado. En el asistente, ChangeAndConfirm capa=1 es la mano derecha: por otra cosa, pasa su capa real.
- Para una matriz, 1 significa que se aceptan todas las operaciones enumeradas; en caso de rechazo, se devuelve 0. Los elementos restantes aún se procesan, no hay reversión. Una matriz vacía produce 1 sin acción. Disarm/Undress dé 1 también cuando las capas requeridas ya estén vacías; el fallo parcial da 0.
- UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx
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.UnequipItems(UO.ObjAtLayerEx(1, "self"));
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- Primero, selecciona el elemento apropiado en el juego: lasttarget - es ID. En el ejemplo Equip/WearItem, la capa 1 requiere un arma de mano izquierda. Unequip(1) quita la mano derecha; Disarm/Undress funcionan con sus propias capas fijas. No hay repeticiones automáticas después de un rechazo.
var item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
return 0;
}
return UO.UnequipItems(item);
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:
- Para equipar, 0x0F5E es un ejemplo de espada, 0x1B76 es un ejemplo de escudo. FindType los busca entre los elementos cargados de la mochila, ASC convierte el hexadecimal devuelto-ID. Para eliminarlas se leen las propias capas actuales. Si el elemento requerido no está disponible, el script finaliza. La matriz almacena dos ID; Cada artículo se transfiere en su totalidad.
return RunScenario();
object? RunScenario()
{
var first = UO.ObjAtLayerEx(1, UO.Self());
var second = UO.ObjAtLayerEx(2, UO.Self());
if (Truth(first == 0) || Truth(second == 0))
{
return 0;
}
UO.AddObject("saved_first", first);
UO.AddObject("saved_second", second);
dynamic[] items = new dynamic[checked((int)(1) + 1)];
items[0] = first;
items[1] = second;
return UO.UnequipItems(items);
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:
- ChangeAndConfirm ejecuta el comando una vez. Luego verifica el estado real hasta 20 veces con una pausa de 100 ms. 1 - la verificación vio el estado esperado, 0 - falla o espera vencida. Este es el resultado de nuestro asistente, no un nuevo comando integrado. Llamar a la operación en sí también puede llevar tiempo.
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 = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
return 0;
}
return ChangeAndConfirm(1, item);
return null;
}
dynamic ChangeAndConfirm(dynamic layer, dynamic item)
{
if (Truth(item == 0))
{
return 0;
}
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) != item))
{
return 0;
}
if (!(Truth(UO.UnequipItems(item))))
{
return 0;
}
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == 0))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
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: items (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ChangeEquipmentItems:ChangeEquipmentItems(ArrayArg(0), false). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::ArrayArg:ArrayArg(0).
Código interno de implementación; no es un script independiente.
case "unequipitems":
return new InjectionValue(ChangeEquipmentItems(ArrayArg(0), false));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UnsetArm(object? name);Elimina una entrada para un conjunto de armas con nombre sin desarmar al personaje.
-
name: nombre de cadena del conjunto, como "viaje" o "batalla". Los nombres no distinguen entre mayúsculas y minúsculas. Los conjuntos de ropa y armas se almacenan por separado: se permite el mismo nombre en ambos. Esto no es una cosa ID ni un nombre de archivo. Sólo SetDress permite la ausencia de un nombre: entonces se registra un conjunto separado para DressSavedSet/EquipDressSet.
void - sin valor. Llame en una línea separada; no asigne el resultado ni lo compare con true. Guardar y eliminar cambia la entrada, no el equipo.
- Ropa: capas 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Armas: 1 y 2 únicamente. Pelo, barba, mochila, animal y banco no están incluidos en estos sets.
- Los elementos específicos serial ya cargados se registran en sus propias capas. Guardar el mismo nombre nuevamente reemplaza la entrada. Las capas vacías también tienen sentido: cuando se restauren, la capa ocupada correspondiente se liberará en su propia mochila. Por lo tanto, un conjunto guardado completamente vacío elimina elementos de sus capas.
- El conjunto se almacena en el estado de tiempo de ejecución. La llamada en sí no crea un archivo y no garantiza que el conjunto se transfiera a otro perfil o a un nuevo tiempo de ejecución. Primero, guarde el conjunto deseado en su estado usado. Cargar/guardar el estado general del cliente es un mecanismo separado.
- La eliminación sólo afecta a la entrada del nombre seleccionado. Los elementos permanecen en el personaje, otros nombres y otros tipos de conjuntos no se ven afectados. Es aceptable volver a eliminar una entrada faltante. UnsetDress y UnsetArm tienen un nombre obligatorio.
- UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
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.UnsetArm");
UO.UnsetArm("battle");Parámetros y flujo de ejecución:
- Sólo se elimina la entrada especificada. La ropa/armas no se pueden quitar.
UO.UnsetArm("battle");Parámetros y flujo de ejecución:
- Los nombres de viaje y batalla se eliminan por separado. Se conserva el mismo nombre de un tipo diferente de conjunto.
return RunScenario();
object? RunScenario()
{
UO.UnsetArm("travel");
UO.UnsetArm("battle");
return null;
}Parámetros y flujo de ejecución:
- CleanupSets es un procedimiento completamente declarado para limpiar dos nombres propios. El prefijo genera nombres de entradas, no rutas de archivos.
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()
{
CleanupSets("mine_");
return null;
}
void CleanupSets(dynamic prefix)
{
UO.UnsetArm(prefix + "travel");
UO.UnsetArm(prefix + "battle");
}
}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: name (String)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UnsetArm. -
InjectionScript.Runtime.State.RuntimeDictionary.Remove:armSets.Remove(name). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("Arm set removed.").
Código interno de implementación; no es un script independiente.
public void UnsetArm(string name)
{
armSets.Remove(name);
SystemMessage("Arm set removed.");
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UnsetDress(object? name);Elimina una entrada para un conjunto de ropa con nombre sin eliminar las prendas.
-
name: nombre de cadena del conjunto, como "viaje" o "batalla". Los nombres no distinguen entre mayúsculas y minúsculas. Los conjuntos de ropa y armas se almacenan por separado: se permite el mismo nombre en ambos. Esto no es una cosa ID ni un nombre de archivo. Sólo SetDress permite la ausencia de un nombre: entonces se registra un conjunto separado para DressSavedSet/EquipDressSet.
void - sin valor. Llame en una línea separada; no asigne el resultado ni lo compare con true. Guardar y eliminar cambia la entrada, no el equipo.
- Ropa: capas 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Armas: 1 y 2 únicamente. Pelo, barba, mochila, animal y banco no están incluidos en estos sets.
- Los elementos específicos serial ya cargados se registran en sus propias capas. Guardar el mismo nombre nuevamente reemplaza la entrada. Las capas vacías también tienen sentido: cuando se restauren, la capa ocupada correspondiente se liberará en su propia mochila. Por lo tanto, un conjunto guardado completamente vacío elimina elementos de sus capas.
- El conjunto se almacena en el estado de tiempo de ejecución. La llamada en sí no crea un archivo y no garantiza que el conjunto se transfiera a otro perfil o a un nuevo tiempo de ejecución. Primero, guarde el conjunto deseado en su estado usado. Cargar/guardar el estado general del cliente es un mecanismo separado.
- La eliminación sólo afecta a la entrada del nombre seleccionado. Los elementos permanecen en el personaje, otros nombres y otros tipos de conjuntos no se ven afectados. Es aceptable volver a eliminar una entrada faltante. UnsetDress y UnsetArm tienen un nombre obligatorio.
- UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
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.UnsetDress");
UO.UnsetDress("travel");Parámetros y flujo de ejecución:
- Sólo se elimina la entrada especificada. La ropa/armas no se pueden quitar.
UO.UnsetDress("travel");Parámetros y flujo de ejecución:
- Los nombres de viaje y batalla se eliminan por separado. Se conserva el mismo nombre de un tipo diferente de conjunto.
return RunScenario();
object? RunScenario()
{
UO.UnsetDress("travel");
UO.UnsetDress("battle");
return null;
}Parámetros y flujo de ejecución:
- CleanupSets es un procedimiento completamente declarado para limpiar dos nombres propios. El prefijo genera nombres de entradas, no rutas de archivos.
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()
{
CleanupSets("mine_");
return null;
}
void CleanupSets(dynamic prefix)
{
UO.UnsetDress(prefix + "travel");
UO.UnsetDress(prefix + "battle");
}
}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: name (String)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.UnsetDress. -
InjectionScript.Runtime.State.RuntimeDictionary.Remove:dressSets.Remove(name). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("Dress set removed.").
Código interno de implementación; no es un script independiente.
public void UnsetDress(string name)
{
dressSets.Remove(name);
SystemMessage("Dress set removed.");
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseOtherPaperdollScroll(object? objID);Utiliza el serial especificado a través del puente.UseObject, generalmente abriendo el muñeco de papel del personaje.
-
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.
- ObjID se refiere al carácter, no al botón de desplazamiento ID. La llamada no lee la estructura del paperdoll y no espera a que se abra.
- 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.UseOtherPaperdollScroll");
UO.UseOtherPaperdollScroll(UO.GetSerial("lasttarget"));Parámetros y flujo de ejecución:
- Utiliza el serial especificado a través del puente.UseObject, generalmente abriendo el muñeco de papel del personaje.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UseOtherPaperdollScroll(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:
- ObjID se refiere al carácter, no al botón de desplazamiento ID. La llamada no lee la estructura del paperdoll y no espera a que se abra.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UseOtherPaperdollScroll(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.UseOtherPaperdollScroll(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)
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 "useotherpaperdollscroll": bridge.UseObject(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseSelfPaperdollScroll();Utiliza el personaje actual, normalmente abriendo un muñeco de papel.
No hay parámetros.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- ExecuteClientApiCompatibility llama al puente.UseObject(puente.Self). No se puede leer ni hacer clic por separado en el elemento paperdoll; esta es la solicitud normal UseObject para self.
- En los ejemplos, UO.Wait especifica solo una pausa del script; el final de la pausa no prueba que el servidor haya completado la solicitud.
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.UseSelfPaperdollScroll");
UO.UseSelfPaperdollScroll();Parámetros y flujo de ejecución:
- Utiliza el personaje actual, normalmente abriendo un muñeco de papel.
UO.UseSelfPaperdollScroll();Parámetros y flujo de ejecución:
- ExecuteClientApiCompatibility llama al puente.UseObject(puente.Self). No se puede leer ni hacer clic por separado en el elemento paperdoll; esta es la solicitud normal UseObject para self.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Self() != 0))
{
UO.UseSelfPaperdollScroll();
}
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:
- En los ejemplos, UO.Wait especifica solo una pausa del script; el final de la pausa no prueba que el servidor haya completado la solicitud.
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.UseSelfPaperdollScroll();
UO.Wait(500);
UO.Print(UO.Name());
return null;
}
}C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: Sin parámetros.
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Código interno de implementación; no es un script independiente.
case "useselfpaperdollscroll": bridge.UseObject(bridge.Self); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WearItem(object? layer, object? objID);Equipa el elemento seleccionado a la capa numérica de tu personaje.
-
layer- Número de capa, por ejemplo 1 - mano derecha, 2 - izquierda. Equip y Unequip también aceptan un nombre de capa, como "Rhand". WearItem usa una capa numérica. La capa debe coincidir con la capa portátil del artículo; no es graphic ni ID. -
objID- ID del elemento específico cargado: entero, cadena hexadecimal, "lasttarget" o nombre AddObject. Esto no es type. Ejemplo con 0x0F5E primero buscando la espada de ese graphic y consiguiéndola con ID.
Bandera numérica int: 1 (condición cumplida) - operación local aceptada, 0 (condición no cumplida) - negativa. Esto no es una confirmación del servidor, ni ID, ni una cantidad. El servidor puede fallar más tarde; Verifique el equipo real después de responder.
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ó.
- Necesita elementos cargados y arrastre con las manos libres. Cuando se retira, se requiere la mochila self real: la GrabBag de repuesto no se utiliza. Se rechazan los artículos desconocidos, destruidos o inadecuados. Los artículos de otras personas no se pueden eliminar mediante UnequipItems. Un conjunto no es una transacción atómica.
- EquipItems/UnequipItems aplica DressSpeed después de la operación aceptada antes del siguiente elemento; Disarm/Undress - después de cada capa ocupada. El retiro también respeta DropDelay cuando se acepta el acarreo. Las mismas configuraciones de otros tiempos de ejecución no cambian; La aceleración no anula las limitaciones del servidor.
- Un formulario de llamada incorrecto, un nombre de capa desconocido o un valor que no se puede convertir en un número pueden provocar un error de secuencia de comandos en lugar de 0. La instantánea del equipo solo contiene datos que ya se han cargado. En el asistente, ChangeAndConfirm capa=1 es la mano derecha: por otra cosa, pasa su capa real.
- UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx
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.
int item = UO.LastTarget();
if (item != 0)
UO.Print("Accepted flag: " + Convert.ToString(UO.WearItem(1, item)));Parámetros y flujo de ejecución:
- Primero, selecciona el elemento apropiado en el juego: lasttarget - es ID. En el ejemplo Equip/WearItem, la capa 1 requiere un arma de mano izquierda. Unequip(1) quita la mano derecha; Disarm/Undress funcionan con sus propias capas fijas. No hay repeticiones automáticas después de un rechazo.
var item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
return 0;
}
return UO.WearItem(1, item);
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:
- Para equipar, 0x0F5E es un ejemplo de espada, 0x1B76 es un ejemplo de escudo. FindType los busca entre los elementos cargados de la mochila, ASC convierte el hexadecimal devuelto-ID. Para eliminarlas se leen las propias capas actuales. Si el elemento requerido no está disponible, el script finaliza. La matriz almacena dos ID; Cada artículo se transfiere en su totalidad.
return RunScenario();
object? RunScenario()
{
var first = Asc(UO.FindType(0x0F5E, -1, "backpack"), 0);
var second = Asc(UO.FindType(0x1B76, -1, "backpack"), 0);
if (Truth(first == 0) || Truth(second == 0))
{
return 0;
}
UO.AddObject("saved_first", first);
UO.AddObject("saved_second", second);
var firstOk = UO.WearItem(1, first);
var secondOk = UO.WearItem(2, second);
return firstOk != 0 && secondOk != 0;
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;Parámetros y flujo de ejecución:
- ChangeAndConfirm ejecuta el comando una vez. Luego verifica el estado real hasta 20 veces con una pausa de 100 ms. 1 - la verificación vio el estado esperado, 0 - falla o espera vencida. Este es el resultado de nuestro asistente, no un nuevo comando integrado. Llamar a la operación en sí también puede llevar tiempo.
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 = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
return 0;
}
return ChangeAndConfirm(1, item);
return null;
}
dynamic ChangeAndConfirm(dynamic layer, dynamic item)
{
if (Truth(item == 0))
{
return 0;
}
if (!(Truth(UO.WearItem(layer, item))))
{
return 0;
}
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == item))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
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: layer (Any), objID (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Equip:bridge.Equip(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "wearitem": return new InjectionValue(bridge.Equip(Arg(0), Arg(1)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Weight();Lee el contador de estado de tu personaje: peso actual en piedras.
No hay parámetros.
int — peso actual en piedras, 0...65535 en el modelo del cliente. 0 puede ser un valor real, sin datos o un jugador perdido/destruido. Esta es una cantidad, no bool, ID o type: 1 significa una unidad, no éxito. El comando no itera sobre objetos y no devuelve una matriz.
- El comando no acepta argumentos. Utilice las firmas exactas anteriores.
- La lectura del hilo del juego requiere Jugador.Weight si el Jugador actual existe y no ha sido destruido; en caso contrario 0. El equipo no se clasifica, las bonificaciones no se recalculan, no se solicita el estado y no hay que esperar actualizaciones. Un fantasma presente no es igual a un Jugador destruido.
- Weight lee el peso total reportado por el servidor en piedras. El peso del cuerpo, del equipo y de las bolsas incluidas en la cantidad está determinado por las reglas del casco. El equipo no revisa los contenedores, no suma el peso de los artículos ni actualiza las bolsas cerradas. Esta no es la propiedad Weight de un elemento individual, ni es el número de elementos.
- CharacterStatus verifica el cuerpo requerido antes de actualizar. Weight está disponible en su propio estado extendido, ranuras - desde type 3, Luck - desde type 4, servidor WeightMax - desde type 5. Un paquete compacto/antiguo sin contador opcional deja su caché anterior. El nuevo Jugador empieza desde cero; la llamada no prueba la recepción de un estado nuevo.
- Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando. 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 llamada lee los datos locales de nuevo. La variable almacena la instantánea; las lecturas individuales pueden recibir diferentes actualizaciones del servidor. Un resultado distinto de cero no prueba la conexión. Cero puede ser un valor o ningún dato.
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.Weight();
UO.Print("Weight: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- value almacena una llamada sin argumentos a su propio carácter; Convertir.ToString formatea el número del registro sin cambiar su significado.
var value = UO.Weight();
UO.Print("Weight: " + Convert.ToString(value));Parámetros y flujo de ejecución:
- UO.Wait(500) separa el antes y el después en 500 milisegundos. la diferencia puede ser positiva, cero o negativa; Es posible que se omitan las actualizaciones provisionales y los cambios de personajes. La pausa es un ejemplo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Weight();
await Delay(500);
var after = UO.Weight();
var difference = after - before;
UO.Print("Counter change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Parámetros y flujo de ejecución:
- CanCarry(extra) gana peso extra en piedras; 10 es un ejemplo, no el número de pilas. Rechaza extra negativo, sin Jugador, o máximo <= 0, lee el peso y límite actual, luego devuelve bool: true o false por extra <= máximo - actual. La resta evita el desbordamiento actual + adicional. Cuando se sobrecarga, el resultado es false incluso para extra=0. Esta es una evaluación local, no una resolución del servidor; las lecturas no son atómicas y el peso cero puede ser desconocido.
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(Truth(CanCarry(10)) == true))
{
UO.Print("Local check passed");
}
else
{
UO.Print("Local check failed or data unavailable");
}
return null;
}
dynamic CanCarry(dynamic extra)
{
if (Truth(extra < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum <= 0))
{
return false;
}
return extra <= maximum - current;
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Weight:bridge.Weight.
Código interno de implementación; no es un script independiente.
case "weight": return new InjectionValue(bridge.Weight);ClassicUO — Bad Newbie & C# Scripts IDE