Skip to content

API UO CallSub fr

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

Demande une tâche distincte pour une procédure connue du gestionnaire, par exemple un observateur indépendant. Le lancement est asynchrone, contrairement à un appel Basic ordinaire attendant un résultat.

Syntaxe exacte

UO.CallSub(subrutineName:String) -> Unit

Paramètres

  • subrutineName — String subrutineName obligatoire : nom Sub/Function du catalogue, comme WeightWatch. Ni chemin, fichier, indice, code source, ni libellé modifié par SetScriptName. La casse est ignorée, les espaces ne sont pas supprimés. Aucun argument de procédure ne peut être transmis.

Retour

Unit : aucune valeur, résultat de fonction ou confirmation du lancement. Un nom inconnu ne lance rien. Utiliser un appel Basic normal MyFunction(...) pour une exécution synchrone.

Comportement

  • L’Autoload sélectionné est prioritaire pour les noms identiques. Plusieurs définitions dans ce fichier sont ambiguës ; un auxiliaire chargé séparément doit avoir un nom unique. L’ordre des fichiers ne choisit pas une sauvegarde. CallSub, comme UO.Exec("exec Nom"), lit l’Autoload sélectionné sur disque avant le lancement. Un remplacement agit au prochain appel ; un fichier vide ou supprimé produit un message d’erreur, pas l’ancien code ni une sauvegarde. Les auxiliaires uniques chargés séparément conservent leur propre voie de lancement. L’appel attend la décision d’admission, pas la fin de la tâche enfant.
  • CallSub fournit zéro argument. Private, erreurs de syntaxe, paramètres obligatoires, Basic désactivé ou règle de procédure unique peuvent refuser le lancement ; consulter l’état/les erreurs IDE. Un nouvel appel ne duplique ni ne reprend une tâche active. Après annulation, le démarrage peut attendre le nettoyage. Le contrôleur n’attend pas la fin de la tâche.
  • FunRunning utilise le nom d’origine et la clé, pas un libellé renommé. La pause conserve l’exécution et renvoie 1. L’annulation renvoie 0 même pendant le nettoyage. Vérification et appel suivant ne sont pas atomiques ; la tâche peut se terminer entre les deux.
  • SubExists peut renvoyer 1 pour une définition Private ou invalide. Arrêter la tâche ou fermer l’onglet ne supprime pas forcément l’entrée du catalogue. Recharger un fichier modifié retire les définitions obsolètes. Une fonction chargée seulement dans un runtime séparé peut être inconnue du gestionnaire.

Fonctions internes : de l’appel au résultat

Étapes réelles de l’implémentation : les noms C# ne sont pas de nouvelles commandes UO. Toutes les fonctions auxiliaires Basic exécutables sont fournies intégralement.

1. CallSub

String subrutineName obligatoire : nom Sub/Function du catalogue, comme WeightWatch. Ni chemin, fichier, indice, code source, ni libellé modifié par SetScriptName. La casse est ignorée, les espaces ne sont pas supprimés. Aucun argument de procédure ne peut être transmis.

Unit : aucune valeur, résultat de fonction ou confirmation du lancement. Un nom inconnu ne lance rien. Utiliser un appel Basic normal MyFunction(...) pour une exécution synchrone.

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

2. RunNamedProcedure

L’Autoload sélectionné est prioritaire pour les noms identiques. Plusieurs définitions dans ce fichier sont ambiguës ; un auxiliaire chargé séparément doit avoir un nom unique. L’ordre des fichiers ne choisit pas une sauvegarde. CallSub, comme UO.Exec("exec Nom"), lit l’Autoload sélectionné sur disque avant le lancement. Un remplacement agit au prochain appel ; un fichier vide ou supprimé produit un message d’erreur, pas l’ancien code ni une sauvegarde. Les auxiliaires uniques chargés séparément conservent leur propre voie de lancement. L’appel attend la décision d’admission, pas la fin de la tâche enfant.

SubExists peut renvoyer 1 pour une définition Private ou invalide. Arrêter la tâche ou fermer l’onglet ne supprime pas forcément l’entrée du catalogue. Recharger un fichier modifié retire les définitions obsolètes. Une fonction chargée seulement dans un runtime séparé peut être inconnue du gestionnaire.

Source du projet: src/ClassicUO.Client/Game/Managers/YokoInjectionManager.cs; fonction RunNamedProcedure.

3. Exec

Demande une tâche distincte pour une procédure connue du gestionnaire, par exemple un observateur indépendant. Le lancement est asynchrone, contrairement à un appel Basic ordinaire attendant un résultat.

CallSub fournit zéro argument. Private, erreurs de syntaxe, paramètres obligatoires, Basic désactivé ou règle de procédure unique peuvent refuser le lancement ; consulter l’état/les erreurs IDE. Un nouvel appel ne duplique ni ne reprend une tâche active. Après annulation, le démarrage peut attendre le nettoyage. Le contrôleur n’attend pas la fin de la tâche.

Source du projet: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; fonction Exec.

