Skip to content

API UO CallSub uk

Codex edited this page Oct 3, 2026 · 1 revision

UO.CallSub

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

UO.CallSub · UO.FunRunning · UO.SubExists

ClassicUO • Runtime API

Просить менеджер запустити відому процедуру окремою задачею. Підходить для незалежного спостерігача; це асинхронний запуск, а не звичайний виклик Basic з очікуванням результату.

Точний синтаксис

UO.CallSub(subrutineName:String) -> Unit

Параметри

  • subrutineName — Обов’язковий String subrutineName — ім’я Sub/Function у каталозі, наприклад WeightWatch. Не шлях, файл, індекс, текст програми або підпис SetScriptName. Регістр ігнорується, пробіли не обрізаються. Аргументи процедури передати неможливо.

Повертає

Unit: немає значення, результату функції чи підтвердження запуску. Невідоме ім’я нічого не запускає. Для синхронного виконання використовуйте звичайний виклик Basic MyFunction(...).

Поведінка

  • Пошук лише в каталозі цього сеансу. Однакові імена обирають перший збіг: використовуйте унікальні назви. Ці команди не завантажують невідомі файли та не шукають на диску.
  • CallSub передає нуль аргументів. Private, синтаксична помилка, обов’язкові параметри, вимкнений Basic чи заборона одночасних процедур можуть відхилити старт; дивіться стан/помилки IDE. Повторний виклик не дублює активного запуску і не знімає паузу. Після скасування новий старт може чекати очищення. Контролер не чекає завершення задачі.
  • FunRunning використовує початкове ім’я/ключ процедури, не змінений підпис. Пауза зберігає запуск і відповідь 1. Скасування дає 0, навіть якщо очищення триває. Перевірка та наступний виклик не атомарні: задача може завершитися між ними.
  • SubExists може дати 1 для Private чи помилкового визначення. Зупинка або закриття вкладки не обов’язково видаляє запис каталогу. Перезавантаження зміненого файла видаляє застарілі визначення. Функція лише в окремому runtime може бути відсутня в менеджері.

Внутрішні функції: від виклику до результату

Нижче справжні етапи реалізації; назви C# не є додатковими UO-командами. Увесь код допоміжних функцій Basic наведено у прикладах.

1. CallSub

Обов’язковий String subrutineName — ім’я Sub/Function у каталозі, наприклад WeightWatch. Не шлях, файл, індекс, текст програми або підпис SetScriptName. Регістр ігнорується, пробіли не обрізаються. Аргументи процедури передати неможливо.

Unit: немає значення, результату функції чи підтвердження запуску. Невідоме ім’я нічого не запускає. Для синхронного виконання використовуйте звичайний виклик Basic MyFunction(...).

Код проєкту: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функція CallSub.

2. FindProcedureByName

Пошук лише в каталозі цього сеансу. Однакові імена обирають перший збіг: використовуйте унікальні назви. Ці команди не завантажують невідомі файли та не шукають на диску.

SubExists може дати 1 для Private чи помилкового визначення. Зупинка або закриття вкладки не обов’язково видаляє запис каталогу. Перезавантаження зміненого файла видаляє застарілі визначення. Функція лише в окремому runtime може бути відсутня в менеджері.

Код проєкту: src/ClassicUO.Client/Game/Managers/YokoInjectionManager.cs; функція FindProcedureByName.

3. Exec

Просить менеджер запустити відому процедуру окремою задачею. Підходить для незалежного спостерігача; це асинхронний запуск, а не звичайний виклик Basic з очікуванням результату.

CallSub передає нуль аргументів. Private, синтаксична помилка, обов’язкові параметри, вимкнений Basic чи заборона одночасних процедур можуть відхилити старт; дивіться стан/помилки IDE. Повторний виклик не дублює активного запуску і не знімає паузу. Після скасування новий старт може чекати очищення. Контролер не чекає завершення задачі.

Код проєкту: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функція Exec.

Нижче справжні етапи реалізації; назви C# не є додатковими UO-командами. Увесь код допоміжних функцій Basic наведено у прикладах.

Приклади

Запуск і продовження Main

# Запуск і продовження Main
#
# Просить менеджер запустити відому процедуру окремою задачею. Підходить для незалежного
# спостерігача; це асинхронний запуск, а не звичайний виклик Basic з очікуванням результату.
#
# Unit: немає значення, результату функції чи підтвердження запуску. Невідоме ім’я нічого не
# запускає. Для синхронного виконання використовуйте звичайний виклик Basic MyFunction(...).

