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

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

Квести та чесноти

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

Відкриття клієнтських вікон квестів і чеснот та надсилання відповідних запитів. Набір завдань і умови застосування чеснот визначає ігровий сервер.

Розділи

Тема Команди та пояснення
Запит квесту UO.QuestRequest
Вказівник квесту UO.GetQuestArrow
Вікно чеснот UO.ReqVirtuesGump
Застосування чесноти UO.UseVirtue

Усі команди теми

Квести та чесноти

UO.QuestRequest · UO.GetQuestArrow · UO.ReqVirtuesGump · UO.UseVirtue

Приклади на тему

Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.

UO.GetQuestArrow

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

var arrow = UO.GetQuestArrow();
if (Truth(Truth(arrow[0]) == true))
{
    UO.Print(Convert.ToString(arrow[1]) + ", " + Convert.ToString(arrow[2]));
}

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

UO.UseVirtue

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

UO.Print(UO.UseVirtue("Honor"));

Повний опис команд


UO.GetQuestArrow

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

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

dynamic UO.GetQuestArrow();
dynamic UO.GetQuestArrow(object? point);

Читає положення серверної стрілки завдання. Дозволяє скрипту дізнатися, куди вказує стрілка, отримана від сервера; команду Track вона не читає.

Параметри

  • point — Застарілий необов'язковий заповнювач. Форма UO.GetQuestArrow(point) залишена для сумісності; аргумент не читається та не змінюється. Використовуйте UO.GetQuestArrow() та його масив, що повертається.

Повернене значення

Array [exists, x, y], рівно три цілих числа. [0] - 1 (true), якщо є серверна стрілка, інакше 0 (false); [1] - X, [2] - Y. Без стрілки [0, 0, 0]. Тільки поле [0] є логічною ознакою; весь масив не bool. Якщо стрілок кілька, читається перша збережена, вибору ID немає.

Поведінка

  • Серверні та локальні стрілки зберігаються окремо. Track(0) не видаляє серверну стрілку. Без графіки маркер зберігається та з'являється під час відкриття вікна. Закриття вікна не видаляє маркери; розрив з'єднання очищає їх. Сервер може перемістити або усунути свою стрілку. Координати не доводять, що ціль досяжна.
  • Координати клітини на поточній карті, не пікселі вікна. Z та номер картки не приймаються. Виберіть існуючу точку картки; команда не перевіряє прохідність, не прокладає маршрут і не слідує за метою, що рухається.
  • Застарілий необов'язковий заповнювач. Форма UO.GetQuestArrow(point) залишена для сумісності; аргумент не читається та не змінюється. Використовуйте UO.GetQuestArrow() та його масив, що повертається.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

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

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

object? result = UO.GetQuestArrow();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Пряме застосування – прямий скрипт

Параметри та порядок виконання:

  • Спочатку перевіряється [0]; потім [1]/[2] можна читати як X/Y. Не передавайте весь масив як serial або bool.
var arrow = UO.GetQuestArrow();
if (Truth(Truth(arrow[0]) == true))
{
    UO.Print(Convert.ToString(arrow[1]) + ", " + Convert.ToString(arrow[2]));
}

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

2. Ігрова умова – функція сценарію

Параметри та порядок виконання:

  • Копіює координати серверної стрілки у локальний маркер Track. Це не рух. Якщо сервер пізніше перемістить стрілку, локальна залишиться на колишній точці.
return  RunScenario();
 object? RunScenario()
{
    var arrow = UO.GetQuestArrow();
    if (Truth(arrow[0] == 1))
    {
        UO.Track(1, arrow[1], arrow[2]);
    }

    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. Повна допоміжна функція – клас сценарію

Параметри та порядок виконання:

  • ArrowDistance повертає дистанцію UO.GetDistance(x,y) до серверної точки або −1, якщо стрілки немає. При відстані до двох клітин забирається лише локальний Track, серверна стрілка залишається.
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()
    {
        var distance = ArrowDistance();
        if (Truth(distance >= 0) && Truth(distance <= 2))
        {
            UO.Track(0);
        }

        return null;
    }

    dynamic ArrowDistance()
    {
        var arrow = UO.GetQuestArrow();
        if (Truth(arrow[0] == 0))
        {
            return -1;
        }

        return UO.GetDistance(arrow[1], arrow[2]);
    }

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

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.GetQuestArrow() — UO.GetQuestArrow()

Параметри: Немає параметрів.

Результат: dynamic / Array.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "getquestarrow":

                    return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());

UO.GetQuestArrow(point) — UO.GetQuestArrow(Any)

Параметри: point (Any)

