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 без обязательных аргументов.