API UO StartScript - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.StartScript

ClassicUO • Runtime API

Загружает файл Basic и запрашивает запуск его открытой процедуры Sub Main.

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

UO.StartScript(ScriptPath:Any) -> Integer

Параметры

  • ScriptPath — Обязательный ScriptPath — строка. Относительный путь начинается в папке AutoLoad этого клиента; абсолютный путь допустим. Путь с пробелами заключайте в кавычки. Нужен файл поддерживаемого Basic с открытой Sub Main без обязательных аргументов.

Возвращает

Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.

Поведение

  • Учитываются выполняющиеся и приостановленные запуски; завершённые и получившие запрос отмены исключаются. Работающий скрипт обычно учитывает и себя. Просто загруженная вкладка IDE запуском не считается.
  • Индексы — текущие позиции в порядке запуска. Запуск/остановка скриптов могут сдвинуть позиции. Разные вызовы не образуют общий атомарный снимок; перед последующей командой управления перечитайте список.
  • Закрытие Basic IDE не удаляет активные запуски. Команды относятся к этому клиенту, а не к другим клиентам или процессам Windows.
  • GetScriptsList даёт индексы, GetScriptsCount — количество, GetScriptState — код из трёх состояний. Не подменяйте одно другим и не считайте любой ненулевой результат значением true.
  • Перед примерами отдельно создайте указанные файлы Worker.bas. Ошибочный/недоступный путь, неподходящая Main, отключённый Basic или запрет параллельного запуска дают отказ. Если прежний запуск ещё останавливается, возможен отложенный повтор; принятие запуска не означает завершения. Короткий скрипт может закончить работу ещё до чтения возвращённого количества.

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

Ниже указаны реальные методы клиента. В примерах Basic приведены полные вызываемые функции; имена внутренних методов C# не являются дополнительными командами скрипта.

1. ExecuteStealthCompatibility

Runtime вызывает зарегистрированную UO-команду и упаковывает ответ моста как Integer, String или Array.

Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.

2. StartScript

Мост обращается к менеджеру запусков именно этого клиента.

Перед примерами отдельно создайте указанные файлы Worker.bas. Ошибочный/недоступный путь, неподходящая Main, отключённый Basic или запрет параллельного запуска дают отказ. Если прежний запуск ещё останавливается, возможен отложенный повтор; принятие запуска не означает завершения. Короткий скрипт может закончить работу ещё до чтения возвращённого количества.

Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция StartScript.

3. StartScript

Path.GetFullPath -> File.ReadAllText -> DiscoverProcedures -> SelectFileEntryPoint -> RunProcedure -> GetScriptsCount

Индексы — текущие позиции в порядке запуска. Запуск/остановка скриптов могут сдвинуть позиции. Разные вызовы не образуют общий атомарный снимок; перед последующей командой управления перечитайте список.

Исходник проекта: src/ClassicUO.Client/Game/Managers/YokoInjectionManager.cs; функция StartScript.

Закрытие Basic IDE не удаляет активные запуски. Команды относятся к этому клиенту, а не к другим клиентам или процессам Windows.

Примеры

Первый вызов и результат

# Первый вызов и результат
#
# Загружает файл Basic и запрашивает запуск его открытой процедуры Sub Main.
#
# Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка
# запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.

SUB Main()
    # Запускайте Sub Main. Число 0, где оно передано, обозначает индекс; пустые скобки означают
    # отсутствие аргументов. Текст Print — только сообщение примера.
    # Перед примерами отдельно создайте указанные файлы Worker.bas. Ошибочный/недоступный путь,
    # неподходящая Main, отключённый Basic или запрет параллельного запуска дают отказ. Если прежний
    # запуск ещё останавливается, возможен отложенный повтор; принятие запуска не означает
    # завершения. Короткий скрипт может закончить работу ещё до чтения возвращённого количества.
    # Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка
    # запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.
    # Обязательный ScriptPath — строка. Относительный путь начинается в папке AutoLoad этого
    # клиента; абсолютный путь допустим. Путь с пробелами заключайте в кавычки. Нужен файл
    # поддерживаемого Basic с открытой Sub Main без обязательных аргументов.

    Dim count=UO.StartScript("Scripts/Worker.bas")
    If count=65535 Then
        UO.Print("launch failed")
    Else
        UO.Print("Active executions: " & CStr(count))
    End If
END SUB

