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

UO.LastTargetX

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

ClassicUO • Runtime API

Читает координату X, сохранённую при выборе последней цели.

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

UO.LastTargetX() -> Integer

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

Параметры

Параметров нет.

Возвращает

Integer — сохранённая координата X, не пиксель экрана. До выбора/после Clear или для неизвестного объекта — 0; реальная координата 0 тоже допустима. Не является Boolean. Для земли/статики работает и при LastTarget()=0.

Поведение

  • Без параметров. Не включает прицел, не выбирает новую цель, не атакует и не отправляет пакеты. LastTarget отличается от LastAttack и LastStatus. Обычный выбор self не заменяет последнюю цель; явный ClientMarkChar может изменить её.
  • При SetEntity сохраняются известные Entity.X/Y; для предмета в контейнере это могут быть координаты содержимого. SetLand/SetStatic сохраняют мировые X/Y выбранной точки. Последующее движение/удаление объекта не меняет сохранённые координаты. Для актуальной позиции используйте GetX/GetY(serial).
  • Clear и World.Clear сбрасывают запись, в том числе когда скрипты сохраняются. Неизвестный serial в явной установке не наследует прежние X/Y: они становятся 0. Это не гарантирует существование цели на сервере.
  • Чтение serial и X/Y отдельными командами не атомарно. Для цели-объекта LastTile сохраняет сетевые X/Y=65535; это не сохранённая позиция объекта. Для земли/статики LastTile(1)/(2) читают выбранные X/Y. lasttarget без скобок — встроенное живое значение, если не перекрыто переменной.
  • World.Clear вызывает ClearWorldState: сбрасывает активный прицел/callback, сохранённую цель и пакет повтора. Обычный Reset сохраняет историю. Внутренний TargetLast посылает сохранённый пакет только для активного серверного прицела; без истории или для локального callback ничего не посылает и сохраняет прицел. Активный клиентский callback один раз получает null как отмену: ClientTargetResponsePresent становится 1 при пустом ответе. Завершённый выбор повторно не уведомляется.

Внутренние функции: от вызова до результата

Ниже реальные внутренние C#-этапы. ReadTargetValue — полностью определённая вспомогательная функция примера, а не скрытая встроенная команда.

1. SetEntity

SetEntity сохраняет serial и отдельно копирует X/Y из World.Get(serial). Неизвестная/уничтоженная Entity даёт координаты 0. Поля сетевого target сохраняют прежние sentinel-значения.

При SetEntity сохраняются известные Entity.X/Y; для предмета в контейнере это могут быть координаты содержимого. SetLand/SetStatic сохраняют мировые X/Y выбранной точки. Последующее движение/удаление объекта не меняет сохранённые координаты. Для актуальной позиции используйте GetX/GetY(serial).

Исходник проекта: src/ClassicUO.Client/Game/Managers/TargetManager.cs; функция SetEntity.

2. SetLand

SetLand и SetStatic сохраняют точку X/Y/Z с serial 0. SavedX/SavedY отделены от сетевых полей, чтобы не менять отправку target.

Integer — сохранённая координата X, не пиксель экрана. До выбора/после Clear или для неизвестного объекта — 0; реальная координата 0 тоже допустима. Не является Boolean. Для земли/статики работает и при LastTarget()=0.

Исходник проекта: src/ClassicUO.Client/Game/Managers/TargetManager.cs; функция SetLand.

3. SetStatic

SetLand и SetStatic сохраняют точку X/Y/Z с serial 0. SavedX/SavedY отделены от сетевых полей, чтобы не менять отправку target.

Integer — сохранённая координата X, не пиксель экрана. До выбора/после Clear или для неизвестного объекта — 0; реальная координата 0 тоже допустима. Не является Boolean. Для земли/статики работает и при LastTarget()=0.

Исходник проекта: src/ClassicUO.Client/Game/Managers/TargetManager.cs; функция SetStatic.

4. LastTargetX

Команда читает bridge; LastTargetX/LastTargetY используют ITargetSnapshotBridge. Старый сторонний bridge без интерфейса сохраняет чтение GetX/GetY. Invoke выполняет чтение на игровом потоке с отменой.

Integer — сохранённая координата X, не пиксель экрана. До выбора/после Clear или для неизвестного объекта — 0; реальная координата 0 тоже допустима. Не является Boolean. Для земли/статики работает и при LastTarget()=0.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция LastTargetX.

5. Invoke

Команда читает bridge; LastTargetX/LastTargetY используют ITargetSnapshotBridge. Старый сторонний bridge без интерфейса сохраняет чтение GetX/GetY. Invoke выполняет чтение на игровом потоке с отменой.

Без параметров. Не включает прицел, не выбирает новую цель, не атакует и не отправляет пакеты. LastTarget отличается от LastAttack и LastStatus. Обычный выбор self не заменяет последнюю цель; явный ClientMarkChar может изменить её.

Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.

6. Clear

Clear очищает serial и сохранённые координаты. World.Clear вызывает его при очистке мира.

Clear и World.Clear сбрасывают запись, в том числе когда скрипты сохраняются. Неизвестный serial в явной установке не наследует прежние X/Y: они становятся 0. Это не гарантирует существование цели на сервере.

Исходник проекта: src/ClassicUO.Client/Game/Managers/TargetManager.cs; функция Clear.

7. ClearWorldState

