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.