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

UO.GetMaxStamina

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

ClassicUO • Runtime API

Читает максимальную выносливость из локальной модели.

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

UO.GetMaxStamina() -> Integer

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

Параметры

Параметров нет.

Возвращает

Integer — значение поля StaminaMax, не процент и не 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 — значение поля StaminaMax, не процент и не 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.

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

Примеры

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

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

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

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

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

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

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

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

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

    VAR value = UO.GetMaxStamina()
    IF value > 0 THEN
        UO.Print('Stamina percent: ' + STR(UO.Stamina() * 100 / value))
    END IF
END SUB

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

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

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

# Полная вспомогательная функция ReadValue
#
# Читает максимальную выносливость из локальной модели.
#
# Integer — значение поля StaminaMax, не процент и не 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.GetMaxStamina()
END SUB

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

  • У этого имени нет формы с ID. ReadValue без параметров читает self; два вызова разделены WAIT(1000). Сравнение двух снимков может пропустить промежуточные изменения.