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

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

Човни

Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови

Керування рухом і зупинкою човна. Команда діє лише тоді, коли персонаж може керувати відповідним човном і сервер підтримує цю дію.

Розділи

Тема Команди та пояснення
Рух човна UO.MoveBoat
Зупинка човна 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** ⚠️