RU UO Topic boats - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Лодки

Главная · C# · IDE · UO API · A–Z · Примеры · Языки

Управление движением и остановкой лодки; доступность команды определяется текущей лодкой и сервером.

Разделы

Тема Команды и пояснения
MoveBoat UO.MoveBoat
StopBoat UO.StopBoat

Все команды темы

Управление лодкой

UO.MoveBoat · UO.StopBoat

Примеры по теме

В каждой карточке команды есть несколько самостоятельных сценариев: прямой код, функции и классы. Ниже приведены отдельные короткие сценарии; ограничения и полный разбор находятся в карточках.

UO.MoveBoat

Параметры, результат и все сценарии

UO.MoveBoat(0, 1);

UO.StopBoat

Параметры, результат и все сценарии

UO.StopBoat();

Полное описание команд


UO.MoveBoat

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-сигнатуры

void UO.MoveBoat(object? direction, object? speed);

Запрашивает направление и скорость движения лодки.

Параметры

  • direction — int, младшие 3 бита задают направление 0..7: N,NE,E,SE,S,SW,W,NW.
  • speed — int, ограничивается до 0..255 и приводится к byte; 0 — запрос остановки. Код протокола, не скорость в клетках/секунду.

Возвращает

void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.

Поведение

  • Bridge.MoveBoat вызывает BoatMovingManager.MoveRequest((Direction)(direction&7), clamp(speed,0,255)). Текущая лодка и право управления определяются клиентом/сервером.
  • Не перемещает персонажа по Pathfinder, не ждёт шага и не возвращает координаты лодки. Сервер может отклонить запрос.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.

Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.

UO.Print("Calling UO.MoveBoat");
UO.MoveBoat(0, 1);

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Запрашивает направление и скорость движения лодки.
UO.MoveBoat(0, 1);

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • Bridge.MoveBoat вызывает BoatMovingManager.MoveRequest((Direction)(direction&7), clamp(speed,0,255)). Текущая лодка и право управления определяются клиентом/сервером.
return  RunScenario();
 object? RunScenario()
{
    UO.MoveBoat(2, 1);
    UO.Wait(500);
    UO.StopBoat();
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • Не перемещает персонажа по Pathfinder, не ждёт шага и не возвращает координаты лодки. Сервер может отклонить запрос.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.MoveBoat(0, 0);
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.MoveBoat(direction, speed) — UO.MoveBoat(Any,Any)

Параметры: direction (Any), speed (Any)

Результат: void / Unit.

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

case "moveboat": bridge.MoveBoat(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.StopBoat

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-сигнатуры

void UO.StopBoat();

Запрашивает остановку движения лодки.

Параметры

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

Возвращает

void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.

Поведение

  • StopBoat вызывает BoatMovingManager.MoveRequest с направлением Player.Direction (или North без Player) и speed=0. Запрос не возвращает серверное положение лодки.
  • В примерах UO.Wait задаёт только паузу скрипта; окончание паузы не доказывает выполнение запроса сервером.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.

Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.

UO.Print("Calling UO.StopBoat");
UO.StopBoat();

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Запрашивает остановку движения лодки.
UO.StopBoat();

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • StopBoat вызывает BoatMovingManager.MoveRequest с направлением Player.Direction (или North без Player) и speed=0. Запрос не возвращает серверное положение лодки.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline()))
    {
        UO.StopBoat();
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • В примерах UO.Wait задаёт только паузу скрипта; окончание паузы не доказывает выполнение запроса сервером.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.StopBoat();
        UO.Wait(250);
        UO.Print(UO.GetX());
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.StopBoat() — UO.StopBoat()

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

Результат: void / Unit.

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

case "stopboat": bridge.StopBoat(); return InjectionValue.Unit;
⚠️ **GitHub.com Fallback** ⚠️