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

UO.GetHP

Оглавление · Алфавитный указатель · Character

ClassicUO • Runtime API

Читает текущее здоровье из локальной модели.

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

UO.GetHP() -> Integer
UO.GetHP(id:Integer) -> Integer
UO.GetHP(id:String) -> Integer
UO.GetHP(ObjID:Any) -> Any

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

Параметры

  • ObjID — Необязательный объект в показанных формах: serial числом/hex-строкой, self, lasttarget или зарегистрированное имя AddObject. Это не type. Без аргумента читается self. Неизвестный текст в некоторых формах вызывает ошибку преобразования; проверяйте имя перед вызовом.
  • id — Необязательный объект в показанных формах: serial числом/hex-строкой, self, lasttarget или зарегистрированное имя AddObject. Это не type. Без аргумента читается self. Неизвестный текст в некоторых формах вызывает ошибку преобразования; проверяйте имя перед вызовом.

Возвращает

Integer — значение поля Hits, не процент и не 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 — значение поля Hits, не процент и не Boolean. 0 бывает настоящим значением или признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.

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

2. TryGetObject

TryGetObject распознаёт число, hex-строку и сохранённые имена. Запись AddObject разрешается заново при вызове; это не поиск graphic/type и не интерактивный выбор.

Необязательный объект в показанных формах: serial числом/hex-строкой, self, lasttarget или зарегистрированное имя AddObject. Это не type. Без аргумента читается self. Неизвестный текст в некоторых формах вызывает ошибку преобразования; проверяйте имя перед вызовом.

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

3. Invoke

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

Результат — отдельное чтение. Мир может измениться между Exists и следующим вызовом; несколько запросов не образуют атомарный снимок.

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

4. Get

При чтении объекта World.Get отвергает отсутствующий или IsDestroyed и получается 0. HP/HitsMax читаются у Entity, включая предметы с этими полями; Mana/Stamina — только у Mobile. Без аргумента читается self. Одноимённый вариант без параметров не обязательно имеет вариант с ID: смотрите сигнатуры.

Integer — значение поля Hits, не процент и не Boolean. 0 бывает настоящим значением или признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.

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

Команда не открывает status и не запрашивает обновление сервера. В отличие от автоматического запроса отсутствующих HP в Stealth, этот клиент только читает данные. Не меняет характеристики и не отправляет пакеты.

Примеры

Пример 1. Вывести значение своего персонажа

# Вывести значение своего персонажа
#
# Читает текущее здоровье из локальной модели.
#
# Integer — значение поля Hits, не процент и не Boolean. 0 бывает настоящим значением или
# признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого
# mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера
# вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.

SUB Main()
    # Вызов без аргументов читает self. value сохраняет одно число, STR преобразует его только для
    # сообщения.

    VAR value = UO.GetHP()
    UO.Print('GetHP: ' + STR(value))
END SUB

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

  • Вызов без аргументов читает self. value сохраняет одно число, STR преобразует его только для сообщения.

Пример 2. Применить значение в проверке или расчёте

# Применить значение в проверке или расчёте
#
# Читает текущее здоровье из локальной модели.
#
# Integer — значение поля Hits, не процент и не Boolean. 0 бывает настоящим значением или
# признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого
# mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера
# вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.

SUB Main()
    # Показан прикладной порог или расчёт для этого поля. Числа в условии — настройки примера, не
    # пределы сервера. Перед делением на максимум проверяется его положительность.

    VAR value = UO.GetHP()
    VAR maximum = UO.GetMaxHP()
    IF maximum > 0 AND value * 100 / maximum < 50 THEN
        UO.Print('Health below half of the known maximum')
    END IF
END SUB

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

  • Показан прикладной порог или расчёт для этого поля. Числа в условии — настройки примера, не пределы сервера. Перед делением на максимум проверяется его положительность.

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

# Полная вспомогательная функция ReadValue
#
# Читает текущее здоровье из локальной модели.
#
# Integer — значение поля Hits, не процент и не Boolean. 0 бывает настоящим значением или
# признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого
# mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера
# вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.

SUB Main()
    # lasttarget — ранее выбранный объект; Exists проверяет наличие. obj — единственный параметр
    # ReadValue. Функция возвращает число команды без изменений и приведена целиком.

    IF UO.Exists('lasttarget') THEN
        VAR value = ReadValue('lasttarget')
        UO.Print('Selected value: ' + CStr(value))
    END IF
END SUB

SUB ReadValue(obj)
    RETURN UO.GetHP(obj)
END SUB

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

  • lasttarget — ранее выбранный объект; Exists проверяет наличие. obj — единственный параметр ReadValue. Функция возвращает число команды без изменений и приведена целиком.