Skip to content

API UO CallSub it

Codex edited this page Oct 4, 2026 · 2 revisions

UO.CallSub

Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

UO.CallSub · UO.FunRunning · UO.SubExists

ClassicUO • Runtime API

Richiede un’attività separata per una procedura nota al gestore, ad esempio un monitor indipendente. L’avvio è asincrono, diverso da una normale chiamata Basic che attende il risultato.

Sintassi esatta

UO.CallSub(subrutineName:String) -> Unit

Parametri

  • subrutineName — String subrutineName obbligatorio: nome Sub/Function del catalogo, per esempio WeightWatch. Non percorso, file, indice, codice o etichetta modificata con SetScriptName. Ignora maiuscole/minuscole ma non elimina spazi. Non può passare argomenti alla procedura.

Restituisce

Unit: nessun valore, risultato di funzione o conferma di avvio. Un nome sconosciuto non avvia nulla. Per l’esecuzione sincrona usare una normale chiamata Basic MyFunction(...).

Comportamento

  • L’Autoload selezionato ha priorità per nomi uguali. Più definizioni nello stesso file sono ambigue; un helper caricato separatamente deve avere un nome univoco. Le copie di riserva non vengono scelte in ordine di file. CallSub, come UO.Exec("exec Nome"), legge l’Autoload selezionato dal disco prima dell’avvio. La sostituzione vale dalla chiamata successiva; un file vuoto o eliminato segnala un errore anziché eseguire codice memorizzato o una copia. Gli helper univoci caricati separatamente conservano un percorso di avvio distinto. La chiamata attende la decisione di avvio, non la fine della nuova attività.
  • CallSub fornisce zero argomenti. Private, errori di sintassi, parametri obbligatori, Basic disattivato o regola della singola procedura possono impedire l’avvio; controllare stato/errori IDE. Una nuova chiamata non duplica né riprende un’esecuzione attiva. Dopo annullamento può attendere la pulizia. Il controllore non attende la fine dell’attività.
  • FunRunning usa nome originale e chiave della procedura, non un’etichetta rinominata. La pausa conserva l’esecuzione e restituisce 1. L’annullamento restituisce 0 anche durante la pulizia. Controllo e chiamata successiva non sono atomici: l’attività può finire nel frattempo.
  • SubExists può dare 1 anche per definizioni Private o errate. Fermare l’attività o chiudere la scheda non elimina necessariamente la voce del catalogo. Ricaricare un file modificato rimuove le definizioni obsolete. Una funzione caricata solo in un runtime separato può non essere registrata nel gestore.

Funzioni interne: dalla chiamata al risultato

Sono passaggi reali dell’implementazione; i nomi C# non sono comandi UO aggiuntivi. Tutte le funzioni ausiliarie Basic eseguibili sono definite negli esempi.

1. CallSub

String subrutineName obbligatorio: nome Sub/Function del catalogo, per esempio WeightWatch. Non percorso, file, indice, codice o etichetta modificata con SetScriptName. Ignora maiuscole/minuscole ma non elimina spazi. Non può passare argomenti alla procedura.

Unit: nessun valore, risultato di funzione o conferma di avvio. Un nome sconosciuto non avvia nulla. Per l’esecuzione sincrona usare una normale chiamata Basic MyFunction(...).

Sorgente del progetto: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; funzione CallSub.

2. RunNamedProcedure

L’Autoload selezionato ha priorità per nomi uguali. Più definizioni nello stesso file sono ambigue; un helper caricato separatamente deve avere un nome univoco. Le copie di riserva non vengono scelte in ordine di file. CallSub, come UO.Exec("exec Nome"), legge l’Autoload selezionato dal disco prima dell’avvio. La sostituzione vale dalla chiamata successiva; un file vuoto o eliminato segnala un errore anziché eseguire codice memorizzato o una copia. Gli helper univoci caricati separatamente conservano un percorso di avvio distinto. La chiamata attende la decisione di avvio, non la fine della nuova attività.

SubExists può dare 1 anche per definizioni Private o errate. Fermare l’attività o chiudere la scheda non elimina necessariamente la voce del catalogo. Ricaricare un file modificato rimuove le definizioni obsolete. Una funzione caricata solo in un runtime separato può non essere registrata nel gestore.

Sorgente del progetto: src/ClassicUO.Client/Game/Managers/YokoInjectionManager.cs; funzione RunNamedProcedure.

3. Exec

Richiede un’attività separata per una procedura nota al gestore, ad esempio un monitor indipendente. L’avvio è asincrono, diverso da una normale chiamata Basic che attende il risultato.

CallSub fornisce zero argomenti. Private, errori di sintassi, parametri obbligatori, Basic disattivato o regola della singola procedura possono impedire l’avvio; controllare stato/errori IDE. Una nuova chiamata non duplica né riprende un’esecuzione attiva. Dopo annullamento può attendere la pulizia. Il controllore non attende la fine dell’attività.

Sorgente del progetto: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; funzione Exec.

Sono passaggi reali dell’implementazione; i nomi C# non sono comandi UO aggiuntivi. Tutte le funzioni ausiliarie Basic eseguibili sono definite negli esempi.

Esempi

Avviare e continuare Main

