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

UO.ObjAtLayer

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

ClassicUO • Runtime API

Находит предмет на указанном слое экипировки собственного персонажа.

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

UO.ObjAtLayer(layer:String) -> Any
UO.ObjAtLayer(LayerType:Any) -> Integer

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

Параметры

  • layer / LayerType — Один обязательный аргумент: число слоя 1..29 или строковое имя из списка ниже. Число 0 и имя Invalid дают 0. Регистр и крайние пробелы имени игнорируются. Неизвестное строковое имя вызывает ошибку скрипта; числовая строка "1" не заменяет число 1.

Возвращает

Числовая форма возвращает Integer — serial предмета, либо 0 для пустого/недопустимого слоя. Строковая форма возвращает String вида "0x40001001", если предмет найден, иначе Integer 0. Это ID предмета, а не номер слоя, graphic/type или количество. Метаданные Any строковой формы отражают два возможных типа результата.

Поведение

  • Читается локальная модель клиента; запросов серверу, ожидания и перемещения нет.
  • Результат относится к моменту чтения. После WAIT или другого действия объект и его флаги могут измениться.
  • Проверяются данные экипировки self. Команда не открывает сумку, не надевает предмет и не посылает запрос осмотра.
  • Числа вне 1..29 дают 0 без преобразования по модулю 256; например, 257 не может выбрать правую руку.
  • Все поддерживаемые числовые слои и строковые имена:
  • 1 OneHanded/Rhand/RightHand; 2 TwoHanded/Lhand/LeftHand; 3 Shoes; 4 Pants; 5 Shirt; 6 Helmet/Hat; 7 Gloves; 8 Ring; 9 Talisman; 10 Necklace/Neck.
  • 11 Hair; 12 Waist; 13 Torso; 14 Bracelet/Brace; 15 Face; 16 Beard; 17 Tunic; 18 Earrings/Ear; 19 Arms; 20 Cloak.
  • 21 Backpack/Bpack/BackpackLayer; 22 Robe; 23 Skirt; 24 Legs; 25 Mount; 26 ShopBuyRestock/Rstk; 27 ShopBuy/NRstk; 28 ShopSell/Sell; 29 Bank.

Примеры

Пример 1. Предмет в правой руке по имени слоя

# Предмет в правой руке по имени слоя
#
# Находит предмет на указанном слое экипировки собственного персонажа.
#
# Числовая форма возвращает Integer — serial предмета, либо 0 для пустого/недопустимого слоя.
# Строковая форма возвращает String вида "0x40001001", если предмет найден, иначе Integer 0. Это
# ID предмета, а не номер слоя, graphic/type или количество. Метаданные Any строковой формы
# отражают два возможных типа результата.

SUB Main()
    # Rhand выбирает слой 1. При успехе hand — hex-строка; при отсутствии — число 0.
    # STR позволяет вывести оба возможных типа. Результат нельзя принимать за graphic оружия.

    VAR hand = UO.ObjAtLayer('Rhand')
    IF hand <> 0 THEN
        UO.Print('Right hand serial: ' + STR(hand))
    ELSE
        UO.Print('Right hand is empty or unavailable')
    END IF
END SUB

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

  • Rhand выбирает слой 1. При успехе hand — hex-строка; при отсутствии — число 0.
  • STR позволяет вывести оба возможных типа. Результат нельзя принимать за graphic оружия.

Пример 2. Числовой слой и свойства предмета

# Числовой слой и свойства предмета
#
# Находит предмет на указанном слое экипировки собственного персонажа.
#
# Числовая форма возвращает Integer — serial предмета, либо 0 для пустого/недопустимого слоя.
# Строковая форма возвращает String вида "0x40001001", если предмет найден, иначе Integer 0. Это
# ID предмета, а не номер слоя, graphic/type или количество. Метаданные Any строковой формы
# отражают два возможных типа результата.

SUB Main()
    # Число 2 выбирает TwoHanded. Эта форма всегда возвращает Integer.
    # Exists проверяет, что предмет доступен для чтения его свойств. GetGraphic возвращает отдельный
    # type.

    VAR item = UO.ObjAtLayer(2)
    IF UO.Exists(item) THEN
        UO.Print('Two-handed layer serial: ' + STR(item))
        UO.Print('Graphic: ' + UO.GetGraphic(item))
    END IF
END SUB

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

  • Число 2 выбирает TwoHanded. Эта форма всегда возвращает Integer.
  • Exists проверяет, что предмет доступен для чтения его свойств. GetGraphic возвращает отдельный type.

Пример 3. Получить рюкзак и проверить недопустимый слой

# Получить рюкзак и проверить недопустимый слой
#
# Находит предмет на указанном слое экипировки собственного персонажа.
#
# Числовая форма возвращает Integer — serial предмета, либо 0 для пустого/недопустимого слоя.
# Строковая форма возвращает String вида "0x40001001", если предмет найден, иначе Integer 0. Это
# ID предмета, а не номер слоя, graphic/type или количество. Метаданные Any строковой формы
# отражают два возможных типа результата.

SUB Main()
    # 21 — слой Backpack; результат 0 возможен до загрузки экипировки.
    # 257 за пределами списка и всегда даёт 0. Это не альтернативное обозначение слоя 1.

    VAR bag = UO.ObjAtLayer(21)
    VAR invalid = UO.ObjAtLayer(257)
    UO.Print('Backpack serial: ' + STR(bag))
    UO.Print('Invalid layer: ' + STR(invalid))
END SUB

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

  • 21 — слой Backpack; результат 0 возможен до загрузки экипировки.
  • 257 за пределами списка и всегда даёт 0. Это не альтернативное обозначение слоя 1.