SUB Main()
    # WeightWatch визначено нижче. Main повертає 77 без очікування трьох вимірів; це результат Main,
    # не CallSub.
    # Збережіть кожен приклад окремим файлом, завантажте в IDE/менеджер і запускайте Main для
    # реєстрації процедур. WeightWatch/ManaWatch повністю визначені: три виміри ваги/мани,
    # Wait(1000) — 1000 мс, виведення лише у світі. Спостереження скінченне; пауза подовжує час. Для
    # двох задач дозвольте одночасні процедури.

    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

Пояснення параметрів і виконання:

  • WeightWatch визначено нижче. Main повертає 77 без очікування трьох вимірів; це результат Main, не CallSub.
  • Збережіть кожен приклад окремим файлом, завантажте в IDE/менеджер і запускайте Main для реєстрації процедур. WeightWatch/ManaWatch повністю визначені: три виміри ваги/мани, Wait(1000) — 1000 мс, виведення лише у світі. Спостереження скінченне; пауза подовжує час. Для двох задач дозвольте одночасні процедури.

Не перезапускати активну задачу

# Не перезапускати активну задачу
#
# Просить менеджер запустити відому процедуру окремою задачею. Підходить для незалежного
# спостерігача; це асинхронний запуск, а не звичайний виклик Basic з очікуванням результату.
#
# Unit: немає значення, результату функції чи підтвердження запуску. Невідоме ім’я нічого не
# запускає. Для синхронного виконання використовуйте звичайний виклик Basic MyFunction(...).

SUB Main()
    # StartIfIdle перевіряє визначення й активність. False — запит не надіслано; True — лише
    # надіслано CallSub, не підтверджено старт чи завершення.
    # Збережіть кожен приклад окремим файлом, завантажте в IDE/менеджер і запускайте Main для
    # реєстрації процедур. WeightWatch/ManaWatch повністю визначені: три виміри ваги/мани,
    # Wait(1000) — 1000 мс, виведення лише у світі. Спостереження скінченне; пауза подовжує час. Для
    # двох задач дозвольте одночасні процедури.

    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

Пояснення параметрів і виконання:

  • StartIfIdle перевіряє визначення й активність. False — запит не надіслано; True — лише надіслано CallSub, не підтверджено старт чи завершення.
  • Збережіть кожен приклад окремим файлом, завантажте в IDE/менеджер і запускайте Main для реєстрації процедур. WeightWatch/ManaWatch повністю визначені: три виміри ваги/мани, Wait(1000) — 1000 мс, виведення лише у світі. Спостереження скінченне; пауза подовжує час. Для двох задач дозвольте одночасні процедури.

Два незалежні спостерігачі

# Два незалежні спостерігачі
#
# Просить менеджер запустити відому процедуру окремою задачею. Підходить для незалежного
# спостерігача; це асинхронний запуск, а не звичайний виклик Basic з очікуванням результату.
#
# Unit: немає значення, результату функції чи підтвердження запуску. Невідоме ім’я нічого не
# запускає. Для синхронного виконання використовуйте звичайний виклик Basic MyFunction(...).

SUB Main()
    # Виклики запускають WeightWatch та ManaWatch окремо. Локальні змінні не спільні; порядок
    # повідомлень не гарантований.
    # Збережіть кожен приклад окремим файлом, завантажте в IDE/менеджер і запускайте Main для
    # реєстрації процедур. WeightWatch/ManaWatch повністю визначені: три виміри ваги/мани,
    # Wait(1000) — 1000 мс, виведення лише у світі. Спостереження скінченне; пауза подовжує час. Для
    # двох задач дозвольте одночасні процедури.

    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

Пояснення параметрів і виконання:

  • Виклики запускають WeightWatch та ManaWatch окремо. Локальні змінні не спільні; порядок повідомлень не гарантований.
  • Збережіть кожен приклад окремим файлом, завантажте в IDE/менеджер і запускайте Main для реєстрації процедур. WeightWatch/ManaWatch повністю визначені: три виміри ваги/мани, Wait(1000) — 1000 мс, виведення лише у світі. Спостереження скінченне; пауза подовжує час. Для двох задач дозвольте одночасні процедури.

Clone this wiki locally