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

UO.CheckLOS

ClassicUO / Basic IDE

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

Положительный результат требует достижения конечной точки. Превышение лимита обхода и недопустимые координаты не считаются успехом.

Синтаксис

UO.CheckLOS(Xfrom:Any, Yfrom:Any, Zfrom:Any, Xto:Any, Yto:Any, Zto:Any, WorldNum:Any) -> Any

Регистр имени не важен. Any — динамическое значение Basic; Unit — отсутствие возвращаемого значения. Integer — знаковое 32-битное число, Decimal — число с плавающей точкой. Правила типов, serial, индексов и ожиданий.

Параметры

Имя Назначение
Xfrom Позиционный аргумент этой перегрузки. Подробности использования указаны в описании/фактической ветви runtime ниже.
Yfrom Позиционный аргумент этой перегрузки. Подробности использования указаны в описании/фактической ветви runtime ниже.
Zfrom Позиционный аргумент этой перегрузки. Подробности использования указаны в описании/фактической ветви runtime ниже.
Xto Позиционный аргумент этой перегрузки. Подробности использования указаны в описании/фактической ветви runtime ниже.
Yto Позиционный аргумент этой перегрузки. Подробности использования указаны в описании/фактической ветви runtime ниже.
Zto Позиционный аргумент этой перегрузки. Подробности использования указаны в описании/фактической ветви runtime ниже.
WorldNum map/facet index. The current implementation requires this to match the currently loaded ClassicUO map.

Параметры обязательны внутри каждой показанной сигнатуры. Опустить аргумент можно только при наличии более короткой перегрузки; пропуск позиции посередине не подразумевается.

Поведение

The command traces from the start point to the destination and validates world movement cells. When UO.LOSOptions() is non-zero, every traced cell is additionally checked against the loaded ClassicUO land/static/multi/item tile data. The selected LOS algorithm family and flags affect NoShoot, windows and diagonal-corner behavior.

At the destination the vertical difference must be within the current portable LOS tolerance; otherwise the result is 0.

Ограничения

This is a Basic / ClassicUO adaptation designed for current runtime behavior. It does not claim bit-identical results with every historical external Stealth LOS engine. Arbitrary offline facets are not loaded solely for this call; pass the current UO.WorldNum() unless the corresponding map is actually active.

For the meaning of algorithm values and flags, see UO.LOSOptions.

Примеры

Каждый блок — самостоятельный скрипт из мануала проекта. Параметры демонстрационного объекта/контейнера и условия действия необходимо сопоставить с вашей игровой ситуацией.

Пример 1

SUB Main()
    VAR x1 = UO.GetX('self')
    VAR y1 = UO.GetY('self')
    VAR z1 = UO.GetZ('self')

    UO.LOSOptions(3)
    VAR visible = UO.CheckLOS(x1, y1, z1, x1 + 10, y1, z1, UO.WorldNum())
    UO.Print(visible)
END SUB

Пример 2

SUB Main()
    # Require diagonal corner clearance too
    UO.LOSOptions(3 + 256)
    VAR visible = UO.CheckLOS(1000, 1000, 0, 1010, 1010, 0, UO.WorldNum())
END SUB

Пример 3

SUB Main()
    VAR result = UO.CheckLOS(1, 2, 3, 4, 5, 6, 7)
    UO.Print(CStr(result))
END SUB

Пример 4

SUB Main()
    VAR arg1 = 1 # Xfrom
    VAR arg2 = 2 # Yfrom
    VAR arg3 = 3 # Zfrom
    VAR arg4 = 4 # Xto
    VAR arg5 = 5 # Yto
    VAR arg6 = 6 # Zto
    VAR arg7 = 7 # WorldNum
    VAR result = UO.CheckLOS(arg1, arg2, arg3, arg4, arg5, arg6, arg7)
    UO.Print(CStr(result))
END SUB

Пример 5

SUB ReadResult()
    VAR arg1 = 1 # Xfrom
    VAR arg2 = 2 # Yfrom
    VAR arg3 = 3 # Zfrom
    VAR arg4 = 4 # Xto
    VAR arg5 = 5 # Yto
    VAR arg6 = 6 # Zto
    VAR arg7 = 7 # WorldNum
    VAR result = UO.CheckLOS(arg1, arg2, arg3, arg4, arg5, arg6, arg7)
    UO.Print(CStr(result))
END SUB

SUB Main()
    ReadResult()
END SUB
Реализация и проверка контракта
  • InjectionScript.Runtime.InjectionApiUO+<>c__DisplayClass38_0.<RegisterStealthCompatibility>b__0

Соответствующая ветвь совместимого обработчика в InjectionApiUO.cs. Arg(i)/Text(i) читают позицию с нуля; bridge обращается к клиенту. Прямые типизированные перегрузки перечислены выше и могут иметь отдельный маршрут.

return new InjectionValue(CheckPortableLineOfSight(Arg(0), Arg(1), Arg(2), Arg(3), Arg(4), Arg(5), Arg(6)) ? 1 : 0);

Источник реестра и отчёт сверки. Примеры проверяются загрузчиком/парсером включённого runtime. Действия на игровом сервере этой проверкой не исполняются.

⚠️ **GitHub.com Fallback** ⚠️