-
Notifications
You must be signed in to change notification settings - Fork 0
API lastattack
Constants & Special Values · Правила типов и результатов
lastattack — динамическое объектное значение. ID последней цели атаки, сохранённой клиентом. Чтение само не атакует.
lastattack -> Any (чтение без скобок)
Значение читается без круглых скобок. Способы передачи в команды и отличие от числового ID описаны ниже.
Параметров нет.
В клиенте Integer — serial/ID объекта или 0, когда соответствующего объекта/состояния нет. В метаданных указан Any: тестовый runtime без игровой bridge может возвращать строковое имя. Это не graphic/type, не количество и не Boolean.
- ID последней цели атаки, сохранённой клиентом. Чтение само не атакует.
- Читается без скобок: VAR id = lastattack. Регистр имени не важен. VAR id сохраняет текущий снимок ID; дальнейшие изменения target/поиска не меняют уже записанную id.
- Передавайте полученный ID в команды с параметром serial/object: например UO.GetName(id), UO.GetX(id), UO.IsObjectExists(id). Строка "lastattack" также разрешается командами через GetObject, но это отдельный путь; не все строковые параметры вообще являются объектными селекторами.
- Сначала проверяйте id <> 0, затем при необходимости UO.IsObjectExists(id). Ненулевой ID может остаться в истории после ухода объекта из зоны загрузки. Значение ID=1 не обозначает общий успех.
- Не объявляйте переменную с именем lastattack: явное присваивание может перекрыть встроенное чтение в скрипте и не является способом изменить игровой target/рюкзак. UO.AddObject создаёт отдельное имя в текущем runtime.
Ниже описана реализация этого движка. Имена внутренних методов не являются дополнительными командами BASIC.
Регистрирует чтение lastattack и передаёт getter свойства bridge.LastAttack.
В клиенте getter возвращает актуальный Integer. При отсутствии bridge возвращается строковое имя для совместимости.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция AddShortcutValue.
Разрешает числовой ID, строковый объектный алиас и сохранённые имена AddObject.
Это путь для строковых аргументов команд; bare-имя читается через зарегистрированный getter.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция TryGetObject.
Примеры ниже показывают чтение, сохранение своего имени и проверку через полностью приведённую функцию.
SUB Main()
# ID последней цели атаки, сохранённой клиентом. Чтение само не атакует.
VAR id = lastattack
IF id = 0 THEN
UO.Print("No object ID")
RETURN
END IF
IF UO.IsObjectExists(id) = FALSE THEN
UO.Print("Object is no longer loaded: " + CStr(id))
RETURN
END IF
# ID и graphic — разные значения.
UO.Print("ID: " + CStr(id) + " | Graphic: " + CStr(UO.GetType(id)))
UO.Print("Name: " + UO.GetName(id))
END SUBРазбор параметров и выполнения:
- id получает снимок lastattack. Проверка на 0 относится к ID, сравнение IsObjectExists с FALSE — к логическому результату.
- Команды только читают объект. Они не открывают target и не инициируют действие.
SUB Main()
VAR id = lastattack
IF id = 0 THEN
UO.Print("Nothing to remember")
RETURN
END IF
# Это отдельное имя в текущем скрипте, не замена системного lastattack.
UO.AddObject("sample_lastattack", id)
TRY
# GetSerial возвращает hex-строку сохранённого ID.
VAR saved = UO.GetSerial("sample_lastattack")
UO.Print("Saved object: " + saved)
FINALLY
UO.DeleteObject("sample_lastattack")
END TRY
END SUBРазбор параметров и выполнения:
- Первый параметр AddObject — пользовательское имя, второй — serial. GetSerial разрешает это имя и возвращает String с hex-ID.
- DeleteObject удаляет только созданное имя. Предмет в мире не удаляется; игровой target не меняется.
SUB Main()
VAR id = LoadedId(lastattack)
UO.Print("Loaded ID or zero: " + CStr(id))
END SUB
FUNCTION LoadedId(id)
# Принимаем именно serial, а не имя слоя или graphic.
IF id = 0 THEN
RETURN 0
END IF
IF UO.IsObjectExists(id) = FALSE THEN
RETURN 0
END IF
RETURN id
END FUNCTIONРазбор параметров и выполнения:
- LoadedId получает значение lastattack и возвращает исходный serial только для загруженного объекта.
- Функция полностью приведена. После неё объект всё равно может уйти из видимости; проверка относится к моменту вызова.
Проверка примеров: скрипты загружены и выполнены в тестовом окружении движка с известными объектами и без выбранной цели/слоя. Отдельно проверены границы расстояния и высоты. Это не тест торговли на игровом сервере.
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь