API UO GetSkillValue - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.GetSkillValue
Оглавление · Алфавитный указатель · Skills
ClassicUO • Runtime API
Читает базовое значение навыка без модификаторов.
Точный синтаксис
UO.GetSkillValue(SkillName:Any) -> Decimal
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
SkillName— Обязательный навык: имя из данных клиента, например "Mining" или "Animal Lore", либо десятичный индекс от 0 до Skills.Length−1, числом или строкой. Регистр имени не важен, крайние пробелы удаляются, _ заменяется пробелом. Индекс не является ID предмета или индексом от 1. Числовая строка всегда означает индекс.
Возвращает
Decimal (Double) — очки навыка с шагом 0,1, например 95,1, а не 951. Поле BaseFixed делится на 10 непосредственно в Double. 0 означает нулевой навык либо отсутствие персонажа/навыка. Результат не Boolean. Legacy SkillVal/BaseVal имеют другой масштаб — не смешивайте эти семейства.
Поведение
- Чтение выполняется через Invoke на игровом потоке по уже полученным данным; сетевые пакеты не отправляются. Навык не используется и не тренируется. Два запроса — два отдельных снимка.
- Обязательный навык: имя из данных клиента, например "Mining" или "Animal Lore", либо десятичный индекс от 0 до Skills.Length−1, числом или строкой. Регистр имени не важен, крайние пробелы удаляются, _ заменяется пробелом. Индекс не является ID предмета или индексом от 1. Числовая строка всегда означает индекс.
- ExecuteStealthCompatibility выбирает ветку команды. Text читает селектор навыка, Arg — числовые номера и режимы. Непреобразуемый аргумент может завершить вызов ошибкой преобразования.
Внутренние функции: от вызова до результата
Ниже реальные внутренние C#-этапы. ReadValue — полностью определённая вспомогательная функция примера, а не скрытая встроенная команда.
1. ExecuteStealthCompatibility
ExecuteStealthCompatibility выбирает ветку команды. Text читает селектор навыка, Arg — числовые номера и режимы. Непреобразуемый аргумент может завершить вызов ошибкой преобразования.
Decimal (Double) — очки навыка с шагом 0,1, например 95,1, а не 951. Поле BaseFixed делится на 10 непосредственно в Double. 0 означает нулевой навык либо отсутствие персонажа/навыка. Результат не Boolean. Legacy SkillVal/BaseVal имеют другой масштаб — не смешивайте эти семейства.
Исходник проекта: 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. GetSkillValue
GetSkillValue выбирает BaseFixed, ValueFixed или CapFixed и делит целое количество десятых на 10d. Промежуточное округление до Single не используется.
Decimal (Double) — очки навыка с шагом 0,1, например 95,1, а не 951. Поле BaseFixed делится на 10 непосредственно в Double. 0 означает нулевой навык либо отсутствие персонажа/навыка. Результат не Boolean. Legacy SkillVal/BaseVal имеют другой масштаб — не смешивайте эти семейства.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция GetSkillValue.
Чтение выполняется через Invoke на игровом потоке по уже полученным данным; сетевые пакеты не отправляются. Навык не используется и не тренируется. Два запроса — два отдельных снимка.
Примеры
Пример 1. Прочитать и вывести
# Прочитать и вывести
#
# Читает базовое значение навыка без модификаторов.
#
# Decimal (Double) — очки навыка с шагом 0,1, например 95,1, а не 951. Поле BaseFixed делится на
# 10 непосредственно в Double. 0 означает нулевой навык либо отсутствие персонажа/навыка.
# Результат не Boolean. Legacy SkillVal/BaseVal имеют другой масштаб — не смешивайте эти
# семейства.
SUB Main()
# В примере явно заданы selector и, при записи, mode. Первая строка выбирает навык по имени или
# характеристику по номеру. Print только выводит результат.
VAR selector = 'Mining'
VAR value = UO.GetSkillValue(selector)
UO.Print(CStr(value))
END SUB
Разбор параметров и выполнения:
- В примере явно заданы selector и, при записи, mode. Первая строка выбирает навык по имени или характеристику по номеру. Print только выводит результат.
Пример 2. Применить в условии или сравнении
# Применить в условии или сравнении
#
# Читает базовое значение навыка без модификаторов.
#
# Decimal (Double) — очки навыка с шагом 0,1, например 95,1, а не 951. Поле BaseFixed делится на
# 10 непосредственно в Double. 0 означает нулевой навык либо отсутствие персонажа/навыка.
# Результат не Boolean. Legacy SkillVal/BaseVal имеют другой масштаб — не смешивайте эти
# семейства.
SUB Main()
# Порог 95.1 и режимы 0/1/2 заданы для примера. −1 проверяется до изменения режима. После записи
# читается только локальная копия; это не ожидание ответа сервера.
IF UO.GetSkillLockState('Mining') >= 0 THEN
VAR value = UO.GetSkillValue('Mining')
IF value >= 95.1 THEN
UO.Print('Value >= 95.1: ' + CStr(value))
END IF
END IF
END SUB
Разбор параметров и выполнения:
- Порог 95.1 и режимы 0/1/2 заданы для примера. −1 проверяется до изменения режима. После записи читается только локальная копия; это не ожидание ответа сервера.
Пример 3. Полная вспомогательная функция
# Полная вспомогательная функция
#
# Читает базовое значение навыка без модификаторов.
#
# Decimal (Double) — очки навыка с шагом 0,1, например 95,1, а не 951. Поле BaseFixed делится на
# 10 непосредственно в Double. 0 означает нулевой навык либо отсутствие персонажа/навыка.
# Результат не Boolean. Legacy SkillVal/BaseVal имеют другой масштаб — не смешивайте эти
# семейства.
SUB Main()
# Весь код помощника приведён ниже Main. selector выбирает навык/характеристику, mode задаёт
# режим записи. ReadValue/ReadMode возвращают исходное число; ApplyMode проверяет аргументы,
# выполняет действие и не возвращает значение. WAIT(1000) в примере чтения разделяет два снимка.
VAR before = ReadValue('Animal_Lore')
WAIT(1000)
VAR after = ReadValue('Animal Lore')
UO.Print(CStr(after - before))
END SUB
SUB ReadValue(selector)
RETURN UO.GetSkillValue(selector)
END SUB
Разбор параметров и выполнения:
- Весь код помощника приведён ниже Main. selector выбирает навык/характеристику, mode задаёт режим записи. ReadValue/ReadMode возвращают исходное число; ApplyMode проверяет аргументы, выполняет действие и не возвращает значение. WAIT(1000) в примере чтения разделяет два снимка.