API UO GetMana - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.GetMana
Оглавление · Алфавитный указатель · Character
ClassicUO • Runtime API
Читает текущую ману из локальной модели.
Точный синтаксис
UO.GetMana() -> Integer
UO.GetMana(ObjID:Any) -> Any
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
ObjID— Необязательный объект в показанных формах: serial числом/hex-строкой, self, lasttarget или зарегистрированное имя AddObject. Это не type. Без аргумента читается self. Неизвестный текст в некоторых формах вызывает ошибку преобразования; проверяйте имя перед вызовом.
Возвращает
Integer — значение поля Mana, не процент и не 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 — значение поля Mana, не процент и не 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 — значение поля Mana, не процент и не Boolean. 0 бывает настоящим значением или признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.
Исходник проекта: src/ClassicUO.Client/Game/World.cs; функция Get.
Команда не открывает status и не запрашивает обновление сервера. В отличие от автоматического запроса отсутствующих HP в Stealth, этот клиент только читает данные. Не меняет характеристики и не отправляет пакеты.
Примеры
Пример 1. Вывести значение своего персонажа
# Вывести значение своего персонажа
#
# Читает текущую ману из локальной модели.
#
# Integer — значение поля Mana, не процент и не Boolean. 0 бывает настоящим значением или
# признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого
# mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера
# вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.
SUB Main()
# Вызов без аргументов читает self. value сохраняет одно число, STR преобразует его только для
# сообщения.
VAR value = UO.GetMana()
UO.Print('GetMana: ' + STR(value))
END SUB
Разбор параметров и выполнения:
- Вызов без аргументов читает self. value сохраняет одно число, STR преобразует его только для сообщения.
Пример 2. Применить значение в проверке или расчёте
# Применить значение в проверке или расчёте
#
# Читает текущую ману из локальной модели.
#
# Integer — значение поля Mana, не процент и не Boolean. 0 бывает настоящим значением или
# признаком отсутствующих данных. Нулевой максимум нельзя использовать как делитель. У чужого
# mobile значения могут быть неизвестны. HP/HitsMax могут содержать относительную шкалу сервера
# вместо точных очков. HP=0 не доказывает смерть; для этого есть Dead/IsDead.
SUB Main()
# Показан прикладной порог или расчёт для этого поля. Числа в условии — настройки примера, не
# пределы сервера. Перед делением на максимум проверяется его положительность.
VAR value = UO.GetMana()
IF value >= 10 THEN
UO.Print('At least ten mana points are known')
END IF
END SUB
Разбор параметров и выполнения:
- Показан прикладной порог или расчёт для этого поля. Числа в условии — настройки примера, не пределы сервера. Перед делением на максимум проверяется его положительность.
Пример 3. Полная вспомогательная функция ReadValue
# Полная вспомогательная функция ReadValue
#
# Читает текущую ману из локальной модели.
#
# Integer — значение поля Mana, не процент и не 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.GetMana(obj)
END SUB
Разбор параметров и выполнения:
- lasttarget — ранее выбранный объект; Exists проверяет наличие. obj — единственный параметр ReadValue. Функция возвращает число команды без изменений и приведена целиком.