ES UO Topic mobiles - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Inicio · C# · IDE · UO API · A–Z · Ejemplos · Idiomas
Personajes, NPC, monstruos y mascotas ya conocidos por el cliente. Serial define una criatura específica, body/type sus gráficos; estos son significados diferentes.
| Tema | Comandos y explicaciones |
|---|---|
| Players | UO.GetMobiles · UO.FindMobile |
| NPC | UO.IsNpc · UO.FindMobile |
| Monsters | UO.FindType · UO.FindMobile |
| Pets | UO.GetPetsCurrent · UO.GetPetsMax |
| Followers | UO.GetFollowers · UO.GetFollowersMax |
| Name / Serial / Body | UO.GetName · UO.GetSerial · UO.GetType |
| Coordenadas | UO.GetX · UO.GetY · UO.GetZ |
| Distance | UO.GetDistance |
| Notoriety | UO.Notoriety |
| Status | UO.GetStatus · UO.Alive · UO.Dead · UO.Hidden · UO.Poisoned · UO.Paralyzed |
| Rename | UO.Rename |
UO.GetMobile · UO.GetMobiles · UO.IsNpc
UO.Followers · UO.GetFollowers · UO.FollowersMax · UO.GetFollowersMax · UO.PetsCurrent · UO.GetPetsCurrent · UO.PetsMax · UO.GetPetsMax
UO.Notoriety · UO.GetNotoriety
UO.CanChangeName · UO.MobileCanBeRenamed · UO.Rename · UO.RenameMobile
Cada tarjeta de comando tiene varios escenarios independientes: código directo, funciones y clases. A continuación se muestran escenarios breves seleccionados; restricciones y análisis completos están en las cartas.
Parámetros, resultado y todos los escenarios
var radius = 12;
var allyStatus = 2;
var anyBody = -1;
var maxHeight = 8;
dynamic nearestFirst = true;
dynamic includeMe = false;
dynamic livingOnly = true;
dynamic visibleOnly = true;
var allies = UO.GetMobiles(radius, allyStatus, anyBody, maxHeight, nearestFirst, includeMe, livingOnly, visibleOnly);
if (Truth(ArrayLength(allies) == 0))
{
return null;
}
UO.AddObject("leader", allies[0]);
UO.Follow(allies[0], 2, false);
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;Parámetros, resultado y todos los escenarios
var value = UO.GetNotoriety();
UO.Print("GetNotoriety: " + Convert.ToString(value));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CanChangeName(object? id);Comprueba el signo conocido del cliente sobre la capacidad de cambiar el nombre de mobile.
-
id— Obligatorio serial/ID de un objeto específico: int, cadena hexadecimal o alias self, backpack, lasttarget, lastobject, lastcontainer, último estado, elemento de búsqueda, último cadáver o nombre AddObject. Esto no es graphic/type. El nombre no especificado se resuelve en 0; el comando no abre ningún objetivo nuevo. El argumento es necesario; para usted, pase self.
int 1 - cargado mobile tiene el atributo IsRenamable. int 0: falta el atributo, el objeto no es mobile, desconocido o eliminado. Este es el último permiso del servidor, por ejemplo para una mascota. El comando no cambia el nombre del objeto y no garantiza que el servidor acepte una solicitud posterior.
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 lee el modelo del cliente local; No hay solicitudes al servidor, ni esperas ni movimientos.
- El resultado se refiere al momento de la lectura. Después de UO.Wait u otra acción, el objeto y sus indicadores pueden cambiar.
- Este es el último permiso del servidor, por ejemplo para una mascota. El comando no cambia el nombre del objeto y no garantiza que el servidor acepte una solicitud posterior.
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.CanChangeName("self");
UO.Print("CanChangeName: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- El argumento self selecciona explícitamente su carácter. estado: 1/0 únicamente.
- Este es el último permiso del servidor, por ejemplo para una mascota. El comando no cambia el nombre del objeto y no garantiza que el servidor acepte una solicitud posterior.
var state = UO.CanChangeName("self");
if (Truth(state))
{
UO.Print("Rename permission flag is present");
}
else
{
UO.Print("Rename permission flag is absent");
}
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:
- IsNpc excluye sujeto y objeto desconocido. El objetivo almacena un único serial en lugar de una referencia activa a un lasttarget cambiante.
- El resultado se refiere al campo IsRenamable. Los datos se actualizan solo después de que el cliente recibe el estado apropiado.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.CanChangeName(target);
UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
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:
- UO.Wait(500): pausa en milisegundos. Después, se comprueba por separado que mobile todavía existe.
- Se comparan dos fotografías. Es posible que se pierdan los cambios intermedios y esta no es una suscripción continua a los eventos del servidor.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.CanChangeName(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.CanChangeName(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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: id (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.CanChangeName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CanChangeName:bridge.CanChangeName(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Código interno de implementación; no es un script independiente.
public int CanChangeName(InjectionValue id) => bridge.CanChangeName(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Followers();Ayuda a decidir de antemano si el personaje tiene suficiente espacio para la siguiente criatura domesticada o convocada. Followers muestra las ranuras de control ocupadas, FollowersMax es su límite total. Este no es el número de animales cercanos ni el comando de movimiento Follow. Lee el contador de estado de tu personaje: espacios de control de mascotas ocupados.
No hay parámetros.
int - espacios de control de mascotas ocupados, 0...255 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.
- Por ejemplo, 3 de 5 está ocupado; el espacio 2 está libre. El valor 4 puede significar cuatro criaturas para un espacio, una para cuatro o alguna otra combinación. Para una criatura en 2, el espacio de verificación “ocupado <máximo” no es suficiente: necesitas máximo - actual >= 2. El costo de una criatura específica y el límite los determina el servidor; no sustituya la constante 5 por FollowersMax.
- 0 no prueba que la mascota esté perdida, fallecida o liberada: puede estar vacía o el estado aún no ha sido actualizado. Un aumento en el contador es sólo una señal adicional de un cambio de control; no determina qué criatura es domesticada. Consulta también los mensajes del servidor y de la propia mascota. Estos espacios no son iguales a los lugares en el establo.
- El comando no acepta argumentos. Utilice las firmas exactas anteriores.
- La lectura del hilo del juego requiere Jugador.Followers 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.
- PetsCurrent/Followers informa espacios de control ocupados desde su estado type >= 3. Una mascota puede ocupar varios espacios; Las reglas para las criaturas convocadas y domesticadas las establece el servidor. Este no es el número de mobile visibles, ni la lista de mascotas ID, ni el número de animales cercanos.
- 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.Followers();
UO.Print("Followers: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- actual - ocupado, máximo - límite, freeSlots - diferencia. Con un límite desconocido/cero o datos inconsistentes, el ejemplo termina sin afirmar que el espacio está libre. El comando solo lee el estado más reciente, no solicita una nueva actualización.
var current = UO.Followers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
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:
- Primero seleccione el animal deseado para que su ID esté en lasttarget. requiredSlots=2 - configuración de ejemplo, reemplázala con el costo real de esta criatura en tu servidor. Si no hay suficiente espacio, no se establece el objetivo y no se solicita la habilidad. De lo contrario, la cola del objetivo se prepara ANTES del argumento único UseSkill("Domesticación de animales"). Iniciar un intento no garantiza el éxito: la habilidad, el alcance, la domesticación y la respuesta del servidor son importantes.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.Followers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
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:
- CanAddFollower es un ayudante de usuario completamente declarado, no un nuevo comando UO. Devuelve 1/true si hay un límite de caché suficiente; en caso contrario, 0/false. El parámetro extraSlots es el costo de la criatura que se AGREGA, no su type/ID. 2 - ejemplo; La función no domestica ni convoca. La verificación debe repetirse inmediatamente antes de actuar.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.Followers();
var maximum = UO.PetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= 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.RegisterCharacterGetterAliases [Followers]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Followers:bridge.Followers.
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.FollowersCreació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.FollowersMax();Ayuda a decidir de antemano si el personaje tiene suficiente espacio para la siguiente criatura domesticada o convocada. Followers muestra las ranuras de control ocupadas, FollowersMax es su límite total. Este no es el número de animales cercanos ni el comando de movimiento Follow. Lee el contador de estado de tu personaje: espacios máximos de control de mascotas.
No hay parámetros.
int - espacios máximos de control de mascotas, 0...255 en el modelo 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.
- Por ejemplo, 3 de 5 está ocupado; el espacio 2 está libre. El valor 4 puede significar cuatro criaturas para un espacio, una para cuatro o alguna otra combinación. Para una criatura en 2, el espacio de verificación “ocupado <máximo” no es suficiente: necesitas máximo - actual >= 2. El costo de una criatura específica y el límite los determina el servidor; no sustituya la constante 5 por FollowersMax.
- 0 no prueba que la mascota esté perdida, fallecida o liberada: puede estar vacía o el estado aún no ha sido actualizado. Un aumento en el contador es sólo una señal adicional de un cambio de control; no determina qué criatura es domesticada. Consulta también los mensajes del servidor y de la propia mascota. Estos espacios no son iguales a los lugares en el establo.
- El comando no acepta argumentos. Utilice las firmas exactas anteriores.
- La lectura del hilo del juego requiere Jugador.FollowersMax 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.
- PetsMax/FollowersMax informa el límite total de espacios permitidos por el servidor desde el estado type >= 3, no espacios libres. Puede haber más espacios ocupados que el límite. Considere la capacidad libre como máxima - corriente, reemplazando el resultado negativo por 0. El equipo no suelta nada, no domestica ni invoca nada.
- 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.FollowersMax();
UO.Print("FollowersMax: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- actual - ocupado, máximo - límite, freeSlots - diferencia. Con un límite desconocido/cero o datos inconsistentes, el ejemplo termina sin afirmar que el espacio está libre. El comando solo lee el estado más reciente, no solicita una nueva actualización.
var current = UO.Followers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
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:
- Primero seleccione el animal deseado para que su ID esté en lasttarget. requiredSlots=2 - configuración de ejemplo, reemplázala con el costo real de esta criatura en tu servidor. Si no hay suficiente espacio, no se establece el objetivo y no se solicita la habilidad. De lo contrario, la cola del objetivo se prepara ANTES del argumento único UseSkill("Domesticación de animales"). Iniciar un intento no garantiza el éxito: la habilidad, el alcance, la domesticación y la respuesta del servidor son importantes.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.Followers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
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:
- CanAddFollower es un ayudante de usuario completamente declarado, no un nuevo comando UO. Devuelve 1/true si hay un límite de caché suficiente; en caso contrario, 0/false. El parámetro extraSlots es el costo de la criatura que se AGREGA, no su type/ID. 2 - ejemplo; La función no domestica ni convoca. La verificación debe repetirse inmediatamente antes de actuar.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.PetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= 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.RegisterCharacterGetterAliases [FollowersMax]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FollowersMax:bridge.FollowersMax.
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.FollowersMaxCreació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.GetFollowers();Ayuda a decidir de antemano si el personaje tiene suficiente espacio para la siguiente criatura domesticada o convocada. Followers muestra las ranuras de control ocupadas, FollowersMax es su límite total. Este no es el número de animales cercanos ni el comando de movimiento Follow. Lee el contador de estado de tu personaje: espacios de control de mascotas ocupados.
No hay parámetros.
int - espacios de control de mascotas ocupados, 0...255 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.
- Por ejemplo, 3 de 5 está ocupado; el espacio 2 está libre. El valor 4 puede significar cuatro criaturas para un espacio, una para cuatro o alguna otra combinación. Para una criatura en 2, el espacio de verificación “ocupado <máximo” no es suficiente: necesitas máximo - actual >= 2. El costo de una criatura específica y el límite los determina el servidor; no sustituya la constante 5 por FollowersMax.
- 0 no prueba que la mascota esté perdida, fallecida o liberada: puede estar vacía o el estado aún no ha sido actualizado. Un aumento en el contador es sólo una señal adicional de un cambio de control; no determina qué criatura es domesticada. Consulta también los mensajes del servidor y de la propia mascota. Estos espacios no son iguales a los lugares en el establo.
- El comando no acepta argumentos. Utilice las firmas exactas anteriores.
- La lectura del hilo del juego requiere Jugador.Followers 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.
- PetsCurrent/Followers informa espacios de control ocupados desde su estado type >= 3. Una mascota puede ocupar varios espacios; Las reglas para las criaturas convocadas y domesticadas las establece el servidor. Este no es el número de mobile visibles, ni la lista de mascotas ID, ni el número de animales cercanos.
- 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.GetFollowers();
UO.Print("GetFollowers: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- actual - ocupado, máximo - límite, freeSlots - diferencia. Con un límite desconocido/cero o datos inconsistentes, el ejemplo termina sin afirmar que el espacio está libre. El comando solo lee el estado más reciente, no solicita una nueva actualización.
var current = UO.GetFollowers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
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:
- Primero seleccione el animal deseado para que su ID esté en lasttarget. requiredSlots=2 - configuración de ejemplo, reemplázala con el costo real de esta criatura en tu servidor. Si no hay suficiente espacio, no se establece el objetivo y no se solicita la habilidad. De lo contrario, la cola del objetivo se prepara ANTES del argumento único UseSkill("Domesticación de animales"). Iniciar un intento no garantiza el éxito: la habilidad, el alcance, la domesticación y la respuesta del servidor son importantes.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.GetFollowers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
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:
- CanAddFollower es un ayudante de usuario completamente declarado, no un nuevo comando UO. Devuelve 1/true si hay un límite de caché suficiente; en caso contrario, 0/false. El parámetro extraSlots es el costo de la criatura que se AGREGA, no su type/ID. 2 - ejemplo; La función no domestica ni convoca. La verificación debe repetirse inmediatamente antes de actuar.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.GetFollowers();
var maximum = UO.PetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= 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.RegisterCharacterGetterAliases [GetFollowers]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Followers:bridge.Followers.
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.FollowersCreació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.GetFollowersMax();Ayuda a decidir de antemano si el personaje tiene suficiente espacio para la siguiente criatura domesticada o convocada. Followers muestra las ranuras de control ocupadas, FollowersMax es su límite total. Este no es el número de animales cercanos ni el comando de movimiento Follow. Lee el contador de estado de tu personaje: espacios máximos de control de mascotas.
No hay parámetros.
int - espacios máximos de control de mascotas, 0...255 en el modelo 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.
- Por ejemplo, 3 de 5 está ocupado; el espacio 2 está libre. El valor 4 puede significar cuatro criaturas para un espacio, una para cuatro o alguna otra combinación. Para una criatura en 2, el espacio de verificación “ocupado <máximo” no es suficiente: necesitas máximo - actual >= 2. El costo de una criatura específica y el límite los determina el servidor; no sustituya la constante 5 por FollowersMax.
- 0 no prueba que la mascota esté perdida, fallecida o liberada: puede estar vacía o el estado aún no ha sido actualizado. Un aumento en el contador es sólo una señal adicional de un cambio de control; no determina qué criatura es domesticada. Consulta también los mensajes del servidor y de la propia mascota. Estos espacios no son iguales a los lugares en el establo.
- El comando no acepta argumentos. Utilice las firmas exactas anteriores.
- La lectura del hilo del juego requiere Jugador.FollowersMax 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.
- PetsMax/FollowersMax informa el límite total de espacios permitidos por el servidor desde el estado type >= 3, no espacios libres. Puede haber más espacios ocupados que el límite. Considere la capacidad libre como máxima - corriente, reemplazando el resultado negativo por 0. El equipo no suelta nada, no domestica ni invoca nada.
- 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.GetFollowersMax();
UO.Print("GetFollowersMax: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- actual - ocupado, máximo - límite, freeSlots - diferencia. Con un límite desconocido/cero o datos inconsistentes, el ejemplo termina sin afirmar que el espacio está libre. El comando solo lee el estado más reciente, no solicita una nueva actualización.
var current = UO.Followers();
var maximum = UO.GetFollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
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:
- Primero seleccione el animal deseado para que su ID esté en lasttarget. requiredSlots=2 - configuración de ejemplo, reemplázala con el costo real de esta criatura en tu servidor. Si no hay suficiente espacio, no se establece el objetivo y no se solicita la habilidad. De lo contrario, la cola del objetivo se prepara ANTES del argumento único UseSkill("Domesticación de animales"). Iniciar un intento no garantiza el éxito: la habilidad, el alcance, la domesticación y la respuesta del servidor son importantes.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.Followers();
var maximum = UO.GetFollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
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:
- CanAddFollower es un ayudante de usuario completamente declarado, no un nuevo comando UO. Devuelve 1/true si hay un límite de caché suficiente; en caso contrario, 0/false. El parámetro extraSlots es el costo de la criatura que se AGREGA, no su type/ID. 2 - ejemplo; La función no domestica ni convoca. La verificación debe repetirse inmediatamente antes de actuar.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.PetsCurrent();
var maximum = UO.GetFollowersMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= 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.RegisterCharacterGetterAliases [GetFollowersMax]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FollowersMax:bridge.FollowersMax.
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.FollowersMaxCreació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 · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMobile(object? id);Recopila un registro compacto de propiedades una por una ID.
-
id— Serie/ID de un objeto específico: int, cadena decimal/hexadecimal o alias de conjunto self, backpack, lasttarget, lastobject o nombre AddObject. Esto no es graphic/type.
Matriz de campos 9: [0] int serial, [1] string nombre, [2] int X, [3] int Y, [4] int Z, [5] int HP, [6] int MaxHP, [7] int notoriedad, [8] int dirección 0..7. Para el ID desconocido, la matriz también tiene campos 9: el ID pasado se almacena, el nombre está vacío, las propiedades numéricas no disponibles son 0. Este no es un registro Pascal completo de TMobile.
- Se leen los datos ya descargados por el cliente. El comando no abre el contenedor, no mueve elementos ni descarga objetos de todo el servidor.
- Matriz: matriz con índices que comienzan desde 0. Guárdalo en var, marca ArrayLength antes de acceder. Los elementos pueden desaparecer del mundo después de tomar una instantánea: marque Exists(serial) antes de actuar.
- Tener nueve campos no confirma la existencia del personaje; utilice Exists. El comando en sí no verifica que ID pertenezca a Mobile. Se pueden devolver el nombre/coordenadas del elemento y las propiedades de cero caracteres.
- HP/MaxHP de otro carácter depende de la escala enviada por el servidor. Z es la altura, no la capa de equipo.
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.GetMobile("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- ID=self. [1] es el nombre, [5]/[6] son el HP actual y máximo, no Mana.
- La matriz ha arreglado nueve campos. El nombre vacío y 0/0 son posibles antes de ingresar al mundo.
var mobile = UO.GetMobile("self");
UO.Print(mobile[1] + ": " + Convert.ToString(mobile[5]) + "/" + Convert.ToString(mobile[6]));Parámetros y flujo de ejecución:
- lasttarget debe apuntar al personaje. [2]/[3]/[4] - X/Y/Z del mundo.
- Primero se comprueba la presencia del objeto. Si el objetivo es un objeto de la bolsa, las coordenadas se refieren a su goma.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(target)))
{
var mobile = UO.GetMobile(target);
UO.Print(Convert.ToString(mobile[2]) + "," + Convert.ToString(mobile[3]) + "," + Convert.ToString(mobile[4]));
}
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:
- [7] - que significa notoriedad, [8] - dirección 0..7. Ningún campo es type.
- El comando lee datos conocidos, no dirige al personaje ni cambia el modo de combate.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(target)))
{
var mobile = UO.GetMobile(target);
UO.Print("Notoriety: " + Convert.ToString(mobile[7]));
UO.Print("Direction: " + Convert.ToString(mobile[8]));
}
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: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetZ:bridge.GetZ(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetNotoriety:bridge.GetNotoriety(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetDir:bridge.GetDir(id).
Código interno de implementación; no es un script independiente.
case "getmobile":
{
int id = Arg(0);
return new InjectionValue(new[]
{
new InjectionValue(id), new InjectionValue(bridge.GetName(id)), new InjectionValue(bridge.GetX(id)),
new InjectionValue(bridge.GetY(id)), new InjectionValue(bridge.GetZ(id)), new InjectionValue(bridge.GetHP(id)),
new InjectionValue(bridge.GetMaxHP(id)), new InjectionValue(bridge.GetNotoriety(id)), new InjectionValue(bridge.GetDir(id))
});
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMobiles();
dynamic UO.GetMobiles(object? distance);
dynamic UO.GetMobiles(object? distance, object? notoriety);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest, object? includeSelf);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest, object? includeSelf, object? aliveOnly);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest, object? includeSelf, object? aliveOnly, object? visibleOnly);Obtiene una matriz ID de caracteres cargados coincidentes/NPC. Es necesario cuando el script necesita verificar varios objetivos, seleccionar el suyo propio, calcular el entorno o agregar su propia condición antes de una acción.
-
distance— Radio horizontal en celdas inclusive: 5 permite la distancia 0..5. La distancia es máxima (abs (dx), abs (dy)), por lo que la diagonal adyacente también es 1. De forma predeterminada o si el número es negativo, se toma UO.FindDistance() en lugar de una búsqueda ilimitada. 0 sale de la misma celda X/Y. No la longitud de la ruta; Los obstáculos y los suelos no se controlan con este parámetro. -
notoriety— Estado de relación con el personaje recibido del servidor: 0 — desconocido, 1 — Inocente, 2 — Aliado, 3 — Gris, 4 — Criminal, 5 — Enemigo, 6 — Asesino, 7 - Invulnerable. El número significa un estado; "5|6" o una serie de números: cualquiera de los anteriores. No es el color de la ropa ni la clase. Un número negativo (normalmente -1), 0xFFFF, "cualquiera", una cadena vacía o una matriz vacía desactivan este filtro por separado. Una cadena no válida sin números válidos no encuentra a nadie. El orden de los estados no establece prioridad. El filtro 5 selecciona Enemigo en lugar de seleccionar automáticamente cualquier NPC/monstruo; Los valores reales dependen del servidor. -
body- Gráfico del cuerpo del personaje/NPC, no ID de un personaje específico y no type de la armadura usada. Un número, una cadena hexadecimal, la cadena "0x0190|0x0191" o una matriz de números. 0x0190 (400) - hombre humano; 0x0191 (401) - humana femenina. La máscara une ambos cuerpos. La lista no incluye automáticamente otras razas, fantasmas o transformaciones; tabla de tipos de cuerpos gráficos estándar. Un número negativo (-1 por defecto), 0xFFFF, "cualquiera", una cadena vacía o una matriz vacía sola: cualquier cuerpo. El texto desconocido sin un número válido produce un resultado vacío. -
maxZ— Abs máximos (Z del objetivo - Z del propio personaje), inclusive, en unidades Z del mundo. Este no es el número de pisos o celdas X/Y. maxZ=4 con el jugador Z 10 permite el objetivo Z 6..14; 0 requiere exactamente la misma altura. De forma predeterminada/para un número negativo, se toma UO.FindVertical(). En las escaleras, una Z igual puede eliminar el objetivo deseado. Incluso una pequeña diferencia en Z no demuestra la accesibilidad del suelo. -
nearest- true/1 ordena la matriz de cerca a lejos, luego por serial si es igual. false/0 conserva el orden del cliente de forma predeterminada. Este no es un radio adicional ni una selección de un objeto. -
includeSelf- true/1 le permite habilitar self si todos los demás filtros y Ignore lo permiten. false/0 excluye self de forma predeterminada. La inclusión no garantiza la presencia de self en el resultado. -
aliveOnly- true/1 excluye móviles con IsDead != 0; false/0 no agrega esta condición de forma predeterminada. No comparar HP con cero, no buscar elementos del cadáver y no garantizar que el objetivo permanecerá vivo después de ser convocado. -
visibleOnly- true/1 requiere IsVisible=1 según el estado actual ClassicUO; false/0 no agrega una condición de forma predeterminada. Esta es la visibilidad del objeto cargado para el cliente, no una verificación de la pared/línea de visión. Para la verificación geométrica hay un UO.CheckLOS separado con coordenadas; el servidor aún puede rechazar la acción.
Matriz - serial móviles. Una matriz vacía significa que no hay coincidencias; marque ArrayLength antes de los objetivos[0]. No body/type, no total HP, no 1/0. La forma sin argumentos todavía se aplica FindDistance/FindVertical/Ignore y excluye self.
- Búsqueda local: sólo móviles ya descargados. se tiene en cuenta Ignore; self está excluido, excepto el includeSelf=true explícito en los comandos que lo admiten. Los contenedores y artículos no son móviles.
- Las condiciones se aplican juntas (AND). Las alternativas válidas dentro de body/notoriedad se combinan a través de OR. La búsqueda no cambia FindItem, FindCount y GetFoundItems.
- En body/notoriedad, la máscara con números válidos usa estos: "cualquier|5" todavía la limita a 5. Los elementos en blanco/no válidos junto a números válidos se ignoran. Sin restricciones, pase -1 por separado. No lleve esta regla a classMask: el nombre de clase desconocido rechaza la lista completa.
- Los equipos no abren una zona del mundo, no corren hacia la meta y no comprueban la transitabilidad de la ruta. Entre la selección y el procesamiento del servidor, el estado del mundo puede cambiar.
- La transmisión de true y 1 es equivalente para las banderas, false y 0 también. Otros números distintos de cero también se convierten a true, pero 8/9 no son modos separados; use claro true/false.
- 0..8 se admiten argumentos posicionales. classMask y el color no están presentes en este comando; no transfiera el orden de los argumentos AttackNearest aquí.
- Matriz - instantánea ID. El objetivo puede desaparecer más tarde; Vuelva a verificar Exists si hubo una espera entre la búsqueda y la acción. Nada ataca por sí solo.
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.GetMobiles(5, 2, -1, 8, true, false, true, true);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- nearestFirst=true convierte a los aliados[0] en los aliados más cercanos. Follow incluye caminar en segundo plano; detiene UO.Follow(0). El nombre/clase del aliado no está determinado por este comando.
var radius = 12;
var allyStatus = 2;
var anyBody = -1;
var maxHeight = 8;
dynamic nearestFirst = true;
dynamic includeMe = false;
dynamic livingOnly = true;
dynamic visibleOnly = true;
var allies = UO.GetMobiles(radius, allyStatus, anyBody, maxHeight, nearestFirst, includeMe, livingOnly, visibleOnly);
if (Truth(ArrayLength(allies) == 0))
{
return null;
}
UO.AddObject("leader", allies[0]);
UO.Follow(allies[0], 2, false);
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;Parámetros y flujo de ejecución:
- Aquí el más cercano=false es apropiado: el contador es importante. ArrayLength es la cantidad de móviles, no la cantidad de elementos en la pila. Alarm imprime un aviso en el registro.
return RunScenario();
object? RunScenario()
{
var enemies = UO.GetMobiles(5, "5|6", -1, 4, false, false, true, true);
var count = ArrayLength(enemies);
if (Truth(count == 1))
{
UO.Attack(enemies[0]);
}
else if (Truth(count > 1))
{
UO.Alarm();
}
return null;
}
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;Parámetros y flujo de ejecución:
- distancia=0 - idéntico X/Y, maxZ=0 - idéntico Z. body está limitado a dos graphic. includeSelf=true permite self, pero aún debe coincidir con body y aliveOnly. El ejemplo muestra otros personajes en el mismo cuadrado.
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 sameCell = UO.GetMobiles(0, -1, "0x0190|0x0191", 0, false, true, true, false);
var i = 0;
var others = 0;
while (Truth(i < ArrayLength(sameCell)))
{
if (Truth(sameCell[i] != UO.GetSerial("self")))
{
others += 1;
}
i += 1;
}
if (Truth(others > 0))
{
UO.Alarm();
}
return null;
}
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: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(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 => CompactGetMobiles(values)Parámetros: distance (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(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 => CompactGetMobiles(values)Parámetros: distance (Any), notoriety (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(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 => CompactGetMobiles(values)Parámetros: distance (Any), notoriety (Any), body (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(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 => CompactGetMobiles(values)Parámetros: distance (Any), notoriety (Any), body (Any), maxZ (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(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 => CompactGetMobiles(values)Parámetros: distance (Any), notoriety (Any), body (Any), maxZ (Any), nearest (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(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 => CompactGetMobiles(values)
UO.GetMobiles(distance, notoriety, body, maxZ, nearest, includeSelf) — UO.GetMobiles(Any,Any,Any,Any,Any,Any)
Parámetros: distance (Any), notoriety (Any), body (Any), maxZ (Any), nearest (Any), includeSelf (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(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 => CompactGetMobiles(values)
UO.GetMobiles(distance, notoriety, body, maxZ, nearest, includeSelf, aliveOnly) — UO.GetMobiles(Any,Any,Any,Any,Any,Any,Any)
Parámetros: distance (Any), notoriety (Any), body (Any), maxZ (Any), nearest (Any), includeSelf (Any), aliveOnly (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(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 => CompactGetMobiles(values)
UO.GetMobiles(distance, notoriety, body, maxZ, nearest, includeSelf, aliveOnly, visibleOnly) — UO.GetMobiles(Any,Any,Any,Any,Any,Any,Any,Any)
Parámetros: distance (Any), notoriety (Any), body (Any), maxZ (Any), nearest (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(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 => CompactGetMobiles(values)Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetNotoriety();
int UO.GetNotoriety(object? id);Lee la reputación del personaje desde el modelo del cliente.
-
id: objeto opcional solo en los formatos de parámetro único especificados: serial número/cadena hexadecimal, "self", "lasttarget" o nombre AddObject. Esto no es graphic/type. Sin argumentos, se lee el propio carácter. Antes de leer otro objeto, marque UO.Exists; un nombre desconocido no abre el alcance.
int — 0=desconocido, 1=inocente, 2=aliado, 3=gris, 4=criminal, 5=enemigo, 6=asesino, 7=invulnerable. Este es un código de estado, no hue, karma o fama. Desconocido mobile da 0.
- 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.GetNotoriety();
UO.Print("GetNotoriety: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- La llamada sin argumentos hace referencia a self. La reputación del personaje se almacena en valor.
- Convertir.ToString convierte el número que se generará y no cambia el significado del resultado.
var value = UO.GetNotoriety();
UO.Print("GetNotoriety: " + Convert.ToString(value));Parámetros y flujo de ejecución:
- El valor se lee una vez sin ningún argumento. La reputación del personaje se utiliza en el cálculo o condición mostrada.
- Los umbrales numéricos son ejemplos de condiciones de script y no de límites de nuevos clientes. El campo almacena las unidades de servidor y las restricciones descritas anteriormente.
return RunScenario();
object? RunScenario()
{
var value = UO.GetNotoriety();
if (Truth(value == 3) || Truth(value == 4))
{
UO.Print("Gray or criminal notoriety");
}
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 argumento único selecciona el objeto lasttarget; su serial debe ser conocido por el cliente. El gráfico/type no se transfiere aquí.
- Los datos de otro objeto pueden ser desconocidos incluso si Exists es positivo. Para las coordenadas de un artículo en una bolsa, se obtiene la posición del contenedor, no el punto mundial.
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(UO.Exists("lasttarget")))
{
var targetValue = UO.GetNotoriety("lasttarget");
UO.Print("Selected value: " + Convert.ToString(targetValue));
}
else
{
UO.Print("Target is not loaded");
}
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: Sin parámetros.
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetNotoriety]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetNotoriety:bridge.GetNotoriety(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.GetNotoriety(bridge.Self)Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.
Parámetros: id (Any/Integer/String)
Resultado: int / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetNotoriety:bridge.GetNotoriety(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "getnotoriety": return new InjectionValue(bridge.GetNotoriety(Arg(0)));Parámetros: id (Any/Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.GetNotoriety. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetNotoriety:bridge.GetNotoriety(id).
Código interno de implementación; no es un script independiente.
public int GetNotoriety(int id) => bridge.GetNotoriety(id);Parámetros: id (Any/Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.GetNotoriety. -
InjectionScript.Runtime.InjectionApiUO.GetNotoriety:GetNotoriety(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Código interno de implementación; no es un script independiente.
public int GetNotoriety(string id) => GetNotoriety(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPetsCurrent();Ayuda a decidir de antemano si el personaje tiene suficiente espacio para la siguiente criatura domesticada o convocada. Followers muestra las ranuras de control ocupadas, FollowersMax es su límite total. Este no es el número de animales cercanos ni el comando de movimiento Follow. Lee el contador de estado de tu personaje: espacios de control de mascotas ocupados.
No hay parámetros.
int - espacios de control de mascotas ocupados, 0...255 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.
- Por ejemplo, 3 de 5 está ocupado; el espacio 2 está libre. El valor 4 puede significar cuatro criaturas para un espacio, una para cuatro o alguna otra combinación. Para una criatura en 2, el espacio de verificación “ocupado <máximo” no es suficiente: necesitas máximo - actual >= 2. El costo de una criatura específica y el límite los determina el servidor; no sustituya la constante 5 por FollowersMax.
- 0 no prueba que la mascota esté perdida, fallecida o liberada: puede estar vacía o el estado aún no ha sido actualizado. Un aumento en el contador es sólo una señal adicional de un cambio de control; no determina qué criatura es domesticada. Consulta también los mensajes del servidor y de la propia mascota. Estos espacios no son iguales a los lugares en el establo.
- El comando no acepta argumentos. Utilice las firmas exactas anteriores.
- La lectura del hilo del juego requiere Jugador.Followers 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.
- PetsCurrent/Followers informa espacios de control ocupados desde su estado type >= 3. Una mascota puede ocupar varios espacios; Las reglas para las criaturas convocadas y domesticadas las establece el servidor. Este no es el número de mobile visibles, ni la lista de mascotas ID, ni el número de animales cercanos.
- 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.GetPetsCurrent();
UO.Print("GetPetsCurrent: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- actual - ocupado, máximo - límite, freeSlots - diferencia. Con un límite desconocido/cero o datos inconsistentes, el ejemplo termina sin afirmar que el espacio está libre. El comando solo lee el estado más reciente, no solicita una nueva actualización.
var current = UO.GetPetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
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:
- Primero seleccione el animal deseado para que su ID esté en lasttarget. requiredSlots=2 - configuración de ejemplo, reemplázala con el costo real de esta criatura en tu servidor. Si no hay suficiente espacio, no se establece el objetivo y no se solicita la habilidad. De lo contrario, la cola del objetivo se prepara ANTES del argumento único UseSkill("Domesticación de animales"). Iniciar un intento no garantiza el éxito: la habilidad, el alcance, la domesticación y la respuesta del servidor son importantes.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.GetPetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
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:
- CanAddFollower es un ayudante de usuario completamente declarado, no un nuevo comando UO. Devuelve 1/true si hay un límite de caché suficiente; en caso contrario, 0/false. El parámetro extraSlots es el costo de la criatura que se AGREGA, no su type/ID. 2 - ejemplo; La función no domestica ni convoca. La verificación debe repetirse inmediatamente antes de actuar.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.GetPetsCurrent();
var maximum = UO.PetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= 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.RegisterCharacterGetterAliases [GetPetsCurrent]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Followers:bridge.Followers.
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.FollowersCreació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.GetPetsMax();Ayuda a decidir de antemano si el personaje tiene suficiente espacio para la siguiente criatura domesticada o convocada. Followers muestra las ranuras de control ocupadas, FollowersMax es su límite total. Este no es el número de animales cercanos ni el comando de movimiento Follow. Lee el contador de estado de tu personaje: espacios máximos de control de mascotas.
No hay parámetros.
int - espacios máximos de control de mascotas, 0...255 en el modelo 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.
- Por ejemplo, 3 de 5 está ocupado; el espacio 2 está libre. El valor 4 puede significar cuatro criaturas para un espacio, una para cuatro o alguna otra combinación. Para una criatura en 2, el espacio de verificación “ocupado <máximo” no es suficiente: necesitas máximo - actual >= 2. El costo de una criatura específica y el límite los determina el servidor; no sustituya la constante 5 por FollowersMax.
- 0 no prueba que la mascota esté perdida, fallecida o liberada: puede estar vacía o el estado aún no ha sido actualizado. Un aumento en el contador es sólo una señal adicional de un cambio de control; no determina qué criatura es domesticada. Consulta también los mensajes del servidor y de la propia mascota. Estos espacios no son iguales a los lugares en el establo.
- El comando no acepta argumentos. Utilice las firmas exactas anteriores.
- La lectura del hilo del juego requiere Jugador.FollowersMax 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.
- PetsMax/FollowersMax informa el límite total de espacios permitidos por el servidor desde el estado type >= 3, no espacios libres. Puede haber más espacios ocupados que el límite. Considere la capacidad libre como máxima - corriente, reemplazando el resultado negativo por 0. El equipo no suelta nada, no domestica ni invoca nada.
- 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.GetPetsMax();
UO.Print("GetPetsMax: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- actual - ocupado, máximo - límite, freeSlots - diferencia. Con un límite desconocido/cero o datos inconsistentes, el ejemplo termina sin afirmar que el espacio está libre. El comando solo lee el estado más reciente, no solicita una nueva actualización.
var current = UO.Followers();
var maximum = UO.GetPetsMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
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:
- Primero seleccione el animal deseado para que su ID esté en lasttarget. requiredSlots=2 - configuración de ejemplo, reemplázala con el costo real de esta criatura en tu servidor. Si no hay suficiente espacio, no se establece el objetivo y no se solicita la habilidad. De lo contrario, la cola del objetivo se prepara ANTES del argumento único UseSkill("Domesticación de animales"). Iniciar un intento no garantiza el éxito: la habilidad, el alcance, la domesticación y la respuesta del servidor son importantes.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.Followers();
var maximum = UO.GetPetsMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
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:
- CanAddFollower es un ayudante de usuario completamente declarado, no un nuevo comando UO. Devuelve 1/true si hay un límite de caché suficiente; en caso contrario, 0/false. El parámetro extraSlots es el costo de la criatura que se AGREGA, no su type/ID. 2 - ejemplo; La función no domestica ni convoca. La verificación debe repetirse inmediatamente antes de actuar.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.PetsCurrent();
var maximum = UO.GetPetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= 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.RegisterCharacterGetterAliases [GetPetsMax]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FollowersMax:bridge.FollowersMax.
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.FollowersMaxCreació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.IsNPC(object? objID);Comprueba el mobile cargado con el serial pasado explícitamente.
-
objID- Obligatorio serial/ID de un objeto específico: int, cadena hexadecimal o alias self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse o nombre AddObject. Esto no es graphic/type. El nombre no especificado se resuelve en 0; el comando no abre ningún objetivo nuevo. Sólo IsNpc también tiene un formulario sin argumentos registrado: se utiliza self.
int 1 - cargado, no eliminado mobile. int 0: un objeto desconocido serial o un objeto remoto. El nombre IsNPC no significa "solo personaje no jugador": tu propio personaje y otros jugadores también dan 1.
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 lee el modelo del cliente local; No hay solicitudes al servidor, ni esperas ni movimientos.
- El resultado se refiere al momento de la lectura. Después de UO.Wait u otra acción, el objeto y sus indicadores pueden cambiar.
- El administrador del juego trata a IsNpc e IsNPC como variantes del mismo nombre; en el código fuente C#, utilice la ortografía exacta del formulario público. Este resultado no puede distinguir de manera confiable al jugador de NPC; Las reglas para esta distinción dependen del servidor.
En C# los caracteres del nombre distinguen entre mayúsculas y minúsculas: UO.IsNPC requiere un argumento; el formulario UO.IsNpc() sin argumentos selecciona self. Ambos nombres buscan mobile, incluidos los jugadores, en lugar de exclusivamente NPC.
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.IsNPC(UO.Self());
UO.Print("IsNPC: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Esta forma C# requiere un argumento. El propio personaje también da 1; esta es una prueba de mobile y no exclusivamente de NPC.
int mobile = UO.IsNPC(UO.Self());
UO.Print($"Self is a loaded mobile: {mobile != 0}");Parámetros y flujo de ejecución:
- La serie se toma de lasttarget. Las coordenadas se leen solo si el cliente conoce mobile.
return RunScenario();
object? RunScenario()
{
string target = UO.GetSerial("lasttarget");
if (UO.IsNPC(target) == 0)
return false;
UO.Print($"Mobile coordinates: {UO.GetX(target)}, {UO.GetY(target)}, {UO.GetZ(target)}");
return true;
return null;
}Parámetros y flujo de ejecución:
- El personaje que entra al mundo es mobile y la mochila es un objeto. El resultado se refiere al momento de la lectura local.
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()
{
int character = UO.IsNPC(UO.Self());
int bag = UO.IsNPC(UO.Backpack());
UO.Print($"Character mobile flag: {character}; backpack mobile flag: {bag}");
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: objID (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsNpc:bridge.IsNpc(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "isnpc": return new InjectionValue(bridge.IsNpc(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsNpc();
int UO.IsNpc(object? id);-
id- Obligatorio serial/ID de un objeto específico: int, cadena hexadecimal o alias self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse o nombre AddObject. Esto no es graphic/type. El nombre no especificado se resuelve en 0; el comando no abre ningún objetivo nuevo. Sólo IsNpc también tiene un formulario sin argumentos registrado: se utiliza self.
int 1 - cargado, no eliminado mobile. int 0: un objeto desconocido serial o un objeto remoto. El nombre IsNPC no significa "solo personaje no jugador": tu propio personaje y otros jugadores también dan 1.
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 lee el modelo del cliente local; No hay solicitudes al servidor, ni esperas ni movimientos.
- El resultado se refiere al momento de la lectura. Después de UO.Wait u otra acción, el objeto y sus indicadores pueden cambiar.
- El administrador del juego trata a IsNpc e IsNPC como variantes del mismo nombre; en el código fuente C#, utilice la ortografía exacta del formulario público. Este resultado no puede distinguir de manera confiable al jugador de NPC; Las reglas para esta distinción dependen del servidor.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.
var result = UO.IsNpc();
UO.Print("IsNpc: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- La forma sin argumentos selecciona self. El resultado 1/0 no es serial y no distingue a NPC del jugador.
int mobile = UO.IsNpc();
if (mobile != 0) UO.Print("Self is a loaded mobile");Parámetros y flujo de ejecución:
- Preseleccione lasttarget. Primero se comprueba la carga del objeto; la clasificación mobile no define su hostilidad.
return RunScenario();
object? RunScenario()
{
string target = UO.GetSerial("lasttarget");
if (UO.Exists(target) == 0)
UO.Print("Target is not loaded");
else
UO.Print(UO.IsNpc(target) != 0 ? "Mobile: NPC or player" : "Loaded item");
return null;
}Parámetros y flujo de ejecución:
- El servidor puede normalizar los accesos de otras personas. El cheque no solicita el estado completo.
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()
{
string target = UO.GetSerial("lasttarget");
if (UO.IsNpc(target) != 0)
UO.Print($"Known hits: {UO.GetHP(target)}/{UO.GetMaxHP(target)}");
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:
-
InjectionScript.Runtime.InjectionApiUO.IsNpc. -
InjectionScript.Runtime.InjectionApiUO.IsNpc:IsNpc(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Código interno de implementación; no es un script independiente.
public int IsNpc() => IsNpc(bridge.Self);Parámetros: id (Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.IsNpc. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsNpc:bridge.IsNpc(id).
Código interno de implementación; no es un script independiente.
public int IsNpc(int id) => bridge.IsNpc(id);Parámetros: id (Integer/String)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.IsNpc. -
InjectionScript.Runtime.InjectionApiUO.IsNpc:IsNpc(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Código interno de implementación; no es un script independiente.
public int IsNpc(string id) => IsNpc(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.MobileCanBeRenamed(object? mobID);Comprueba el signo conocido del cliente sobre la capacidad de cambiar el nombre de mobile.
-
mobID— Obligatorio serial/ID de un objeto específico: int, cadena hexadecimal o alias self, backpack, lasttarget, lastobject, lastcontainer, último estado, elemento de búsqueda, último cadáver o nombre AddObject. Esto no es graphic/type. El nombre no especificado se resuelve en 0; el comando no abre ningún objetivo nuevo. El argumento es necesario; para usted, pase self.
int 1 - cargado mobile tiene el atributo IsRenamable. int 0: falta el atributo, el objeto no es mobile, desconocido o eliminado. Este es el último permiso del servidor, por ejemplo para una mascota. El comando no cambia el nombre del objeto y no garantiza que el servidor acepte una solicitud posterior.
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 lee el modelo del cliente local; No hay solicitudes al servidor, ni esperas ni movimientos.
- El resultado se refiere al momento de la lectura. Después de UO.Wait u otra acción, el objeto y sus indicadores pueden cambiar.
- Este es el último permiso del servidor, por ejemplo para una mascota. El comando no cambia el nombre del objeto y no garantiza que el servidor acepte una solicitud posterior.
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.MobileCanBeRenamed("self");
UO.Print("MobileCanBeRenamed: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- El argumento self selecciona explícitamente su carácter. estado: 1/0 únicamente.
- Este es el último permiso del servidor, por ejemplo para una mascota. El comando no cambia el nombre del objeto y no garantiza que el servidor acepte una solicitud posterior.
var state = UO.MobileCanBeRenamed("self");
if (Truth(state))
{
UO.Print("Rename permission flag is present");
}
else
{
UO.Print("Rename permission flag is absent");
}
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:
- IsNpc excluye sujeto y objeto desconocido. El objetivo almacena un único serial en lugar de una referencia activa a un lasttarget cambiante.
- El resultado se refiere al campo IsRenamable. Los datos se actualizan solo después de que el cliente recibe el estado apropiado.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.MobileCanBeRenamed(target);
UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
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:
- UO.Wait(500): pausa en milisegundos. Después, se comprueba por separado que mobile todavía existe.
- Se comparan dos fotografías. Es posible que se pierdan los cambios intermedios y esta no es una suscripción continua a los eventos del servidor.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.MobileCanBeRenamed(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.MobileCanBeRenamed(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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: mobID (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CanChangeName:bridge.CanChangeName(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "mobilecanberenamed": return new InjectionValue(bridge.CanChangeName(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Notoriety();Lee la reputación del personaje desde el modelo del cliente.
No hay parámetros.
int — 0=desconocido, 1=inocente, 2=aliado, 3=gris, 4=criminal, 5=enemigo, 6=asesino, 7=invulnerable. Este es un código de estado, no hue, karma o fama. Desconocido mobile da 0.
- 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.Notoriety();
UO.Print("Notoriety: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- La llamada sin argumentos hace referencia a self. La reputación del personaje se almacena en valor.
- Convertir.ToString convierte el número que se generará y no cambia el significado del resultado.
var value = UO.Notoriety();
UO.Print("Notoriety: " + Convert.ToString(value));Parámetros y flujo de ejecución:
- El valor se lee una vez sin ningún argumento. La reputación del personaje se utiliza en el cálculo o condición mostrada.
- Los umbrales numéricos son ejemplos de condiciones de script y no de límites de nuevos clientes. El campo almacena las unidades de servidor y las restricciones descritas anteriormente.
return RunScenario();
object? RunScenario()
{
var value = UO.Notoriety();
if (Truth(value == 3) || Truth(value == 4))
{
UO.Print("Gray or criminal notoriety");
}
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:
- Ambas llamadas sin argumento leen su valor actual. UO.Wait(1000) da una pausa de milisegundos entre disparos.
- El cambio que se compara es la reputación del personaje. Un ejemplo no cambia nada en el mundo y no espera sin cesar. Es posible que se pierdan los eventos ocurridos dentro de este segundo.
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 before = UO.Notoriety();
await Delay(1000);
var after = UO.Notoriety();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
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.RegisterCharacterGetterAliases [Notoriety]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetNotoriety:bridge.GetNotoriety(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.GetNotoriety(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.PetsCurrent();Ayuda a decidir de antemano si el personaje tiene suficiente espacio para la siguiente criatura domesticada o convocada. Followers muestra las ranuras de control ocupadas, FollowersMax es su límite total. Este no es el número de animales cercanos ni el comando de movimiento Follow. Lee el contador de estado de tu personaje: espacios de control de mascotas ocupados.
No hay parámetros.
int - espacios de control de mascotas ocupados, 0...255 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.
- Por ejemplo, 3 de 5 está ocupado; el espacio 2 está libre. El valor 4 puede significar cuatro criaturas para un espacio, una para cuatro o alguna otra combinación. Para una criatura en 2, el espacio de verificación “ocupado <máximo” no es suficiente: necesitas máximo - actual >= 2. El costo de una criatura específica y el límite los determina el servidor; no sustituya la constante 5 por FollowersMax.
- 0 no prueba que la mascota esté perdida, fallecida o liberada: puede estar vacía o el estado aún no ha sido actualizado. Un aumento en el contador es sólo una señal adicional de un cambio de control; no determina qué criatura es domesticada. Consulta también los mensajes del servidor y de la propia mascota. Estos espacios no son iguales a los lugares en el establo.
- El comando no acepta argumentos. Utilice las firmas exactas anteriores.
- La lectura del hilo del juego requiere Jugador.Followers 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.
- PetsCurrent/Followers informa espacios de control ocupados desde su estado type >= 3. Una mascota puede ocupar varios espacios; Las reglas para las criaturas convocadas y domesticadas las establece el servidor. Este no es el número de mobile visibles, ni la lista de mascotas ID, ni el número de animales cercanos.
- 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.PetsCurrent();
UO.Print("PetsCurrent: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- actual - ocupado, máximo - límite, freeSlots - diferencia. Con un límite desconocido/cero o datos inconsistentes, el ejemplo termina sin afirmar que el espacio está libre. El comando solo lee el estado más reciente, no solicita una nueva actualización.
var current = UO.PetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
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:
- Primero seleccione el animal deseado para que su ID esté en lasttarget. requiredSlots=2 - configuración de ejemplo, reemplázala con el costo real de esta criatura en tu servidor. Si no hay suficiente espacio, no se establece el objetivo y no se solicita la habilidad. De lo contrario, la cola del objetivo se prepara ANTES del argumento único UseSkill("Domesticación de animales"). Iniciar un intento no garantiza el éxito: la habilidad, el alcance, la domesticación y la respuesta del servidor son importantes.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.PetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
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:
- CanAddFollower es un ayudante de usuario completamente declarado, no un nuevo comando UO. Devuelve 1/true si hay un límite de caché suficiente; en caso contrario, 0/false. El parámetro extraSlots es el costo de la criatura que se AGREGA, no su type/ID. 2 - ejemplo; La función no domestica ni convoca. La verificación debe repetirse inmediatamente antes de actuar.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.PetsCurrent();
var maximum = UO.PetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= 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.Followers:bridge.Followers.
Código interno de implementación; no es un script independiente.
case "petscurrent": return new InjectionValue(bridge.Followers);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PetsMax();Ayuda a decidir de antemano si el personaje tiene suficiente espacio para la siguiente criatura domesticada o convocada. Followers muestra las ranuras de control ocupadas, FollowersMax es su límite total. Este no es el número de animales cercanos ni el comando de movimiento Follow. Lee el contador de estado de tu personaje: espacios máximos de control de mascotas.
No hay parámetros.
int - espacios máximos de control de mascotas, 0...255 en el modelo 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.
- Por ejemplo, 3 de 5 está ocupado; el espacio 2 está libre. El valor 4 puede significar cuatro criaturas para un espacio, una para cuatro o alguna otra combinación. Para una criatura en 2, el espacio de verificación “ocupado <máximo” no es suficiente: necesitas máximo - actual >= 2. El costo de una criatura específica y el límite los determina el servidor; no sustituya la constante 5 por FollowersMax.
- 0 no prueba que la mascota esté perdida, fallecida o liberada: puede estar vacía o el estado aún no ha sido actualizado. Un aumento en el contador es sólo una señal adicional de un cambio de control; no determina qué criatura es domesticada. Consulta también los mensajes del servidor y de la propia mascota. Estos espacios no son iguales a los lugares en el establo.
- El comando no acepta argumentos. Utilice las firmas exactas anteriores.
- La lectura del hilo del juego requiere Jugador.FollowersMax 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.
- PetsMax/FollowersMax informa el límite total de espacios permitidos por el servidor desde el estado type >= 3, no espacios libres. Puede haber más espacios ocupados que el límite. Considere la capacidad libre como máxima - corriente, reemplazando el resultado negativo por 0. El equipo no suelta nada, no domestica ni invoca nada.
- 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.PetsMax();
UO.Print("PetsMax: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- actual - ocupado, máximo - límite, freeSlots - diferencia. Con un límite desconocido/cero o datos inconsistentes, el ejemplo termina sin afirmar que el espacio está libre. El comando solo lee el estado más reciente, no solicita una nueva actualización.
var current = UO.Followers();
var maximum = UO.PetsMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
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:
- Primero seleccione el animal deseado para que su ID esté en lasttarget. requiredSlots=2 - configuración de ejemplo, reemplázala con el costo real de esta criatura en tu servidor. Si no hay suficiente espacio, no se establece el objetivo y no se solicita la habilidad. De lo contrario, la cola del objetivo se prepara ANTES del argumento único UseSkill("Domesticación de animales"). Iniciar un intento no garantiza el éxito: la habilidad, el alcance, la domesticación y la respuesta del servidor son importantes.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.Followers();
var maximum = UO.PetsMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
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:
- CanAddFollower es un ayudante de usuario completamente declarado, no un nuevo comando UO. Devuelve 1/true si hay un límite de caché suficiente; en caso contrario, 0/false. El parámetro extraSlots es el costo de la criatura que se AGREGA, no su type/ID. 2 - ejemplo; La función no domestica ni convoca. La verificación debe repetirse inmediatamente antes de actuar.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.PetsCurrent();
var maximum = UO.PetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= 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.FollowersMax:bridge.FollowersMax.
Código interno de implementación; no es un script independiente.
case "petsmax": return new InjectionValue(bridge.FollowersMax);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Rename(object? mobile, object? newName);Solicita un cambio de nombre de personaje/mascota.
-
mobile— 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. -
newName— Texto a través de ToString; guardado como transmitido.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- El orden es serial, luego el nuevo nombre. Puente.RenameMobile llama a GameActions.Rename(serial, nombre). API no verifica CanChangeName ni cambia el Name local.
- El servidor verifica el permiso para cambiar el nombre. Para mascota, primero marque MobileCanBeRenamed; la solicitud no garantiza la aceptación del nombre.
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.Rename");
UO.Rename(UO.GetSerial("lasttarget"), "Companion");Parámetros y flujo de ejecución:
- Solicita un cambio de nombre de personaje/mascota.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.MobileCanBeRenamed(id)))
{
UO.Rename(id, "Companion");
}
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 orden es serial, luego el nuevo nombre. Puente.RenameMobile llama a GameActions.Rename(serial, nombre). API no verifica CanChangeName ni cambia el Name local.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)) && Truth(UO.MobileCanBeRenamed(id)))
{
UO.Rename(id, "Guardian");
}
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 servidor verifica el permiso para cambiar el nombre. Para mascota, primero marque MobileCanBeRenamed; la solicitud no garantiza la aceptación del nombre.
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()
{
RenamePet(UO.GetSerial("lasttarget"), "Companion");
return null;
}
void RenamePet(dynamic id, dynamic name)
{
if (Truth(UO.MobileCanBeRenamed(id)) && Truth(Len(name) > 0))
{
UO.Rename(id, name);
}
}
int Len(object? value) => Convert.ToString(value)?.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: mobile (Any), newName (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RenameMobile:bridge.RenameMobile(Arg(0, bridge.LastTarget), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Código interno de implementación; no es un script independiente.
case "rename": bridge.RenameMobile(Arg(0, bridge.LastTarget), Text(1)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RenameMobile(object? mobID, object? newName);Solicita un cambio de nombre de personaje/mascota.
-
mobID— 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. -
newName— Texto a través de ToString; guardado como transmitido.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- El orden es serial, luego el nuevo nombre. Puente.RenameMobile llama a GameActions.Rename(serial, nombre). API no verifica CanChangeName ni cambia el Name local.
- El servidor verifica el permiso para cambiar el nombre. Para mascota, primero marque MobileCanBeRenamed; la solicitud no garantiza la aceptación del nombre.
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.RenameMobile");
UO.RenameMobile(UO.GetSerial("lasttarget"), "Companion");Parámetros y flujo de ejecución:
- Solicita un cambio de nombre de personaje/mascota.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.MobileCanBeRenamed(id)))
{
UO.RenameMobile(id, "Companion");
}
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 orden es serial, luego el nuevo nombre. Puente.RenameMobile llama a GameActions.Rename(serial, nombre). API no verifica CanChangeName ni cambia el Name local.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)) && Truth(UO.MobileCanBeRenamed(id)))
{
UO.RenameMobile(id, "Guardian");
}
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 servidor verifica el permiso para cambiar el nombre. Para mascota, primero marque MobileCanBeRenamed; la solicitud no garantiza la aceptación del nombre.
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()
{
RenamePet(UO.GetSerial("lasttarget"), "Companion");
return null;
}
void RenamePet(dynamic id, dynamic name)
{
if (Truth(UO.MobileCanBeRenamed(id)) && Truth(Len(name) > 0))
{
UO.RenameMobile(id, name);
}
}
int Len(object? value) => Convert.ToString(value)?.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: mobID (Any), newName (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RenameMobile:bridge.RenameMobile(Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1).
Código interno de implementación; no es un script independiente.
case "renamemobile": bridge.RenameMobile(Arg(0), Text(1)); return InjectionValue.Unit;