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

UO.IsNpc

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

ClassicUO • Runtime API

Проверяет, является ли объект mobile: NPC, монстр или персонаж игрока, включая self.

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

UO.IsNpc() -> Integer
UO.IsNpc(id:Integer) -> Integer
UO.IsNpc(id:String) -> Integer
UO.IsNPC(ObjID:Any) -> Integer

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

Параметры

  • id / ObjID — Обязательный serial/ID конкретного объекта: Integer, hex-строка либо алиас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse или имя AddObject. Это не graphic/type. Неустановленное имя разрешается в 0; никакой новый target команда не открывает. Только у IsNpc также зарегистрирована форма без аргументов: используется self.

Возвращает

Integer 1 — загруженный, не удалённый mobile. Integer 0 — предмет, неизвестный serial или удалённый объект. Название IsNPC не означает «только неигровой персонаж»: собственный персонаж и другие игроки тоже дают 1.

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

Поведение

  • Читается локальная модель клиента; запросов серверу, ожидания и перемещения нет.
  • Результат относится к моменту чтения. После WAIT или другого действия объект и его флаги могут измениться.
  • IsNpc и IsNPC — одно имя без учёта регистра. По этому результату нельзя надёжно отличить игрока от NPC; правила такого различения зависят от сервера.

Примеры

Пример 1. Проверить собственного персонажа

# Проверить собственного персонажа
#
# Проверяет, является ли объект mobile: NPC, монстр или персонаж игрока, включая self.
#
# Integer 1 — загруженный, не удалённый mobile. Integer 0 — предмет, неизвестный serial или
# удалённый объект. Название IsNPC не означает «только неигровой персонаж»: собственный персонаж
# и другие игроки тоже дают 1.
#
# Это логический результат: 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. mobile — 1/0, а не serial персонажа.
    # Своего персонажа эта команда не исключает.

    VAR mobile = UO.IsNpc()
    IF mobile THEN
        UO.Print('Self is a loaded mobile')
    END IF
END SUB

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

  • Пустые скобки выбирают self. mobile — 1/0, а не serial персонажа.
  • Своего персонажа эта команда не исключает.

Пример 2. Различить mobile, предмет и неизвестную цель

# Различить mobile, предмет и неизвестную цель
#
# Проверяет, является ли объект mobile: NPC, монстр или персонаж игрока, включая self.
#
# Integer 1 — загруженный, не удалённый mobile. Integer 0 — предмет, неизвестный serial или
# удалённый объект. Название IsNPC не означает «только неигровой персонаж»: собственный персонаж
# и другие игроки тоже дают 1.
#
# Это логический результат: 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 сначала отделяет неизвестный объект.
    # Вторая проверка получает serial target. Она не классифицирует игрока как врага.

    VAR target = UO.GetSerial('lasttarget')
    IF UO.Exists(target) = 0 THEN
        UO.Print('Target is not loaded')
    ELSE
        IF UO.IsNPC(target) THEN
            UO.Print('Mobile: NPC or player')
        ELSE
            UO.Print('Loaded item')
        END IF
    END IF
END SUB

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

  • lasttarget должен быть выбран заранее. Exists сначала отделяет неизвестный объект.
  • Вторая проверка получает serial target. Она не классифицирует игрока как врага.

Пример 3. Читать хиты только у mobile

# Читать хиты только у mobile
#
# Проверяет, является ли объект mobile: NPC, монстр или персонаж игрока, включая self.
#
# Integer 1 — загруженный, не удалённый mobile. Integer 0 — предмет, неизвестный serial или
# удалённый объект. Название IsNPC не означает «только неигровой персонаж»: собственный персонаж
# и другие игроки тоже дают 1.
#
# Это логический результат: 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()
    # Сначала проверяется тип объекта, затем читаются известные клиенту поля HP.
    # Чужие хиты могут быть нормализованы сервером. IsNpc не запрашивает полный статус.

    VAR target = UO.GetSerial('lasttarget')
    IF UO.IsNpc(target) THEN
        VAR hits = UO.GetHP(target)
        VAR maximum = UO.GetMaxHP(target)
        UO.Print('Known hits: ' + STR(hits) + '/' + STR(maximum))
    END IF
END SUB

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

  • Сначала проверяется тип объекта, затем читаются известные клиенту поля HP.
  • Чужие хиты могут быть нормализованы сервером. IsNpc не запрашивает полный статус.