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

UO.CalcDir

ClassicUO • Runtime API

Berechnet die Richtung zwischen zwei Weltpunkten, ohne die Figur zu bewegen.

Genaue Syntax

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

Parameter

  • Xfrom — X des Startpunkts.
  • Yfrom — Y des Startpunkts.
  • Xto — X des Zielpunkts.
  • Yto — Y des Zielpunkts.

Rückgabewert

Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals als Schrittrichtung verwenden.

Verhalten

  • Reine Berechnung ohne Pakete, Warten, Kartenladen, Hindernis-, Z- oder Facettenprüfung. Kein begehbarer Weg und keine Ankunftsgarantie. Punkte müssen im gleichen Koordinatensystem liegen; Umwege können länger sein.
  • Alle vier Parameter sind nötig: Integer-Weltkoordinaten im dokumentierten Bereich 0..65535. Any bezeichnet den Adapter, keine Objekt-ID. Keine Vorgaben, Containerkoordinaten, fünfte Z-Koordinate oder Ein-Objekt-Überladung.
  • Ziel minus Start bilden und Vorzeichen prüfen. Kleineres Y ist Norden, größeres X Osten. Änderungen beider Achsen liefern eine Diagonale unabhängig von der Größe. Zwei Nulldifferenzen liefern 100.

Interne Funktionen: vom Aufruf zum Ergebnis

Beispiel 3 rekonstruiert den Algorithmus als Skriptfunktion. Der Interpreter ruft intern nicht diesen Lernhelfer auf.

1. ExecuteStealthCompatibility

Der Adapter liest Argumente 0..3 als ganze Zahlen Xfrom,Yfrom,Xto,Yto und ruft den Berechnungshelfer auf.

Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals als Schrittrichtung verwenden.

Projektquelle: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; Funktion ExecuteStealthCompatibility.

2. CalculateDirection

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

Ziel minus Start bilden und Vorzeichen prüfen. Kleineres Y ist Norden, größeres X Osten. Änderungen beider Achsen liefern eine Diagonale unabhängig von der Größe. Zwei Nulldifferenzen liefern 100.

Projektquelle: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; Funktion CalculateDirection.

Reine Berechnung ohne Pakete, Warten, Kartenladen, Hindernis-, Z- oder Facettenprüfung. Kein begehbarer Weg und keine Ankunftsgarantie. Punkte müssen im gleichen Koordinatensystem liegen; Umwege können länger sein.

Beispiele

Direkt berechnen

# Direkt berechnen
#
# Berechnet die Richtung zwischen zwei Weltpunkten, ohne die Figur zu bewegen.
#
# Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein
# Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals
# als Schrittrichtung verwenden.

SUB Main()
    # (100,100) nach (101,100): nur X wächst. Main liefert Integer 2, Osten, ohne Bewegung.
    # Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein
    # Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals
    # als Schrittrichtung verwenden.
    # Ziel minus Start bilden und Vorzeichen prüfen. Kleineres Y ist Norden, größeres X Osten.
    # Änderungen beider Achsen liefern eine Diagonale unabhängig von der Größe. Zwei Nulldifferenzen
    # liefern 100.

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

Erläuterung der Parameter und Ausführung:

  • (100,100) nach (101,100): nur X wächst. Main liefert Integer 2, Osten, ohne Bewegung.
  • Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals als Schrittrichtung verwenden.
  • Ziel minus Start bilden und Vorzeichen prüfen. Kleineres Y ist Norden, größeres X Osten. Änderungen beider Achsen liefern eine Diagonale unabhängig von der Größe. Zwei Nulldifferenzen liefern 100.

Ergebnis richtig prüfen

# Ergebnis richtig prüfen
#
# Berechnet die Richtung zwischen zwei Weltpunkten, ohne die Figur zu bewegen.
#
# Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein
# Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals
# als Schrittrichtung verwenden.

SUB Main()
    # Beide Punkte (100,100) ergeben direction=100. Main liefert "already there"; bei verschiedenen
    # Punkten gilt der andere Zweig. Mit 100 vergleichen, nicht mit True.
    # Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein
    # Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals
    # als Schrittrichtung verwenden.
    # Ziel minus Start bilden und Vorzeichen prüfen. Kleineres Y ist Norden, größeres X Osten.
    # Änderungen beider Achsen liefern eine Diagonale unabhängig von der Größe. Zwei Nulldifferenzen
    # liefern 100.

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

Erläuterung der Parameter und Ausführung:

  • Beide Punkte (100,100) ergeben direction=100. Main liefert "already there"; bei verschiedenen Punkten gilt der andere Zweig. Mit 100 vergleichen, nicht mit True.
  • Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals als Schrittrichtung verwenden.
  • Ziel minus Start bilden und Vorzeichen prüfen. Kleineres Y ist Norden, größeres X Osten. Änderungen beider Achsen liefern eine Diagonale unabhängig von der Größe. Zwei Nulldifferenzen liefern 100.

Vollständiger Skriptalgorithmus

# Vollständiger Skriptalgorithmus
#
# Berechnet die Richtung zwischen zwei Weltpunkten, ohne die Figur zu bewegen.
#
# Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein
# Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals
# als Schrittrichtung verwenden.

SUB Main()
    # Von (20,20) nach (19,21) sinkt X und steigt Y. UO.CalcDir und RebuildDirection liefern 5, Main
    # "5:5". Der vollständige Helfer zeigt alle Richtungszweige mit denselben vier
    # Koordinatenparametern.
    # Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein
    # Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals
    # als Schrittrichtung verwenden.
    # Ziel minus Start bilden und Vorzeichen prüfen. Kleineres Y ist Norden, größeres X Osten.
    # Änderungen beider Achsen liefern eine Diagonale unabhängig von der Größe. Zwei Nulldifferenzen
    # liefern 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

Erläuterung der Parameter und Ausführung:

  • Von (20,20) nach (19,21) sinkt X und steigt Y. UO.CalcDir und RebuildDirection liefern 5, Main "5:5". Der vollständige Helfer zeigt alle Richtungszweige mit denselben vier Koordinatenparametern.
  • Integer-Richtung: 0=N, 1=NO, 2=O, 3=SO, 4=S, 5=SW, 6=W, 7=NW. Gleiche Punkte liefern 100. Kein Boolean: 0 bedeutet Norden, keinen Fehler; 1 bedeutet Nordosten, keinen Erfolg. 100 niemals als Schrittrichtung verwenden.
  • Ziel minus Start bilden und Vorzeichen prüfen. Kleineres Y ist Norden, größeres X Osten. Änderungen beider Achsen liefern eine Diagonale unabhängig von der Größe. Zwei Nulldifferenzen liefern 100.

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

Basic