Skip to content

API UO SetBadObject

Codex edited this page Sep 19, 2026 · 4 revisions

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 сохраняется; это массив координат, а не активный маршрут.

Clone this wiki locally