API Basic Structure fr - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Structure / New / fields

ClassicUO • Basic

Structure regroupe des champs typés, par exemple X, Y et Z, en une valeur. Le moteur prend en charge les structures de données copiées par valeur, sans prétendre implémenter tout Structure de VB.NET.

Syntaxe exacte

[Public | Private] Structure TypeName
    [Public | Dim | VAR] field As FieldType
End Structure
Dim value As TypeName
Dim value = New TypeName()
copy = value
value.field = expression
Sub Change(ByRef value As TypeName)
Function Copy(ByVal value As TypeName) As TypeName

Paramètres

  • TypeName / Public / Private — Nom de type simple et unique, au niveau du fichier ou dans Module. Public par défaut. Private est permis uniquement dans Module ; le nom du type reste inaccessible à l’extérieur. Type public de module : ModuleName.TypeName. Les mots-clés et noms de champs ne sont pas traduits.
  • field / FieldType — Nom de champ unique, As et un type scalaire pris en charge, Enum ou une autre Structure. Champs publics ; syntaxes Public, Dim et VAR acceptées. Types : Integer/Long/Short/Byte, Single/Double/Decimal, String, Boolean/Bool, Object/Variant. Les alias entiers utilisent 32 bits signés. Aucun cycle entre structures imbriquées.
  • Dim / New — Dim value As TypeName et New TypeName() créent la valeur initiale sans appel de script. New exige des parenthèses vides : affectez X/Y/Z ensuite. Dim copy = value reprend la valeur de l’expression. Aucun préfixe UO.
  • value.field / copy — Le point permet de lire ou écrire un champ, y compris route.Start.X. L’écriture vérifie le type et remplace la valeur qui contient le champ. copy = value copie les champs scalaires et les structures imbriquées ; changer copy.X ne change pas value.X. Les types doivent être compatibles.
  • ByVal / ByRef — ByVal transmet une copie. ByRef copie à l’entrée puis réécrit la valeur chez l’appelant à la sortie, y compris pour un argument de champ modifiable. Précisez le modificateur ; sinon les règles Basic existantes s’appliquent. Return peut renvoyer une structure ; Function peut déclarer As TypeName.

Retour

Les déclarations et affectations ne renvoient rien (Unit). New et les fonctions correspondantes renvoient une valeur de structure, représentée comme Object dans les observations avec son nom de type. Les coordonnées sont des nombres, pas des indicateurs Boolean. = et <> renvoient 1/True ou 0/False. Résultats String : "1445:1447:1690:0", "10:15:24", "2:4:2:2".

Comportement

  • Les déclarations sont vérifiées avant les initialiseurs : 256 types maximum, 1–256 champs chacun, 32 niveaux imbriqués. Doublons, types de champs inconnus, cycles et dépassements produisent SC030. La liaison des noms vérifie Private.
  • Valeurs initiales : entier/Enum 0, flottant 0, Boolean 0/False, String vide, Object/Variant Unit avant affectation. Les structures imbriquées ont leurs propres valeurs initiales. Les initialiseurs de champs dans la déclaration ne sont pas acceptés : affectez les valeurs après création.
  • Les champs Object et tableaux conservent leurs références lors de la copie. Les copies peuvent donc partager un List, Dictionary ou tableau. Les champs scalaires et structures imbriquées changent indépendamment ; modifier une collection partagée est visible dans les deux copies. List conserve la valeur au moment de l’ajout.
  • = compare le même type déclaré et ses champs ; <> donne l’inverse. Les références sont comparées par identité. Il s’agit d’une extension du moteur, pas d’une règle universelle de VB.NET. Les hachages conservés et les paires déjà visitées évitent de développer plusieurs fois les mêmes valeurs imbriquées.
  • Sont pris en charge : champs de données publics typés, visibilité dans Module, New(), affectation, paramètres et résultats. Pas de méthodes internes, constructeurs personnalisés, initialiseurs, propriétés, héritage ni champs privés. WITH .field et array[index].field ne sont pas acceptés : lire dans une variable, modifier, puis réécrire. Les déclarations peuvent figurer dans Include.

Exemples

1. Coordonnées et copie indépendante

# original reçoit X=1445 et Y=1690 ; Z reste 0. copy reçoit la valeur, puis copy.X += 2 modifie uniquement la copie. New Position() crée empty avec Z=0. Résultat : 1445:1447:1690:0. Ces coordonnées sont stockées ; aucun déplacement du personnage n’est lancé.
Option Explicit On
Structure Position
    Public X As Integer
    Public Y As Integer
    Public Z As Integer
End Structure

Sub Main()
    Dim original As Position
    original.X = 1445
    original.Y = 1690
    Dim copy = original
    copy.X += 2
    Dim empty = New Position()
    Return CStr(original.X) & ":" & CStr(copy.X) & ":" & CStr(copy.Y) & ":" & CStr(empty.Z)
End Sub

Explication des paramètres et du déroulement:

original reçoit X=1445 et Y=1690 ; Z reste 0. copy reçoit la valeur, puis copy.X += 2 modifie uniquement la copie. New Position() crée empty avec Z=0. Résultat : 1445:1447:1690:0. Ces coordonnées sont stockées ; aucun déplacement du personnage n’est lancé.

2. Route imbriquée, ByVal et ByRef

# Route contient Start et Finish de type Position. Shift(point ByVal, dx ByVal) ajoute dx au X de la copie puis renvoie Position. point:=route.Start et dx:=5 donnent shifted.X=15 ; Start.X reste 10. Advance(route ByRef, dx ByVal) ajoute 4 à Finish.X puis réécrit Route : 24. Main renvoie 10:15:24. Toutes les procédures auxiliaires sont montrées.
Option Explicit On
Structure Position
    Public X As Integer
    Public Y As Integer
