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

UO.IsDead

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

ClassicUO • Runtime API

Проверяет смерть персонажа.

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

UO.IsDead() -> Integer
UO.IsDead(ObjID:Any) -> Any

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

Параметры

  • ObjID — Необязательный объект в показанных формах: serial числом/hex-строкой, self, lasttarget или зарегистрированное имя AddObject. Это не type. Без аргумента читается self. Неизвестный текст в некоторых формах вызывает ошибку преобразования; проверяйте имя перед вызовом.

Возвращает

Integer Boolean: 1 = TRUE, 0 = FALSE. Сравнивать можно с числами или логическими константами без кавычек. 1 — mobile имеет IsDead, 0 — признака нет или mobile отсутствует. HP=0 само по себе не означает смерть.

Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся состояние.

Поведение

  • Читает локальную модель: не открывает target, не запрашивает status, не меняет флаг и не отправляет пакет. Уничтоженный объект считается отсутствующим ещё до удаления записи из словаря.
  • Результат — отдельное чтение. Мир может измениться между Exists и следующим вызовом; несколько запросов не образуют атомарный снимок.

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

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

1. RegisterCharacterGetterAliases

При создании runtime RegisterCharacterGetterAliases регистрирует имена и формы. Без аргумента используется bridge.Self; с аргументом передаётся выбранный serial. Ранее зарегистрированные формы сохраняются.

1 — mobile имеет IsDead, 0 — признака нет или mobile отсутствует. HP=0 само по себе не означает смерть.

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

2. TryGetObject

TryGetObject распознаёт число, hex-строку и сохранённые имена. Запись AddObject разрешается заново при вызове; это не поиск graphic/type и не интерактивный выбор.

Необязательный объект в показанных формах: serial числом/hex-строкой, self, lasttarget или зарегистрированное имя AddObject. Это не type. Без аргумента читается self. Неизвестный текст в некоторых формах вызывает ошибку преобразования; проверяйте имя перед вызовом.

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

3. Invoke

Invoke выполняет чтение на игровом потоке; с рабочего потока ожидается обработка запроса менеджером. Отмена скрипта прерывает ожидание. Паузы и дополнительные сетевые запросы не добавляются.

Результат — отдельное чтение. Мир может измениться между Exists и следующим вызовом; несколько запросов не образуют атомарный снимок.

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

4. Get

World.Get ищет объект по serial и возвращает null для IsDestroyed. Затем выбирается флаг Mobile. Для Alive проверяются Exists и отсутствие IsDead; предмет допускается. При чтении собственного Dead используется Player.IsDead.

1 — mobile имеет IsDead, 0 — признака нет или mobile отсутствует. HP=0 само по себе не означает смерть.

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

Читает локальную модель: не открывает target, не запрашивает status, не меняет флаг и не отправляет пакет. Уничтоженный объект считается отсутствующим ещё до удаления записи из словаря.

Примеры

Пример 1. Проверить собственное состояние

# Проверить собственное состояние
#
# Проверяет смерть персонажа.
#
# Integer Boolean: 1 = TRUE, 0 = FALSE. Сравнивать можно с числами или логическими константами
# без кавычек. 1 — mobile имеет IsDead, 0 — признака нет или mobile отсутствует. HP=0 само по
# себе не означает смерть.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.

SUB Main()
    # Пустые скобки читают self. active сохраняет результат один раз; TRUE и FALSE задают две ветви.
    # Print только выводит пример сообщения.

    VAR active = UO.IsDead()
    IF active = TRUE THEN
        UO.Print('State is active')
    ELSE
        UO.Print('State is inactive or unavailable')
    END IF
END SUB

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

  • Пустые скобки читают self. active сохраняет результат один раз; TRUE и FALSE задают две ветви. Print только выводит пример сообщения.

Пример 2. Выбранный объект и полная функция ReadState

# Выбранный объект и полная функция ReadState
#
# Проверяет смерть персонажа.
#
# Integer Boolean: 1 = TRUE, 0 = FALSE. Сравнивать можно с числами или логическими константами
# без кавычек. 1 — mobile имеет IsDead, 0 — признака нет или mobile отсутствует. HP=0 само по
# себе не означает смерть.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.

SUB Main()
    # lasttarget — ранее выбранный объект. Exists проверяет его наличие. obj — единственный параметр
    # ReadState; функция возвращает результат команды без изменения. Её определение входит в
    # копируемый код.

    IF UO.Exists('lasttarget') THEN
        VAR observed = ReadState('lasttarget')
        UO.Print('State 1/0: ' + CStr(observed))
    END IF
END SUB

SUB ReadState(obj)
    RETURN UO.IsDead(obj)
END SUB

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

  • lasttarget — ранее выбранный объект. Exists проверяет его наличие. obj — единственный параметр ReadState; функция возвращает результат команды без изменения. Её определение входит в копируемый код.

Пример 3. Заметить изменение за полсекунды

# Заметить изменение за полсекунды
#
# Проверяет смерть персонажа.
#
# Integer Boolean: 1 = TRUE, 0 = FALSE. Сравнивать можно с числами или логическими константами
# без кавычек. 1 — mobile имеет IsDead, 0 — признака нет или mobile отсутствует. HP=0 само по
# себе не означает смерть.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.

SUB Main()
    # Два вызова без аргументов читают self, WAIT(500) задаёт 500 миллисекунд. Сравниваются два
    # снимка; промежуточные переходы могут быть пропущены. Бесконечного ожидания нет.

    VAR before = UO.IsDead()
    WAIT(500)
    VAR after = UO.IsDead()
    IF before <> after THEN
        UO.Print('State changed: ' + CStr(before) + ' -> ' + CStr(after))
    END IF
END SUB

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

  • Два вызова без аргументов читают self, WAIT(500) задаёт 500 миллисекунд. Сравниваются два снимка; промежуточные переходы могут быть пропущены. Бесконечного ожидания нет.