World.Clear вызывает ClearWorldState: сбрасывает активный прицел/callback, сохранённую цель и пакет повтора. Обычный Reset сохраняет историю. Внутренний TargetLast посылает сохранённый пакет только для активного серверного прицела; без истории или для локального callback ничего не посылает и сохраняет прицел. Активный клиентский callback один раз получает null как отмену: ClientTargetResponsePresent становится 1 при пустом ответе. Завершённый выбор повторно не уведомляется.

World.Clear вызывает ClearWorldState: сбрасывает активный прицел/callback, сохранённую цель и пакет повтора. Обычный Reset сохраняет историю. Внутренний TargetLast посылает сохранённый пакет только для активного серверного прицела; без истории или для локального callback ничего не посылает и сохраняет прицел. Активный клиентский callback один раз получает null как отмену: ClientTargetResponsePresent становится 1 при пустом ответе. Завершённый выбор повторно не уведомляется.

Исходник проекта: src/ClassicUO.Client/Game/Managers/TargetManager.cs; функция ClearWorldState.

8. TargetLast

World.Clear вызывает ClearWorldState: сбрасывает активный прицел/callback, сохранённую цель и пакет повтора. Обычный Reset сохраняет историю. Внутренний TargetLast посылает сохранённый пакет только для активного серверного прицела; без истории или для локального callback ничего не посылает и сохраняет прицел. Активный клиентский callback один раз получает null как отмену: ClientTargetResponsePresent становится 1 при пустом ответе. Завершённый выбор повторно не уведомляется.

World.Clear вызывает ClearWorldState: сбрасывает активный прицел/callback, сохранённую цель и пакет повтора. Обычный Reset сохраняет историю. Внутренний TargetLast посылает сохранённый пакет только для активного серверного прицела; без истории или для локального callback ничего не посылает и сохраняет прицел. Активный клиентский callback один раз получает null как отмену: ClientTargetResponsePresent становится 1 при пустом ответе. Завершённый выбор повторно не уведомляется.

Исходник проекта: src/ClassicUO.Client/Game/Managers/TargetManager.cs; функция TargetLast.

Чтение serial и X/Y отдельными командами не атомарно. Для цели-объекта LastTile сохраняет сетевые X/Y=65535; это не сохранённая позиция объекта. Для земли/статики LastTile(1)/(2) читают выбранные X/Y. lasttarget без скобок — встроенное живое значение, если не перекрыто переменной.

Примеры

Пример 1. Прочитать сохранённое значение

# Прочитать сохранённое значение
#
# Читает координату X, сохранённую при выборе последней цели.
#
# Integer — сохранённая координата X, не пиксель экрана. До выбора/после Clear или для
# неизвестного объекта — 0; реальная координата 0 тоже допустима. Не является Boolean. Для
# земли/статики работает и при LastTarget()=0.

SUB Main()
    # value — единственный результат команды; HEX показывает ID, CStr — координату. Вызов ничего не
    # выбирает.

    VAR value = UO.LastTargetX()
    UO.Print('Saved value: ' + CStr(value))
END SUB

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

  • value — единственный результат команды; HEX показывает ID, CStr — координату. Вызов ничего не выбирает.

Пример 2. Сравнить сохранённую и текущую позицию

# Сравнить сохранённую и текущую позицию
#
# Читает координату X, сохранённую при выборе последней цели.
#
# Integer — сохранённая координата X, не пиксель экрана. До выбора/после Clear или для
# неизвестного объекта — 0; реальная координата 0 тоже допустима. Не является Boolean. Для
# земли/статики работает и при LastTarget()=0.

SUB Main()
    # id — сохранённый serial. Exists проверяет наличие объекта перед GetX/GetY. Сохранённые
    # координаты и текущие могут различаться. При serial=0 пример печатает выбранную точку, но сама
    # 0 не доказывает, что точка была выбрана.

    VAR id = UO.LastTarget()
    VAR x = UO.LastTargetX()
    VAR y = UO.LastTargetY()
    UO.Print('Saved XY: ' + CStr(x) + ',' + CStr(y))
    IF id <> 0 AND UO.Exists(id) THEN
        UO.Print('Live XY: ' + CStr(UO.GetX(id)) + ',' + CStr(UO.GetY(id)))
    END IF
END SUB

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

  • id — сохранённый serial. Exists проверяет наличие объекта перед GetX/GetY. Сохранённые координаты и текущие могут различаться. При serial=0 пример печатает выбранную точку, но сама 0 не доказывает, что точка была выбрана.

Пример 3. Полный помощник ReadTargetValue

# Полный помощник ReadTargetValue
#
# Читает координату X, сохранённую при выборе последней цели.
#
# Integer — сохранённая координата X, не пиксель экрана. До выбора/после Clear или для
# неизвестного объекта — 0; реальная координата 0 тоже допустима. Не является Boolean. Для
# земли/статики работает и при LastTarget()=0.

SUB Main()
    # minimum/maximum задают допустимый диапазон результата помощника, не параметры API. Помощник
    # полностью определён; -1 — его собственный признак выхода за диапазон. Для ID проверка вместо
    # диапазона сохраняет любой ненулевой serial, включая старший бит.

    VAR value = ReadTargetValue(0,65535)
    UO.Print('Checked value: ' + CStr(value))
END SUB

SUB ReadTargetValue(minimum,maximum)
    VAR value = UO.LastTargetX()
    IF value < minimum OR value > maximum THEN
        RETURN -1
    END IF
    RETURN value
END SUB

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

  • minimum/maximum задают допустимый диапазон результата помощника, не параметры API. Помощник полностью определён; -1 — его собственный признак выхода за диапазон. Для ID проверка вместо диапазона сохраняет любой ненулевой serial, включая старший бит.