API UO SetBadObject - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.SetBadObject
Оглавление · Алфавитный указатель · Search
ClassicUO • Runtime API
Исключает из следующих маршрутов и запросов пути клетки вокруг загруженных предметов мира, выбранных по graphic и hue.
Точный синтаксис
UO.SetBadObject(ObjType:Any, Color:Any, Radius:Any) -> Unit
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
ObjType— Graphic/type предмета, 0..65535. 0xFFFF или -1 разрешает любой тип. Это не serial конкретного экземпляра.Color— Hue предмета, 0..65535. 0xFFFF или -1 разрешает любой цвет; 0 означает именно hue 0.Radius— Радиус в клетках, 0..255 включительно. 0 исключает клетку предмета. R исключает квадрат max(abs(dx),abs(dy)) <= R вокруг него, включая диагональные клетки.
Возвращает
Unit — возвращаемого значения нет. Вызывайте отдельной строкой; это не true/false и не число шагов.
Поведение
- Параметры обязательны. Неподходящий диапазон вызывает ошибку скрипта, а не молчаливое усечение числа.
- Правила накапливаются в текущем runtime. Совпавшие правила объединяются: для одного предмета применяется наибольший радиус. ClearBadObjectList удаляет все эти правила.
- Учитываются загруженные динамические предметы с Container=0, включая доступные клиенту двери. Предметы внутри контейнеров, NPC и статика карты этим фильтром не выбираются. Для персонажей используйте avoidMobiles, для отдельных клеток — SetBadLocation.
- При начале MoveXY/NewMoveXY/MoveXYZ/PMove либо GetPathArray/GetPathArray3D создаётся снимок правил и положений предметов. Дальнейшие изменения мира и списка не меняют этот снимок; новый запуск получает новые данные.
- Фильтр не отправляет ничего серверу, не заставляет закрытый контейнер загрузить содержимое и не меняет ручное движение. Правила X/Y не имеют отдельного ограничения по Z.
Примеры
Пример 1. Обойти предметы определённого типа
# Обойти предметы определённого типа
#
# Исключает из следующих маршрутов и запросов пути клетки вокруг загруженных предметов мира,
# выбранных по graphic и hue.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой; это не true/false и не число
# шагов.
SUB Main()
# ObjType=0x398C — пример graphic: замените типом препятствия на своём сервере. Color=0xFFFF
# выбирает любой цвет; Radius=1 исключает квадрат 3×3 вокруг каждого подходящего предмета.
# NewMoveXY идёт на пять клеток восточнее, с точными X/Y, пешком, без callback и с timeout=5000
# мс. ok=1 означает достижение цели; 0 не подтверждает обход.
UO.SetBadObject(0x398C, 0xFFFF, 1)
VAR ok = UO.NewMoveXY(UO.GetX() + 5, UO.GetY(), TRUE, 0, FALSE, 0, 5000)
UO.Print(STR(ok))
END SUB
Разбор параметров и выполнения:
- ObjType=0x398C — пример graphic: замените типом препятствия на своём сервере. Color=0xFFFF выбирает любой цвет; Radius=1 исключает квадрат 3×3 вокруг каждого подходящего предмета.
- NewMoveXY идёт на пять клеток восточнее, с точными X/Y, пешком, без callback и с timeout=5000 мс. ok=1 означает достижение цели; 0 не подтверждает обход.
Пример 2. Проверить путь с точным цветом без движения
# Проверить путь с точным цветом без движения
#
# Исключает из следующих маршрутов и запросов пути клетки вокруг загруженных предметов мира,
# выбранных по graphic и hue.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой; это не true/false и не число
# шагов.
SUB Main()
# Color=0x0044 выбирает только этот hue, а Radius=0 исключает только занятую предметом клетку.
# ClearBadObjectList удаляет прежние правила типа и цвета.
# GetPathArray возвращает записи [x,y,z], включая исходную точку. Пустой массив означает
# отсутствие полного пути при текущих ограничениях. Персонаж остаётся на месте.
UO.ClearBadObjectList()
UO.SetBadObject(0x398C, 0x0044, 0)
VAR path = UO.GetPathArray(UO.GetX() + 4, UO.GetY(), TRUE, 0)
UO.Print("Path records: " + STR(GetArrayLength(path)))
END SUB
Разбор параметров и выполнения:
- Color=0x0044 выбирает только этот hue, а Radius=0 исключает только занятую предметом клетку. ClearBadObjectList удаляет прежние правила типа и цвета.
- GetPathArray возвращает записи [x,y,z], включая исходную точку. Пустой массив означает отсутствие полного пути при текущих ограничениях. Персонаж остаётся на месте.
Пример 3. Временно исключить клетки любых предметов мира
# Временно исключить клетки любых предметов мира
#
# Исключает из следующих маршрутов и запросов пути клетки вокруг загруженных предметов мира,
# выбранных по graphic и hue.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой; это не true/false и не число
# шагов.
SUB Main()
# ObjType=-1 и Color=-1 — оба wildcard. Radius=0 исключает клетки всех загруженных предметов
# мира, но не NPC и не содержимое сумок.
# Очистка действует на будущие запросы. Уже полученный path сохраняется; это массив координат, а
# не активный маршрут.
UO.SetBadObject(-1, -1, 0)
VAR path = UO.GetPathArray(UO.GetX() + 2, UO.GetY(), TRUE, 0)
UO.ClearBadObjectList()
UO.Print(STR(GetArrayLength(path)))
END SUB
Разбор параметров и выполнения:
- ObjType=-1 и Color=-1 — оба wildcard. Radius=0 исключает клетки всех загруженных предметов мира, но не NPC и не содержимое сумок.
- Очистка действует на будущие запросы. Уже полученный path сохраняется; это массив координат, а не активный маршрут.