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

UO.CountEx

ClassicUO • Runtime API

Выполняет поиск и суммирует единицы найденных предметов.

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

UO.CountEx(ObjType:Any, Color:Any, Container:Any) -> Integer

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

Параметры

  • type / ObjType — Graphic/type предмета (например 0x0EED), не serial. -1 или 0xFFFF — любой type.
  • color / Color — Hue предмета; -1 или 0xFFFF — любой цвет. В Count(type) и CountGround(type) по умолчанию -1.
  • container / Container — В Count(type,color,container): my или числовой -1 — все предметы, корневой владелец которых self (включая экипировку и вложенные сумки); backpack/serial — содержимое указанного контейнера рекурсивно; UO.Ground(), явные 0/"0", ground или 1 — предметы и Mobile на земле. В CountEx числовой -1 и 0xFFFFFFFF тоже означают землю, а конкретный serial — только прямое содержимое. CountEx принимает backpack и имена AddObject; неизвестное имя вызывает ошибку скрипта. Проверяйте полученный serial до вызова: явный ноль выбирает землю, а не отсутствующий контейнер.

Возвращает

Integer — сумма max(1, Amount) найденных предметов; каждый Mobile добавляет 1. 0 без совпадений. Это число единиц, не число стопок. Одновременно обновляются FindItem, FindCount, FindFullQuantity и GetFoundItems.

Поведение

  • Count с одним или двумя аргументами ищет принадлежащие self предметы, включая экипировку и вложенные сумки. CountGround всегда ищет землю, включая подходящие Mobile, но исключая self.
  • Count(type,color,serial) обходит вложенные сумки, CountEx(type,color,serial) — только прямое содержимое. Ограничения FindDistance/FindVertical применяются к земле; Ignore применяется к найденным объектам.
  • Результат зависит от уже полученного содержимого контейнеров. Автоматического открытия и серверного запроса полного инвентаря нет.
  • В этом Basic CountEx заменяет общий результат поиска так же, как Count. Это отличается от справки Stealth CountEx, где поля поиска восстанавливаются. Сохраните UO.GetFoundItems() до подсчёта, если прежний массив ID ещё нужен.

Примеры

Пример 1. Посчитать единицы золота

# Посчитать единицы золота
#
# Выполняет поиск и суммирует единицы найденных предметов.
#
# Integer — сумма max(1, Amount) найденных предметов; каждый Mobile добавляет 1. 0 без
# совпадений. Это число единиц, не число стопок. Одновременно обновляются FindItem, FindCount,
# FindFullQuantity и GetFoundItems.

SUB Main()
    # type=0x0EED, color=-1. Область — рюкзак; учитывайте различие рекурсивности Count/CountEx.
    # Одна стопка из 1000 даст units=1000, не 1.

    VAR units = UO.CountEx(0x0EED, -1, 'backpack')
    UO.Print('Units: ' + STR(units))
END SUB

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

  • type=0x0EED, color=-1. Область — рюкзак; учитывайте различие рекурсивности Count/CountEx.
  • Одна стопка из 1000 даст units=1000, не 1.

Пример 2. Показать единицы и число объектов отдельно

# Показать единицы и число объектов отдельно
#
# Выполняет поиск и суммирует единицы найденных предметов.
#
# Integer — сумма max(1, Amount) найденных предметов; каждый Mobile добавляет 1. 0 без
# совпадений. Это число единиц, не число стопок. Одновременно обновляются FindItem, FindCount,
# FindFullQuantity и GetFoundItems.

SUB Main()
    # FindCount читается сразу после Count, до другого поиска.
    # Две стопки по 50 дают 2 items и 100 units.

    VAR units = UO.CountEx(0x0EED, -1, 'backpack')
    VAR items = UO.FindCount()
    UO.Print(STR(items) + ' items, ' + STR(units) + ' units')
END SUB

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

  • FindCount читается сразу после Count, до другого поиска.
  • Две стопки по 50 дают 2 items и 100 units.

Пример 3. Продолжать только при достаточном количестве

# Продолжать только при достаточном количестве
#
# Выполняет поиск и суммирует единицы найденных предметов.
#
# Integer — сумма max(1, Amount) найденных предметов; каждый Mobile добавляет 1. 0 без
# совпадений. Это число единиц, не число стопок. Одновременно обновляются FindItem, FindCount,
# FindFullQuantity и GetFoundItems.

SUB Main()
    # 100 — порог единиц в этом примере.
    # Это проверка снимка данных, не резервирование предметов. Между проверкой и переносом
    # количество может измениться.

    VAR units = UO.CountEx(0x0EED, -1, 'backpack')
    IF units >= 100 THEN
        UO.Print('Enough units known to the client')
    ELSE
        UO.Print('Not enough known units')
    END IF
END SUB

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

  • 100 — порог единиц в этом примере.
  • Это проверка снимка данных, не резервирование предметов. Между проверкой и переносом количество может измениться.