# Avviare e continuare Main
#
# Richiede un’attività separata per una procedura nota al gestore, ad esempio un monitor
# indipendente. L’avvio è asincrono, diverso da una normale chiamata Basic che attende il
# risultato.
#
# Unit: nessun valore, risultato di funzione o conferma di avvio. Un nome sconosciuto non avvia
# nulla. Per l’esecuzione sincrona usare una normale chiamata Basic MyFunction(...).

SUB Main()
    # WeightWatch è definita sotto. Main restituisce 77 senza attendere tre misure; 77 appartiene a
    # Main, non a CallSub.
    # Salvare ogni esempio separatamente, caricarlo in IDE/gestore e avviare Main per registrare le
    # procedure. WeightWatch/ManaWatch sono definite completamente: tre misure di peso/mana,
    # Wait(1000) = 1000 ms, output solo nel mondo. Monitor finiti; le pause allungano il tempo.
    # Consentire procedure simultanee per le due attività.

    UO.CallSub("WeightWatch")
    Return 77
END SUB

Sub WeightWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Weight: " & CStr(UO.Weight()))
        End If
        UO.Wait(1000)
    Next
End Sub

Spiegazione dei parametri e dell’esecuzione:

  • WeightWatch è definita sotto. Main restituisce 77 senza attendere tre misure; 77 appartiene a Main, non a CallSub.
  • Salvare ogni esempio separatamente, caricarlo in IDE/gestore e avviare Main per registrare le procedure. WeightWatch/ManaWatch sono definite completamente: tre misure di peso/mana, Wait(1000) = 1000 ms, output solo nel mondo. Monitor finiti; le pause allungano il tempo. Consentire procedure simultanee per le due attività.

Conservare un’attività esistente

# Conservare un’attività esistente
#
# Richiede un’attività separata per una procedura nota al gestore, ad esempio un monitor
# indipendente. L’avvio è asincrono, diverso da una normale chiamata Basic che attende il
# risultato.
#
# Unit: nessun valore, risultato di funzione o conferma di avvio. Un nome sconosciuto non avvia
# nulla. Per l’esecuzione sincrona usare una normale chiamata Basic MyFunction(...).

SUB Main()
    # StartIfIdle controlla definizione e attività. False: nessuna richiesta; True: solo richiesta
    # CallSub, non conferma di avvio o completamento.
    # Salvare ogni esempio separatamente, caricarlo in IDE/gestore e avviare Main per registrare le
    # procedure. WeightWatch/ManaWatch sono definite completamente: tre misure di peso/mana,
    # Wait(1000) = 1000 ms, output solo nel mondo. Monitor finiti; le pause allungano il tempo.
    # Consentire procedure simultanee per le due attività.

    Return StartIfIdle("WeightWatch")
END SUB

Function StartIfIdle(name) As Boolean
    If Not UO.SubExists(name) Then
        Return False
    End If
    If UO.FunRunning(name) Then
        Return False
    End If
    UO.CallSub(name)
    Return True
End Function

Sub WeightWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Weight: " & CStr(UO.Weight()))
        End If
        UO.Wait(1000)
    Next
End Sub

Spiegazione dei parametri e dell’esecuzione:

  • StartIfIdle controlla definizione e attività. False: nessuna richiesta; True: solo richiesta CallSub, non conferma di avvio o completamento.
  • Salvare ogni esempio separatamente, caricarlo in IDE/gestore e avviare Main per registrare le procedure. WeightWatch/ManaWatch sono definite completamente: tre misure di peso/mana, Wait(1000) = 1000 ms, output solo nel mondo. Monitor finiti; le pause allungano il tempo. Consentire procedure simultanee per le due attività.

Due monitor indipendenti

# Due monitor indipendenti
#
# Richiede un’attività separata per una procedura nota al gestore, ad esempio un monitor
# indipendente. L’avvio è asincrono, diverso da una normale chiamata Basic che attende il
# risultato.
#
# Unit: nessun valore, risultato di funzione o conferma di avvio. Un nome sconosciuto non avvia
# nulla. Per l’esecuzione sincrona usare una normale chiamata Basic MyFunction(...).

SUB Main()
    # WeightWatch e ManaWatch non condividono variabili locali. L’ordine dei messaggi non è
    # garantito.
    # Salvare ogni esempio separatamente, caricarlo in IDE/gestore e avviare Main per registrare le
    # procedure. WeightWatch/ManaWatch sono definite completamente: tre misure di peso/mana,
    # Wait(1000) = 1000 ms, output solo nel mondo. Monitor finiti; le pause allungano il tempo.
    # Consentire procedure simultanee per le due attività.

    UO.CallSub("WeightWatch")
    UO.CallSub("ManaWatch")
END SUB

Sub WeightWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Weight: " & CStr(UO.Weight()))
        End If
        UO.Wait(1000)
    Next
End Sub

Sub ManaWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Mana: " & CStr(UO.Mana()))
        End If
        UO.Wait(1000)
    Next
End Sub

Spiegazione dei parametri e dell’esecuzione:

  • WeightWatch e ManaWatch non condividono variabili locali. L’ordine dei messaggi non è garantito.
  • Salvare ogni esempio separatamente, caricarlo in IDE/gestore e avviare Main per registrare le procedure. WeightWatch/ManaWatch sono definite completamente: tre misure di peso/mana, Wait(1000) = 1000 ms, output solo nel mondo. Monitor finiti; le pause allungano il tempo. Consentire procedure simultanee per le due attività.

Clone this wiki locally