API UO Dex - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.Dex
Оглавление · Алфавитный указатель · Character
ClassicUO • Runtime API
Читает текущую ловкость (Dexterity, DEX) персонажа.
Точный синтаксис
UO.Dex() -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
Параметров нет.
Возвращает
Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект. Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не гарантированное базовое значение без модификаторов.
Поведение
- Команда не принимает аргументов. Используйте точные сигнатуры выше.
- Читает Player.Dexterity, если Player существует и не уничтожен; иначе 0. Присутствующий мёртвый персонаж не является удалённым объектом. Характеристика не вычисляется из HP, маны или выносливости.
- GetStr/GetInt/GetDex принимают ObjID. Данные PlayerMobile доступны только для self; для другого serial — 0, даже для загруженного mobile. Это ограничение относительно общего описания Stealth; чужая характеристика не подставляется и не угадывается.
- Invoke читает на игровом потоке с возможностью отменить ожидание скриптом. Не запрашивает status, не открывает target, не посылает пакет, не меняет характеристику и не добавляет задержку.
- Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.
- Равнозначные имена характеристики с UO. и без него, без учёта регистра:
Dex Dexterity GetDex GetDexterity. - Int(value) без UO. округляет BASIC-число вниз, Str(value) без UO. форматирует значение в текст. Это другие операции, чем UO.Int()/UO.Str(), читающие характеристики. GetInt(ObjID) не округляет число.
Внутренние функции: от вызова до результата
Ниже реальные этапы чтения. AttributeAtLeast — полностью определённая пользовательская BASIC-функция из примера, не скрытая встроенная API и не изменение характеристики.
1. RegisterCharacterGetterAliases
RegisterCharacterGetterAliases регистрирует отсутствующие функции без аргументов и встроенные имена. Имеющиеся ветки совместимости выбирают свой getter; оба пути возвращают Integer. Имя без скобок читается заново, если его не перекрыла переменная скрипта.
Равнозначные имена характеристики с UO. и без него, без учёта регистра: Dex Dexterity GetDex GetDexterity.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция RegisterCharacterGetterAliases.
2. Invoke
Читает Player.Dexterity, если Player существует и не уничтожен; иначе 0. Присутствующий мёртвый персонаж не является удалённым объектом. Характеристика не вычисляется из HP, маны или выносливости. Invoke читает на игровом потоке с возможностью отменить ожидание скриптом. Не запрашивает status, не открывает target, не посылает пакет, не меняет характеристику и не добавляет задержку.
Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект. Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не гарантированное базовое значение без модификаторов. Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.
3. CharacterStatus
CharacterStatus записывает полученное поле STR/DEX/INT в Player.Dexterity при обработке подходящего status-пакета собственного персонажа. Команды читают этот кэш и не ждут нового пакета.
Invoke читает на игровом потоке с возможностью отменить ожидание скриптом. Не запрашивает status, не открывает target, не посылает пакет, не меняет характеристику и не добавляет задержку.
Исходник проекта: src/ClassicUO.Client/Network/PacketHandlers.cs; функция CharacterStatus.
4. Clear
World.Clear удаляет Player. Далее возвращается 0, пока не появятся текущий персонаж и его данные. Сохранённое значение не доказывает выполнение требования после переподключения.
Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект. Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не гарантированное базовое значение без модификаторов.
Исходник проекта: src/ClassicUO.Client/Game/World.cs; функция Clear.
World.Clear удаляет Player. Далее возвращается 0, пока не появятся текущий персонаж и его данные. Сохранённое значение не доказывает выполнение требования после переподключения.
Примеры
Пример 1. Прочитать и вывести очки
# Прочитать и вывести очки
#
# Читает текущую ловкость (Dexterity, DEX) персонажа.
#
# Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим
# блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект.
# Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не
# гарантированное базовое значение без модификаторов.
SUB Main()
# value сохраняет числовой результат; CStr лишь форматирует его для журнала. Аргументов и
# действия персонажа нет.
VAR value = UO.Dex()
UO.Print('Dexterity: ' + CStr(value))
END SUB
Разбор параметров и выполнения:
- value сохраняет числовой результат; CStr лишь форматирует его для журнала. Аргументов и действия персонажа нет.
Пример 2. Сравнить два снимка
# Сравнить два снимка
#
# Читает текущую ловкость (Dexterity, DEX) персонажа.
#
# Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим
# блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект.
# Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не
# гарантированное базовое значение без модификаторов.
SUB Main()
# before и after разделяет 1000 мс; WAIT добавлен в пример. change=after-before бывает
# положительным, нулевым или отрицательным. Сам по себе он не различает все промежуточные
# обновления и выход из мира.
VAR before = UO.Dex()
WAIT(1000)
VAR after = UO.Dex()
VAR change = after - before
UO.Print('Change: ' + CStr(change))
END SUB
Разбор параметров и выполнения:
- before и after разделяет 1000 мс; WAIT добавлен в пример. change=after-before бывает положительным, нулевым или отрицательным. Сам по себе он не различает все промежуточные обновления и выход из мира.
Пример 3. Полная функция проверки требования
# Полная функция проверки требования
#
# Читает текущую ловкость (Dexterity, DEX) персонажа.
#
# Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим
# блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект.
# Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не
# гарантированное базовое значение без модификаторов.
SUB Main()
# minimum=80 — пример требования, не предел клиента. AttributeAtLeast(minimum) отвергает
# отсутствующего персонажа, один раз читает характеристику и возвращает Integer Boolean: 1=TRUE
# или 0=FALSE по условию >= minimum. Логическое значение даёт сравнение, не сама характеристика.
IF AttributeAtLeast(80) = TRUE THEN
UO.Print('Requirement met')
ELSE
UO.Print('Requirement not met or no player')
END IF
END SUB
SUB AttributeAtLeast(minimum)
IF UO.Self() = 0 THEN
RETURN FALSE
END IF
VAR value = UO.Dex()
RETURN value >= minimum
END SUB
Разбор параметров и выполнения:
- minimum=80 — пример требования, не предел клиента. AttributeAtLeast(minimum) отвергает отсутствующего персонажа, один раз читает характеристику и возвращает Integer Boolean: 1=TRUE или 0=FALSE по условию >= minimum. Логическое значение даёт сравнение, не сама характеристика.