Разбор параметров и выполнения:

  • Запускайте Sub Main. Число 0, где оно передано, обозначает индекс; пустые скобки означают отсутствие аргументов. Текст Print — только сообщение примера.
  • Перед примерами отдельно создайте указанные файлы Worker.bas. Ошибочный/недоступный путь, неподходящая Main, отключённый Basic или запрет параллельного запуска дают отказ. Если прежний запуск ещё останавливается, возможен отложенный повтор; принятие запуска не означает завершения. Короткий скрипт может закончить работу ещё до чтения возвращённого количества.
  • Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.
  • Обязательный ScriptPath — строка. Относительный путь начинается в папке AutoLoad этого клиента; абсолютный путь допустим. Путь с пробелами заключайте в кавычки. Нужен файл поддерживаемого Basic с открытой Sub Main без обязательных аргументов.

Использование в цикле или условии

# Использование в цикле или условии
#
# Загружает файл Basic и запрашивает запуск его открытой процедуры Sub Main.
#
# Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка
# запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.

SUB Main()
    # Это отдельный пример совместного использования команд. Индексация массива начинается с нуля;
    # перед обращением проверяйте длину. Wait(250), где он используется, ждёт 250 миллисекунд.
    # Перед примерами отдельно создайте указанные файлы Worker.bas. Ошибочный/недоступный путь,
    # неподходящая Main, отключённый Basic или запрет параллельного запуска дают отказ. Если прежний
    # запуск ещё останавливается, возможен отложенный повтор; принятие запуска не означает
    # завершения. Короткий скрипт может закончить работу ещё до чтения возвращённого количества.
    # Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка
    # запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.
    # Обязательный ScriptPath — строка. Относительный путь начинается в папке AutoLoad этого
    # клиента; абсолютный путь допустим. Путь с пробелами заключайте в кавычки. Нужен файл
    # поддерживаемого Basic с открытой Sub Main без обязательных аргументов.

    Dim count=UO.StartScript("Scripts/My Worker.bas")
    If count<>65535 Then
        Dim indices=UO.GetScriptsList()
        For Each index In indices
            UO.Print(CStr(index) & ": " & UO.GetScriptPath(index))
        Next
    End If
END SUB

Разбор параметров и выполнения:

  • Это отдельный пример совместного использования команд. Индексация массива начинается с нуля; перед обращением проверяйте длину. Wait(250), где он используется, ждёт 250 миллисекунд.
  • Перед примерами отдельно создайте указанные файлы Worker.bas. Ошибочный/недоступный путь, неподходящая Main, отключённый Basic или запрет параллельного запуска дают отказ. Если прежний запуск ещё останавливается, возможен отложенный повтор; принятие запуска не означает завершения. Короткий скрипт может закончить работу ещё до чтения возвращённого количества.
  • Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.
  • Обязательный ScriptPath — строка. Относительный путь начинается в папке AutoLoad этого клиента; абсолютный путь допустим. Путь с пробелами заключайте в кавычки. Нужен файл поддерживаемого Basic с открытой Sub Main без обязательных аргументов.

Полная вспомогательная функция

# Полная вспомогательная функция
#
# Загружает файл Basic и запрашивает запуск его открытой процедуры Sub Main.
#
# Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка
# запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.

SUB Main()
    # Под Main приведена функция целиком. Её параметры и результат объясняются отдельно от
    # API-команды, которую она вызывает.
    # TryStartBasic сравнивает результат с 65535 и возвращает true/false. Она не ждёт завершения и
    # не превращает количество в индекс.
    # Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка
    # запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.
    # Обязательный ScriptPath — строка. Относительный путь начинается в папке AutoLoad этого
    # клиента; абсолютный путь допустим. Путь с пробелами заключайте в кавычки. Нужен файл
    # поддерживаемого Basic с открытой Sub Main без обязательных аргументов.

    If TryStartBasic("Scripts/Worker.bas") Then
        UO.Print("launch accepted")
    Else
        UO.Print("check file, Main and execution settings")
    End If
END SUB

Function TryStartBasic(fileName) As Boolean
    Dim count=UO.StartScript(fileName)
    Return count<>65535
End Function

Разбор параметров и выполнения:

  • Под Main приведена функция целиком. Её параметры и результат объясняются отдельно от API-команды, которую она вызывает.
  • TryStartBasic сравнивает результат с 65535 и возвращает true/false. Она не ждёт завершения и не превращает количество в индекс.
  • Integer: количество активных запусков после принятого запуска; 65535 (0xFFFF) = ошибка запуска. Это не индекс нового скрипта, не Boolean и не результат завершения.
  • Обязательный ScriptPath — строка. Относительный путь начинается в папке AutoLoad этого клиента; абсолютный путь допустим. Путь с пробелами заключайте в кавычки. Нужен файл поддерживаемого Basic с открытой Sub Main без обязательных аргументов.

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

Basic