Étapes réelles de l’implémentation : les noms C# ne sont pas de nouvelles commandes UO. Toutes les fonctions auxiliaires Basic exécutables sont fournies intégralement.

Exemples

Lancer puis continuer Main

# Lancer puis continuer Main
#
# Demande une tâche distincte pour une procédure connue du gestionnaire, par exemple un
# observateur indépendant. Le lancement est asynchrone, contrairement à un appel Basic ordinaire
# attendant un résultat.
#
# Unit : aucune valeur, résultat de fonction ou confirmation du lancement. Un nom inconnu ne
# lance rien. Utiliser un appel Basic normal MyFunction(...) pour une exécution synchrone.

SUB Main()
    # WeightWatch est définie ci-dessous. Main renvoie 77 sans attendre les trois mesures ; 77 vient
    # de Main, pas de CallSub.
    # Enregistrer chaque exemple séparément, le charger dans IDE/gestionnaire et lancer Main pour
    # enregistrer les procédures. WeightWatch/ManaWatch sont entièrement définies : trois mesures de
    # poids/mana, Wait(1000) = 1000 ms, affichage uniquement en jeu. Observation finie ; les pauses
    # prolongent la durée. Autoriser les procédures simultanées pour les deux tâches.

    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

Explication des paramètres et du déroulement:

  • WeightWatch est définie ci-dessous. Main renvoie 77 sans attendre les trois mesures ; 77 vient de Main, pas de CallSub.
  • Enregistrer chaque exemple séparément, le charger dans IDE/gestionnaire et lancer Main pour enregistrer les procédures. WeightWatch/ManaWatch sont entièrement définies : trois mesures de poids/mana, Wait(1000) = 1000 ms, affichage uniquement en jeu. Observation finie ; les pauses prolongent la durée. Autoriser les procédures simultanées pour les deux tâches.

Conserver une tâche active ou en pause

# Conserver une tâche active ou en pause
#
# Demande une tâche distincte pour une procédure connue du gestionnaire, par exemple un
# observateur indépendant. Le lancement est asynchrone, contrairement à un appel Basic ordinaire
# attendant un résultat.
#
# Unit : aucune valeur, résultat de fonction ou confirmation du lancement. Un nom inconnu ne
# lance rien. Utiliser un appel Basic normal MyFunction(...) pour une exécution synchrone.

SUB Main()
    # StartIfIdle vérifie définition puis activité. False : aucune demande ; True : seulement une
    # demande CallSub, sans preuve de lancement ni de fin.
    # Enregistrer chaque exemple séparément, le charger dans IDE/gestionnaire et lancer Main pour
    # enregistrer les procédures. WeightWatch/ManaWatch sont entièrement définies : trois mesures de
    # poids/mana, Wait(1000) = 1000 ms, affichage uniquement en jeu. Observation finie ; les pauses
    # prolongent la durée. Autoriser les procédures simultanées pour les deux tâches.

    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

Explication des paramètres et du déroulement:

  • StartIfIdle vérifie définition puis activité. False : aucune demande ; True : seulement une demande CallSub, sans preuve de lancement ni de fin.
  • Enregistrer chaque exemple séparément, le charger dans IDE/gestionnaire et lancer Main pour enregistrer les procédures. WeightWatch/ManaWatch sont entièrement définies : trois mesures de poids/mana, Wait(1000) = 1000 ms, affichage uniquement en jeu. Observation finie ; les pauses prolongent la durée. Autoriser les procédures simultanées pour les deux tâches.

Deux observateurs indépendants

# Deux observateurs indépendants
#
# Demande une tâche distincte pour une procédure connue du gestionnaire, par exemple un
# observateur indépendant. Le lancement est asynchrone, contrairement à un appel Basic ordinaire
# attendant un résultat.
#
# Unit : aucune valeur, résultat de fonction ou confirmation du lancement. Un nom inconnu ne
# lance rien. Utiliser un appel Basic normal MyFunction(...) pour une exécution synchrone.

SUB Main()
    # WeightWatch et ManaWatch sont indépendants, sans variables locales partagées. L’ordre des
    # messages n’est pas garanti.
    # Enregistrer chaque exemple séparément, le charger dans IDE/gestionnaire et lancer Main pour
    # enregistrer les procédures. WeightWatch/ManaWatch sont entièrement définies : trois mesures de
    # poids/mana, Wait(1000) = 1000 ms, affichage uniquement en jeu. Observation finie ; les pauses
    # prolongent la durée. Autoriser les procédures simultanées pour les deux tâches.

    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

Explication des paramètres et du déroulement:

  • WeightWatch et ManaWatch sont indépendants, sans variables locales partagées. L’ordre des messages n’est pas garanti.
  • Enregistrer chaque exemple séparément, le charger dans IDE/gestionnaire et lancer Main pour enregistrer les procédures. WeightWatch/ManaWatch sont entièrement définies : trois mesures de poids/mana, Wait(1000) = 1000 ms, affichage uniquement en jeu. Observation finie ; les pauses prolongent la durée. Autoriser les procédures simultanées pour les deux tâches.

Clone this wiki locally