End Structure
Structure Route
    Public Start As Position
    Public Finish As Position
End Structure

Function Shift(ByVal point As Position, ByVal dx As Integer) As Position
    point.X += dx
    Return point
End Function

Sub Advance(ByRef route As Route, ByVal dx As Integer)
    route.Finish.X += dx
End Sub

Sub Main()
    Dim route As Route
    route.Start.X = 10
    route.Finish.X = 20
    Dim shifted = Shift(point:=route.Start, dx:=5)
    Advance(route:=route, dx:=4)
    Return CStr(route.Start.X) & ":" & CStr(shifted.X) & ":" & CStr(route.Finish.X)
End Sub

Explication des paramètres et du déroulement:

Route contient Start et Finish de type Position. Shift(point ByVal, dx ByVal) ajoute dx au X de la copie puis renvoie Position. point:=route.Start et dx:=5 donnent shifted.X=15 ; Start.X reste 10. Advance(route ByRef, dx ByVal) ajoute 4 à Finish.X puis réécrit Route : 24. Main renvoie 10:15:24. Toutes les procédures auxiliaires sont montrées.

3. Valeur conservée et collection partagée

# Entry contient Point comme valeur et Items comme Object. first.Point.X=2 ; Items reçoit List() avec un texte. snapshots.Add(first) conserve la valeur. second=first puis second.Point.X=4 ne changent pas le 2 conservé. second.Items.Add("ingot") modifie la liste partagée : first.Items.Count()=2. saved=snapshots[0] permet de lire les champs de l’élément. Résultat : 2:4:2:2.
Option Explicit On
Structure Position
    Public X As Integer
End Structure
Structure Entry
    Public Point As Position
    Public Items As Object
End Structure

Sub Main()
    Dim first As Entry
    first.Point.X = 2
    first.Items = List()
    first.Items.Add("ore")
    Dim snapshots = List()
    snapshots.Add(first)

    Dim second = first
    second.Point.X = 4
    second.Items.Add("ingot")
    Dim saved = snapshots[0]
    Return CStr(first.Point.X) & ":" & CStr(second.Point.X) & ":" & CStr(saved.Point.X) & ":" & CStr(first.Items.Count())
End Sub

Explication des paramètres et du déroulement:

Entry contient Point comme valeur et Items comme Object. first.Point.X=2 ; Items reçoit List() avec un texte. snapshots.Add(first) conserve la valeur. second=first puis second.Point.X=4 ne changent pas le 2 conservé. second.Items.Add("ingot") modifie la liste partagée : first.Items.Count()=2. saved=snapshots[0] permet de lire les champs de l’élément. Résultat : 2:4:2:2.

Fonctions internes : de l’appel au résultat

Structure regroupe des champs typés, par exemple X, Y et Z, en une valeur. Le moteur prend en charge les structures de données copiées par valeur, sans prétendre implémenter tout Structure de VB.NET.

1. Build / PrepareDefault

Les déclarations sont vérifiées avant les initialiseurs : 256 types maximum, 1–256 champs chacun, 32 niveaux imbriqués. Doublons, types de champs inconnus, cycles et dépassements produisent SC030. La liaison des noms vérifie Private.

declarations -> field types -> visibility -> cycle/depth checks -> immutable defaults

Source du projet: external/InjectionScript/src/InjectionScript/Runtime/StructureCatalog.cs; fonction Build / PrepareDefault.

2. VisitNewStructure

Dim value As TypeName et New TypeName() créent la valeur initiale sans appel de script. New exige des parenthèses vides : affectez X/Y/Z ensuite. Dim copy = value reprend la valeur de l’expression. Aucun préfixe UO.

resolve TypeName -> prepared default value; no procedure call

Source du projet: external/InjectionScript/src/InjectionScript/Runtime/Interpreter.cs; fonction VisitNewStructure.

3. WithField / SetVar

Le point permet de lire ou écrire un champ, y compris route.Start.X. L’écriture vérifie le type et remplace la valeur qui contient le champ. copy = value copie les champs scalaires et les structures imbriquées ; changer copy.X ne change pas value.X. Les types doivent être compatibles.

resolve path -> coerce field -> replace path -> assign new root value

Source du projet: external/InjectionScript/src/InjectionScript/Runtime/ObjectTypes/StructureObject.cs; fonction WithField / SetVar.

4. CreateArgumentWriter

ByVal transmet une copie. ByRef copie à l’entrée puis réécrit la valeur chez l’appelant à la sortie, y compris pour un argument de champ modifiable. Précisez le modificateur ; sinon les règles Basic existantes s’appliquent. Return peut renvoyer une structure ; Function peut déclarer As TypeName.

ByVal: value copy; ByRef: value copy -> callee -> caller slot write-back

Source du projet: external/InjectionScript/src/InjectionScript/Runtime/Interpreter.cs; fonction CreateArgumentWriter.

5. ValueEquals

= compare le même type déclaré et ses champs ; <> donne l’inverse. Les références sont comparées par identité. Il s’agit d’une extension du moteur, pas d’une règle universelle de VB.NET. Les hachages conservés et les paires déjà visitées évitent de développer plusieurs fois les mêmes valeurs imbriquées.

type identity -> cached hash -> distinct field pairs; reference members keep identity

Source du projet: external/InjectionScript/src/InjectionScript/Runtime/ObjectTypes/StructureObject.cs; fonction ValueEquals.

Les déclarations et affectations ne renvoient rien (Unit). New et les fonctions correspondantes renvoient une valeur de structure, représentée comme Object dans les observations avec son nom de type. Les coordonnées sont des nombres, pas des indicateurs Boolean. = et <> renvoient 1/True ou 0/False. Résultats String : "1445:1447:1690:0", "10:15:24", "2:4:2:2".


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

Basic