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

Structure / New / fields

ClassicUO • Basic

Structure riunisce campi tipizzati, come X, Y e Z, in un valore. Il motore supporta strutture dati copiate per valore; non tutte le funzionalità Structure di VB.NET.

Sintassi esatta

[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

Parametri

  • TypeName / Public / Private — Nome di tipo semplice e univoco, a livello di file o dentro Module. Public è predefinito. Private è ammesso solo in Module e impedisce l’accesso esterno al nome del tipo. Tipo pubblico: ModuleName.TypeName. Parole chiave e campi non vengono tradotti.
  • field / FieldType — Nome univoco del campo, As e un tipo scalare supportato, Enum o altra Structure. Campi pubblici; forme Public, Dim e VAR ammesse. Tipi: Integer/Long/Short/Byte, Single/Double/Decimal, String, Boolean/Bool, Object/Variant. Gli alias interi usano 32 bit con segno. Le strutture annidate non possono creare cicli.
  • Dim / New — Dim value As TypeName e New TypeName() creano il valore predefinito senza chiamate allo script. New richiede parentesi vuote: assegnare X/Y/Z in seguito. Dim copy = value prende il valore dell’espressione. Nessun prefisso UO.
  • value.field / copy — Il punto legge e assegna campi, anche route.Start.X. La scrittura controlla il tipo e sostituisce il valore contenitore. copy = value copia scalari e strutture annidate: modificare copy.X non modifica value.X. I tipi devono essere compatibili.
  • ByVal / ByRef — ByVal passa una copia. ByRef copia all’ingresso e riscrive il risultato nel chiamante all’uscita, anche per un argomento campo modificabile. Specificare i modificatori; altrimenti valgono le regole Basic esistenti. Return può restituire una struttura; Function può dichiarare As TypeName.

Restituisce

Dichiarazioni e assegnazioni restituiscono Unit. New e funzioni appropriate restituiscono un valore di struttura, rappresentato come Object nelle osservazioni con il nome del tipo. Le coordinate sono numeri, non flag Boolean. = e <> restituiscono 1/True o 0/False. Risultati String: "1445:1447:1690:0", "10:15:24", "2:4:2:2".

Comportamento

  • Controllo prima degli inizializzatori: massimo 256 tipi, ciascuno con 1–256 campi, 32 livelli annidati. Duplicati, tipi sconosciuti, cicli e limiti superati producono SC030. Private viene controllato durante la risoluzione dei nomi.
  • Campi predefiniti: intero/Enum 0, virgola mobile 0, Boolean 0/False, String vuota, Object/Variant Unit prima dell’assegnazione. Le strutture annidate hanno propri valori predefiniti. Inizializzatori dei campi nella dichiarazione non supportati: assegnare dopo la creazione.
  • Object e array conservano riferimenti durante la copia. Le copie possono condividere List, Dictionary o array. Scalare e struttura annidata cambiano indipendentemente; modificare il contenuto della raccolta condivisa è visibile in entrambe. List conserva il valore della struttura al momento dell’aggiunta.
  • = confronta lo stesso tipo dichiarato e i campi; <> restituisce l’inverso. I riferimenti si confrontano per identità. È un’estensione del motore, non una regola generale per VB.NET. Hash memorizzati e coppie già visitate evitano ripetute espansioni di valori annidati condivisi.
  • Supportati: campi dati pubblici tipizzati, visibilità Module, New(), assegnazione, parametri e risultati. Non supportati metodi interni, costruttori personalizzati, inizializzatori, proprietà, ereditarietà o campi privati. WITH .field e array[index].field non sono ammessi: leggere in una variabile, modificare e riscrivere. Le dichiarazioni possono essere in Include.

Esempi

1. Coordinate e copia indipendente

# original riceve X=1445 e Y=1690; Z resta 0. copy prende il valore, poi copy.X += 2 cambia solo la copia. New Position() crea empty con Z=0. Risultato: 1445:1447:1690:0. Sono coordinate memorizzate; lo script non muove il personaggio.
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

Spiegazione dei parametri e dell’esecuzione:

original riceve X=1445 e Y=1690; Z resta 0. copy prende il valore, poi copy.X += 2 cambia solo la copia. New Position() crea empty con Z=0. Risultato: 1445:1447:1690:0. Sono coordinate memorizzate; lo script non muove il personaggio.

2. Percorso annidato, ByVal e ByRef

# Route contiene Start e Finish di tipo Position. Shift(point ByVal, dx ByVal) aggiunge dx alla X della copia e restituisce Position. point:=route.Start, dx:=5 producono shifted.X=15; Start.X resta 10. Advance(route ByRef, dx ByVal) aggiunge 4 a Finish.X e riscrive Route: 24. Main restituisce 10:15:24. Tutte le procedure ausiliarie sono mostrate.
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

Spiegazione dei parametri e dell’esecuzione:

Route contiene Start e Finish di tipo Position. Shift(point ByVal, dx ByVal) aggiunge dx alla X della copia e restituisce Position. point:=route.Start, dx:=5 producono shifted.X=15; Start.X resta 10. Advance(route ByRef, dx ByVal) aggiunge 4 a Finish.X e riscrive Route: 24. Main restituisce 10:15:24. Tutte le procedure ausiliarie sono mostrate.

3. Valore salvato e raccolta condivisa

# Entry contiene Point come valore e Items come Object. first.Point.X=2; Items riceve List() con un testo. snapshots.Add(first) salva il valore. second=first e second.Point.X=4 non cambiano il 2 salvato. second.Items.Add("ingot") cambia la lista condivisa: first.Items.Count()=2. saved=snapshots[0] permette di leggere i campi dell’elemento. Risultato: 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

Spiegazione dei parametri e dell’esecuzione:

Entry contiene Point come valore e Items come Object. first.Point.X=2; Items riceve List() con un testo. snapshots.Add(first) salva il valore. second=first e second.Point.X=4 non cambiano il 2 salvato. second.Items.Add("ingot") cambia la lista condivisa: first.Items.Count()=2. saved=snapshots[0] permette di leggere i campi dell’elemento. Risultato: 2:4:2:2.

Funzioni interne: dalla chiamata al risultato

Structure riunisce campi tipizzati, come X, Y e Z, in un valore. Il motore supporta strutture dati copiate per valore; non tutte le funzionalità Structure di VB.NET.

1. Build / PrepareDefault

Controllo prima degli inizializzatori: massimo 256 tipi, ciascuno con 1–256 campi, 32 livelli annidati. Duplicati, tipi sconosciuti, cicli e limiti superati producono SC030. Private viene controllato durante la risoluzione dei nomi.

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

Sorgente del progetto: external/InjectionScript/src/InjectionScript/Runtime/StructureCatalog.cs; funzione Build / PrepareDefault.

2. VisitNewStructure

Dim value As TypeName e New TypeName() creano il valore predefinito senza chiamate allo script. New richiede parentesi vuote: assegnare X/Y/Z in seguito. Dim copy = value prende il valore dell’espressione. Nessun prefisso UO.

resolve TypeName -> prepared default value; no procedure call

Sorgente del progetto: external/InjectionScript/src/InjectionScript/Runtime/Interpreter.cs; funzione VisitNewStructure.

3. WithField / SetVar

Il punto legge e assegna campi, anche route.Start.X. La scrittura controlla il tipo e sostituisce il valore contenitore. copy = value copia scalari e strutture annidate: modificare copy.X non modifica value.X. I tipi devono essere compatibili.

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

Sorgente del progetto: external/InjectionScript/src/InjectionScript/Runtime/ObjectTypes/StructureObject.cs; funzione WithField / SetVar.

4. CreateArgumentWriter

ByVal passa una copia. ByRef copia all’ingresso e riscrive il risultato nel chiamante all’uscita, anche per un argomento campo modificabile. Specificare i modificatori; altrimenti valgono le regole Basic esistenti. Return può restituire una struttura; Function può dichiarare As TypeName.

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

Sorgente del progetto: external/InjectionScript/src/InjectionScript/Runtime/Interpreter.cs; funzione CreateArgumentWriter.

5. ValueEquals

= confronta lo stesso tipo dichiarato e i campi; <> restituisce l’inverso. I riferimenti si confrontano per identità. È un’estensione del motore, non una regola generale per VB.NET. Hash memorizzati e coppie già visitate evitano ripetute espansioni di valori annidati condivisi.

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

Sorgente del progetto: external/InjectionScript/src/InjectionScript/Runtime/ObjectTypes/StructureObject.cs; funzione ValueEquals.

Dichiarazioni e assegnazioni restituiscono Unit. New e funzioni appropriate restituiscono un valore di struttura, rappresentato come Object nelle osservazioni con il nome del tipo. Le coordinate sono numeri, non flag Boolean. = e <> restituiscono 1/True o 0/False. Risultati String: "1445:1447:1690:0", "10:15:24", "2:4:2:2".


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

Basic