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

UO.Ground

ClassicUO • Runtime API

Возвращает специальное обозначение земли для параметра контейнера поиска или места назначения переноса.

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

UO.Ground() -> Integer

Параметры

Параметров нет.

Возвращает

Integer, всегда 0. Этот ноль — допустимое обозначение земли, а не FALSE, не ошибка поиска, не ID предмета, graphic, номер карты или координата. Не проверяйте Ground() как признак успеха; проверяйте результат поиска или переноса, которому передали это значение.

Поведение

  • Параметров нет. Сам вызов Ground() ничего не ищет, не перемещает, не открывает target, не отправляет пакеты и не меняет результаты предыдущего поиска. До входа в игру тоже возвращает 0.
  • Передавайте в позицию container/destination команд FindType, FindList, Count, FindTypeEx, FindTypesArrayEx, CountEx или MoveItem. Поиск видит загруженные объекты мира, но не загружает далёкие клетки. Для переноса на землю X/Y/Z — координаты мира, не пиксели окна контейнера.
  • FindType(type, color) по-прежнему ищет в инвентаре: второй параметр — цвет. Для земли пишите FindType(type, color, UO.Ground()). В старых компактных FindType/MoveItem число -1 обозначает инвентарь; в совместимых FindTypeEx/FindTypesArrayEx/CountEx -1 также допускается как земля. Используйте UO.Ground() или явное имя ground, не переносите числовые обозначения между разными командами без проверки.
  • Первоисточник: Stealth Ground. Различия обозначений между командами и примеры выше описывают этот клиент.

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

Ниже реальные внутренние этапы. FindGroundTypes — полностью описанная функция скрипта, а не дополнительная встроенная команда.

1. ExecuteStealthCompatibility

Ветка runtime без аргументов возвращает Integer 0 без обращения к игровому bridge.

Integer, всегда 0. Этот ноль — допустимое обозначение земли, а не FALSE, не ошибка поиска, не ID предмета, graphic, номер карты или координата. Не проверяйте Ground() как признак успеха; проверяйте результат поиска или переноса, которому передали это значение.

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

2. ConvertContainer

Компактный поиск переводит явный 0 во внутреннее обозначение земли, сохраняя -1 для инвентаря по умолчанию. Совместимый поиск принимает 0 и исторический -1 для земли; имена контейнеров разрешаются отдельно.

FindType(type, color) по-прежнему ищет в инвентаре: второй параметр — цвет. Для земли пишите FindType(type, color, UO.Ground()). В старых компактных FindType/MoveItem число -1 обозначает инвентарь; в совместимых FindTypeEx/FindTypesArrayEx/CountEx -1 также допускается как земля. Используйте UO.Ground() или явное имя ground, не переносите числовые обозначения между разными командами без проверки.

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

3. ConvertStealthSearchContainer

Компактный поиск переводит явный 0 во внутреннее обозначение земли, сохраняя -1 для инвентаря по умолчанию. Совместимый поиск принимает 0 и исторический -1 для земли; имена контейнеров разрешаются отдельно.

FindType(type, color) по-прежнему ищет в инвентаре: второй параметр — цвет. Для земли пишите FindType(type, color, UO.Ground()). В старых компактных FindType/MoveItem число -1 обозначает инвентарь; в совместимых FindTypeEx/FindTypesArrayEx/CountEx -1 также допускается как земля. Используйте UO.Ground() или явное имя ground, не переносите числовые обозначения между разными командами без проверки.

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

4. ResolveTransferDestination

Обработчик назначения сохраняет явную землю как 0. Bridge клиента использует мировые координаты; в пакете выбрасывания поле контейнера записывается как 0xFFFFFFFF. Значение API и поле пакета имеют разное представление.

Замените 0x40001001 на serial доступного предмета. IsObjectExists сначала проверяет загруженный объект. MoveItem(item, amount, destination, X, Y, Z): amount=0 — вся стопка, Ground() — земля, GetX/GetY/GetZ — мировая клетка персонажа. result равен 1, если клиент принял запрос переноса, иначе 0. Это результат MoveItem, а не Ground(), и не подтверждение доставки от сервера.

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

5. MoveItem

Обработчик назначения сохраняет явную землю как 0. Bridge клиента использует мировые координаты; в пакете выбрасывания поле контейнера записывается как 0xFFFFFFFF. Значение API и поле пакета имеют разное представление.

Замените 0x40001001 на serial доступного предмета. IsObjectExists сначала проверяет загруженный объект. MoveItem(item, amount, destination, X, Y, Z): amount=0 — вся стопка, Ground() — земля, GetX/GetY/GetZ — мировая клетка персонажа. result равен 1, если клиент принял запрос переноса, иначе 0. Это результат MoveItem, а не Ground(), и не подтверждение доставки от сервера.

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

Параметров нет. Сам вызов Ground() ничего не ищет, не перемещает, не открывает target, не отправляет пакеты и не меняет результаты предыдущего поиска. До входа в игру тоже возвращает 0.

Примеры

Прочитать обозначение земли

# Прочитать обозначение земли
#
# Возвращает специальное обозначение земли для параметра контейнера поиска или места назначения
# переноса.
#
# Integer, всегда 0. Этот ноль — допустимое обозначение земли, а не FALSE, не ошибка поиска, не
# ID предмета, graphic, номер карты или координата. Не проверяйте Ground() как признак успеха;
# проверяйте результат поиска или переноса, которому передали это значение.

SUB Main()
    # destination получает Integer 0, Print выводит это число. Сам вызов ничего не выбрасывает.

    VAR destination = UO.Ground()
    UO.Print(CStr(destination))
