Skip to content

API UO Terminate

Codex edited this page Sep 19, 2026 · 6 revisions

UO.Terminate

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

ClassicUO • Runtime API

Запрашивает аварийную остановку процедуры Basic. Без аргументов выбирает последнюю запущенную процедуру, которая ещё не останавливается. С именем останавливает все запуски с этим именем; точный ключ вида harvest.sc::Main выбирает конкретную процедуру из файла. Для остановки вообще всех скриптов предусмотрена отдельная UO.TerminateAll().

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

UO.Terminate() -> Unit
UO.Terminate(subrutineName:String) -> Unit

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

Параметры

  • subrutineName — Необязательная строка: имя запущенной процедуры, например Harvest; либо точный ключ из каталога, например harvest.sc::Main. Регистр не важен. "all" означает остановку всех и равнозначен UO.TerminateAll(). Пустая строка, как и отсутствие аргумента, выбирает последнюю запущенную процедуру. Неизвестное непустое имя ничего не останавливает.

Возвращает

Unit: команда не возвращает число и не ожидает завершения рабочего потока. Она немедленно запрашивает отмену. Исполнение прекращается на ближайшей проверке отмены; паузы, точки останова и встроенные ожидания прерываются. Серверные действия, уже отправленные до отмены, не откатываются.

Поведение

  • UO.Terminate() выбирает процедуру по порядку запуска, а не по имени, строке редактора, времени последнего действия или порядку отображения. Поставленная на паузу процедура также считается запущенной.
  • Выбираются отдельные запуски. Обычные вызовы вложенных SUB/FUNCTION работают в том же запуске; при остановке прекращается вся его цепочка вызовов. Команда не завершает клиент или процессы Windows.
  • Очищается принадлежащий этому запуску локальный прицел и отменяется оставшийся автоматический маршрут. Отмена движения выполняется на игровом потоке; если маршрут уже заменён другим запуском или пользователем, прежний владелец его не останавливает. Отправленные серверу шаги не отзываются.
  • Если создать новый SUB StopLast() и вызвать из него UO.Terminate(), сам StopLast может оказаться последним запуском. Для игровой горячей клавиши используйте действие макроса «Basic Command» с текстом UO.Terminate(): такой вызов обрабатывается напрямую, без запуска дополнительной процедуры.
  • Для привязки откройте настройки → макросы, создайте макрос, выберите действие Basic Command, впишите команду, назначьте сочетание клавиш и сохраните. Для определённой процедуры впишите UO.Terminate("Harvest").
  • Команда остаётся доступной при включённой настройке одного одновременного запуска. Отменённая процедура освобождает место только после очистки своего рабочего потока; до этого новый запуск пропускается.
  • При остановке по имени также отменяются соответствующие отложенные запуски. Завершённые процедуры не изменяются. Об отсутствии подходящего запуска клиент сообщает в статусе. Зависший вызов стороннего нативного плагина, который не поддерживает отмену, нельзя безопасно прервать принудительным уничтожением потока.

Примеры

Пример 1. Горячая клавиша для последней запущенной процедуры

UO.Terminate()

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

  • Аргументов нет: используются пустые скобки. Вставьте эту строку в действие макроса Basic Command, затем назначьте клавишу.
  • Если сначала запущен Harvest, а потом Heal, первое нажатие отменяет Heal. Следующее нажатие может отменить Harvest. Повторное нажатие не возобновляет остановленный запуск.
  • Этот пример является текстом команды для макроса. Не оборачивайте его в отдельный SUB StopLast(), если требуется остановить ранее запущенный скрипт.

Пример 2. Остановить харвест по имени, оставив остальные процедуры

# Остановить харвест по имени, оставив остальные процедуры
#
# Запрашивает аварийную остановку процедуры Basic. Без аргументов выбирает последнюю запущенную
# процедуру, которая ещё не останавливается. С именем останавливает все запуски с этим именем;
# точный ключ вида harvest.sc::Main выбирает конкретную процедуру из файла. Для остановки вообще
# всех скриптов предусмотрена отдельная UO.TerminateAll().
#
# Unit: команда не возвращает число и не ожидает завершения рабочего потока. Она немедленно
# запрашивает отмену. Исполнение прекращается на ближайшей проверке отмены; паузы, точки
# останова и встроенные ожидания прерываются. Серверные действия, уже отправленные до отмены, не
# откатываются.

