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, включая старший бит.