Repository navigation
ES UO Topic movement Part 2
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Inicio · C# · IDE · UO API · A–Z · Ejemplos · Idiomas
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ, object? avoidMobiles);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ, object? avoidMobiles, object? openDoors);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ, object? avoidMobiles, object? openDoors, object? stopOnStuck);Mueve el personaje a X/Y, espera el final y comprueba el logro del objetivo; admite restricciones adicionales y devoluciones de llamadas.
-
xdst— Coordenada mundial X del destino, 0...65535. Esto no es serial ni una posición dentro de una encía. -
ydst— Coordenada mundial Y de destino, 0...65535. -
optimized- true - modo normal de buscar y comprobar el camino a seguir; false: heurística reducida y verificación del paso más cercano. false no desactiva la evitación de obstáculos. -
accuracy— Tolerancia para X e Y en las celdas: ambas desviaciones deben encajar dentro de ella. El valor está limitado al rango 0..20; 0 requiere X/Y preciso. -
running- true/1 - ejecutar solicitud, false/0 - paso. Persisten los retrasos en el movimiento del servidor; No es un multiplicador de velocidad. -
timeout— Límite de espera opcional en milisegundos; un argumento faltante, 0 y un valor negativo indican la ausencia de este límite adicional. -
maxSteps: límite opcional de cambios de posición observados, no de paquetes de red. 0/negativo/ausente - sin este límite. Puede haber varios pasos entre encuestas, por lo que este no es un contador de celdas preciso. -
maxDistance: límite opcional en la distancia inicial máxima (abs(dx),abs(dy)) al objetivo. 0/ausencia lo desactiva. Esta no es la desviación permitida durante el recorrido ni la longitud del camino encontrado. -
accuracyZ— Tolerancia de altura: abs(Z real - Z requerida), limitada por 0...255. El cero requiere una altitud precisa; 255 esencialmente desactiva el límite Z. Para NewMoveXY la Z objetivo es igual a la Z del personaje cuando es convocado; La tolerancia predeterminada es 255. -
avoidMobiles— Bandera opcional: true prohíbe pasar por los caracteres que se tienen en cuenta; false permite el intento. Sin argumento, se utiliza moveThroughNPC. El servidor aún puede denegar el acceso. -
openDoors— Bandera opcional para abrir puertas en el camino. Sin argumento, se utiliza moveOpenDoor; true no proporciona acceso a puertas cerradas. -
stopOnStuck- true completa el movimiento con 0, si después de planificar aproximadamente 1000 ms X/Y/Z no han cambiado. Las partes de búsqueda activa y recálculo reinician este temporizador; el tiempo de espera separado continúa funcionando. El valor predeterminado es false.
int 1: al final de la verificación, el personaje se encuentra en la tolerancia dada X/Y/Z, incluso cuando ya estaba allí antes del desafío. int 0: coordenadas no válidas, error de lanzamiento, punto no alcanzado o condición de parada activada. No es la cantidad de pasos o serial; En caso de cancelación de emergencia, el procedimiento se cancela en lugar de volver a la normalidad 0.
El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.
- La ruta A* completa se construye antes del primer paso, en porciones cortas entre actualizaciones del cliente. Cuando Optimizado=true se marcan las siguientes celdas 4 de la ruta; cuando false es el paso más cercano. Se trata de una comprobación de la ruta ya calculada, y no de la distancia de toda la ruta ni de los controles deslizantes de desvío al mover el ratón.
- La falla del servidor DenyWalk o un nuevo obstáculo solicita un nuevo cálculo desde la posición actual después de completar la cola de pasos. El número de repeticiones y la frecuencia de recálculo son limitados; ningún camino puede finalizar el movimiento con 0.
- El recorrido pertenece al procedimiento que lo inició: su parada de emergencia anula el recorrido automático restante. Si otra carrera o usuario ya ha reemplazado la ruta, cancelar el propietario anterior no afecta la nueva ruta. Los pasos ya enviados no se recuperan.
- SetBadLocation y SetBadObject se utilizan como una instantánea de las prohibiciones del tiempo de ejecución actual cuando se inicia la ruta. Se guardan durante su recálculo interno. Cambiar o borrar listas afecta a la siguiente ruta, en lugar de sobrescribir una que ya está en progreso.
- UO.LimitMove controla la distancia al destino: 2000 por defecto, cero sin límite. No hay límites ocultos de 4096 pasos/nodos o 10000 nodos. El trabajo se divide en partes cancelables. GetPathArray respeta el umbral de resistencia moveThroughNPC y moveOpenDoor.
- El tiempo de espera se cuenta después de que se acepta la solicitud e incluye partes posteriores de búsqueda y recálculo. stopOnStuck no considera que una búsqueda en ejecución sea un carácter atascado; Una vez finalizada la planificación, no se vuelven a tener en cuenta cambios de posición. El 1/0 final verifica las coordenadas reales, no solo la preparación del camino.
- El resultado tiene en cuenta la posición local del cliente; La corrección posterior del servidor aún es posible. Ejecutar comandos de movimiento competitivos de diferentes rutinas cambia la ruta general del personaje.
- Las configuraciones moveCheckStamina, moveExitOnDisconnect, moveOpenDoor, moveThroughCorner, moveThroughNPC, moveHeuristicMult, moveTurnCost y moveBetweenTwoCorners afectan el rendimiento. avoidMobiles/openDoors explícito anula los valores correspondientes para esta llamada.
- El resultado 0 no indica la causa exacta. Verifique las coordenadas, la conexión, la resistencia y el registro; No repitas el movimiento infinitamente sin UO.Wait y un límite de intentos.
- El puente principal registra el número de solicitud, las instancias de jugador/Pathfinder/mapa y el índice del mapa. Una nueva solicitud, cambio de contexto o rechazo final da 0; la verificación se repite después de leer las coordenadas y la última devolución de llamada. El tiempo de espera, maxSteps y callback=0 solo detienen la solicitud guardada, no una nueva ruta externa. El Bloqueado Temporal, mientras la recuperación sigue activa, no pierde la posesión: la espera continúa. Para el puente heredado externo sin IApiMovementOwnershipBridge, se conserva el mecanismo compatible anterior.
- El Pathfinder general almacena hasta 8 prohibiciones direccionales X/Y/Z temporales durante 2000 ms, solo en caso de movimiento rechazado de la solicitud activa correspondiente. La rotación, la secuencia desconocida, la resincronización y la solicitud antigua/extraña no crean dicha prohibición. Una nueva solicitud externa y la pérdida del contexto del mapa/jugador los borra. La búsqueda de geometría cargada intenta omitir la transición; es no conocer todos los obstáculos del servidor. Sin cambiar el X/Y/Z del reproductor, se permiten hasta 8 recálculos internos con una pausa de al menos 40 ms. No existe un camino completo o este presupuesto se ha agotado: la ruta termina. Luego, la tarea coordinada se completa después de procesar los pasos enviados; mobile-Follow puede intentarlo nuevamente debido a su retraso.
La devolución de llamada del paso en C# se registra explícitamente a través de RegisterStepCallback(nombre, Func<int,int,int,bool>) o Func<int,int,int,int>. Las coordenadas x/y/z se transmiten como int; false/0 detiene la ruta, true/número distinto de cero continúa. El registro es válido en la ejecución actual y se libera con ella.
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.NewMoveXY((UO.GetX() + 3), UO.GetY(), true, 0, false);
UO.Print("NewMoveXY: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- x/y — objetivo mundial; Optimizado=true, Precisión=0 requiere X/Y preciso, Correr=false especifica caminar.
- ok - int 1 o 0, no la cantidad de celdas pasadas. El objetivo debe estar disponible en el mapa actual.
var x = UO.GetX() + 3;
var y = UO.GetY();
var ok = UO.NewMoveXY(x, y, true, 0, false);
if (Truth(ok))
{
UO.Print("Destination reached");
}
else
{
UO.Print("Destination not reached");
}
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:
- 1445/1690 - ejemplo de objetivo; Accuracy=1 permite aparcar cerca. Corriendo=true. StepCallback=0 desactiva la devolución de llamada.
- tiempo de espera=5000 ms; maxSteps=100 movimientos observados; maxDistance=30 se verifica desde el origen.
- AccuracyZ=255 no requiere piso; avoidMobiles=true, openDoors=true, stopOnStuck=true incluyen estas condiciones.
return RunScenario();
object? RunScenario()
{
var ok = UO.NewMoveXY(1445, 1690, true, 1, true, 0, 5000, 100, 30, 255, true, true, true);
UO.Print("Move result: " + Convert.ToString(ok));
return null;
}Parámetros y flujo de ejecución:
- StepCallback="AfterStep" recibe tres coordenadas. El registro RegisterStepCallback asocia el nombre con el delegado bool. Cuando Stamina <= 10 regresa false y deja de moverse; true continúa la ruta.
- timeout=5000 ms limita la espera. La devolución de llamada se realiza después de que se detecta un cambio y no se garantiza para cada paso de la red; No hagas una larga espera ni una nueva ruta en él.
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 stepRegistration = RegisterStepCallback("AfterStep", AfterStep);
var ok = UO.NewMoveXY(UO.GetX() + 5, UO.GetY(), true, 0, false, "AfterStep", 5000);
UO.Print("Move result: " + Convert.ToString(ok));
return null;
}
bool AfterStep(int x, int y, int z)
{
UO.Print("Position: " + Convert.ToString(x) + "," + Convert.ToString(y) + "," + Convert.ToString(z));
return UO.Stamina() > 10;
}
private IDisposable RegisterStepCallback(string name, Func<int, int, int, bool> handler) => global::ClassicUO.CSharp.CSharpScriptContext.Current.RegisterStepCallback(name, handler);
private IDisposable RegisterStepCallback(string name, Func<int, int, int, int> handler) => global::ClassicUO.CSharp.CSharpScriptContext.Current.RegisterStepCallback(name, handler);
}Parámetros y flujo de ejecución:
- GoToPoint es una función auxiliar solo para este ejemplo. Sus cuatro parámetros x/y/accuracy/running se describen arriba de la declaración de la función; el cuerpo completo de la función está en el mismo bloque copiado.
- Main evalúa el objetivo y llama a GoToPoint. Agrega optimizado=true, devolución de llamada=0, tiempo de espera=8000 y maxSteps=100, llama a NewMoveXY una vez y pasa el int devuelto a Principal.
- NewMoveXY es un comando de cliente integrado. Su búsqueda A*, verificación de permeabilidad y procesamiento de los pasos del servidor se implementan en el cliente y no en procedimientos ocultos adicionales de este script.
- En este ejemplo, la devolución de llamada está deshabilitada. Si otro ejemplo especifica un nombre de devolución de llamada o llama a una función de script adicional, su definición también debe proporcionarse en su totalidad.
- En C# comprobar si (alcanzado!= 0); un resultado numérico de 0 indica falla. Una comparación directa de int con bool no es aceptable. Una cancelación de emergencia interrumpe la ejecución y no es necesario devolver false.
var x = UO.GetX() + 3;
var y = UO.GetY();
var reached = GoToPoint(x, y, 0, true);
if (Truth(Truth(reached) == true))
{
UO.Print("Destination reached");
}
else
{
UO.Print("Destination not reached");
}
dynamic GoToPoint(dynamic x, dynamic y, dynamic accuracy, dynamic running)
{
dynamic optimized = true;
var callback = 0;
var timeout = 8000;
var maxSteps = 100;
var reached = UO.NewMoveXY(x, y, optimized, accuracy, running, callback, timeout, maxSteps);
return reached;
}
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: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactNewMoveXY(values))
UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any)
Parámetros: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactNewMoveXY(values))
UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any)
Parámetros: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactNewMoveXY(values))
UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any)
Parámetros: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactNewMoveXY(values))
UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any)
Parámetros: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactNewMoveXY(values))
UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Parámetros: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactNewMoveXY(values))
UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ, avoidMobiles) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Parámetros: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any), avoidMobiles (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactNewMoveXY(values))
UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ, avoidMobiles, openDoors) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Parámetros: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any), avoidMobiles (Any), openDoors (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactNewMoveXY(values))
UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ, avoidMobiles, openDoors, stopOnStuck) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Parámetros: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any), avoidMobiles (Any), openDoors (Any), stopOnStuck (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactNewMoveXY(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.OpenDoor();Solicita que se abra la puerta para el personaje.
No hay parámetros.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- OpenDoor llama a GameActions.OpenDoor a través de Invocar. No se acepta puerta serial; las reglas de búsqueda y descubrimiento pertenecen a GameActions/servidor.
- En los ejemplos, UO.Wait especifica solo una pausa del script; el final de la pausa no prueba que el servidor haya completado la solicitud.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.
UO.Print("Calling UO.OpenDoor");
UO.OpenDoor();Parámetros y flujo de ejecución:
- Solicita que se abra la puerta para el personaje.
UO.OpenDoor();Parámetros y flujo de ejecución:
- OpenDoor llama a GameActions.OpenDoor a través de Invocar. No se acepta puerta serial; las reglas de búsqueda y descubrimiento pertenecen a GameActions/servidor.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline()))
{
UO.OpenDoor();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros y flujo de ejecución:
- En los ejemplos, UO.Wait especifica solo una pausa del script; el final de la pausa no prueba que el servidor haya completado la solicitud.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.OpenDoor();
UO.Wait(250);
UO.Print("Door request sent");
return null;
}
}C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: Sin parámetros.
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenDoor:bridge.OpenDoor().
Código interno de implementación; no es un script independiente.
case "opendoor": bridge.OpenDoor(); break;PMove espera la búsqueda de ruta y el final del movimiento. XY exige coordenadas exactas; XYZ también exige la altura indicada. Devuelve void: compara las coordenadas reales. NewMoveXY o MoveXYZ ofrecen un resultado numérico. No hay un plazo implícito de 30 segundos.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PredictedDirection();Lee el lado de la dirección prevista después de los pasos ya en cola del personaje.
No hay parámetros.
dirección int 0..7, sin bit de ejecución. 0 - norte o ausencia de carácter.
- Sólo la función que se muestra en la sintaxis es UO sin argumentos. No hay parámetros de objetivo, serial, type, objetivo, distancia o tiempo de espera. El número que no sea bool, ID o la notación en mosaico: 1 no significa lograr el objetivo.
- GetEndPosition lee la dirección X/Y/Z/del último Mobile.Step ya agregado. Cuando la cola está vacía, lee la posición/dirección actual del personaje. Esta es una lectura O(1): el paso no se recupera, el movimiento y el paquete no se envían, la ruta no se calcula, el comando no espera un logro.
- Direcciones mundiales: 0 norte, 1 noreste, 2 este, 3 sureste, 4 sur, 5 suroeste, 6 oeste, 7 noroeste. La pantalla es isométrica. Direction.Mask elimina la bandera de ejecución; la velocidad no regresa.
- Este es un pronóstico local, no una llegada confirmada. Los pasos nuevos/completados, la falla del servidor, la limpieza de la cola o el teletransporte pueden cambiarlo. Las llamadas a componentes individuales no son atómicas; una coincidencia X no prueba una coincidencia Y/Z ni una confirmación del servidor.
- Invoke realiza una lectura en el hilo del juego; El hilo de trabajo está esperando que el administrador procese la solicitud. La cancelación del guión interrumpe la espera. No se agregan pausas ni solicitudes de red adicionales.
- Las implementaciones externas de IApiBridge sin IPredictedMovementBridge conservan una lectura alternativa de las coordenadas/dirección actuales. Classic UO implementa una interfaz compatible con colas.
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.PredictedDirection();
UO.Print("PredictedDirection: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- predicho guarda una llamada sin argumentos; Convertir.ToString formatea el número del registro.
var predicted = UO.PredictedDirection();
UO.Print("Predicted: " + Convert.ToString(predicted));Parámetros y flujo de ejecución:
- UO.Wait(100) pausa el ejemplo durante 100 ms. el antes y el después pueden coincidir incluso con un movimiento intermedio; estas lecturas no inician un movimiento.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.PredictedDirection();
await Delay(100);
var after = UO.PredictedDirection();
if (Truth(before != after))
{
UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + 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;Parámetros y flujo de ejecución:
- esperado: un ejemplo de coordenadas/altura/dirección, no un argumento para el comando nativo. PredictionEquals verifica UO.Self(), lee el valor una vez y devuelve 1 (condición cumplida) si es igual; en caso contrario, 0 (condición no cumplida). El código de función completo se muestra debajo de Principal. La coincidencia de un componente no significa llegada.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(PredictionEquals(4)) == true))
{
UO.Print("Queued endpoint matches this component");
}
else
{
UO.Print("Different component or no player");
}
return null;
}
dynamic PredictionEquals(dynamic expected)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var predicted = UO.PredictedDirection();
return Truth(predicted == expected);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: Sin parámetros.
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ReadPredictedCoordinate:ReadPredictedCoordinate(3).
Código interno de implementación; no es un script independiente.
case "predicteddirection": return new InjectionValue(ReadPredictedCoordinate(3));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PredictedX();Lee la coordenada X prevista después de los pasos ya en cola del personaje.
No hay parámetros.
int X en las celdas del mapa. 0 - coordenada válida o ausencia de carácter.
- Sólo la función que se muestra en la sintaxis es UO sin argumentos. No hay parámetros de objetivo, serial, type, objetivo, distancia o tiempo de espera. El número que no sea bool, ID o la notación en mosaico: 1 no significa lograr el objetivo.
- GetEndPosition lee la dirección X/Y/Z/del último Mobile.Step ya agregado. Cuando la cola está vacía, lee la posición/dirección actual del personaje. Esta es una lectura O(1): el paso no se recupera, el movimiento y el paquete no se envían, la ruta no se calcula, el comando no espera un logro.
- X e Y son coordenadas mundiales/mapa, no píxeles de contenedor. Z es la altura, no el número del piso. Se devuelve un único componente, no una matriz ni el destino final de toda la ruta.
- Este es un pronóstico local, no una llegada confirmada. Los pasos nuevos/completados, la falla del servidor, la limpieza de la cola o el teletransporte pueden cambiarlo. Las llamadas a componentes individuales no son atómicas; una coincidencia X no prueba una coincidencia Y/Z ni una confirmación del servidor.
- Invoke realiza una lectura en el hilo del juego; El hilo de trabajo está esperando que el administrador procese la solicitud. La cancelación del guión interrumpe la espera. No se agregan pausas ni solicitudes de red adicionales.
- Las implementaciones externas de IApiBridge sin IPredictedMovementBridge conservan una lectura alternativa de las coordenadas/dirección actuales. Classic UO implementa una interfaz compatible con colas.
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.PredictedX();
UO.Print("PredictedX: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- predicho guarda una llamada sin argumentos; Convertir.ToString formatea el número del registro.
var predicted = UO.PredictedX();
UO.Print("Predicted: " + Convert.ToString(predicted));Parámetros y flujo de ejecución:
- UO.Wait(100) pausa el ejemplo durante 100 ms. el antes y el después pueden coincidir incluso con un movimiento intermedio; estas lecturas no inician un movimiento.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.PredictedX();
await Delay(100);
var after = UO.PredictedX();
if (Truth(before != after))
{
UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + 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;Parámetros y flujo de ejecución:
- esperado: un ejemplo de coordenadas/altura/dirección, no un argumento para el comando nativo. PredictionEquals verifica UO.Self(), lee el valor una vez y devuelve 1 (condición cumplida) si es igual; en caso contrario, 0 (condición no cumplida). El código de función completo se muestra debajo de Principal. La coincidencia de un componente no significa llegada.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(PredictionEquals(1445)) == true))
{
UO.Print("Queued endpoint matches this component");
}
else
{
UO.Print("Different component or no player");
}
return null;
}
dynamic PredictionEquals(dynamic expected)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var predicted = UO.PredictedX();
return Truth(predicted == expected);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: Sin parámetros.
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ReadPredictedCoordinate:ReadPredictedCoordinate(0).
Código interno de implementación; no es un script independiente.
case "predictedx": return new InjectionValue(ReadPredictedCoordinate(0));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PredictedY();Lee la coordenada Y prevista después de los pasos ya en cola del personaje.
No hay parámetros.
int Y en las celdas del mapa. 0 - coordenada válida o ausencia de carácter.
- Sólo la función que se muestra en la sintaxis es UO sin argumentos. No hay parámetros de objetivo, serial, type, objetivo, distancia o tiempo de espera. El número que no sea bool, ID o la notación en mosaico: 1 no significa lograr el objetivo.
- GetEndPosition lee la dirección X/Y/Z/del último Mobile.Step ya agregado. Cuando la cola está vacía, lee la posición/dirección actual del personaje. Esta es una lectura O(1): el paso no se recupera, el movimiento y el paquete no se envían, la ruta no se calcula, el comando no espera un logro.
- X e Y son coordenadas mundiales/mapa, no píxeles de contenedor. Z es la altura, no el número del piso. Se devuelve un único componente, no una matriz ni el destino final de toda la ruta.
- Este es un pronóstico local, no una llegada confirmada. Los pasos nuevos/completados, la falla del servidor, la limpieza de la cola o el teletransporte pueden cambiarlo. Las llamadas a componentes individuales no son atómicas; una coincidencia X no prueba una coincidencia Y/Z ni una confirmación del servidor.
- Invoke realiza una lectura en el hilo del juego; El hilo de trabajo está esperando que el administrador procese la solicitud. La cancelación del guión interrumpe la espera. No se agregan pausas ni solicitudes de red adicionales.
- Las implementaciones externas de IApiBridge sin IPredictedMovementBridge conservan una lectura alternativa de las coordenadas/dirección actuales. Classic UO implementa una interfaz compatible con colas.
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.PredictedY();
UO.Print("PredictedY: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- predicho guarda una llamada sin argumentos; Convertir.ToString formatea el número del registro.
var predicted = UO.PredictedY();
UO.Print("Predicted: " + Convert.ToString(predicted));Parámetros y flujo de ejecución:
- UO.Wait(100) pausa el ejemplo durante 100 ms. el antes y el después pueden coincidir incluso con un movimiento intermedio; estas lecturas no inician un movimiento.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.PredictedY();
await Delay(100);
var after = UO.PredictedY();
if (Truth(before != after))
{
UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + 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;Parámetros y flujo de ejecución:
- esperado: un ejemplo de coordenadas/altura/dirección, no un argumento para el comando nativo. PredictionEquals verifica UO.Self(), lee el valor una vez y devuelve 1 (condición cumplida) si es igual; en caso contrario, 0 (condición no cumplida). El código de función completo se muestra debajo de Principal. La coincidencia de un componente no significa llegada.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(PredictionEquals(1690)) == true))
{
UO.Print("Queued endpoint matches this component");
}
else
{
UO.Print("Different component or no player");
}
return null;
}
dynamic PredictionEquals(dynamic expected)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var predicted = UO.PredictedY();
return Truth(predicted == expected);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: Sin parámetros.
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ReadPredictedCoordinate:ReadPredictedCoordinate(1).
Código interno de implementación; no es un script independiente.
case "predictedy": return new InjectionValue(ReadPredictedCoordinate(1));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PredictedZ();Lee la altura Z prevista después de los pasos ya en cola del personaje.
No hay parámetros.
int Z, altura con signo -128..127; se mantiene un valor negativo. 0 - altura aceptable o ausencia del personaje.
- Sólo la función que se muestra en la sintaxis es UO sin argumentos. No hay parámetros de objetivo, serial, type, objetivo, distancia o tiempo de espera. El número que no sea bool, ID o la notación en mosaico: 1 no significa lograr el objetivo.
- GetEndPosition lee la dirección X/Y/Z/del último Mobile.Step ya agregado. Cuando la cola está vacía, lee la posición/dirección actual del personaje. Esta es una lectura O(1): el paso no se recupera, el movimiento y el paquete no se envían, la ruta no se calcula, el comando no espera un logro.
- X e Y son coordenadas mundiales/mapa, no píxeles de contenedor. Z es la altura, no el número del piso. Se devuelve un único componente, no una matriz ni el destino final de toda la ruta.
- Este es un pronóstico local, no una llegada confirmada. Los pasos nuevos/completados, la falla del servidor, la limpieza de la cola o el teletransporte pueden cambiarlo. Las llamadas a componentes individuales no son atómicas; una coincidencia X no prueba una coincidencia Y/Z ni una confirmación del servidor.
- Invoke realiza una lectura en el hilo del juego; El hilo de trabajo está esperando que el administrador procese la solicitud. La cancelación del guión interrumpe la espera. No se agregan pausas ni solicitudes de red adicionales.
- Las implementaciones externas de IApiBridge sin IPredictedMovementBridge conservan una lectura alternativa de las coordenadas/dirección actuales. Classic UO implementa una interfaz compatible con colas.
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.PredictedZ();
UO.Print("PredictedZ: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- predicho guarda una llamada sin argumentos; Convertir.ToString formatea el número del registro.
var predicted = UO.PredictedZ();
UO.Print("Predicted: " + Convert.ToString(predicted));Parámetros y flujo de ejecución:
- UO.Wait(100) pausa el ejemplo durante 100 ms. el antes y el después pueden coincidir incluso con un movimiento intermedio; estas lecturas no inician un movimiento.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.PredictedZ();
await Delay(100);
var after = UO.PredictedZ();
if (Truth(before != after))
{
UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + 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;Parámetros y flujo de ejecución:
- esperado: un ejemplo de coordenadas/altura/dirección, no un argumento para el comando nativo. PredictionEquals verifica UO.Self(), lee el valor una vez y devuelve 1 (condición cumplida) si es igual; en caso contrario, 0 (condición no cumplida). El código de función completo se muestra debajo de Principal. La coincidencia de un componente no significa llegada.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(PredictionEquals(-4)) == true))
{
UO.Print("Queued endpoint matches this component");
}
else
{
UO.Print("Different component or no player");
}
return null;
}
dynamic PredictionEquals(dynamic expected)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var predicted = UO.PredictedZ();
return Truth(predicted == expected);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: Sin parámetros.
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ReadPredictedCoordinate:ReadPredictedCoordinate(2).
Código interno de implementación; no es un script independiente.
case "predictedz": return new InjectionValue(ReadPredictedCoordinate(2));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetRunMountTimer(object? value);Establece el intervalo de pasos para correr a caballo. Úselo para reducir la velocidad intencionalmente o volver a la velocidad estándar. No puedes acelerar el movimiento más allá del tempo estándar con este comando.
-
value: número entero requerido de milisegundos. Rango 100..2000; los valores más pequeños, incluidos 0 y los negativos, aumentan a 100, los valores más grandes disminuyen a 2000.
void - sin valor. Llame en una línea separada. Para leer el espaciado aplicado, use UO.GetRunMountTimer(). Esto no es una confirmación del paso por parte del servidor.
- El ajuste se aplica al modo de conducción. El valor estándar y mínimo permitido es 100 ms; el límite superior es 2000 ms. Los otros tres modos tienen configuraciones separadas.
- Este es el intervalo de movimiento local del personaje, no el ping, FPS, el tiempo de espera de búsqueda de ruta o la duración medida del paso del servidor. Aumentar el número ralentiza el movimiento; disminuir por debajo del intervalo estándar no acelera el envío de paquetes.
- El equipo en sí no comienza a moverse, no se monta en la montura y no cambia el modo de caminar/correr. El modo se selecciona mientras se conduce; El cliente también tiene en cuenta el modo de velocidad y el vuelo especificados por el servidor.
- La configuración es general para el movimiento de este cliente: se puede utilizar mediante control manual, ruta de mapa y otros scripts. Cambiándolo temporalmente, mantiene el valor anterior y lo restablece después de la operación; no cambie un modo al mismo tiempo de varios procedimientos.
- Los pasos giratorios y desviados son diferentes de los movimientos normales. La confirmación del servidor, los retrasos en la comunicación y los obstáculos pueden aumentar el tiempo real. El cliente no envía una serie de pasos acelerados para ponerse al día con los fotogramas faltantes.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.
UO.Print("Calling UO.SetRunMountTimer");
UO.SetRunMountTimer(100);Parámetros y flujo de ejecución:
- Valor=100 - milisegundos. La llamada establece un movimiento posterior, pero no inicia una ruta.
UO.SetRunMountTimer(100);Parámetros y flujo de ejecución:
- Valor=200 agrega 100 ms al intervalo estándar. El cambio sólo se aplica a las carreras a caballo. Por ejemplo, seleccione una dirección libre.
- UO.Step obtiene Direction=2 y Running=true. El código 7 sólo puede significar girar; otros códigos no son true/false.
finallyrestaura la configuración anterior en caso de apagado normal o manejo de errores.
return RunScenario();
object? RunScenario()
{
var previous = UO.GetRunMountTimer();
try
{
UO.SetRunMountTimer(200);
var stepResult = UO.Step(2, true);
if (Truth(stepResult != 7))
{
UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
}
}
finally
{
UO.SetRunMountTimer(previous);
}
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:
- Después de que el Valor = 1 aplicado sea igual a 100. El ejemplo no mueve el carácter y restaura el espaciado original.
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 previous = UO.GetRunMountTimer();
try
{
UO.SetRunMountTimer(1);
var applied = UO.GetRunMountTimer();
UO.Print("Applied delay, ms: " + Convert.ToString(applied));
}
finally
{
UO.SetRunMountTimer(previous);
}
return null;
}
}C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: value (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ClampMoveTimer:ClampMoveTimer(Arg(0), 100). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMovementTimers:bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer).
Código interno de implementación; no es un script independiente.
case "setrunmounttimer":
state.RunMountTimer = ClampMoveTimer(Arg(0), 100);
bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetRunUnmountTimer(object? value);Establece el intervalo de zancada al caminar. Úselo para reducir la velocidad intencionalmente o volver a la velocidad estándar. No puedes acelerar el movimiento más allá del tempo estándar con este comando.
-
value: número entero requerido de milisegundos. Rango 200..2000; los valores más pequeños, incluidos 0 y los negativos, aumentan a 200, los valores más grandes disminuyen a 2000.
void - sin valor. Llame en una línea separada. Para leer el espaciado aplicado, use UO.GetRunUnmountTimer(). Esto no es una confirmación del paso por parte del servidor.
- La configuración se aplica al modo caminar. El valor estándar y mínimo permitido es 200 ms; el límite superior es 2000 ms. Los otros tres modos tienen configuraciones separadas.
- Este es el intervalo de movimiento local del personaje, no el ping, FPS, el tiempo de espera de búsqueda de ruta o la duración medida del paso del servidor. Aumentar el número ralentiza el movimiento; disminuir por debajo del intervalo estándar no acelera el envío de paquetes.
- El equipo en sí no comienza a moverse, no se monta en la montura y no cambia el modo de caminar/correr. El modo se selecciona mientras se conduce; El cliente también tiene en cuenta el modo de velocidad y el vuelo especificados por el servidor.
- La configuración es general para el movimiento de este cliente: se puede utilizar mediante control manual, ruta de mapa y otros scripts. Cambiándolo temporalmente, mantiene el valor anterior y lo restablece después de la operación; no cambie un modo al mismo tiempo de varios procedimientos.
- Los pasos giratorios y desviados son diferentes de los movimientos normales. La confirmación del servidor, los retrasos en la comunicación y los obstáculos pueden aumentar el tiempo real. El cliente no envía una serie de pasos acelerados para ponerse al día con los fotogramas faltantes.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.
UO.Print("Calling UO.SetRunUnmountTimer");
UO.SetRunUnmountTimer(200);Parámetros y flujo de ejecución:
- Valor=200 - milisegundos. La llamada establece un movimiento posterior, pero no inicia una ruta.
UO.SetRunUnmountTimer(200);Parámetros y flujo de ejecución:
- Valor=300 agrega 100 ms al intervalo estándar. El cambio sólo se aplica a correr a pie. Por ejemplo, seleccione una dirección libre.
- UO.Step obtiene Direction=2 y Running=true. El código 7 sólo puede significar girar; otros códigos no son true/false.
finallyrestaura la configuración anterior en caso de apagado normal o manejo de errores.
return RunScenario();
object? RunScenario()
{
var previous = UO.GetRunUnMountTimer();
try
{
UO.SetRunUnmountTimer(300);
var stepResult = UO.Step(2, true);
if (Truth(stepResult != 7))
{
UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
}
}
finally
{
UO.SetRunUnmountTimer(previous);
}
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:
- Después de que el Valor = 1 aplicado sea igual a 200. El ejemplo no mueve el carácter y restaura el espaciado original.
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 previous = UO.GetRunUnMountTimer();
try
{
UO.SetRunUnmountTimer(1);
var applied = UO.GetRunUnMountTimer();
UO.Print("Applied delay, ms: " + Convert.ToString(applied));
}
finally
{
UO.SetRunUnmountTimer(previous);
}
return null;
}
}C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: value (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ClampMoveTimer:ClampMoveTimer(Arg(0), 200). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMovementTimers:bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer).
Código interno de implementación; no es un script independiente.
case "setrununmounttimer":
state.RunUnmountTimer = ClampMoveTimer(Arg(0), 200);
bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetWalkMountTimer(object? value);Establece el intervalo de pasos para caminar a caballo. Úselo para reducir la velocidad intencionalmente o volver a la velocidad estándar. No puedes acelerar el movimiento más allá del tempo estándar con este comando.
-
value: número entero requerido de milisegundos. Rango 200..2000; los valores más pequeños, incluidos 0 y los negativos, aumentan a 200, los valores más grandes disminuyen a 2000.
void - sin valor. Llame en una línea separada. Para leer el espaciado aplicado, use UO.GetWalkMountTimer(). Esto no es una confirmación del paso por parte del servidor.
- El ajuste se aplica al modo de conducción. El valor estándar y mínimo permitido es 200 ms; el límite superior es 2000 ms. Los otros tres modos tienen configuraciones separadas.
- Este es el intervalo de movimiento local del personaje, no el ping, FPS, el tiempo de espera de búsqueda de ruta o la duración medida del paso del servidor. Aumentar el número ralentiza el movimiento; disminuir por debajo del intervalo estándar no acelera el envío de paquetes.
- El equipo en sí no comienza a moverse, no se monta en la montura y no cambia el modo de caminar/correr. El modo se selecciona mientras se conduce; El cliente también tiene en cuenta el modo de velocidad y el vuelo especificados por el servidor.
- La configuración es general para el movimiento de este cliente: se puede utilizar mediante control manual, ruta de mapa y otros scripts. Cambiándolo temporalmente, mantiene el valor anterior y lo restablece después de la operación; no cambie un modo al mismo tiempo de varios procedimientos.
- Los pasos giratorios y desviados son diferentes de los movimientos normales. La confirmación del servidor, los retrasos en la comunicación y los obstáculos pueden aumentar el tiempo real. El cliente no envía una serie de pasos acelerados para ponerse al día con los fotogramas faltantes.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.
UO.Print("Calling UO.SetWalkMountTimer");
UO.SetWalkMountTimer(200);Parámetros y flujo de ejecución:
- Valor=200 - milisegundos. La llamada establece un movimiento posterior, pero no inicia una ruta.
UO.SetWalkMountTimer(200);Parámetros y flujo de ejecución:
- Valor=300 agrega 100 ms al intervalo estándar. El cambio sólo aplica para paseos a caballo. Por ejemplo, seleccione una dirección libre.
- UO.Step obtiene Direction=2 y Running=false. El código 7 sólo puede significar girar; otros códigos no son true/false.
finallyrestaura la configuración anterior en caso de apagado normal o manejo de errores.
return RunScenario();
object? RunScenario()
{
var previous = UO.GetWalkMountTimer();
try
{
UO.SetWalkMountTimer(300);
var stepResult = UO.Step(2, false);
if (Truth(stepResult != 7))
{
UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
}
}
finally
{
UO.SetWalkMountTimer(previous);
}
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:
- Después de que el Valor = 1 aplicado sea igual a 200. El ejemplo no mueve el carácter y restaura el espaciado original.
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 previous = UO.GetWalkMountTimer();
try
{
UO.SetWalkMountTimer(1);
var applied = UO.GetWalkMountTimer();
UO.Print("Applied delay, ms: " + Convert.ToString(applied));
}
finally
{
UO.SetWalkMountTimer(previous);
}
return null;
}
}C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: value (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ClampMoveTimer:ClampMoveTimer(Arg(0), 200). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMovementTimers:bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer).
Código interno de implementación; no es un script independiente.
case "setwalkmounttimer":
state.WalkMountTimer = ClampMoveTimer(Arg(0), 200);
bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetWalkUnmountTimer(object? value);Establece el intervalo de pasos para caminar. Úselo para reducir la velocidad intencionalmente o volver a la velocidad estándar. No puedes acelerar el movimiento más allá del tempo estándar con este comando.
-
value: número entero requerido de milisegundos. Rango 400..2000; los valores más pequeños, incluidos 0 y los negativos, aumentan a 400, los valores más grandes disminuyen a 2000.
void - sin valor. Llame en una línea separada. Para leer el espaciado aplicado, use UO.GetWalkUnmountTimer(). Esto no es una confirmación del paso por parte del servidor.
- La configuración se aplica al modo caminar. El valor estándar y mínimo permitido es 400 ms; el límite superior es 2000 ms. Los otros tres modos tienen configuraciones separadas.
- Este es el intervalo de movimiento local del personaje, no el ping, FPS, el tiempo de espera de búsqueda de ruta o la duración medida del paso del servidor. Aumentar el número ralentiza el movimiento; disminuir por debajo del intervalo estándar no acelera el envío de paquetes.
- El equipo en sí no comienza a moverse, no se monta en la montura y no cambia el modo de caminar/correr. El modo se selecciona mientras se conduce; El cliente también tiene en cuenta el modo de velocidad y el vuelo especificados por el servidor.
- La configuración es general para el movimiento de este cliente: se puede utilizar mediante control manual, ruta de mapa y otros scripts. Cambiándolo temporalmente, mantiene el valor anterior y lo restablece después de la operación; no cambie un modo al mismo tiempo de varios procedimientos.
- Los pasos giratorios y desviados son diferentes de los movimientos normales. La confirmación del servidor, los retrasos en la comunicación y los obstáculos pueden aumentar el tiempo real. El cliente no envía una serie de pasos acelerados para ponerse al día con los fotogramas faltantes.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.
UO.Print("Calling UO.SetWalkUnmountTimer");
UO.SetWalkUnmountTimer(400);Parámetros y flujo de ejecución:
- Valor=400 - milisegundos. La llamada establece un movimiento posterior, pero no inicia una ruta.
UO.SetWalkUnmountTimer(400);Parámetros y flujo de ejecución:
- Valor=500 agrega 100 ms al intervalo estándar. El cambio sólo aplica para caminar. Por ejemplo, seleccione una dirección libre.
- UO.Step obtiene Direction=2 y Running=false. El código 7 sólo puede significar girar; otros códigos no son true/false.
finallyrestaura la configuración anterior en caso de apagado normal o manejo de errores.
return RunScenario();
object? RunScenario()
{
var previous = UO.GetWalkUnmountTimer();
try
{
UO.SetWalkUnmountTimer(500);
var stepResult = UO.Step(2, false);
if (Truth(stepResult != 7))
{
UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
}
}
finally
{
UO.SetWalkUnmountTimer(previous);
}
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:
- Después de que el Valor = 1 aplicado sea igual a 400. El ejemplo no mueve el carácter y restaura el espaciado original.
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 previous = UO.GetWalkUnmountTimer();
try
{
UO.SetWalkUnmountTimer(1);
var applied = UO.GetWalkUnmountTimer();
UO.Print("Applied delay, ms: " + Convert.ToString(applied));
}
finally
{
UO.SetWalkUnmountTimer(previous);
}
return null;
}
}C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.
Parámetros: value (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ClampMoveTimer:ClampMoveTimer(Arg(0), 400). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMovementTimers:bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer).
Código interno de implementación; no es un script independiente.
case "setwalkunmounttimer":
state.WalkUnmountTimer = ClampMoveTimer(Arg(0), 400);
bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Step(object? direction, object? running);Solicita un solo paso/rotación y, si se envió un paso, espera la confirmación del servidor.
-
direction— Dirección 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SW, 6=O, 7=NW. La implementación aplica un bit a bit &7; utilice 0..7 para mayor claridad. -
running- true/1 - ejecutar solicitud, false/0 - paso. Persisten los retrasos en el movimiento del servidor; No es un multiplicador de velocidad.
int: 7 — se confirma el paso o sólo se realiza un giro; 5 — el servidor rechazó el paso; 4 — tiempo de espera agotado (hasta 10000 ms); 3 — paso bloqueado por el cliente; 2 — la cola está llena; 0 - fallo general, parada o resistencia insuficiente. No es true/false: por ejemplo, el código distinto de cero 5 significa falla.
- Un equipo puede rotar al personaje primero; Esto no significa necesariamente pasar al siguiente cuadrado.
- Se tienen en cuenta moveCheckStamina, moveExitOnDisconnect y moveOpenDoor. La prohibición del servidor y la prohibición local son diferentes.
- No repita el comando en bucle sin analizar el resultado y UO.Wait: La cola de movimiento y la velocidad del servidor están limitadas.
- QueueStep en la transmisión del juego verifica el jugador, la conexión, la dirección, la cola, el tempo y el tráfico local. Antes de Player.Walk, cada llamada registra por separado las generaciones Confirmar/Denegar de su secuencia y Walker; luego devuelve el resultado junto con esta instantánea. Step y pendiente StepControlled verifican solo este par almacenado, no los campos comunes de la siguiente solicitud; el jugador sustituto/Walker finaliza la espera con una negativa general. La confirmación de otro comando regular no confirma este paso. La rotación sin movimiento sigue siendo un caso aparte.
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.Step(2, false);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- Direction=2 — E, Corriendo=false — paso.
- Se verifica el código exacto 7; Para confirmar el movimiento, compare X/Y antes y después.
var result = UO.Step(2, false);
if (Truth(result == 7))
{
UO.Print("Step accepted or turn completed");
}
else
{
UO.Print("Movement status: " + Convert.ToString(result));
}
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:
- Direction=0 - N. Las coordenadas se leen antes y después de la llamada.
- Es posible que se mantenga la posición sin cambios en caso de rotación o falla, por lo que el resultado se necesita por separado.
return RunScenario();
object? RunScenario()
{
var x = UO.GetX();
var y = UO.GetY();
var result = UO.Step(0, false);
if (Truth(UO.GetX() == x) && Truth(UO.GetY() == y))
{
UO.Print("Position unchanged; status=" + Convert.ToString(result));
}
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:
- Direction=4 — S, Running=true.
- Código 5: falla del servidor. UO.Wait=250 ms especifica una pausa para el script y no garantiza que el siguiente intento sea exitoso.
Intervalo mínimo de paso: caminar - caminar 400 ms, correr 200 ms; montar a caballo - caminar 200 ms, correr 100 ms.
Estos son límites de cliente estándar, no configuraciones definidas automáticamente para su fragmento. La velocidad del servidor y los modos de vuelo se cuentan por separado. Los temporizadores de guiones pueden ralentizar el movimiento, pero no reducen estos límites.
Los pasos, las rutas, Follow, los controles del mouse/teclas y el mapa utilizan la cola compartida del personaje. Reemplazar la ruta, girar o ajustar la posición por parte del servidor no cancela la pausa restante después de la solicitud del paso. Después del retraso, no hay una ráfaga rápida para compensar los fotogramas perdidos. La espera de confirmación, los obstáculos y la mala comunicación pueden ralentizar el movimiento.
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 result = UO.Step(4, true);
if (Truth(result == 5))
{
UO.Print("Server denied the step");
await Delay(250);
}
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: direction (Any), running (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenDoor:bridge.OpenDoor(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Step:bridge.Step(Arg(0) & 7, Arg(1) != 0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
Código interno de implementación; no es un script independiente.
case "step":
if (state.MoveExitOnDisconnect != 0 && bridge.IsOnline() == 0)
return new InjectionValue(0);
if (state.MoveCheckStamina > 0 && bridge.Stamina < state.MoveCheckStamina)
return new InjectionValue(0);
if (state.MoveOpenDoor != 0)
bridge.OpenDoor();
return new InjectionValue(bridge.Step(Arg(0) & 7, Arg(1) != 0));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.StepQ(object? direction, object? run);
int UO.StepQ(object? direction, object? run, object? timeout);
int UO.StepQ(object? direction, object? run, object? timeout, object? queue);
int UO.StepQ(object? direction, object? run, object? timeout, object? queue, object? waitForAck);Solicita un paso en la cola; el formulario adicional podrá esperar a que la cola quede libre y confirmada.
-
direction— Dirección 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SW, 6=O, 7=NW. La implementación aplica un bit a bit &7; utilice 0..7 para mayor claridad. -
run- true/1 - ejecutar solicitud, false/0 - paso. Persisten los retrasos en el movimiento del servidor; No es un multiplicador de velocidad. -
timeout: tiempo de espera de cola opcional en ms. 0/negativo no espera su liberación; con waitForAck=true y tiempo de espera=0 se espera confirmación antes de 10000 ms. Si el valor es positivo, la espera de confirmación recibe un período separado de la misma duración. -
queue: indicador opcional, predeterminado true. false transmite forcePacket al solicitar un paso; no anula las restricciones del servidor ni borra la cola acumulada. -
waitForAck- false/ausente: devuelve el resultado de la declaración inmediatamente. true — para el paso enviado, espere la confirmación/rechazo.
int sin waitForAck: 0..255 — secuencia de la solicitud enviada, incluido el 0 válido; 256 - solo girar; -2 — obstáculo para el cliente; -1 - fallo general/cola llena/apagado/resistencia. Con waitForAck=true: 7 - confirmación, 5 - fallo del servidor, 4 - tiempo de espera; -1/-2/256 conserva el significado anterior. El número 7 en el formulario sin esperar es una secuencia, no una confirmación. Verificar códigos numéricos específicos; si (resultado) para int en C# no es válido.
- Un equipo puede rotar al personaje primero; Esto no significa necesariamente pasar al siguiente cuadrado.
- Se tienen en cuenta moveCheckStamina, moveExitOnDisconnect y moveOpenDoor. La prohibición del servidor y la prohibición local son diferentes.
- No repita el comando en bucle sin analizar el resultado y UO.Wait: La cola de movimiento y la velocidad del servidor están limitadas.
- Sin esperar, el comando no confirma el cambio de posición. LastStepQUsedDoor indica un intento de abrir la puerta, no el resultado del paso.
- QueueStep en la transmisión del juego verifica el jugador, la conexión, la dirección, la cola, el tempo y el tráfico local. Antes de Player.Walk, cada llamada registra por separado las generaciones Confirmar/Denegar de su secuencia y Walker; luego devuelve el resultado junto con esta instantánea. Step y pendiente StepControlled verifican solo este par almacenado, no los campos comunes de la siguiente solicitud; el jugador sustituto/Walker finaliza la espera con una negativa general. La confirmación de otro comando regular no confirma este paso. La rotación sin movimiento sigue siendo un caso aparte.
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.StepQ(2, false);
UO.Print("StepQ: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- dirección=2 - E, ejecutar=false. Dos argumentos significa configuración normal sin esperar confirmación.
- secuencia=0 es un éxito de preparación válido; secuencia=256 significa rotación.
var sequence = UO.StepQ(2, false);
if (Truth(sequence >= 0) && Truth(sequence <= 255))
{
UO.Print("Queued sequence: " + Convert.ToString(sequence));
}
else
{
UO.Print("Queue status: " + Convert.ToString(sequence));
}
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:
- direction=4 — S, run=true, timeout=1500 EM. cola =true, waitForAck=true.
- Es posible que se necesiten hasta dos intervalos de 1500 ms para esperar un asiento y luego reconocerlo. 256 requiere una consideración separada de la rotación.
return RunScenario();
object? RunScenario()
{
var status = UO.StepQ(4, true, 1500, true, true);
if (Truth(status == 7))
{
UO.Print("Server confirmed");
}
else
{
UO.Print("Step status: " + Convert.ToString(status));
}
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:
- dirección=6 — W, correr=false; timeout=0 no espera en la fila; cola=false solicita forcePacket, waitForAck=false.
- ForcePacket no da derecho a atravesar el muro. Para -2, calcule una ruta diferente en lugar de enviar a la misma celda nuevamente.
Intervalo mínimo de paso: caminar - caminar 400 ms, correr 200 ms; montar a caballo - caminar 200 ms, correr 100 ms.
Estos son límites de cliente estándar, no configuraciones definidas automáticamente para su fragmento. La velocidad del servidor y los modos de vuelo se cuentan por separado. Los temporizadores de guiones pueden ralentizar el movimiento, pero no reducen estos límites.
Los pasos, las rutas, Follow, los controles del mouse/teclas y el mapa utilizan la cola compartida del personaje. Reemplazar la ruta, girar o ajustar la posición por parte del servidor no cancela la pausa restante después de la solicitud del paso. Después del retraso, no hay una ráfaga rápida para compensar los fotogramas perdidos. La espera de confirmación, los obstáculos y la mala comunicación pueden ralentizar el movimiento.
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 status = UO.StepQ(6, false, 0, false, false);
if (Truth(status == -2))
{
UO.Print("Local obstacle; calculate another route");
}
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: direction (Any), run (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [StepQ]. -
InjectionScript.Runtime.InjectionApiUO.CompactStepQ:CompactStepQ(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactStepQ(values))Parámetros: direction (Any), run (Any), timeout (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [StepQ]. -
InjectionScript.Runtime.InjectionApiUO.CompactStepQ:CompactStepQ(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactStepQ(values))Parámetros: direction (Any), run (Any), timeout (Any), queue (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [StepQ]. -
InjectionScript.Runtime.InjectionApiUO.CompactStepQ:CompactStepQ(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactStepQ(values))Parámetros: direction (Any), run (Any), timeout (Any), queue (Any), waitForAck (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.Register [StepQ]. -
InjectionScript.Runtime.InjectionApiUO.CompactStepQ:CompactStepQ(values).
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
values => new InjectionValue(CompactStepQ(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveBetweenTwoCorners();
dynamic UO.moveBetweenTwoCorners(object? value);Resolución diagonal con dos cuadrados laterales bloqueados.
-
value— Nuevo valor opcional. 0 prohíbe, un valor distinto de cero se convierte en 1. El servidor puede rechazar dicho pase independientemente de la configuración del cliente.
int es el valor almacenado actual. Sin argumento sólo lee; con un argumento devuelve el valor después de aplicar las reglas anteriores. Este es un escenario, no el resultado del movimiento.
- La configuración se almacena en el estado de ejecución y es utilizada por los comandos correspondientes al inicio; el cambio no sobrescribe automáticamente la ruta ya creada.
- La devolución del valor original se muestra para una finalización normal. Después de un fallo, las siguientes líneas de recuperación no se ejecutan.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El 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.moveBetweenTwoCorners();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- No hay argumentos, el estado no cambia.
- value es el valor numérico de esta configuración.
var value = UO.moveBetweenTwoCorners();
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- valor=0. 0 prohíbe, un valor distinto de cero se convierte en 1. El servidor puede rechazar dicho pase independientemente de la configuración del cliente.
- aplicado muestra el valor guardado, no el logro exitoso del objetivo.
return RunScenario();
object? RunScenario()
{
var applied = UO.moveBetweenTwoCorners(0);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}Parámetros y flujo de ejecución:
- anterior almacena la configuración inicial; NewMoveXY está limitado a 3000 ms.
- El último comando restaura la configuración después del regreso del movimiento normal.
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 previous = UO.moveBetweenTwoCorners();
UO.moveBetweenTwoCorners(0);
var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
UO.moveBetweenTwoCorners(previous);
UO.Print(Convert.ToString(ok));
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: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "movebetweentwocorners":
if (arguments.Length > 0) state.MoveBetweenTwoCorners = Arg(0) != 0 ? 1 : 0;
return new InjectionValue(state.MoveBetweenTwoCorners);Parámetros: value (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "movebetweentwocorners":
if (arguments.Length > 0) state.MoveBetweenTwoCorners = Arg(0) != 0 ? 1 : 0;
return new InjectionValue(state.MoveBetweenTwoCorners);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveCheckStamina();
dynamic UO.moveCheckStamina(object? value);Resistencia mínima para comandos de movimiento.
-
value— Nuevo valor opcional. Entero >=0; el negativo se convierte en 0. Zero desactiva la verificación del umbral.
int es el valor almacenado actual. Sin argumento sólo lee; con un argumento devuelve el valor después de aplicar las reglas anteriores. Este es un escenario, no el resultado del movimiento.
- La configuración se almacena en el estado de ejecución y es utilizada por los comandos correspondientes al inicio; el cambio no sobrescribe automáticamente la ruta ya creada.
- La devolución del valor original se muestra para una finalización normal. Después de un fallo, las siguientes líneas de recuperación no se ejecutan.
- El valor predeterminado es 1. El valor 0 desactiva esta verificación local; positivo establece la resistencia mínima. Por debajo del umbral, se rechaza el lanzamiento o se detiene el movimiento en lugar de esperar a que se recupere la resistencia.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El 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.moveCheckStamina();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- No hay argumentos, el estado no cambia.
- value es el valor numérico de esta configuración.
var value = UO.moveCheckStamina();
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- valor=15. Entero >=0; el negativo se convierte en 0. Zero desactiva la verificación del umbral.
- aplicado muestra el valor guardado, no el logro exitoso del objetivo.
return RunScenario();
object? RunScenario()
{
var applied = UO.moveCheckStamina(15);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}Parámetros y flujo de ejecución:
- anterior almacena la configuración inicial; NewMoveXY está limitado a 3000 ms.
- El último comando restaura la configuración después del regreso del movimiento normal.
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 previous = UO.moveCheckStamina();
UO.moveCheckStamina(15);
var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
UO.moveCheckStamina(previous);
UO.Print(Convert.ToString(ok));
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: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "movecheckstamina": if (arguments.Length > 0) state.MoveCheckStamina = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveCheckStamina);Parámetros: value (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "movecheckstamina": if (arguments.Length > 0) state.MoveCheckStamina = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveCheckStamina);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveExitOnDisconnect();
dynamic UO.moveExitOnDisconnect(object? value);Detener/rechazar el movimiento cuando se desconecta la conexión.
-
value— Nuevo valor opcional. 0 se apaga, un valor distinto de cero se convierte en 1. Deshabilitar la verificación le impide moverse en el servidor sin una conexión.
int es el valor almacenado actual. Sin argumento sólo lee; con un argumento devuelve el valor después de aplicar las reglas anteriores. Este es un escenario, no el resultado del movimiento.
- La configuración se almacena en el estado de ejecución y es utilizada por los comandos correspondientes al inicio; el cambio no sobrescribe automáticamente la ruta ya creada.
- La devolución del valor original se muestra para una finalización normal. Después de un fallo, las siguientes líneas de recuperación no se ejecutan.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El 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.moveExitOnDisconnect();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- No hay argumentos, el estado no cambia.
- value es el valor numérico de esta configuración.
var value = UO.moveExitOnDisconnect();
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- valor=1. 0 se apaga, un valor distinto de cero se convierte en 1. Deshabilitar la verificación le impide moverse en el servidor sin una conexión.
- aplicado muestra el valor guardado, no el logro exitoso del objetivo.
return RunScenario();
object? RunScenario()
{
var applied = UO.moveExitOnDisconnect(1);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}Parámetros y flujo de ejecución:
- anterior almacena la configuración inicial; NewMoveXY está limitado a 3000 ms.
- El último comando restaura la configuración después del regreso del movimiento normal.
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 previous = UO.moveExitOnDisconnect();
UO.moveExitOnDisconnect(1);
var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
UO.moveExitOnDisconnect(previous);
UO.Print(Convert.ToString(ok));
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: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "moveexitondisconnect": if (arguments.Length > 0) state.MoveExitOnDisconnect = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveExitOnDisconnect);Parámetros: value (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "moveexitondisconnect": if (arguments.Length > 0) state.MoveExitOnDisconnect = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveExitOnDisconnect);En un contexto de script nuevo, UO.moveHeuristicMult() vale 120 y UO.moveTurnCost() vale 14. El valor establecido explícitamente por el script se conserva para sus siguientes órdenes de movimiento. El multiplicador 100 utiliza la estimación habitual con diagonales; uno mayor suele acelerar la búsqueda, pero no garantiza la ruta más corta. Un valor menor puede aumentar mucho el tiempo de cálculo. El coste de giro 0 elimina la penalización adicional por cambiar de dirección. Estos ajustes afectan a la búsqueda de ruta, no a la velocidad del personaje ni al límite UO.LimitMove.
int previousHeuristic = (int)UO.moveHeuristicMult();
int previousTurnCost = (int)UO.moveTurnCost();
try
{
UO.moveHeuristicMult(120);
UO.moveTurnCost(14);
UO.Print($"Heuristic: {UO.moveHeuristicMult()}, turn cost: {UO.moveTurnCost()}");
}
finally
{
UO.moveHeuristicMult(previousHeuristic);
UO.moveTurnCost(previousTurnCost);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveHeuristicMult();
dynamic UO.moveHeuristicMult(object? value);Multiplicador heurístico de Pathfinder como porcentaje.
-
value— Nuevo valor opcional. Se conserva el número entero >=0; antes de buscar al menos 1. El valor 100 corresponde a la estimación habitual; >100 puede preferir una búsqueda más rápida sin garantía de coste mínimo. Cuando Optimizado=false, se utiliza 1.
int es el valor almacenado actual. Sin argumento sólo lee; con un argumento devuelve el valor después de aplicar las reglas anteriores. Este es un escenario, no el resultado del movimiento.
- La configuración se almacena en el estado de ejecución y es utilizada por los comandos correspondientes al inicio; el cambio no sobrescribe automáticamente la ruta ya creada.
- La devolución del valor original se muestra para una finalización normal. Después de un fallo, las siguientes líneas de recuperación no se ejecutan.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El 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.moveHeuristicMult();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- No hay argumentos, el estado no cambia.
- value es el valor numérico de esta configuración.
var value = UO.moveHeuristicMult();
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- valor=100. Se conserva el número entero >=0; antes de buscar al menos 1. El valor 100 corresponde a la estimación habitual; >100 puede preferir una búsqueda más rápida sin garantía de coste mínimo. Cuando Optimizado=false, se utiliza 1.
- aplicado muestra el valor guardado, no el logro exitoso del objetivo.
return RunScenario();
object? RunScenario()
{
var applied = UO.moveHeuristicMult(100);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}Parámetros y flujo de ejecución:
- anterior almacena la configuración inicial; NewMoveXY está limitado a 3000 ms.
- El último comando restaura la configuración después del regreso del movimiento normal.
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 previous = UO.moveHeuristicMult();
UO.moveHeuristicMult(100);
var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
UO.moveHeuristicMult(previous);
UO.Print(Convert.ToString(ok));
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: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "moveheuristicmult": if (arguments.Length > 0) state.MoveHeuristicMultiplier = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveHeuristicMultiplier);Parámetros: value (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "moveheuristicmult": if (arguments.Length > 0) state.MoveHeuristicMultiplier = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveHeuristicMultiplier);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveOpenDoor();
dynamic UO.moveOpenDoor(object? value);Intenta abrir puertas en el sentido de la marcha.
-
value— Nuevo valor opcional. 0 se apaga, un valor distinto de cero se convierte en 1. Un openDoors explícito en NewMoveXY/MoveXYZ reemplaza este indicador durante la duración de la llamada.
int es el valor almacenado actual. Sin argumento sólo lee; con un argumento devuelve el valor después de aplicar las reglas anteriores. Este es un escenario, no el resultado del movimiento.
- La configuración se almacena en el estado de ejecución y es utilizada por los comandos correspondientes al inicio; el cambio no sobrescribe automáticamente la ruta ya creada.
- La devolución del valor original se muestra para una finalización normal. Después de un fallo, las siguientes líneas de recuperación no se ejecutan.
- El valor predeterminado es 0. En 1 las celdas de la puerta se consideran transitables durante A*; se intenta abrir una puerta adyacente específica antes del paso. Si no hay ningún objeto de puerta conocido, se utiliza la consulta OpenDoor.
- Esta bandera no cierra la puerta por sí sola. Cerrar una puerta abierta por un personaje es una configuración de cliente separada; una puerta cerrada o la prohibición del servidor pueden interrumpir la ruta.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El 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.moveOpenDoor();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- No hay argumentos, el estado no cambia.
- value es el valor numérico de esta configuración.
var value = UO.moveOpenDoor();
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- valor=1. 0 se apaga, un valor distinto de cero se convierte en 1. Un openDoors explícito en NewMoveXY/MoveXYZ reemplaza este indicador durante la duración de la llamada.
- aplicado muestra el valor guardado, no el logro exitoso del objetivo.
return RunScenario();
object? RunScenario()
{
var applied = UO.moveOpenDoor(1);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}Parámetros y flujo de ejecución:
- anterior almacena la configuración inicial; NewMoveXY está limitado a 3000 ms.
- El último comando restaura la configuración después del regreso del movimiento normal.
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 previous = UO.moveOpenDoor();
UO.moveOpenDoor(1);
var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
UO.moveOpenDoor(previous);
UO.Print(Convert.ToString(ok));
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: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "moveopendoor": if (arguments.Length > 0) state.MoveOpenDoor = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveOpenDoor);Parámetros: value (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "moveopendoor": if (arguments.Length > 0) state.MoveOpenDoor = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveOpenDoor);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveThroughCorner();
dynamic UO.moveThroughCorner(object? value);Resolución de la diagonal entre celdas con una celda lateral bloqueada.
-
value— Nuevo valor opcional. 0 prohíbe, un valor distinto de cero se convierte en 1. Si ambos cuadrados laterales están bloqueados, se aplica moveBetweenTwoCorners.
int es el valor almacenado actual. Sin argumento sólo lee; con un argumento devuelve el valor después de aplicar las reglas anteriores. Este es un escenario, no el resultado del movimiento.
- La configuración se almacena en el estado de ejecución y es utilizada por los comandos correspondientes al inicio; el cambio no sobrescribe automáticamente la ruta ya creada.
- La devolución del valor original se muestra para una finalización normal. Después de un fallo, las siguientes líneas de recuperación no se ejecutan.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El 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.moveThroughCorner();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- No hay argumentos, el estado no cambia.
- value es el valor numérico de esta configuración.
var value = UO.moveThroughCorner();
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- valor=0. 0 prohíbe, un valor distinto de cero se convierte en 1. Si ambos cuadrados laterales están bloqueados, se aplica moveBetweenTwoCorners.
- aplicado muestra el valor guardado, no el logro exitoso del objetivo.
return RunScenario();
object? RunScenario()
{
var applied = UO.moveThroughCorner(0);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}Parámetros y flujo de ejecución:
- anterior almacena la configuración inicial; NewMoveXY está limitado a 3000 ms.
- El último comando restaura la configuración después del regreso del movimiento normal.
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 previous = UO.moveThroughCorner();
UO.moveThroughCorner(0);
var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
UO.moveThroughCorner(previous);
UO.Print(Convert.ToString(ok));
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: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "movethroughcorner": if (arguments.Length > 0) state.MoveThroughCorner = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveThroughCorner);Parámetros: value (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "movethroughcorner": if (arguments.Length > 0) state.MoveThroughCorner = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveThroughCorner);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveThroughNPC();
dynamic UO.moveThroughNPC(object? value);Permitir intentos de atravesar personajes.
- Umbral numérico de resistencia: se permite intentar pasar por un personaje cuando Stamina actual >= umbral. Valor inicial 1000; 0 permite intentarlo con cualquier resistencia. El servidor puede rechazar el movimiento.
int es el valor almacenado actual. Sin argumento sólo lee; con un argumento devuelve el valor después de aplicar las reglas anteriores. Este es un escenario, no el resultado del movimiento.
- La configuración se almacena en el estado de ejecución y es utilizada por los comandos correspondientes al inicio; el cambio no sobrescribe automáticamente la ruta ya creada.
- La devolución del valor original se muestra para una finalización normal. Después de un fallo, las siguientes líneas de recuperación no se ejecutan.
- Umbral numérico de resistencia: se permite intentar pasar por un personaje cuando Stamina actual >= umbral. Valor inicial 1000; 0 permite intentarlo con cualquier resistencia. El servidor puede rechazar el movimiento.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El 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.moveThroughNPC();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- No hay argumentos, el estado no cambia.
- value es el valor numérico de esta configuración.
var value = UO.moveThroughNPC();
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- valor=0. Entero >=0, negativo se convierte en 0; positivo permite el intento. Un avoidMobiles explícito especifica la restricción inversa para una sola llamada.
- aplicado muestra el valor guardado, no el logro exitoso del objetivo.
return RunScenario();
object? RunScenario()
{
var applied = UO.moveThroughNPC(0);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}Parámetros y flujo de ejecución:
- anterior almacena la configuración inicial; NewMoveXY está limitado a 3000 ms.
- El último comando restaura la configuración después del regreso del movimiento normal.
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 previous = UO.moveThroughNPC();
UO.moveThroughNPC(0);
var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
UO.moveThroughNPC(previous);
UO.Print(Convert.ToString(ok));
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: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "movethroughnpc": if (arguments.Length > 0) state.MoveThroughNpc = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveThroughNpc);Parámetros: value (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "movethroughnpc": if (arguments.Length > 0) state.MoveThroughNpc = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveThroughNpc);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveTurnCost();
dynamic UO.moveTurnCost(object? value);Costo adicional de cambiar de dirección al encontrar un camino.
-
value— Nuevo valor opcional. Entero >=0, el negativo se convierte en 0. Este es el peso de la ruta, no milisegundos: un paso recto cuesta 10, uno diagonal 14, y esto es una suma por turno.
int es el valor almacenado actual. Sin argumento sólo lee; con un argumento devuelve el valor después de aplicar las reglas anteriores. Este es un escenario, no el resultado del movimiento.
- La configuración se almacena en el estado de ejecución y es utilizada por los comandos correspondientes al inicio; el cambio no sobrescribe automáticamente la ruta ya creada.
- La devolución del valor original se muestra para una finalización normal. Después de un fallo, las siguientes líneas de recuperación no se ejecutan.
- En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.
Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.
Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.
El 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.moveTurnCost();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- No hay argumentos, el estado no cambia.
- value es el valor numérico de esta configuración.
var value = UO.moveTurnCost();
UO.Print(Convert.ToString(value));Parámetros y flujo de ejecución:
- valor=14. Entero >=0, el negativo se convierte en 0. Este es el peso de la ruta, no milisegundos: un paso recto cuesta 10, uno diagonal 14, y esto es una suma por turno.
- aplicado muestra el valor guardado, no el logro exitoso del objetivo.
return RunScenario();
object? RunScenario()
{
var applied = UO.moveTurnCost(14);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}Parámetros y flujo de ejecución:
- anterior almacena la configuración inicial; NewMoveXY está limitado a 3000 ms.
- El último comando restaura la configuración después del regreso del movimiento normal.
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 previous = UO.moveTurnCost();
UO.moveTurnCost(14);
var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
UO.moveTurnCost(previous);
UO.Print(Convert.ToString(ok));
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: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "moveturncost": if (arguments.Length > 0) state.MoveTurnCost = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveTurnCost);Parámetros: value (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Código interno de implementación; no es un script independiente.
case "moveturncost": if (arguments.Length > 0) state.MoveTurnCost = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveTurnCost);UO.LimitMove — Límite de distancia de movimiento. UO.LimitMove controla la distancia al destino: 2000 por defecto, cero sin límite. No hay límites ocultos de 4096 pasos/nodos o 10000 nodos. El trabajo se divide en partes cancelables. GetPathArray respeta el umbral de resistencia moveThroughNPC y moveOpenDoor.
ClassicUO — Bad Newbie & C# Scripts IDE