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

UO.GetMobile

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

ClassicUO • Runtime API

Собирает компактную запись свойств по одному ID.

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

UO.GetMobile(ID:Any) -> Any

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

Параметры

  • ID — Serial/ID конкретного объекта: Integer, десятичная/hex-строка или установленный алиас self, backpack, lasttarget, lastobject либо имя AddObject. Это не graphic/type.

Возвращает

Array из 9 полей: [0] Integer serial, [1] String имя, [2] Integer X, [3] Integer Y, [4] Integer Z, [5] Integer HP, [6] Integer MaxHP, [7] Integer notoriety, [8] Integer направление 0..7. Для неизвестного ID массив тоже имеет 9 полей: переданный ID сохраняется, имя пустое, недоступные числовые свойства равны 0. Это не полный Pascal record TMobile.

Поведение

  • Читаются данные, уже загруженные клиентом. Команда не открывает контейнер, не перемещает предметы и не загружает объекты со всего сервера.
  • Array — массив с индексами от 0. Сохраняйте его в VAR, проверяйте GetArrayLength перед доступом. Элементы могут исчезнуть из мира после создания снимка: перед действием проверяйте Exists(serial).
  • Наличие девяти полей не подтверждает существование персонажа; используйте Exists. Команда сама не проверяет, что ID принадлежит именно Mobile. Для предмета могут вернуться его имя/координаты и нулевые свойства персонажа.
  • HP/MaxHP другого персонажа зависят от присланной сервером шкалы. Z — высота, не слой экипировки.

Примеры

Пример 1. Прочитать имя и здоровье своего персонажа

# Прочитать имя и здоровье своего персонажа
#
# Собирает компактную запись свойств по одному ID.
#
# Array из 9 полей: [0] Integer serial, [1] String имя, [2] Integer X, [3] Integer Y, [4]
# Integer Z, [5] Integer HP, [6] Integer MaxHP, [7] Integer notoriety, [8] Integer направление
# 0..7. Для неизвестного ID массив тоже имеет 9 полей: переданный ID сохраняется, имя пустое,
# недоступные числовые свойства равны 0. Это не полный Pascal record TMobile.

SUB Main()
    # ID=self. [1] — имя, [5]/[6] — текущие и максимальные HP, а не Mana.
    # Массив имеет фиксированные девять полей. Пустое имя и 0/0 возможны до входа в мир.

    VAR mobile = UO.GetMobile('self')
    UO.Print(mobile[1] + ': ' + STR(mobile[5]) + '/' + STR(mobile[6]))
END SUB

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

  • ID=self. [1] — имя, [5]/[6] — текущие и максимальные HP, а не Mana.
  • Массив имеет фиксированные девять полей. Пустое имя и 0/0 возможны до входа в мир.

Пример 2. Прочитать координаты выбранного персонажа

# Прочитать координаты выбранного персонажа
#
# Собирает компактную запись свойств по одному ID.
#
# Array из 9 полей: [0] Integer serial, [1] String имя, [2] Integer X, [3] Integer Y, [4]
# Integer Z, [5] Integer HP, [6] Integer MaxHP, [7] Integer notoriety, [8] Integer направление
# 0..7. Для неизвестного ID массив тоже имеет 9 полей: переданный ID сохраняется, имя пустое,
# недоступные числовые свойства равны 0. Это не полный Pascal record TMobile.

SUB Main()
    # lasttarget должен указывать на персонажа. [2]/[3]/[4] — X/Y/Z мира.
    # Сначала проверяется наличие объекта. Если target — предмет в сумке, координаты относятся к его
    # гампу.

    VAR target = UO.GetSerial('lasttarget')
    IF UO.Exists(target) THEN
        VAR mobile = UO.GetMobile(target)
        UO.Print(STR(mobile[2]) + ',' + STR(mobile[3]) + ',' + STR(mobile[4]))
    END IF
END SUB

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

  • lasttarget должен указывать на персонажа. [2]/[3]/[4] — X/Y/Z мира.
  • Сначала проверяется наличие объекта. Если target — предмет в сумке, координаты относятся к его гампу.

Пример 3. Проверить состояние выбранного Mobile

# Проверить состояние выбранного Mobile
#
# Собирает компактную запись свойств по одному ID.
#
# Array из 9 полей: [0] Integer serial, [1] String имя, [2] Integer X, [3] Integer Y, [4]
# Integer Z, [5] Integer HP, [6] Integer MaxHP, [7] Integer notoriety, [8] Integer направление
# 0..7. Для неизвестного ID массив тоже имеет 9 полей: переданный ID сохраняется, имя пустое,
# недоступные числовые свойства равны 0. Это не полный Pascal record TMobile.

SUB Main()
    # [7] — значение notoriety, [8] — направление 0..7. Ни одно поле не является type.
    # Команда читает известные данные, не направляет персонажа и не переключает боевой режим.

    VAR target = UO.GetSerial('lasttarget')
    IF UO.Exists(target) THEN
        VAR mobile = UO.GetMobile(target)
        UO.Print('Notoriety: ' + STR(mobile[7]))
        UO.Print('Direction: ' + STR(mobile[8]))
    END IF
END SUB

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

  • [7] — значение notoriety, [8] — направление 0..7. Ни одно поле не является type.
  • Команда читает известные данные, не направляет персонажа и не переключает боевой режим.