# Единственный параметр subrutineName получает значение procedureName, то есть строку Harvest.
# Все одновременно запущенные процедуры с именем Harvest получают отмену, в том числе из разных
# файлов. Процедура с другим именем, например Heal, продолжает работу.
# Print сообщает об отправке запроса отмены, а не подтверждает завершение всех потоков. Этот
# служебный SUB должен иметь возможность запуститься; при включённом запрете параллельных
# процедур используйте ту же UO.Terminate("Harvest") напрямую в командном макросе.

SUB StopHarvest()
    VAR procedureName = 'Harvest'
    UO.Terminate(procedureName)
    UO.Print('Cancellation requested for Harvest')
END SUB

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

  • Единственный параметр subrutineName получает значение procedureName, то есть строку Harvest.
  • Все одновременно запущенные процедуры с именем Harvest получают отмену, в том числе из разных файлов. Процедура с другим именем, например Heal, продолжает работу.
  • Print сообщает об отправке запроса отмены, а не подтверждает завершение всех потоков. Этот служебный SUB должен иметь возможность запуститься; при включённом запрете параллельных процедур используйте ту же UO.Terminate("Harvest") напрямую в командном макросе.

Пример 3. Выбрать Main только из определённого файла

# Выбрать Main только из определённого файла
#
# Запрашивает аварийную остановку процедуры Basic. Без аргументов выбирает последнюю запущенную
# процедуру, которая ещё не останавливается. С именем останавливает все запуски с этим именем;
# точный ключ вида harvest.sc::Main выбирает конкретную процедуру из файла. Для остановки вообще
# всех скриптов предусмотрена отдельная UO.TerminateAll().
#
# Unit: команда не возвращает число и не ожидает завершения рабочего потока. Она немедленно
# запрашивает отмену. Исполнение прекращается на ближайшей проверке отмены; паузы, точки
# останова и встроенные ожидания прерываются. Серверные действия, уже отправленные до отмены, не
# откатываются.

# Параметр subrutineName получает полный ключ harvest.sc::Main: имя файла относительно Autoload,
# две двоеточия и имя процедуры.
# Замените примерный ключ точным ключом вашей процедуры. Для второго одноимённого объявления
# каталог может содержать суффикс #2.
# Такой ключ не совпадает с heal.sc::Main: другой файл остаётся запущенным. Если ключ не найден,
# случайная процедура не выбирается.

SUB StopOneFile()
    VAR procedureKey = 'harvest.sc::Main'
    UO.Terminate(procedureKey)
    UO.Print('Cancellation requested: ' + procedureKey)
END SUB

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

  • Параметр subrutineName получает полный ключ harvest.sc::Main: имя файла относительно Autoload, две двоеточия и имя процедуры.
  • Замените примерный ключ точным ключом вашей процедуры. Для второго одноимённого объявления каталог может содержать суффикс #2.
  • Такой ключ не совпадает с heal.sc::Main: другой файл остаётся запущенным. Если ключ не найден, случайная процедура не выбирается.

Пример 4. Совместимая консольная форма через Exec

# Совместимая консольная форма через Exec
#
# Запрашивает аварийную остановку процедуры Basic. Без аргументов выбирает последнюю запущенную
# процедуру, которая ещё не останавливается. С именем останавливает все запуски с этим именем;
# точный ключ вида harvest.sc::Main выбирает конкретную процедуру из файла. Для остановки вообще
# всех скриптов предусмотрена отдельная UO.TerminateAll().
#
# Unit: команда не возвращает число и не ожидает завершения рабочего потока. Она немедленно
# запрашивает отмену. Исполнение прекращается на ближайшей проверке отмены; паузы, точки
# останова и встроенные ожидания прерываются. Серверные действия, уже отправленные до отмены, не
# откатываются.

# UO.Exec получает один строковый параметр command. Внутри строки terminateкоманда, а Harvest
#её единственный аргумент с именем процедуры.
# Это тот же запрос остановки, что UO.Terminate("Harvest"). В игровом чате со стандартным
# префиксом используется ,terminate Harvest.
# Не добавляйте имя файла вместо имени процедуры без разделителя ::; для точного выбора
# используйте форму предыдущего примера.

SUB StopGathering()
    VAR command = 'terminate Harvest'
    UO.Exec(command)
    UO.Print('Stop command sent')
END SUB

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

  • UO.Exec получает один строковый параметр command. Внутри строки terminate — команда, а Harvest — её единственный аргумент с именем процедуры.
  • Это тот же запрос остановки, что UO.Terminate("Harvest"). В игровом чате со стандартным префиксом используется ,terminate Harvest.
  • Не добавляйте имя файла вместо имени процедуры без разделителя ::; для точного выбора используйте форму предыдущего примера.

Clone this wiki locally