Skip to content

API lastattack

Codex edited this page Sep 21, 2026 · 4 revisions

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.

1. AddShortcutValue

Регистрирует чтение lastattack и передаёт getter свойства bridge.LastAttack.

В клиенте getter возвращает актуальный Integer. При отсутствии bridge возвращается строковое имя для совместимости.

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

2. TryGetObject

Разрешает числовой ID, строковый объектный алиас и сохранённые имена AddObject.

Это путь для строковых аргументов команд; bare-имя читается через зарегистрированный getter.

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

Примеры ниже показывают чтение, сохранение своего имени и проверку через полностью приведённую функцию.

Примеры

Пример 1. Прочитать ID и проверить загруженность

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 и не инициируют действие.

Пример 2. Сохранить выбранный ID под отдельным именем

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 не меняется.

Пример 3. Полная функция проверки объекта

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 только для загруженного объекта.
  • Функция полностью приведена. После неё объект всё равно может уйти из видимости; проверка относится к моменту вызова.

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

Clone this wiki locally