Результат: dynamic / Array.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "getquestarrow":

                    return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());

UO.QuestRequest

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

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

void UO.QuestRequest();

Запитує серверне меню завдань.

Параметри

Параметрів немає.

Повернене значення

void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.

Поведінка

  • QuestRequest передає GameActions.RequestQuestMenu(_world) на ігровий потік. Команда не читає та не створює завдання.
  • У прикладах UO.Wait задає лише паузу скрипта; закінчення паузи не доводить виконання запиту сервером.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

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

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

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

1. Прямий виклик – прямий скрипт

Параметри та порядок виконання:

  • Запитує серверне меню завдань.
UO.QuestRequest();

2. Явний варіант – функція сценарію

Параметри та порядок виконання:

  • QuestRequest передає GameActions.RequestQuestMenu(_world) на ігровий потік. Команда не читає та не створює завдання.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline()))
    {
        UO.QuestRequest();
    }

    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.QuestRequest();
        UO.Wait(500);
        UO.Print(UO.GetGumpsCount());
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.QuestRequest() — UO.QuestRequest()

Параметри: Немає параметрів.

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

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "questrequest": bridge.QuestRequest(); return InjectionValue.Unit;

UO.ReqVirtuesGump

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

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

void UO.ReqVirtuesGump();

Запрошує вікно чеснот персонажа.

Параметри

Параметрів немає.

Повернене значення

void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.

Поведінка

  • RequestVirtuesGump за наявності Player викликає ReplyGump з gumpID=0x1CD, button=1 та serial персонажа. Без Player запиту немає.
  • У прикладах UO.Wait задає лише паузу скрипта; закінчення паузи не доводить виконання запиту сервером.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

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

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

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

1. Прямий виклик – прямий скрипт

Параметри та порядок виконання:

  • Запрошує вікно чеснот персонажа.
UO.ReqVirtuesGump();

2. Явний варіант – функція сценарію

Параметри та порядок виконання:

  • RequestVirtuesGump за наявності Player викликає ReplyGump з gumpID=0x1CD, button=1 та serial персонажа. Без Player запиту немає.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Self() != 0))
    {
        UO.ReqVirtuesGump();
    }

    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.ReqVirtuesGump();
        UO.Wait(500);
        UO.Print(UO.GetGumpsCount());
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ReqVirtuesGump() — UO.ReqVirtuesGump()

Параметри: Немає параметрів.

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

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "reqvirtuesgump": bridge.RequestVirtuesGump(); return InjectionValue.Unit;

UO.UseVirtue

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

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

dynamic UO.UseVirtue(object? virtueName);

Запитує застосування чесноти.

Параметри

  • virtueName — Ім'я honor/sacrifice/valor/compassion/honesty/humility/justice/spirituality без урахування регістру, з видаленням крайніх прогалин, або double-текст ID 1..8.

Повернене значення

Числовий прапор int: 1 — допустимий ID 1..8 відправлений через Send_InvokeVirtueRequest; 0 — невідоме ім'я/невірний ID. Це не є підтвердженням ефекту сервера.

Поведінка

  • Імена відповідають ID: Honor=1, Sacrifice=2, Valor=3, Compassion=4, Honesty=5, Humility=6, Justice=7, Spirituality=8. Numeric parsing цієї функції використовує int.TryParse, не 0x конвертацію.
  • Сама команда не ставить наступну мету і не перевіряє очки/доступність чесноти; це визначає сервер.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

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

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

object? result = UO.UseVirtue("Honor");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Прямий виклик – прямий скрипт

Параметри та порядок виконання:

  • Запитує застосування чесноти.
UO.Print(UO.UseVirtue("Honor"));

2. Явний варіант – функція сценарію

Параметри та порядок виконання:

  • Імена відповідають ID: Honor=1, Sacrifice=2, Valor=3, Compassion=4, Honesty=5, Humility=6, Justice=7, Spirituality=8. Numeric parsing цієї функції використовує int.TryParse, не 0x конвертацію.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.UseVirtue("1"));
    return null;
}

3. Повна допоміжна функція – клас сценарію

Параметри та порядок виконання:

  • Сама команда не ставить наступну мету і не перевіряє очки/доступність чесноти; це визначає сервер.
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()
    {
        var accepted = UO.UseVirtue("Honor");
        if (Truth(accepted))
        {
            UO.Print("Virtue request sent");
        }

        return null;
    }

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

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.UseVirtue(virtueName) — UO.UseVirtue(Any)

Параметри: virtueName (Any)

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "usevirtue": return new InjectionValue(bridge.UseVirtue(Text(0)));
⚠️ **GitHub.com Fallback** ⚠️