Skip to content

API UO SubExists uk

Codex edited this page Oct 4, 2026 · 2 revisions

UO.SubExists

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

UO.CallSub · UO.FunRunning · UO.SubExists

ClassicUO • Runtime API

Шукає визначення процедури в каталозі менеджера перед запуском необов’язкового модуля. Наявність не означає виконання чи можливість запуску без аргументів.

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

UO.SubExists(subrutineName:String) -> Integer

Параметри

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

Повертає

Integer: 1 (True) — визначення знайдено; 0 (False) — ні. Дозволені If UO.SubExists(name), = 1, = True; 0 відповідає False. Це не перевірка файла, правильності чи активного запуску.

Поведінка

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

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

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

1. SubExists

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

Integer: 1 (True) — визначення знайдено; 0 (False) — ні. Дозволені If UO.SubExists(name), = 1, = True; 0 відповідає False. Це не перевірка файла, правильності чи активного запуску.

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

2. FindProcedureByName

За однакових імен пріоритет має вибраний Autoload. Кілька визначень у ньому неоднозначні; окремо завантажений помічник повинен мати унікальне ім’я. Резервна копія не обирається за порядком файлів. SubExists і FunRunning використовують каталог оголошень сеансу, зокрема свіжий знімок після Load/Reload; вони не читають диск щоразу. Наявність оголошення не доводить наявності файла або можливості запуску після видалення. FunRunning додатково перевіряє активний запуск знайденої процедури.

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

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

3. SubExists

Шукає визначення процедури в каталозі менеджера перед запуском необов’язкового модуля. Наявність не означає виконання чи можливість запуску без аргументів.

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

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

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

Приклади

Запустити доступну процедуру

# Запустити доступну процедуру
#
# Шукає визначення процедури в каталозі менеджера перед запуском необов’язкового модуля.
# Наявність не означає виконання чи можливість запуску без аргументів.
#
# Integer: 1 (True) — визначення знайдено; 0 (False) — ні. Дозволені If UO.SubExists(name), = 1,
# = True; 0 відповідає False. Це не перевірка файла, правильності чи активного запуску.

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

    If UO.SubExists("WeightWatch") = True Then
        UO.CallSub("WeightWatch")
    End If
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

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

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

Запасний обробник

# Запасний обробник
#
# Шукає визначення процедури в каталозі менеджера перед запуском необов’язкового модуля.
# Наявність не означає виконання чи можливість запуску без аргументів.
#
# Integer: 1 (True) — визначення знайдено; 0 (False) — ні. Дозволені If UO.SubExists(name), = 1,
# = True; 0 відповідає False. Це не перевірка файла, правильності чи активного запуску.

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

    If UO.SubExists("WeightWatch") = 1 Then
        UO.CallSub("WeightWatch")
    ElseIf UO.SubExists("ManaWatch") Then
        UO.CallSub("ManaWatch")
    End If
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 мс, виведення лише у світі. Спостереження скінченне; пауза подовжує час. Для двох задач дозвольте одночасні процедури.

Перевірити обидва визначення

# Перевірити обидва визначення
#
# Шукає визначення процедури в каталозі менеджера перед запуском необов’язкового модуля.
# Наявність не означає виконання чи можливість запуску без аргументів.
#
# Integer: 1 (True) — визначення знайдено; 0 (False) — ні. Дозволені If UO.SubExists(name), = 1,
# = True; 0 відповідає False. Це не перевірка файла, правильності чи активного запуску.

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

    If HaveMonitors() Then
        UO.CallSub("WeightWatch")
        UO.CallSub("ManaWatch")
    End If
END SUB

Function HaveMonitors() As Boolean
    Return UO.SubExists("WeightWatch") AndAlso UO.SubExists("ManaWatch")
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

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

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

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

Clone this wiki locally