API UO CountGround - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.CountGround
ClassicUO • Runtime API
Выполняет поиск и суммирует единицы найденных предметов.
Точный синтаксис
UO.CountGround(type:Any) -> Integer
UO.CountGround(type:Any, color:Any) -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
type / ObjType— Graphic/type предмета (например 0x0EED), не serial. -1 или 0xFFFF — любой type.color / Color— Hue предмета; -1 или 0xFFFF — любой цвет. В Count(type) и CountGround(type) по умолчанию -1.
Возвращает
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. Область — земля рядом с персонажем.
# Одна стопка из 1000 даст units=1000, не 1.
VAR units = UO.CountGround(0x0EED, -1)
UO.Print('Units: ' + STR(units))
END SUB
Разбор параметров и выполнения:
- type=0x0EED, color=-1. Область — земля рядом с персонажем.
- Одна стопка из 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.CountGround(0x0EED, -1)
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.CountGround(0x0EED, -1)
IF units >= 100 THEN
UO.Print('Enough units known to the client')
ELSE
UO.Print('Not enough known units')
END IF
END SUB
Разбор параметров и выполнения:
- 100 — порог единиц в этом примере.
- Это проверка снимка данных, не резервирование предметов. Между проверкой и переносом количество может измениться.