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

UO.SetBadLocation

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

ClassicUO • Runtime API

Добавляет X/Y в список запрещённых клеток для следующих маршрутов MoveXY, NewMoveXY, MoveXYZ, PMove и запросов GetPathArray/GetPathArray3D.

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

UO.SetBadLocation(X:Any, Y:Any) -> Unit

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

Параметры

  • X — Мировой X исключаемой клетки.
  • Y — Мировой Y исключаемой клетки.

Возвращает

Unit — возвращаемого значения нет. Вызывайте отдельной строкой; это не true/false и не число шагов.

Поведение

  • Ключ состоит из X/Y, без карты и Z. Координаты должны быть целыми в пределах 0..65535; выход за диапазон вызывает ошибку скрипта.
  • Запреты относятся к runtime вызвавшего скрипта. Новый маршрут или запрос получает их снимок. Уже идущий маршрут сохраняет свой снимок, включая внутренний перерасчёт. После изменения списка запустите новый маршрут.
  • Это не изменение карты: обычное ручное движение и маршруты другого runtime не получают этот запрет. Исходную клетку можно покинуть, даже если она отмечена запрещённой.

Примеры

Пример 1. Исключить соседнюю клетку из расчёта

# Исключить соседнюю клетку из расчёта
#
# Добавляет X/Y в список запрещённых клеток для следующих маршрутов MoveXY, NewMoveXY, MoveXYZ,
# PMove и запросов GetPathArray/GetPathArray3D.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой; это не true/false и не число
# шагов.

SUB Main()
    # X/Y — клетка восточнее персонажа.
    # Если возможен обход, возвращается другой полный путь; персонаж не двигается.

    UO.SetBadLocation(UO.GetX() + 1, UO.GetY())
    VAR path = UO.GetPathArray(UO.GetX() + 3, UO.GetY(), TRUE, 0)
    UO.Print(STR(GetArrayLength(path)))
END SUB

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

  • X/Y — клетка восточнее персонажа.
  • Если возможен обход, возвращается другой полный путь; персонаж не двигается.

Пример 2. Добавить две клетки

# Добавить две клетки
#
# Добавляет X/Y в список запрещённых клеток для следующих маршрутов MoveXY, NewMoveXY, MoveXYZ,
# PMove и запросов GetPathArray/GetPathArray3D.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой; это не true/false и не число
# шагов.

SUB Main()
    # Каждый вызов добавляет одну пару X/Y.
    # Повтор пары не создаёт второй отдельный запрет; Z не является параметром.

    UO.SetBadLocation(1445, 1690)
    UO.SetBadLocation(1445, 1691)
END SUB

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

  • Каждый вызов добавляет одну пару X/Y.
  • Повтор пары не создаёт второй отдельный запрет; Z не является параметром.

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

# Очистить прикладные запреты перед новым маршрутом
#
# Добавляет X/Y в список запрещённых клеток для следующих маршрутов MoveXY, NewMoveXY, MoveXYZ,
# PMove и запросов GetPathArray/GetPathArray3D.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой; это не true/false и не число
# шагов.

SUB Main()
    # ClearBadLocationList удаляет все сохранённые пары.
    # Естественные препятствия карты всё равно учитываются.

    UO.ClearBadLocationList()
    VAR path = UO.GetPathArray(UO.GetX() + 2, UO.GetY(), TRUE, 0)
    UO.Print(STR(GetArrayLength(path)))
END SUB

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

  • ClearBadLocationList удаляет все сохранённые пары.
  • Естественные препятствия карты всё равно учитываются.