END SUB

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

  • destination получает Integer 0, Print выводит это число. Сам вызов ничего не выбрасывает.

Найти стопку золота на земле

# Найти стопку золота на земле
#
# Возвращает специальное обозначение земли для параметра контейнера поиска или места назначения
# переноса.
#
# Integer, всегда 0. Этот ноль — допустимое обозначение земли, а не FALSE, не ошибка поиска, не
# ID предмета, graphic, номер карты или координата. Не проверяйте Ground() как признак успеха;
# проверяйте результат поиска или переноса, которому передали это значение.

SUB Main()
    # 0x0EED — графика золота; второй -1 означает любой hue. Ground() задаёт поиск в мире, FALSE
    # отключает рекурсию контейнеров. FindTypeEx возвращает один serial или 0 при отсутствии
    # результата. <> 0 проверяет этот serial. Используются текущие FindDistance/FindVertical и
    # список Ignore.

    VAR id = UO.FindTypeEx(0x0EED, -1, UO.Ground(), FALSE)
    IF id <> 0 THEN
        UO.Print(HEX(id))
    ELSE
        UO.Print('0')
    END IF
END SUB

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

  • 0x0EED — графика золота; второй -1 означает любой hue. Ground() задаёт поиск в мире, FALSE отключает рекурсию контейнеров. FindTypeEx возвращает один serial или 0 при отсутствии результата. <> 0 проверяет этот serial. Используются текущие FindDistance/FindVertical и список Ignore.

Полная функция для поиска двух график на земле

# Полная функция для поиска двух график на земле
#
# Возвращает специальное обозначение земли для параметра контейнера поиска или места назначения
# переноса.
#
# Integer, всегда 0. Этот ноль — допустимое обозначение земли, а не FALSE, не ошибка поиска, не
# ID предмета, graphic, номер карты или координата. Не проверяйте Ground() как признак успеха;
# проверяйте результат поиска или переноса, которому передали это значение.

SUB Main()
    # FindGroundTypes(firstType, secondType, radius, height) ищет золото 0x0EED и чёрный жемчуг
    # 0x0F7A с radius=5 и height=10. DIM types[1] создаёт две ячейки; colors[0] и containers[0] — по
    # одной. Целая стопка считается одним результатом; типы/цвета — альтернативы, пересекающиеся
    # контейнеры не дублируют ID. Функция возвращает сохранённый массив serial; Finally
    # восстанавливает оба предела. Main выводит каждый ID. Код функции приведён полностью.

    VAR ids = FindGroundTypes(0x0EED, 0x0F7A, 5, 10)
    FOR EACH id IN ids
        UO.Print(HEX(id))
    NEXT
END SUB

FUNCTION FindGroundTypes(firstType, secondType, radius, height)
    VAR oldDistance = UO.FindDistance()
    VAR oldVertical = UO.FindVertical()
    DIM types[1]
    types[0] = firstType
    types[1] = secondType
    DIM colors[0]
    colors[0] = -1
    DIM containers[0]
    containers[0] = UO.Ground()
    TRY
        UO.FindDistance(radius)
        UO.FindVertical(height)
        UO.FindTypesArrayEx(types, colors, containers, FALSE)
        RETURN UO.GetFoundItems()
    FINALLY
        UO.FindDistance(oldDistance)
        UO.FindVertical(oldVertical)
    END TRY
END FUNCTION

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

  • FindGroundTypes(firstType, secondType, radius, height) ищет золото 0x0EED и чёрный жемчуг 0x0F7A с radius=5 и height=10. DIM types[1] создаёт две ячейки; colors[0] и containers[0] — по одной. Целая стопка считается одним результатом; типы/цвета — альтернативы, пересекающиеся контейнеры не дублируют ID. Функция возвращает сохранённый массив serial; Finally восстанавливает оба предела. Main выводит каждый ID. Код функции приведён полностью.

Перенести известный предмет на клетку персонажа

# Перенести известный предмет на клетку персонажа
#
# Возвращает специальное обозначение земли для параметра контейнера поиска или места назначения
# переноса.
#
# Integer, всегда 0. Этот ноль — допустимое обозначение земли, а не FALSE, не ошибка поиска, не
# ID предмета, graphic, номер карты или координата. Не проверяйте Ground() как признак успеха;
# проверяйте результат поиска или переноса, которому передали это значение.

SUB Main()
    # Замените 0x40001001 на serial доступного предмета. IsObjectExists сначала проверяет
    # загруженный объект. MoveItem(item, amount, destination, X, Y, Z): amount=0 — вся стопка,
    # Ground() — земля, GetX/GetY/GetZ — мировая клетка персонажа. result равен 1, если клиент
    # принял запрос переноса, иначе 0. Это результат MoveItem, а не Ground(), и не подтверждение
    # доставки от сервера.

    VAR item = 0x40001001
    IF UO.IsObjectExists(item) THEN
        VAR result = UO.MoveItem(item, 0, UO.Ground(), UO.GetX('self'), UO.GetY('self'), UO.GetZ('self'))
    END IF
END SUB

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

  • Замените 0x40001001 на serial доступного предмета. IsObjectExists сначала проверяет загруженный объект. MoveItem(item, amount, destination, X, Y, Z): amount=0 — вся стопка, Ground() — земля, GetX/GetY/GetZ — мировая клетка персонажа. result равен 1, если клиент принял запрос переноса, иначе 0. Это результат MoveItem, а не Ground(), и не подтверждение доставки от сервера.

en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic