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.