API UO LastTarget - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Оглавление · Алфавитный указатель · Targeting
ClassicUO • Runtime API
Читает serial последней сохранённой цели-объекта.
UO.LastTarget() -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметров нет.
Integer — serial/ID, не type и не Boolean. 0 означает отсутствие цели-объекта; земля и статика тоже имеют serial 0, хотя координаты могут быть сохранены. Все 32 бита сохраняются. Для проверки ненулевого ID используйте <> 0, не > 0 или = TRUE.
- Без параметров. Не включает прицел, не выбирает новую цель, не атакует и не отправляет пакеты. 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 — полностью определённая вспомогательная функция примера, а не скрытая встроенная команда.
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.
SetLand и SetStatic сохраняют точку X/Y/Z с serial 0. SavedX/SavedY отделены от сетевых полей, чтобы не менять отправку target.
Integer — serial/ID, не type и не Boolean. 0 означает отсутствие цели-объекта; земля и статика тоже имеют serial 0, хотя координаты могут быть сохранены. Все 32 бита сохраняются. Для проверки ненулевого ID используйте <> 0, не > 0 или = TRUE.
Исходник проекта: src/ClassicUO.Client/Game/Managers/TargetManager.cs; функция SetLand.
SetLand и SetStatic сохраняют точку X/Y/Z с serial 0. SavedX/SavedY отделены от сетевых полей, чтобы не менять отправку target.
Integer — serial/ID, не type и не Boolean. 0 означает отсутствие цели-объекта; земля и статика тоже имеют serial 0, хотя координаты могут быть сохранены. Все 32 бита сохраняются. Для проверки ненулевого ID используйте <> 0, не > 0 или = TRUE.
Исходник проекта: src/ClassicUO.Client/Game/Managers/TargetManager.cs; функция SetStatic.
Команда читает bridge; LastTargetX/LastTargetY используют ITargetSnapshotBridge. Старый сторонний bridge без интерфейса сохраняет чтение GetX/GetY. Invoke выполняет чтение на игровом потоке с отменой.
Integer — serial/ID, не type и не Boolean. 0 означает отсутствие цели-объекта; земля и статика тоже имеют serial 0, хотя координаты могут быть сохранены. Все 32 бита сохраняются. Для проверки ненулевого ID используйте <> 0, не > 0 или = TRUE.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
Команда читает bridge; LastTargetX/LastTargetY используют ITargetSnapshotBridge. Старый сторонний bridge без интерфейса сохраняет чтение GetX/GetY. Invoke выполняет чтение на игровом потоке с отменой.
Без параметров. Не включает прицел, не выбирает новую цель, не атакует и не отправляет пакеты. LastTarget отличается от LastAttack и LastStatus. Обычный выбор self не заменяет последнюю цель; явный ClientMarkChar может изменить её.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.
Clear очищает serial и сохранённые координаты. World.Clear вызывает его при очистке мира.
Clear и World.Clear сбрасывают запись, в том числе когда скрипты сохраняются. Неизвестный serial в явной установке не наследует прежние X/Y: они становятся 0. Это не гарантирует существование цели на сервере.
Исходник проекта: src/ClassicUO.Client/Game/Managers/TargetManager.cs; функция Clear.
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.
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 без скобок — встроенное живое значение, если не перекрыто переменной.
# Прочитать сохранённое значение
#
# Читает serial последней сохранённой цели-объекта.
#
# Integer — serial/ID, не type и не Boolean. 0 означает отсутствие цели-объекта; земля и статика
# тоже имеют serial 0, хотя координаты могут быть сохранены. Все 32 бита сохраняются. Для
# проверки ненулевого ID используйте <> 0, не > 0 или = TRUE.
SUB Main()
# value — единственный результат команды; HEX показывает ID, CStr — координату. Вызов ничего не
# выбирает.
VAR value = UO.LastTarget()
UO.Print('Saved value: ' + HEX(value))
END SUBРазбор параметров и выполнения:
- value — единственный результат команды; HEX показывает ID, CStr — координату. Вызов ничего не выбирает.
# Сравнить сохранённую и текущую позицию
#
# Читает serial последней сохранённой цели-объекта.
#
# Integer — serial/ID, не type и не Boolean. 0 означает отсутствие цели-объекта; земля и статика
# тоже имеют serial 0, хотя координаты могут быть сохранены. Все 32 бита сохраняются. Для
# проверки ненулевого ID используйте <> 0, не > 0 или = TRUE.
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 не доказывает, что точка была выбрана.
# Полный помощник ReadTargetValue
#
# Читает serial последней сохранённой цели-объекта.
#
# Integer — serial/ID, не type и не Boolean. 0 означает отсутствие цели-объекта; земля и статика
# тоже имеют serial 0, хотя координаты могут быть сохранены. Все 32 бита сохраняются. Для
# проверки ненулевого ID используйте <> 0, не > 0 или = TRUE.
SUB Main()
# minimum/maximum задают допустимый диапазон результата помощника, не параметры API. Помощник
# полностью определён; -1 — его собственный признак выхода за диапазон. Для ID проверка вместо
# диапазона сохраняет любой ненулевой serial, включая старший бит.
VAR value = ReadTargetValue()
UO.Print('Checked value: ' + CStr(value))
END SUB
SUB ReadTargetValue()
VAR value = UO.LastTarget()
IF value = 0 THEN
RETURN -1
END IF
RETURN value
END SUBРазбор параметров и выполнения:
- minimum/maximum задают допустимый диапазон результата помощника, не параметры API. Помощник полностью определён; -1 — его собственный признак выхода за диапазон. Для ID проверка вместо диапазона сохраняет любой ненулевой serial, включая старший бит.