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

UO.Drag

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

ClassicUO • Runtime API

Поднимает конкретный предмет на курсор; отдельная четырёхаргументная форма перетаскивает мышь в окне Windows.

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

UO.Drag(id:Any) -> Integer
UO.Drag(id:Any, amount:Any) -> Integer
UO.Drag(id:Any, amount:Any, timeout:Any) -> Integer
UO.Drag(fromX:Integer, fromY:Integer, toX:Integer, toY:Integer) -> Unit

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

Параметры

  • id — Serial конкретного предмета/персонажа: число, hex/десятичная строка, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus либо сохранённое имя AddObject. Это не type. Объект должен быть загружен; перед действием проверяйте Exists.
  • amount — Количество единиц внутри одного стека. 0 или отрицательное значение означает весь стек; положительное ограничивается доступным количеством. Это НЕ число стопок, которое ограничивает MassMove. При отсутствии равен 0.
  • timeout — Необязательный третий аргумент: ожидание наблюдаемого Picking до указанного числа миллисекунд; по умолчанию 0. Отрицательное значение приравнивается к 0.
  • fromX — Только форма из четырёх Integer: начальный X мыши в пикселях клиентского окна.
  • fromY — Начальный Y мыши в пикселях клиентского окна.
  • toX — Конечный X мыши в пикселях.
  • toY — Конечный Y мыши в пикселях.

Возвращает

При 1..3 аргументах Integer: 1 — запрос подъёма принят клиентом (при timeout>0 также наблюдался занятый курсор); 0 — подъём отклонён или истёк тайм-аут. При четырёх аргументах Unit: возвращаемого значения нет. Это не ID предмета.

Поведение

  • Для игрового переноса предпочтительна форма id[,amount[,timeout]] и последующий DropItem либо единый MoveItem.
  • Форма fromX/fromY/toX/toY использует события мыши Windows: перемещение, нажатие, перемещение, отпускание. Она не имеет серверного подтверждения и зависит от реального содержимого/фокуса окна.
  • Занятый курсор не равнозначен успешному переносу в назначение. Захват и сброс — отдельные действия.

Примеры

Пример 1. Поднять весь стек и положить в рюкзак

# Поднять весь стек и положить в рюкзак
#
# Поднимает конкретный предмет на курсор; отдельная четырёхаргументная форма перетаскивает мышь
# в окне Windows.
#
# При 1..3 аргументах Integer: 1 — запрос подъёма принят клиентом (при timeout>0 также
# наблюдался занятый курсор); 0 — подъём отклонён или истёк тайм-аут. При четырёх аргументах
# Unit: возвращаемого значения нет. Это не ID предмета.

SUB Main()
    # loot — serial через AddObject. amount=0 означает весь стек; -1/-1 задаёт автоматическое место
    # в гампе.
    # DropItem завершает захват того же runtime. Единица означает отправку запроса, а не
    # подтверждение сервера.

    IF UO.Drag('loot', 0) THEN
        VAR dropped = UO.DropItem('backpack', -1, -1, 0)
        UO.Print('Drop request: ' + STR(dropped))
    END IF
END SUB

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

  • loot — serial через AddObject. amount=0 означает весь стек; -1/-1 задаёт автоматическое место в гампе.
  • DropItem завершает захват того же runtime. Единица означает отправку запроса, а не подтверждение сервера.

Пример 2. Взять часть стека с ограниченным ожиданием

# Взять часть стека с ограниченным ожиданием
#
# Поднимает конкретный предмет на курсор; отдельная четырёхаргументная форма перетаскивает мышь
# в окне Windows.
#
# При 1..3 аргументах Integer: 1 — запрос подъёма принят клиентом (при timeout>0 также
# наблюдался занятый курсор); 0 — подъём отклонён или истёк тайм-аут. При четырёх аргументах
# Unit: возвращаемого значения нет. Это не ID предмета.

SUB Main()
    # amount=10 — до десяти единиц одной стопки; timeout=500 мс.
    # 44/55 — координаты внутри рюкзака, не карты. Если предмет взять нельзя, DropItem не
    # вызывается.

    IF UO.Drag('loot', 10, 500) THEN
        VAR dropped = UO.DropItem('backpack', 44, 55, 0)
    END IF
END SUB

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

  • amount=10 — до десяти единиц одной стопки; timeout=500 мс.
  • 44/55 — координаты внутри рюкзака, не карты. Если предмет взять нельзя, DropItem не вызывается.

Пример 3. Проверить занятые руки до захвата

# Проверить занятые руки до захвата
#
# Поднимает конкретный предмет на курсор; отдельная четырёхаргументная форма перетаскивает мышь
# в окне Windows.
#
# При 1..3 аргументах Integer: 1 — запрос подъёма принят клиентом (при timeout>0 также
# наблюдался занятый курсор); 0 — подъём отклонён или истёк тайм-аут. При четырёх аргументах
# Unit: возвращаемого значения нет. Это не ID предмета.

SUB Main()
    # Один аргумент Drag означает весь стек и timeout=0.
    # Picking проверяет общий курсор клиента. Не запускайте два независимых переноса одновременно.

    IF UO.Picking() = 0 THEN
        IF UO.Drag('loot') THEN
            VAR dropped = UO.DropItem('backpack', -1, -1, 0)
        END IF
    END IF
END SUB

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

  • Один аргумент Drag означает весь стек и timeout=0.
  • Picking проверяет общий курсор клиента. Не запускайте два независимых переноса одновременно.

Пример 4. Четыре координаты мыши

# Четыре координаты мыши
#
# Поднимает конкретный предмет на курсор; отдельная четырёхаргументная форма перетаскивает мышь
# в окне Windows.
#
# При 1..3 аргументах Integer: 1 — запрос подъёма принят клиентом (при timeout>0 также
# наблюдался занятый курсор); 0 — подъём отклонён или истёк тайм-аут. При четырёх аргументах
# Unit: возвращаемого значения нет. Это не ID предмета.

SUB Main()
    # Это пиксели окна: начало (100,120), конец (260,180). Здесь нет serial, amount или timeout.
    # Используйте только когда нужные элементы находятся в этих местах; для предметов надёжнее
    # адресация по serial.

    UO.Drag(100, 120, 260, 180)
END SUB

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

  • Это пиксели окна: начало (100,120), конец (260,180). Здесь нет serial, amount или timeout.
  • Используйте только когда нужные элементы находятся в этих местах; для предметов надёжнее адресация по serial.