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

UO.GetSkillLockState

Оглавление · Алфавитный указатель · Skills

ClassicUO • Runtime API

Читает локальный режим изменения навыка.

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

UO.GetSkillLockState(SkillName:Any) -> Integer

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • SkillName — Обязательный навык: имя из данных клиента, например "Mining" или "Animal Lore", либо десятичный индекс от 0 до Skills.Length−1, числом или строкой. Регистр имени не важен, крайние пробелы удаляются, _ заменяется пробелом. Индекс не является ID предмета или индексом от 1. Числовая строка всегда означает индекс.

Возвращает

Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для неизвестного навыка или отсутствующего персонажа возвращается −1.

Поведение

  • Чтение выполняется через Invoke на игровом потоке по уже полученным данным; сетевые пакеты не отправляются. Навык не используется и не тренируется. Два запроса — два отдельных снимка.
  • Обязательный навык: имя из данных клиента, например "Mining" или "Animal Lore", либо десятичный индекс от 0 до Skills.Length−1, числом или строкой. Регистр имени не важен, крайние пробелы удаляются, _ заменяется пробелом. Индекс не является ID предмета или индексом от 1. Числовая строка всегда означает индекс.
  • ExecuteStealthCompatibility выбирает ветку команды. Text читает селектор навыка, Arg — числовые номера и режимы. Непреобразуемый аргумент может завершить вызов ошибкой преобразования.

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

Ниже реальные внутренние C#-этапы. ReadMode — полностью определённая вспомогательная функция примера, а не скрытая встроенная команда.

1. ExecuteStealthCompatibility

ExecuteStealthCompatibility выбирает ветку команды. Text читает селектор навыка, Arg — числовые номера и режимы. Непреобразуемый аргумент может завершить вызов ошибкой преобразования.

Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для неизвестного навыка или отсутствующего персонажа возвращается −1.

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

2. Invoke

Invoke выполняет чтение на игровом потоке; с рабочего потока ожидается обработка запроса менеджером. Отмена скрипта прерывает ожидание. Паузы и дополнительные сетевые запросы не добавляются.

Чтение выполняется через Invoke на игровом потоке по уже полученным данным; сетевые пакеты не отправляются. Навык не используется и не тренируется. Два запроса — два отдельных снимка.

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

3. FindSkillUnsafe

FindSkillUnsafe: сначала проверяет десятичный индекс и его границы; иначе нормализует имя и ищет точное совпадение Skill.Name без учёта регистра. Неизвестное имя даёт null, прицел не открывается.

Для неизвестного навыка или отсутствующего персонажа возвращается −1.

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

4. GetSkillLockState

Читает локальный режим изменения навыка.

Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для неизвестного навыка или отсутствующего персонажа возвращается −1.

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

Чтение выполняется через Invoke на игровом потоке по уже полученным данным; сетевые пакеты не отправляются. Навык не используется и не тренируется. Два запроса — два отдельных снимка.

Примеры

Пример 1. Прочитать и вывести

# Прочитать и вывести
#
# Читает локальный режим изменения навыка.
#
# Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для
# неизвестного навыка или отсутствующего персонажа возвращается −1.

SUB Main()
    # В примере явно заданы selector и, при записи, mode. Первая строка выбирает навык по имени или
    # характеристику по номеру. Print только выводит результат.

    VAR selector = 'Mining'
    VAR mode = UO.GetSkillLockState(selector)
    UO.Print(CStr(mode))
END SUB

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

  • В примере явно заданы selector и, при записи, mode. Первая строка выбирает навык по имени или характеристику по номеру. Print только выводит результат.

Пример 2. Применить в условии или сравнении

# Применить в условии или сравнении
#
# Читает локальный режим изменения навыка.
#
# Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для
# неизвестного навыка или отсутствующего персонажа возвращается −1.

SUB Main()
    # Порог 95.1 и режимы 0/1/2 заданы для примера. −1 проверяется до изменения режима. После записи
    # читается только локальная копия; это не ожидание ответа сервера.

    VAR mode = UO.GetSkillLockState('Mining')
    IF mode = 2 THEN
        UO.Print("Locked")
    ELSE
        IF mode = -1 THEN
            UO.Print("Unknown selector")
        ELSE
            UO.Print("Mode: " + CStr(mode))
        END IF
    END IF
END SUB

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

  • Порог 95.1 и режимы 0/1/2 заданы для примера. −1 проверяется до изменения режима. После записи читается только локальная копия; это не ожидание ответа сервера.

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

# Полная вспомогательная функция
#
# Читает локальный режим изменения навыка.
#
# Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для
# неизвестного навыка или отсутствующего персонажа возвращается −1.

SUB Main()
    # Весь код помощника приведён ниже Main. selector выбирает навык/характеристику, mode задаёт
    # режим записи. ReadValue/ReadMode возвращают исходное число; ApplyMode проверяет аргументы,
    # выполняет действие и не возвращает значение. WAIT(1000) в примере чтения разделяет два снимка.

    VAR before = ReadMode('Mining')
    WAIT(1000)
    VAR after = ReadMode('Mining')
    UO.Print(CStr(before) + " -> " + CStr(after))
END SUB

SUB ReadMode(selector)
    RETURN UO.GetSkillLockState(selector)
END SUB

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

  • Весь код помощника приведён ниже Main. selector выбирает навык/характеристику, mode задаёт режим записи. ReadValue/ReadMode возвращают исходное число; ApplyMode проверяет аргументы, выполняет действие и не возвращает значение. WAIT(1000) в примере чтения разделяет два снимка.