API UO CalcDir es - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.CalcDir

ClassicUO • Runtime API

Calcula la dirección entre dos puntos del mundo sin mover al personaje.

Sintaxis exacta

UO.CalcDir(Xfrom:Any, Yfrom:Any, Xto:Any, Yto:Any) -> Integer

Parámetros

  • Xfrom — X de origen.
  • Yfrom — Y de origen.
  • Xto — X de destino.
  • Yto — Y de destino.

Devuelve

Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como dirección de un paso.

Comportamiento

  • Cálculo puro sin paquetes, esperas, cargar mapas, obstáculos, Z ni comprobar el mundo. No busca un camino transitable ni garantiza llegar. Use un mismo sistema de coordenadas; un rodeo puede ser mayor.
  • Los cuatro parámetros son obligatorios: coordenadas mundiales Integer en el rango documentado 0..65535. Any indica el adaptador, no un ID. Sin valores predeterminados, coordenadas de contenedor, quinto Z ni sobrecarga con un objeto.
  • Resta origen de destino y examina signos. Y decreciente es norte, X creciente es este. Cambiar ambos ejes elige una diagonal sin importar las magnitudes. Ambas diferencias cero devuelven 100.

Funciones internas: de la llamada al resultado

El tercer ejemplo reconstruye el algoritmo mediante una función de script; no afirma que el motor llame a esa función de ejemplo.

1. ExecuteStealthCompatibility

El adaptador lee las posiciones 0..3 como enteros Xfrom,Yfrom,Xto,Yto y llama al cálculo.

Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como dirección de un paso.

Código del proyecto: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; función ExecuteStealthCompatibility.

2. CalculateDirection

CalculateDirection: dx=Math.Sign(toX-fromX); dy=Math.Sign(toY-fromY); identical ->100; axis/sign branches ->0..7.

Resta origen de destino y examina signos. Y decreciente es norte, X creciente es este. Cambiar ambos ejes elige una diagonal sin importar las magnitudes. Ambas diferencias cero devuelven 100.

Código del proyecto: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; función CalculateDirection.

Cálculo puro sin paquetes, esperas, cargar mapas, obstáculos, Z ni comprobar el mundo. No busca un camino transitable ni garantiza llegar. Use un mismo sistema de coordenadas; un rodeo puede ser mayor.

Ejemplos

Cálculo directo

# Cálculo directo
#
# Calcula la dirección entre dos puntos del mundo sin mover al personaje.
#
# Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No
# es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como
# dirección de un paso.

SUB Main()
    # De (100,100) a (101,100) solo aumenta X. Main devuelve Integer 2, este, sin movimiento.
    # Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No
    # es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como
    # dirección de un paso.
    # Resta origen de destino y examina signos. Y decreciente es norte, X creciente es este. Cambiar
    # ambos ejes elige una diagonal sin importar las magnitudes. Ambas diferencias cero devuelven
    # 100.

    Return UO.CalcDir(100,100,101,100)
END SUB

Explicación de los parámetros y la ejecución:

  • De (100,100) a (101,100) solo aumenta X. Main devuelve Integer 2, este, sin movimiento.
  • Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como dirección de un paso.
  • Resta origen de destino y examina signos. Y decreciente es norte, X creciente es este. Cambiar ambos ejes elige una diagonal sin importar las magnitudes. Ambas diferencias cero devuelven 100.

Comprobar el resultado

# Comprobar el resultado
#
# Calcula la dirección entre dos puntos del mundo sin mover al personaje.
#
# Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No
# es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como
# dirección de un paso.

SUB Main()
    # Dos puntos (100,100) dan direction=100 y Main devuelve "already there". Puntos distintos toman
    # la otra rama. Compare con 100, no con True.
    # Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No
    # es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como
    # dirección de un paso.
    # Resta origen de destino y examina signos. Y decreciente es norte, X creciente es este. Cambiar
    # ambos ejes elige una diagonal sin importar las magnitudes. Ambas diferencias cero devuelven
    # 100.

    Dim direction=UO.CalcDir(100,100,100,100)
    If direction=100 Then
        Return "already there"
    End If
    Return "different point"
END SUB

Explicación de los parámetros y la ejecución:

  • Dos puntos (100,100) dan direction=100 y Main devuelve "already there". Puntos distintos toman la otra rama. Compare con 100, no con True.
  • Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como dirección de un paso.
  • Resta origen de destino y examina signos. Y decreciente es norte, X creciente es este. Cambiar ambos ejes elige una diagonal sin importar las magnitudes. Ambas diferencias cero devuelven 100.

Algoritmo completo en script

# Algoritmo completo en script
#
# Calcula la dirección entre dos puntos del mundo sin mover al personaje.
#
# Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No
# es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como
# dirección de un paso.

SUB Main()
    # De (20,20) a (19,21), baja X y sube Y. UO.CalcDir y RebuildDirection devuelven 5; Main
    # devuelve "5:5". La función completa muestra cada rama y los mismos cuatro parámetros.
    # Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No
    # es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como
    # dirección de un paso.
    # Resta origen de destino y examina signos. Y decreciente es norte, X creciente es este. Cambiar
    # ambos ejes elige una diagonal sin importar las magnitudes. Ambas diferencias cero devuelven
    # 100.

    Dim actual=UO.CalcDir(20,20,19,21)
    Dim rebuilt=RebuildDirection(20,20,19,21)
    Return CStr(actual) & ":" & CStr(rebuilt)
END SUB

Function RebuildDirection(Xfrom, Yfrom, Xto, Yto) As Integer
    Dim dx = Xto-Xfrom
    Dim dy = Yto-Yfrom
    If dx=0 AndAlso dy=0 Then
        Return 100
    End If
    If dx=0 Then
        If dy<0 Then
            Return 0
        End If
        Return 4
    End If
    If dy=0 Then
        If dx>0 Then
            Return 2
        End If
        Return 6
    End If
    If dx>0 Then
        If dy<0 Then
            Return 1
        End If
        Return 3
    End If
    If dy>0 Then
        Return 5
    End If
    Return 7
End Function

Explicación de los parámetros y la ejecución:

  • De (20,20) a (19,21), baja X y sube Y. UO.CalcDir y RebuildDirection devuelven 5; Main devuelve "5:5". La función completa muestra cada rama y los mismos cuatro parámetros.
  • Código Integer: 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Puntos idénticos devuelven 100. No es Boolean: 0 significa norte, no error; 1 significa noreste, no éxito. No use 100 como dirección de un paso.
  • Resta origen de destino y examina signos. Y decreciente es norte, X creciente es este. Cambiar ambos ejes elige una diagonal sin importar las magnitudes. Ambas diferencias cero devuelven 100.

en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic