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

UO.CalcDir

ClassicUO • Runtime API

Calcule la direction entre deux points du monde sans déplacer le personnage.

Syntaxe exacte

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

Paramètres

  • Xfrom — X du point de départ.
  • Yfrom — Y du point de départ.
  • Xto — X de destination.
  • Yto — Y de destination.

Retour

Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez pas 100 comme direction de marche.

Comportement

  • Calcul pur sans paquets, attente, chargement de carte, contrôle des obstacles, de Z ou du monde. Ne cherche pas de chemin praticable et ne garantit pas l’arrivée. Utilisez le même repère ; un détour peut être plus long.
  • Les quatre paramètres sont obligatoires : coordonnées mondiales Integer dans la plage documentée 0..65535. Any désigne l’adaptateur, pas un ID. Ni valeurs par défaut, coordonnées de conteneur, cinquième Z ni surcharge à objet unique.
  • Soustrait départ de destination puis examine les signes. Y décroissant est le nord, X croissant l’est. Deux axes modifiés donnent une diagonale quelle que soit leur amplitude. Deux différences nulles donnent 100.

Fonctions internes : de l’appel au résultat

Le troisième exemple reconstruit l’algorithme avec une fonction du script, sans prétendre être une fonction interne appelée par le moteur.

1. ExecuteStealthCompatibility

L’adaptateur lit les positions 0..3 comme entiers Xfrom,Yfrom,Xto,Yto puis appelle le calcul.

Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez pas 100 comme direction de marche.

Source du projet: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; fonction ExecuteStealthCompatibility.

2. CalculateDirection

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

Soustrait départ de destination puis examine les signes. Y décroissant est le nord, X croissant l’est. Deux axes modifiés donnent une diagonale quelle que soit leur amplitude. Deux différences nulles donnent 100.

Source du projet: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; fonction CalculateDirection.

Calcul pur sans paquets, attente, chargement de carte, contrôle des obstacles, de Z ou du monde. Ne cherche pas de chemin praticable et ne garantit pas l’arrivée. Utilisez le même repère ; un détour peut être plus long.

Exemples

Calcul direct

# Calcul direct
#
# Calcule la direction entre deux points du monde sans déplacer le personnage.
#
# Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est
# pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez
# pas 100 comme direction de marche.

SUB Main()
    # (100,100) vers (101,100) : seul X augmente. Main renvoie Integer 2, est, sans déplacement.
    # Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est
    # pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez
    # pas 100 comme direction de marche.
    # Soustrait départ de destination puis examine les signes. Y décroissant est le nord, X
    # croissant l’est. Deux axes modifiés donnent une diagonale quelle que soit leur amplitude. Deux
    # différences nulles donnent 100.

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

Explication des paramètres et du déroulement:

  • (100,100) vers (101,100) : seul X augmente. Main renvoie Integer 2, est, sans déplacement.
  • Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez pas 100 comme direction de marche.
  • Soustrait départ de destination puis examine les signes. Y décroissant est le nord, X croissant l’est. Deux axes modifiés donnent une diagonale quelle que soit leur amplitude. Deux différences nulles donnent 100.

Interpréter le résultat

# Interpréter le résultat
#
# Calcule la direction entre deux points du monde sans déplacer le personnage.
#
# Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est
# pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez
# pas 100 comme direction de marche.

SUB Main()
    # Deux points (100,100) donnent direction=100 et Main renvoie "already there". Des points
    # différents prennent l’autre branche. Comparez à 100, pas à True.
    # Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est
    # pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez
    # pas 100 comme direction de marche.
    # Soustrait départ de destination puis examine les signes. Y décroissant est le nord, X
    # croissant l’est. Deux axes modifiés donnent une diagonale quelle que soit leur amplitude. Deux
    # différences nulles donnent 100.

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

Explication des paramètres et du déroulement:

  • Deux points (100,100) donnent direction=100 et Main renvoie "already there". Des points différents prennent l’autre branche. Comparez à 100, pas à True.
  • Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez pas 100 comme direction de marche.
  • Soustrait départ de destination puis examine les signes. Y décroissant est le nord, X croissant l’est. Deux axes modifiés donnent une diagonale quelle que soit leur amplitude. Deux différences nulles donnent 100.

Algorithme complet en script

# Algorithme complet en script
#
# Calcule la direction entre deux points du monde sans déplacer le personnage.
#
# Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est
# pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez
# pas 100 comme direction de marche.

SUB Main()
    # De (20,20) à (19,21), X baisse et Y monte. UO.CalcDir et RebuildDirection renvoient 5 ; Main
    # renvoie "5:5". L’auxiliaire complet montre chaque branche avec les mêmes quatre paramètres.
    # Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est
    # pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez
    # pas 100 comme direction de marche.
    # Soustrait départ de destination puis examine les signes. Y décroissant est le nord, X
    # croissant l’est. Deux axes modifiés donnent une diagonale quelle que soit leur amplitude. Deux
    # différences nulles donnent 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

Explication des paramètres et du déroulement:

  • De (20,20) à (19,21), X baisse et Y monte. UO.CalcDir et RebuildDirection renvoient 5 ; Main renvoie "5:5". L’auxiliaire complet montre chaque branche avec les mêmes quatre paramètres.
  • Code Integer : 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SO, 6=O, 7=NO. Points identiques : 100. Ce n’est pas un Boolean : 0 signifie nord, pas échec ; 1 signifie nord-est, pas succès. Ne transmettez pas 100 comme direction de marche.
  • Soustrait départ de destination puis examine les signes. Y décroissant est le nord, X croissant l’est. Deux axes modifiés donnent une diagonale quelle que soit leur amplitude. Deux différences nulles donnent 100.

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

Basic