API UO GetMaxLife - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.GetMaxLife
Оглавление · Алфавитный указатель · Character
ClassicUO • Runtime API
Читает максимальное здоровье из локальной модели.
Точный синтаксис
UO.GetMaxLife() -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
Параметров нет.
Возвращает
Integer — значение поля HitsMax, не процент и не Boolean. 0 бывает настоящим значением или признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.
Поведение
- Команда не открывает status и не запрашивает обновление сервера. В отличие от автоматического запроса отсутствующих HP в Stealth, этот клиент только читает данные. Не меняет характеристики и не отправляет пакеты.
- Результат — отдельное чтение. Мир может измениться между Exists и следующим вызовом; несколько запросов не образуют атомарный снимок.
- При чтении объекта World.Get отвергает отсутствующий или IsDestroyed и получается 0. HP/HitsMax читаются у Entity, включая предметы с этими полями; Mana/Stamina — только у Mobile. Без аргумента читается self. Одноимённый вариант без параметров не обязательно имеет вариант с ID: смотрите сигнатуры.
- Чтение без аргументов тоже возвращает 0 для отсутствующего или уничтоженного Player. Это относится и к прямым Mana/Stamina и их максимумам, а не только к формам через World.Get. Присутствующий мёртвый персонаж может сохранять значения.
Внутренние функции: от вызова до результата
Ниже реальные внутренние C#-этапы. ReadValue — полностью определённая вспомогательная функция примера, а не скрытая встроенная команда.
1. RegisterCharacterGetterAliases
При создании runtime RegisterCharacterGetterAliases регистрирует имена и формы. Без аргумента используется bridge.Self; с аргументом передаётся выбранный serial. Ранее зарегистрированные формы сохраняются.
Integer — значение поля HitsMax, не процент и не Boolean. 0 бывает настоящим значением или признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция RegisterCharacterGetterAliases.
2. Invoke
Invoke выполняет чтение на игровом потоке; с рабочего потока ожидается обработка запроса менеджером. Отмена скрипта прерывает ожидание. Паузы и дополнительные сетевые запросы не добавляются.
Результат — отдельное чтение. Мир может измениться между Exists и следующим вызовом; несколько запросов не образуют атомарный снимок.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.
3. Get
При чтении объекта World.Get отвергает отсутствующий или IsDestroyed и получается 0. HP/HitsMax читаются у Entity, включая предметы с этими полями; Mana/Stamina — только у Mobile. Без аргумента читается self. Одноимённый вариант без параметров не обязательно имеет вариант с ID: смотрите сигнатуры.
Integer — значение поля HitsMax, не процент и не Boolean. 0 бывает настоящим значением или признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.
Исходник проекта: src/ClassicUO.Client/Game/World.cs; функция Get.
Команда не открывает status и не запрашивает обновление сервера. В отличие от автоматического запроса отсутствующих HP в Stealth, этот клиент только читает данные. Не меняет характеристики и не отправляет пакеты.
Примеры
Пример 1. Вывести значение своего персонажа
# Вывести значение своего персонажа
#
# Читает максимальное здоровье из локальной модели.
#
# Integer — значение поля HitsMax, не процент и не Boolean. 0 бывает настоящим значением или
# признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого
# mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера
# вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.
SUB Main()
# Вызов без аргументов читает self. value сохраняет одно число, STR преобразует его только для
# сообщения.
VAR value = UO.GetMaxLife()
UO.Print('GetMaxLife: ' + STR(value))
END SUB
Разбор параметров и выполнения:
- Вызов без аргументов читает self. value сохраняет одно число, STR преобразует его только для сообщения.
Пример 2. Применить значение в проверке или расчёте
# Применить значение в проверке или расчёте
#
# Читает максимальное здоровье из локальной модели.
#
# Integer — значение поля HitsMax, не процент и не Boolean. 0 бывает настоящим значением или
# признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого
# mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера
# вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.
SUB Main()
# Показан прикладной порог или расчёт для этого поля. Числа в условии — настройки примера, не
# пределы сервера. Перед делением на максимум проверяется его положительность.
VAR value = UO.GetMaxLife()
IF value > 0 THEN
UO.Print('Known HP percent: ' + STR(UO.GetHP() * 100 / value))
ELSE
UO.Print('HP maximum unavailable')
END IF
END SUB
Разбор параметров и выполнения:
- Показан прикладной порог или расчёт для этого поля. Числа в условии — настройки примера, не пределы сервера. Перед делением на максимум проверяется его положительность.
Пример 3. Полная вспомогательная функция ReadValue
# Полная вспомогательная функция ReadValue
#
# Читает максимальное здоровье из локальной модели.
#
# Integer — значение поля HitsMax, не процент и не Boolean. 0 бывает настоящим значением или
# признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого
# mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера
# вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.
SUB Main()
# У этого имени нет формы с ID. ReadValue без параметров читает self; два вызова разделены
# WAIT(1000). Сравнение двух снимков может пропустить промежуточные изменения.
VAR before = ReadValue()
WAIT(1000)
VAR after = ReadValue()
UO.Print('Before: ' + CStr(before) + '; after: ' + CStr(after))
END SUB
SUB ReadValue()
RETURN UO.GetMaxLife()
END SUB
Разбор параметров и выполнения:
- У этого имени нет формы с ID. ReadValue без параметров читает self; два вызова разделены WAIT(1000). Сравнение двух снимков может пропустить промежуточные изменения.