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

UO.GetScriptState

ClassicUO • Runtime API

Читает состояние выполнения по индексу.

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

UO.GetScriptState(ScriptIndex:Any) -> Integer

Параметры

  • ScriptIndex — Обязательный ScriptIndex — целое число, индекс с нуля из свежего GetScriptsList. Для отрицательного или отсутствующего индекса возвращается описанный пустой/неизвестный результат. Не передавайте serial предмета, имя процедуры или ID запуска из IDE.

Возвращает

Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно сравнивайте с 1 или 2.

Поведение

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

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

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

1. ExecuteStealthCompatibility

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

Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно сравнивайте с 1 или 2.

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

2. GetScriptState

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

Учитывается ручная/отладочная пауза и настроенная пауза при отключении. Состояние 1 не гарантирует, что скрипт прямо сейчас расходует процессор или получает данные сервера.

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

3. GetScriptState

script == null ? 0 : script.IsPaused ? 2 : 1

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

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

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

Примеры

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

# Первый вызов и результат
#
# Читает состояние выполнения по индексу.
#
# Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно
# сравнивайте с 1 или 2.

SUB Main()
    # Запускайте Sub Main. Число 0, где оно передано, обозначает индекс; пустые скобки означают
    # отсутствие аргументов. Текст Print — только сообщение примера.
    # Учитывается ручная/отладочная пауза и настроенная пауза при отключении. Состояние 1 не
    # гарантирует, что скрипт прямо сейчас расходует процессор или получает данные сервера.
    # Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно
    # сравнивайте с 1 или 2.
    # Обязательный ScriptIndex — целое число, индекс с нуля из свежего GetScriptsList. Для
    # отрицательного или отсутствующего индекса возвращается описанный пустой/неизвестный результат.
    # Не передавайте serial предмета, имя процедуры или ID запуска из IDE.

    Dim state=UO.GetScriptState(0)
    Select Case state
    Case 1
        UO.Print("running")
    Case 2
        UO.Print("paused")
    Case Else
        UO.Print("unknown")
    End Select
END SUB

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

  • Запускайте Sub Main. Число 0, где оно передано, обозначает индекс; пустые скобки означают отсутствие аргументов. Текст Print — только сообщение примера.
  • Учитывается ручная/отладочная пауза и настроенная пауза при отключении. Состояние 1 не гарантирует, что скрипт прямо сейчас расходует процессор или получает данные сервера.
  • Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно сравнивайте с 1 или 2.
  • Обязательный ScriptIndex — целое число, индекс с нуля из свежего GetScriptsList. Для отрицательного или отсутствующего индекса возвращается описанный пустой/неизвестный результат. Не передавайте serial предмета, имя процедуры или ID запуска из IDE.

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

# Использование в цикле или условии
#
# Читает состояние выполнения по индексу.
#
# Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно
# сравнивайте с 1 или 2.

SUB Main()
    # Это отдельный пример совместного использования команд. Индексация массива начинается с нуля;
    # перед обращением проверяйте длину. Wait(250), где он используется, ждёт 250 миллисекунд.
    # Учитывается ручная/отладочная пауза и настроенная пауза при отключении. Состояние 1 не
    # гарантирует, что скрипт прямо сейчас расходует процессор или получает данные сервера.
    # Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно
    # сравнивайте с 1 или 2.
    # Обязательный ScriptIndex — целое число, индекс с нуля из свежего GetScriptsList. Для
    # отрицательного или отсутствующего индекса возвращается описанный пустой/неизвестный результат.
    # Не передавайте serial предмета, имя процедуры или ID запуска из IDE.

    Dim paused=0
    Dim indices=UO.GetScriptsList()
    For Each index In indices
        If UO.GetScriptState(index)=2 Then
            paused+=1
        End If
    Next
    UO.Print(CStr(paused))
END SUB

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

  • Это отдельный пример совместного использования команд. Индексация массива начинается с нуля; перед обращением проверяйте длину. Wait(250), где он используется, ждёт 250 миллисекунд.
  • Учитывается ручная/отладочная пауза и настроенная пауза при отключении. Состояние 1 не гарантирует, что скрипт прямо сейчас расходует процессор или получает данные сервера.
  • Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно сравнивайте с 1 или 2.
  • Обязательный ScriptIndex — целое число, индекс с нуля из свежего GetScriptsList. Для отрицательного или отсутствующего индекса возвращается описанный пустой/неизвестный результат. Не передавайте serial предмета, имя процедуры или ID запуска из IDE.

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

# Полная вспомогательная функция
#
# Читает состояние выполнения по индексу.
#
# Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно
# сравнивайте с 1 или 2.

SUB Main()
    # Под Main приведена функция целиком. Её параметры и результат объясняются отдельно от
    # API-команды, которую она вызывает.
    # IsScriptActive преобразует 1 и 2 в true, а 0 в false. Сама GetScriptState по-прежнему
    # возвращает числовой код состояния.
    # Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно
    # сравнивайте с 1 или 2.
    # Обязательный ScriptIndex — целое число, индекс с нуля из свежего GetScriptsList. Для
    # отрицательного или отсутствующего индекса возвращается описанный пустой/неизвестный результат.
    # Не передавайте serial предмета, имя процедуры или ID запуска из IDE.

    If IsScriptActive(0)=True Then
        UO.Print("running or paused")
    Else
        UO.Print("not active")
    End If
END SUB

Function IsScriptActive(index) As Boolean
    Dim state=UO.GetScriptState(index)
    Return state=1 OrElse state=2
End Function

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

  • Под Main приведена функция целиком. Её параметры и результат объясняются отдельно от API-команды, которую она вызывает.
  • IsScriptActive преобразует 1 и 2 в true, а 0 в false. Сама GetScriptState по-прежнему возвращает числовой код состояния.
  • Integer — код состояния: 0 = нет/неизвестно, 1 = выполняется, 2 = пауза. Это не Boolean: явно сравнивайте с 1 или 2.
  • Обязательный ScriptIndex — целое число, индекс с нуля из свежего GetScriptsList. Для отрицательного или отсутствующего индекса возвращается описанный пустой/неизвестный результат. Не передавайте serial предмета, имя процедуры или ID запуска из IDE.

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

Basic