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

UO.SetStatLockState

Оглавление · Алфавитный указатель · Постоянное состояние

ClassicUO • Runtime API

Запрашивает изменение режима характеристики.

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

UO.SetStatLockState(statNum:Any, statState:Any) -> Unit

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

Параметры

  • statNum — Обязательный номер характеристики: 0 — STR, 1 — DEX, 2 — INT. Это не её текущее значение и не название строкой.
  • statState — Обязательный режим: 0 — повышение, 1 — понижение, 2 — блокировка. Это три кода, не Boolean; true/false не заменяют названия всех режимов.

Возвращает

Unit — возвращаемого значения нет. Нельзя использовать результат как успех/ошибку или сравнивать с true. Последующее чтение показывает локальную модель, а не подтверждение сервера.

Поведение

  • Допустимый запрос отправляет один пакет через GameActions и сразу меняет локальный режим. Сервер может применить свои ограничения; повышение навыка или характеристики не гарантируется. Неизвестный навык, недопустимый индекс/режим и отсутствие персонажа игнорируются без пакета.
  • Обязательный номер характеристики: 0 — STR, 1 — DEX, 2 — INT. Это не её текущее значение и не название строкой.
  • ExecuteStealthCompatibility выбирает ветку команды. Text читает селектор навыка, Arg — числовые номера и режимы. Непреобразуемый аргумент может завершить вызов ошибкой преобразования.

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

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

1. ExecuteStealthCompatibility

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

Unit — возвращаемого значения нет. Нельзя использовать результат как успех/ошибку или сравнивать с true. Последующее чтение показывает локальную модель, а не подтверждение сервера.

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

2. Invoke

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

Допустимый запрос отправляет один пакет через GameActions и сразу меняет локальный режим. Сервер может применить свои ограничения; повышение навыка или характеристики не гарантируется. Неизвестный навык, недопустимый индекс/режим и отсутствие персонажа игнорируются без пакета.

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

3. SetStatLockState

GetStatLockState/SetStatLockState выбирают StrLock, DexLock или IntLock по 0/1/2. Чтение неизвестного номера даёт −1; запись проверяет обе границы до отправки.

Unit — возвращаемого значения нет. Нельзя использовать результат как успех/ошибку или сравнивать с true. Последующее чтение показывает локальную модель, а не подтверждение сервера.

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

4. ChangeStatLock

Допустимый запрос отправляет один пакет через GameActions и сразу меняет локальный режим. Сервер может применить свои ограничения; повышение навыка или характеристики не гарантируется. Неизвестный навык, недопустимый индекс/режим и отсутствие персонажа игнорируются без пакета.

Unit — возвращаемого значения нет. Нельзя использовать результат как успех/ошибку или сравнивать с true. Последующее чтение показывает локальную модель, а не подтверждение сервера.

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

Допустимый запрос отправляет один пакет через GameActions и сразу меняет локальный режим. Сервер может применить свои ограничения; повышение навыка или характеристики не гарантируется. Неизвестный навык, недопустимый индекс/режим и отсутствие персонажа игнорируются без пакета.

Примеры

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

# Прочитать и вывести
#
# Запрашивает изменение режима характеристики.
#
# Unit — возвращаемого значения нет. Нельзя использовать результат как успех/ошибку или
# сравнивать с true. Последующее чтение показывает локальную модель, а не подтверждение сервера.

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

    VAR selector = 0
    VAR mode = 2
    UO.SetStatLockState(selector, mode)
    UO.Print(CStr(UO.GetStatLockState(selector)))
END SUB

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

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

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

# Применить в условии или сравнении
#
# Запрашивает изменение режима характеристики.
#
# Unit — возвращаемого значения нет. Нельзя использовать результат как успех/ошибку или
# сравнивать с true. Последующее чтение показывает локальную модель, а не подтверждение сервера.

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

    VAR selector = 0
    VAR before = UO.GetStatLockState(selector)
    IF before >= 0 AND before <= 2 THEN
        UO.SetStatLockState(selector, 0)
        UO.Print(CStr(UO.GetStatLockState(selector)))
    END IF
END SUB

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

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

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

# Полная вспомогательная функция
#
# Запрашивает изменение режима характеристики.
#
# Unit — возвращаемого значения нет. Нельзя использовать результат как успех/ошибку или
# сравнивать с true. Последующее чтение показывает локальную модель, а не подтверждение сервера.

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

    ApplyMode(0, 2)
END SUB

SUB ApplyMode(selector, mode)
    IF mode < 0 OR mode > 2 THEN
        RETURN
    END IF
    IF UO.GetStatLockState(selector) < 0 THEN
        RETURN
    END IF
    UO.SetStatLockState(selector, mode)
END SUB

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

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