API UO GetStatLockState - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.GetStatLockState
Оглавление · Алфавитный указатель · Character
ClassicUO • Runtime API
Читает локальный режим изменения характеристики.
Точный синтаксис
UO.GetStatLockState(statNum:Any) -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
statNum— Обязательный номер характеристики: 0 — STR, 1 — DEX, 2 — INT. Это не её текущее значение и не название строкой.
Возвращает
Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для номера вне 0..2 возвращается −1. Если персонаж отсутствует, допустимый номер возвращает 0 по умолчанию; это не подтверждение состояния сервера.
Поведение
- Чтение выполняется через Invoke на игровом потоке по уже полученным данным; сетевые пакеты не отправляются. Навык не используется и не тренируется. Два запроса — два отдельных снимка.
- Обязательный номер характеристики: 0 — STR, 1 — DEX, 2 — INT. Это не её текущее значение и не название строкой.
- ExecuteStealthCompatibility выбирает ветку команды. Text читает селектор навыка, Arg — числовые номера и режимы. Непреобразуемый аргумент может завершить вызов ошибкой преобразования.
Внутренние функции: от вызова до результата
Ниже реальные внутренние C#-этапы. ReadMode — полностью определённая вспомогательная функция примера, а не скрытая встроенная команда.
1. ExecuteStealthCompatibility
ExecuteStealthCompatibility выбирает ветку команды. Text читает селектор навыка, Arg — числовые номера и режимы. Непреобразуемый аргумент может завершить вызов ошибкой преобразования.
Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для номера вне 0..2 возвращается −1. Если персонаж отсутствует, допустимый номер возвращает 0 по умолчанию; это не подтверждение состояния сервера.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
2. Invoke
Invoke выполняет чтение на игровом потоке; с рабочего потока ожидается обработка запроса менеджером. Отмена скрипта прерывает ожидание. Паузы и дополнительные сетевые запросы не добавляются.
Чтение выполняется через Invoke на игровом потоке по уже полученным данным; сетевые пакеты не отправляются. Навык не используется и не тренируется. Два запроса — два отдельных снимка.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.
3. GetStatLockState
GetStatLockState/SetStatLockState выбирают StrLock, DexLock или IntLock по 0/1/2. Чтение неизвестного номера даёт −1; запись проверяет обе границы до отправки.
Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для номера вне 0..2 возвращается −1. Если персонаж отсутствует, допустимый номер возвращает 0 по умолчанию; это не подтверждение состояния сервера.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция GetStatLockState.
Чтение выполняется через Invoke на игровом потоке по уже полученным данным; сетевые пакеты не отправляются. Навык не используется и не тренируется. Два запроса — два отдельных снимка.
Примеры
Пример 1. Прочитать и вывести
# Прочитать и вывести
#
# Читает локальный режим изменения характеристики.
#
# Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для
# номера вне 0..2 возвращается −1. Если персонаж отсутствует, допустимый номер возвращает 0 по
# умолчанию; это не подтверждение состояния сервера.
SUB Main()
# В примере явно заданы selector и, при записи, mode. Первая строка выбирает навык по имени или
# характеристику по номеру. Print только выводит результат.
VAR selector = 0
VAR mode = UO.GetStatLockState(selector)
UO.Print(CStr(mode))
END SUB
Разбор параметров и выполнения:
- В примере явно заданы selector и, при записи, mode. Первая строка выбирает навык по имени или характеристику по номеру. Print только выводит результат.
Пример 2. Применить в условии или сравнении
# Применить в условии или сравнении
#
# Читает локальный режим изменения характеристики.
#
# Integer: 0 — повышение, 1 — понижение, 2 — блокировка. Это код режима, не true/false. Для
# номера вне 0..2 возвращается −1. Если персонаж отсутствует, допустимый номер возвращает 0 по
# умолчанию; это не подтверждение состояния сервера.
SUB Main()
# Порог 95.1 и режимы 0/1/2 заданы для примера. −1 проверяется до изменения режима. После записи
# читается только локальная копия; это не ожидание ответа сервера.
VAR mode = UO.GetStatLockState(0)
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. Для
# номера вне 0..2 возвращается −1. Если персонаж отсутствует, допустимый номер возвращает 0 по
# умолчанию; это не подтверждение состояния сервера.
SUB Main()
# Весь код помощника приведён ниже Main. selector выбирает навык/характеристику, mode задаёт
# режим записи. ReadValue/ReadMode возвращают исходное число; ApplyMode проверяет аргументы,
# выполняет действие и не возвращает значение. WAIT(1000) в примере чтения разделяет два снимка.
VAR before = ReadMode(0)
WAIT(1000)
VAR after = ReadMode(0)
UO.Print(CStr(before) + " -> " + CStr(after))
END SUB
SUB ReadMode(selector)
RETURN UO.GetStatLockState(selector)
END SUB
Разбор параметров и выполнения:
- Весь код помощника приведён ниже Main. selector выбирает навык/характеристику, mode задаёт режим записи. ReadValue/ReadMode возвращают исходное число; ApplyMode проверяет аргументы, выполняет действие и не возвращает значение. WAIT(1000) в примере чтения разделяет два снимка.