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

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

Речь и чат

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

Речь персонажа, эмоции, каналы чата и фильтры. Локальная печать сообщения в клиенте находится в Client UI.

Разделы

Тема Команды и пояснения
Say UO.Say
SayU UO.SayU
UOSay UO.UOSay
Emote UO.EmoteAction · UO.Bow · UO.Salute
Speech Filters UO.FilterSpeech
Global Chat UO.GlobalChatSendMsg · UO.GlobalChatActiveChannel
Channels UO.GlobalChatChannelsList · UO.GlobalChatJoinChannel · UO.GlobalChatLeaveChannel
Ignore Users UO.AddChatUserIgnore · UO.ClearChatUserIgnore

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

Речь

UO.Say · UO.SayU · UO.UOSay · UO.UOSayColor · UO.Msg · UO.UOAMessage · UO.FixTalk

Эмоция

UO.Bow · UO.Salute · UO.EmoteAction

Фильтры/Каналы

UO.FilterSpeech · UO.AddChatUserIgnore · UO.ClearChatUserIgnore · UO.GlobalChatActiveChannel · UO.GlobalChatChannelsList · UO.GlobalChatJoinChannel · UO.GlobalChatLeaveChannel · UO.GlobalChatSendMsg

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

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

UO.Say

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

if (Truth(UO.Connected()))
{
    UO.Say("bank");
}

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

UO.GlobalChatSendMsg

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

UO.GlobalChatSendMsg("Hello");

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


UO.AddChatUserIgnore

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

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

void UO.AddChatUserIgnore(object? userName);

Добавляет имя отправителя в локальный список фильтрации сообщений журнала. Фильтр действует в этом клиенте и не отправляет запрос на сервер.

Параметры

  • userName — имя отправителя журнала. Пустое или состоящее из пробелов значение игнорируется; пробелы по краям удаляются.

Возвращает

void. Команда не возвращает признак успешного добавления.

Поведение

  • Сравнение имени отправителя выполняется без учёта регистра. Сообщения от совпавшего имени скрываются локальным фильтром журнала; это не блокировка игрока на сервере. UO.ClearChatUserIgnore() очищает весь локальный список имён. Очистка фильтра не восстанавливает записи, уже исключённые из отображения.

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

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

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

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

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

UO.Print("Calling UO.AddChatUserIgnore");
UO.AddChatUserIgnore("ExampleVendor");

1. Скрывать новые записи журнала от этого имени в текущем клиенте. — прямой скрипт

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

  • Скрывать новые записи журнала от этого имени в текущем клиенте.
UO.AddChatUserIgnore("ExampleVendor");

2. Передать имя через строковую переменную. — функция сценария

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

  • Передать имя через строковую переменную.
return  RunScenario();
 object? RunScenario()
{
    var sender = "ExampleVendor";
    UO.AddChatUserIgnore(sender);
    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()
    {
        UO.AddChatUserIgnore("ExampleVendor");
        UO.AddChatUserIgnore("ExamplePlayer");
        return null;
    }
}

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

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

UO.AddChatUserIgnore(userName) — UO.AddChatUserIgnore(Any)

Параметры: userName (Any)

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

При вызове:

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

case "addchatuserignore": bridge.AddChatUserIgnore(Text(0)); return InjectionValue.Unit;

UO.Bow

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

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

void UO.Bow();

Отправляет действие персонажа bow через GameActions.EmoteAction.

Параметры

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

Возвращает

void — возвращаемого значения нет.

Поведение

  • Это анимация/действие персонажа. Команда не возвращает подтверждение сервера и не ждёт окончания анимации.

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

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

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

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

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

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

1. Поклон — прямой скрипт

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

  • Отправить один поклон.
UO.Bow();

2. Поклон при соединении — функция сценария

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

  • Проверка соединения предшествует отправке действия.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Connected()))
    {
        UO.Bow();
    }

    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. Процедура приветствия — класс сценария

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

  • Полностью объявленная процедура отправляет то же действие.
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()
    {
        Greet();
        return null;
    }

    void Greet()
    {
        UO.Bow();
    }
}

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

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

UO.Bow() — UO.Bow()

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

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

При вызове:

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

case "bow": bridge.Bow(); return InjectionValue.Unit;

UO.ClearChatUserIgnore

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

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

void UO.ClearChatUserIgnore();

Удаляет все регистронезависимые фильтры имён отправителей JournalManager.

Параметры

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

Возвращает

void — возвращаемого значения нет.

Поведение

  • Удаление фильтров не удаляет записи истории и не отменяет текстовые фильтры AddJournalIgnore.

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

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

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

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

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

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

1. Очистить состояние — прямой скрипт

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

  • Удаляет все регистронезависимые фильтры имён отправителей JournalManager.
UO.ClearChatUserIgnore();

2. Очистить после настройки — функция сценария

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

  • Снова разрешить отображение сообщений от имени Vendor.
return  RunScenario();
 object? RunScenario()
{
    UO.AddChatUserIgnore("Vendor");
    UO.ClearChatUserIgnore();
    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()
    {
        UO.ClearChatUserIgnore();
        UO.ClearChatUserIgnore();
        return null;
    }
}

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

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

UO.ClearChatUserIgnore() — UO.ClearChatUserIgnore()

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

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

При вызове:

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

case "clearchatuserignore": bridge.ClearChatUserIgnore(); return InjectionValue.Unit;

UO.EmoteAction

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

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

void UO.EmoteAction(object? action);

Отправляет строковое имя действия/анимации персонажа в GameActions.EmoteAction.

Параметры

  • action — Имя действия, например bow или salute; преобразуется в string. Распознавание действия выполняет GameActions.

Возвращает

void — возвращаемого значения нет.

Поведение

  • Это действие персонажа, не печать фразы в журнал. Команда не возвращает подтверждение сервера и не ждёт анимации.

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

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

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

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

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

UO.Print("Calling UO.EmoteAction");
UO.EmoteAction("bow");

1. Поклон — прямой скрипт

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

  • Передаётся имя действия bow.
UO.EmoteAction("bow");

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

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

  • Передаётся имя действия salute.
return  RunScenario();
 object? RunScenario()
{
    UO.EmoteAction("salute");
    return null;
}

3. Имя из переменной — класс сценария

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

  • Строка action передаётся без назначения объектной цели.
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 action = "bow";
        UO.EmoteAction(action);
        return null;
    }
}

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

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

UO.EmoteAction(action) — UO.EmoteAction(Any)

Параметры: action (Any)

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

При вызове:

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

case "emoteaction": bridge.EmoteAction(Text(0)); break;

UO.FilterSpeech

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

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

void UO.FilterSpeech();
void UO.FilterSpeech(object? enabled);

Включает или выключает клиентский фильтр речи.

Параметры

  • enabled — Необязательное значение: без аргумента фильтр включается; 0 выключает, ненулевое int включает.

Возвращает

void — возвращаемого значения нет.

Поведение

  • Записывает нормализованный флаг в runtime state и передаёт его менеджеру. Фильтр влияет на обработку клиентом; серверные события и остальные настройки журнала остаются отдельными.

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

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

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

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

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

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

1. Включить без аргумента — прямой скрипт

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

  • Нулевое число аргументов означает включение, а не чтение.
UO.FilterSpeech();

2. Выключить — функция сценария

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

  • Явный 0 выключает клиентский фильтр.
return  RunScenario();
 object? RunScenario()
{
    UO.FilterSpeech(0);
    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()
    {
        UO.FilterSpeech(1);
        UO.FilterSpeech(0);
        return null;
    }
}

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

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

UO.FilterSpeech() — UO.FilterSpeech()

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

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

При вызове:

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

case "filterspeech": state.SpeechFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetSpeechFilter(state.SpeechFilter); break;

UO.FilterSpeech(enabled) — UO.FilterSpeech(Any)

Параметры: enabled (Any)

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

При вызове:

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

case "filterspeech": state.SpeechFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetSpeechFilter(state.SpeechFilter); break;

UO.FixTalk

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

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

void UO.FixTalk();

Печатает уведомление, что устаревший патч нативного клиента FixTalk не требуется ClassicUO.

Параметры

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

Возвращает

void — возвращаемого значения нет.

Поведение

  • Ветка ExecuteLegacyManualAlias только вызывает SystemMessage. Она не исправляет движение, речь, контейнеры или сетевой протокол.

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

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

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

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

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

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

1. Уведомление о совместимости — прямой скрипт

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

  • Сообщение описывает отсутствие необходимости в старом патче.
UO.FixTalk();

2. Вызов в процедуре — функция сценария

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

  • Процедура совместимости не изменяет игровой мир.
return  RunScenario();
 object? RunScenario()
{
    CompatibilityNotice();
    return null;
}

void CompatibilityNotice()
{
    UO.FixTalk();
}

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()
    {
        UO.FixTalk();
        UO.Print("continued");
        return null;
    }
}

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

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

UO.FixTalk() — UO.FixTalk()

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

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

При вызове:

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

case "boxhack":

                case "fixtalk":

                case "fixwalk":

                    SystemMessage($"{name}: obsolete native-client patch; ClassicUO does not require it.");

                    break;

UO.GlobalChatActiveChannel

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

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

dynamic UO.GlobalChatActiveChannel();

Читает ChatManager.CurrentChannelName.

Параметры

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

Возвращает

string — CurrentChannelName либо пустая строка, если канал не выбран.

Поведение

  • Читает ChatManager.CurrentChannelName. Пустая строка — отсутствие имени, не код ошибки; вход в канал сам не выполняется.
  • Читает текущее локальное состояние. Пакета, target и автоматического обновления нет; отдельные чтения могут видеть разные состояния.

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

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

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

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

Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.

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

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

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

  • Читает ChatManager.CurrentChannelName.
UO.Print(UO.GlobalChatActiveChannel());

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

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

  • Читает ChatManager.CurrentChannelName. Пустая строка — отсутствие имени, не код ошибки; вход в канал сам не выполняется.
return  RunScenario();
 object? RunScenario()
{
    var channel = UO.GlobalChatActiveChannel();
    if (Truth(Len(channel) > 0))
    {
        UO.Print(channel);
    }

    return null;
}

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

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

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

  • Читает текущее локальное состояние. Пакета, target и автоматического обновления нет; отдельные чтения могут видеть разные состояния.
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 before = UO.GlobalChatActiveChannel();
        UO.Wait(500);
        var after = UO.GlobalChatActiveChannel();
        UO.Print(before);
        UO.Print(after);
        return null;
    }
}

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

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

UO.GlobalChatActiveChannel() — UO.GlobalChatActiveChannel()

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

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

При вызове:

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

case "globalchatactivechannel": return new InjectionValue(bridge.GlobalChatActiveChannel());

UO.GlobalChatChannelsList

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

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

dynamic UO.GlobalChatChannelsList();

Bridge возвращает ChatManager.Channels.Keys.OrderBy(name => name).

Параметры

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

Возвращает

Array строк имён каналов, отсортированный по имени. Пустая локальная таблица даёт пустой массив.

Поведение

  • Bridge возвращает ChatManager.Channels.Keys.OrderBy(name => name). Список известен клиенту и может быть неполным до серверного обновления.
  • Читает текущее локальное состояние. Пакета, target и автоматического обновления нет; отдельные чтения могут видеть разные состояния.

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

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

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

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

Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.

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

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

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

  • Bridge возвращает ChatManager.Channels.Keys.OrderBy(name => name).
var channels = UO.GlobalChatChannelsList();
UO.Print(UO.GetArrayLength(channels));

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

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

  • Bridge возвращает ChatManager.Channels.Keys.OrderBy(name => name). Список известен клиенту и может быть неполным до серверного обновления.
return  RunScenario();
 object? RunScenario()
{
    var channels = UO.GlobalChatChannelsList();
    if (Truth(UO.GetArrayLength(channels) > 0))
    {
        UO.Print(channels[0]);
    }

    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. Полная вспомогательная функция — класс сценария

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

  • Читает текущее локальное состояние. Пакета, target и автоматического обновления нет; отдельные чтения могут видеть разные состояния.
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 before = UO.GlobalChatChannelsList();
        UO.Wait(500);
        var after = UO.GlobalChatChannelsList();
        UO.Print(before);
        UO.Print(after);
        return null;
    }
}

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

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

UO.GlobalChatChannelsList() — UO.GlobalChatChannelsList()

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

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

При вызове:

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

case "globalchatchannelslist": return StringArray(bridge.GlobalChatChannels());

UO.GlobalChatJoinChannel

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

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

void UO.GlobalChatJoinChannel(object? chName);

Запрашивает вход в канал глобального чата.

Параметры

  • chName — Текст через ToString; сохраняется как передан.

Возвращает

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

Поведение

  • Отправляет Send_ChatJoinCommand с переданным именем канала. Наличие канала и разрешение входа определяет сервер. Имя локального активного канала читается отдельно.
  • Bridge посылает запрос на игровом потоке. Действуют правила сервера; встроенного ожидания подтверждения нет.

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

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

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

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

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

UO.Print("Calling UO.GlobalChatJoinChannel");
UO.GlobalChatJoinChannel("General");

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

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

  • Запрашивает вход в канал глобального чата.
UO.GlobalChatJoinChannel("General");

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

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

  • Отправляет Send_ChatJoinCommand с переданным именем канала. Наличие канала и разрешение входа определяет сервер. Имя локального активного канала читается отдельно.
return  RunScenario();
 object? RunScenario()
{
    var message = "General";
    if (Truth(UO.IsOnline()))
    {
        UO.GlobalChatJoinChannel(message);
    }

    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. Полная вспомогательная функция — класс сценария

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

  • Bridge посылает запрос на игровом потоке. Действуют правила сервера; встроенного ожидания подтверждения нет.
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()
    {
        SendText("General");
        return null;
    }

    void SendText(dynamic message)
    {
        if (Truth(Len(message) > 0))
        {
            UO.GlobalChatJoinChannel(message);
        }
    }

    int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
    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.GlobalChatJoinChannel(chName) — UO.GlobalChatJoinChannel(Any)

Параметры: chName (Any)

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

При вызове:

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

case "globalchatjoinchannel": bridge.GlobalChatJoin(Text(0)); return InjectionValue.Unit;

UO.GlobalChatLeaveChannel

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

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

void UO.GlobalChatLeaveChannel();

Запрашивает выход из канала глобального чата.

Параметры

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

Возвращает

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

Поведение

  • GlobalChatLeave отправляет Send_ChatLeaveChannelCommand. Локальное имя канала изменится после обработки данных чата.
  • В примерах UO.Wait задаёт только паузу скрипта; окончание паузы не доказывает выполнение запроса сервером.

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

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

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

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

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

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

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

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

  • Запрашивает выход из канала глобального чата.
UO.GlobalChatLeaveChannel();

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

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

  • GlobalChatLeave отправляет Send_ChatLeaveChannelCommand. Локальное имя канала изменится после обработки данных чата.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.GlobalChatActiveChannel());
    UO.GlobalChatLeaveChannel();
    return null;
}

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

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

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

UO.GlobalChatLeaveChannel() — UO.GlobalChatLeaveChannel()

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

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

При вызове:

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

case "globalchatleavechannel": bridge.GlobalChatLeave(); return InjectionValue.Unit;

UO.GlobalChatSendMsg

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

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

void UO.GlobalChatSendMsg(object? msgText);

Отправляет сообщение в глобальный чат.

Параметры

  • msgText — Текст через ToString; сохраняется как передан.

Возвращает

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

Поведение

  • Отправляет Send_ChatMessageCommand с переданным текстом. Канал использует состояние чата клиента/сервера; команда не выбирает канал сама.
  • Bridge посылает запрос на игровом потоке. Действуют правила сервера; встроенного ожидания подтверждения нет.

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

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

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

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

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

UO.Print("Calling UO.GlobalChatSendMsg");
UO.GlobalChatSendMsg("Hello");

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

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

  • Отправляет сообщение в глобальный чат.
UO.GlobalChatSendMsg("Hello");

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

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

  • Отправляет Send_ChatMessageCommand с переданным текстом. Канал использует состояние чата клиента/сервера; команда не выбирает канал сама.
return  RunScenario();
 object? RunScenario()
{
    var message = "Hello";
    if (Truth(UO.IsOnline()))
    {
        UO.GlobalChatSendMsg(message);
    }

    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. Полная вспомогательная функция — класс сценария

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

  • Bridge посылает запрос на игровом потоке. Действуют правила сервера; встроенного ожидания подтверждения нет.
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()
    {
        SendText("Hello");
        return null;
    }

    void SendText(dynamic message)
    {
        if (Truth(Len(message) > 0))
        {
            UO.GlobalChatSendMsg(message);
        }
    }

    int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
    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.GlobalChatSendMsg(msgText) — UO.GlobalChatSendMsg(Any)

Параметры: msgText (Any)

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

При вызове:

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

case "globalchatsendmsg": bridge.GlobalChatSend(Text(0)); return InjectionValue.Unit;

UO.Msg

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

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

void UO.Msg(object? message);

Показывает локальное сообщение о ходе скрипта или условии остановки. Его видите вы, а не другие игроки.

Параметры

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Сообщение идёт в нижнюю левую область игрового окна и локальный журнал. Копия доступна в выводе IDE. В общем журнале менеджера включите фильтр сообщений скриптов (script): запись доступна и без игрового окна. Фильтр серверных системных сообщений (system) такие записи не выбирает. Сетевой пакет речи не отправляется. Для надписи над головой есть UO.CharPrint.
  • UO.Print добавляет новую запись в журнал игровых сообщений: сначала прочитайте или сохраните нужную строку/результат поиска, затем запишите диагностическое сообщение. В быстром цикле записывайте сообщения при изменениях, а не на каждой итерации.
  • Без цвета используется hue 0x03B2. UO.Print(text, color) принимает текст первым; UO.ColorPrint(color, text) — цвет первым.
  • Несмотря на Server в имени либо сходство с сетевым сообщением, команда только печатает локальный текст. Чтобы говорить в мир, используйте UO.Say.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

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

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

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

Команда вызывается отдельной строкой и не возвращает значение (void). Текст сообщения указан прямо в вызове.

UO.Msg("Hello from C#");

1. Краткий отчёт — прямой скрипт

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

  • processed=12 — демонстрационное число уже обработанных предметов. Convert.ToString превращает его в строку. Этот пример только сообщает число, сам предметы не переносит.
var processed = 12;
UO.Msg("Processed item entries: " + Convert.ToString(processed));

2. Предупреждение о перегрузе — функция сценария

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

  • Читаются вес и максимум персонажа. Нулевой/неизвестный максимум не считается перегрузом. При weight >= maximum печатается одна строка и Main завершается; предметы не выбрасываются.
return  RunScenario();
 object? RunScenario()
{
    var weight = UO.Weight();
    var maximum = UO.MaxWeight();
    if (Truth(maximum > 0) && Truth(weight >= maximum))
    {
        UO.Msg("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
        return null;
    }

    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. Сообщать только об изменении веса — класс сценария

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

  • Main запоминает вес, ждёт 1000 миллисекунд и вызывает полностью объявленный ReportWeight. Помощник печатает только если вес изменился и возвращает новый вес для следующей проверки. Сам он не создаёт бесконечный цикл.
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 previous = UO.Weight();
        UO.Wait(1000);
        previous = ReportWeight(previous, UO.Weight());
        return null;
    }

    dynamic ReportWeight(dynamic previous, dynamic current)
    {
        if (Truth(previous != current))
        {
            UO.Msg("Weight changed: " + Convert.ToString(current));
        }

        return current;
    }

    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.Msg(message) — UO.Msg(String)

Параметры: message (String)

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

При вызове:

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

public void Msg(string message) => bridge.ServerPrint(message);

UO.Salute

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

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

void UO.Salute();

Запрашивает анимацию приветствия.

Параметры

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

Возвращает

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

Поведение

  • Salute вызывает GameActions.EmoteAction("salute") через Invoke. Это действие персонажа, не текст UO.Say.
  • В примерах UO.Wait задаёт только паузу скрипта; окончание паузы не доказывает выполнение запроса сервером.

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

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

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

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

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

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

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

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

  • Запрашивает анимацию приветствия.
UO.Salute();

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

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

  • Salute вызывает GameActions.EmoteAction("salute") через Invoke. Это действие персонажа, не текст UO.Say.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline()))
    {
        UO.Salute();
    }

    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.Salute();
        UO.Wait(1000);
        UO.Print("Salute requested");
        return null;
    }
}

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

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

UO.Salute() — UO.Salute()

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

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

При вызове:

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

case "salute": bridge.Salute(); return InjectionValue.Unit;

UO.Say

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

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

void UO.Say(object? message);

Отправляет обычную речь персонажа серверу: например, обращение к банкиру или команду питомцу.

Параметры

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Для версии протокола 2.0.0 и новее клиент отправляет Unicode speech; для более старой — ASCII speech. Имя SayU не принуждает старый протокол к Unicode. Без явного цвета берётся SpeechHue профиля; 0xFFFF в UO.UOSayColor также выбирает этот цвет. Текст на сервер отправляется, но скрипт не выполняет его как код.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

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

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

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

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

UO.Print("Calling UO.Say");
UO.Say("bank");

1. Обратиться к банкиру — прямой скрипт

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

  • Connected проверяется до отправки. bank — одна строка речи, а не имя API. Для открытия банка обычно нужен подходящий NPC поблизости; если сервер использует другую фразу, замените её.
if (Truth(UO.Connected()))
{
    UO.Say("bank");
}

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

2. Команда выбранному по имени питомцу — функция сценария

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

  • petName — имя вашего питомца, здесь Shadow. Из него составляется одна строка Shadow follow me. Это приказ питомцу следовать за вами, а не UO.Follow, которая двигает вашего персонажа.
return  RunScenario();
 object? RunScenario()
{
    var petName = "Shadow";
    if (Truth(UO.Connected()))
    {
        UO.Say(petName + " follow me");
    }

    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. Попросить банк только при перегрузе — класс сценария

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

  • RequestBankIfHeavy проверяет подключение и достоверный положительный максимум веса. Только при перегрузе отправляет bank и возвращает 1 как признак отправленного запроса. 0 — запрос не отправлен. Этот результат принадлежит помощнику, а не команде речи.
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()
    {
        return RequestBankIfHeavy();
        return null;
    }

    dynamic RequestBankIfHeavy()
    {
        if (!(Truth(UO.Connected())))
        {
            return 0;
        }

        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0) || Truth(UO.Weight() < maximum))
        {
            return 0;
        }

        UO.Say("bank");
        return 1;
    }

    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.Say(message) — UO.Say(String)

Параметры: message (String)

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

При вызове:

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

public void Say(string message) => bridge.Say(message);

UO.SayU

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

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

void UO.SayU(object? text);

Отправляет обычную речь персонажа серверу: например, обращение к банкиру или команду питомцу.

Параметры

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Для версии протокола 2.0.0 и новее клиент отправляет Unicode speech; для более старой — ASCII speech. Имя SayU не принуждает старый протокол к Unicode. Без явного цвета берётся SpeechHue профиля; 0xFFFF в UO.UOSayColor также выбирает этот цвет. Текст на сервер отправляется, но скрипт не выполняет его как код.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

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

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

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

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

UO.Print("Calling UO.SayU");
UO.SayU("bank");

1. Обратиться к банкиру — прямой скрипт

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

  • Connected проверяется до отправки. bank — одна строка речи, а не имя API. Для открытия банка обычно нужен подходящий NPC поблизости; если сервер использует другую фразу, замените её.
if (Truth(UO.Connected()))
{
    UO.SayU("bank");
}

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

2. Команда выбранному по имени питомцу — функция сценария

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

  • petName — имя вашего питомца, здесь Shadow. Из него составляется одна строка Shadow follow me. Это приказ питомцу следовать за вами, а не UO.Follow, которая двигает вашего персонажа.
return  RunScenario();
 object? RunScenario()
{
    var petName = "Shadow";
    if (Truth(UO.Connected()))
    {
        UO.SayU(petName + " follow me");
    }

    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. Попросить банк только при перегрузе — класс сценария

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

  • RequestBankIfHeavy проверяет подключение и достоверный положительный максимум веса. Только при перегрузе отправляет bank и возвращает 1 как признак отправленного запроса. 0 — запрос не отправлен. Этот результат принадлежит помощнику, а не команде речи.
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()
    {
        return RequestBankIfHeavy();
        return null;
    }

    dynamic RequestBankIfHeavy()
    {
        if (!(Truth(UO.Connected())))
        {
            return 0;
        }

        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0) || Truth(UO.Weight() < maximum))
        {
            return 0;
        }

        UO.SayU("bank");
        return 1;
    }

    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.SayU(text) — UO.SayU(Any)

Параметры: text (Any)

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

При вызове:

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

case "sayu": Say(arguments.Length > 0 ? arguments[0].ToString() : string.Empty); break;

UO.UOAMessage

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

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

void UO.UOAMessage(object? text);

Печатает локальное сообщение в ClassicUO с hue, установленным UO.FontColor. Подходит для уведомлений скрипта о запасах, состоянии маршрута или завершении этапа.

Параметры

Возвращает

void: не возвращает текст, индекс журнала или true/false. Вызов выполняет локальный вывод; возвращаемого подтверждения отображения нет.

Поведение

  • Использует state.FontColor текущего runtime, изначально 0x03B2. Запись проходит через нижнюю область сообщений и журнал клиента, а также вывод IDE.
  • Не отправляет речь на сервер, не вызывает всплывающее окно, не отправляет сообщение другому игроку. Обычный UO.Print имеет собственный цвет.
  • Для цвета одного сообщения без смены state.FontColor можно использовать UO.Print(text,color).

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

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

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

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

Команда вызывается отдельной строкой и не возвращает значение (void). Текст сообщения указан прямо в вызове.

UO.UOAMessage("Hello from C#");

1. Выделить предупреждение о запасах — прямой скрипт

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

  • 0x0021 — индекс hue; итоговый оттенок зависит от файлов hues клиента. Сообщение видно локально; его не произносит персонаж.
UO.FontColor(0x0021);
var first = UO.FindList("0x0EED", "backpack");
if (Truth(first == ""))
{
    UO.UOAMessage("No gold in the loaded backpack");
}
else
{
    UO.UOAMessage("Gold units: " + Convert.ToString(UO.FindFullQuantity()));
}

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

2. Общая процедура цветного уведомления — функция сценария

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

  • Полная Notice принимает текст и hue. Последний установленный hue остаётся для следующего UOAMessage этого runtime. Встроенного FontColor() для чтения здесь нет.
return  RunScenario();
 object? RunScenario()
{
    Notice("Supplies checked", 0x0044);
    Notice("Restock needed", 0x0021);
    return null;
}

void Notice(dynamic text, dynamic hue)
{
    UO.FontColor(hue);
    UO.UOAMessage(text);
}

3. Вернуться к известному базовому цвету — класс сценария

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

  • 0x03B2 — начальное значение FontColor нового runtime. Finally возвращает именно выбранную базу при обычном завершении/обрабатываемой ошибке; оно не восстанавливает неизвестное прежнее значение.
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 baseHue = 0x03B2;
        try
        {
            UO.FontColor(0x0021);
            UO.UOAMessage("Check the route before moving");
        }
        finally
        {
            UO.FontColor(baseHue);
        }

        UO.UOAMessage("Ready");
        UO.Print("Regular Print keeps its own color");
        return null;
    }
}

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

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

UO.UOAMessage(text) — UO.UOAMessage(Any)

Параметры: text (Any)

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

При вызове:

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

case "uoamessage": bridge.Print(state.FontColor, Text(0)); break;

UO.UOSay

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

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

void UO.UOSay(object? text);

Отправляет обычную речь персонажа серверу: например, обращение к банкиру или команду питомцу.

Параметры

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Для версии протокола 2.0.0 и новее клиент отправляет Unicode speech; для более старой — ASCII speech. Имя SayU не принуждает старый протокол к Unicode. Без явного цвета берётся SpeechHue профиля; 0xFFFF в UO.UOSayColor также выбирает этот цвет. Текст на сервер отправляется, но скрипт не выполняет его как код.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

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

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

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

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

UO.Print("Calling UO.UOSay");
UO.UOSay("bank");

1. Обратиться к банкиру — прямой скрипт

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

  • Connected проверяется до отправки. bank — одна строка речи, а не имя API. Для открытия банка обычно нужен подходящий NPC поблизости; если сервер использует другую фразу, замените её.
if (Truth(UO.Connected()))
{
    UO.UOSay("bank");
}

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

2. Команда выбранному по имени питомцу — функция сценария

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

  • petName — имя вашего питомца, здесь Shadow. Из него составляется одна строка Shadow follow me. Это приказ питомцу следовать за вами, а не UO.Follow, которая двигает вашего персонажа.
return  RunScenario();
 object? RunScenario()
{
    var petName = "Shadow";
    if (Truth(UO.Connected()))
    {
        UO.UOSay(petName + " follow me");
    }

    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. Попросить банк только при перегрузе — класс сценария

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

  • RequestBankIfHeavy проверяет подключение и достоверный положительный максимум веса. Только при перегрузе отправляет bank и возвращает 1 как признак отправленного запроса. 0 — запрос не отправлен. Этот результат принадлежит помощнику, а не команде речи.
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()
    {
        return RequestBankIfHeavy();
        return null;
    }

    dynamic RequestBankIfHeavy()
    {
        if (!(Truth(UO.Connected())))
        {
            return 0;
        }

        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0) || Truth(UO.Weight() < maximum))
        {
            return 0;
        }

        UO.UOSay("bank");
        return 1;
    }

    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.UOSay(text) — UO.UOSay(Any)

Параметры: text (Any)

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

При вызове:

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

case "uosay": Say(Text(0)); return InjectionValue.Unit;

UO.UOSayColor

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

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

void UO.UOSayColor(object? text, object? color);

Отправляет обычную речь персонажа серверу: например, обращение к банкиру или команду питомцу.

Параметры

  • color — UO hue, не RGB. Число или hex-строка; мост использует младшие 16 бит. Не путайте с graphic/type. 0x0044 в примере — выбранный hue. Для версии протокола 2.0.0 и новее клиент отправляет Unicode speech; для более старой — ASCII speech. Имя SayU не принуждает старый протокол к Unicode. Без явного цвета берётся SpeechHue профиля; 0xFFFF в UO.UOSayColor также выбирает этот цвет. Текст на сервер отправляется, но скрипт не выполняет его как код.

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Для версии протокола 2.0.0 и новее клиент отправляет Unicode speech; для более старой — ASCII speech. Имя SayU не принуждает старый протокол к Unicode. Без явного цвета берётся SpeechHue профиля; 0xFFFF в UO.UOSayColor также выбирает этот цвет. Текст на сервер отправляется, но скрипт не выполняет его как код.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

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

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

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

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

UO.Print("Calling UO.UOSayColor");
UO.UOSayColor("bank", 0x0044);

1. Обратиться к банкиру — прямой скрипт

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

  • Connected проверяется до отправки. bank — одна строка речи, а не имя API. Для открытия банка обычно нужен подходящий NPC поблизости; если сервер использует другую фразу, замените её.
if (Truth(UO.Connected()))
{
    UO.UOSayColor("bank", 0x0044);
}

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

2. Команда выбранному по имени питомцу — функция сценария

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

  • petName — имя вашего питомца, здесь Shadow. Из него составляется одна строка Shadow follow me. Это приказ питомцу следовать за вами, а не UO.Follow, которая двигает вашего персонажа.
return  RunScenario();
 object? RunScenario()
{
    var petName = "Shadow";
    if (Truth(UO.Connected()))
    {
        UO.UOSayColor(petName + " follow me", 0x0044);
    }

    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. Попросить банк только при перегрузе — класс сценария

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

  • RequestBankIfHeavy проверяет подключение и достоверный положительный максимум веса. Только при перегрузе отправляет bank и возвращает 1 как признак отправленного запроса. 0 — запрос не отправлен. Этот результат принадлежит помощнику, а не команде речи.
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()
    {
        return RequestBankIfHeavy();
        return null;
    }

    dynamic RequestBankIfHeavy()
    {
        if (!(Truth(UO.Connected())))
        {
            return 0;
        }

        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0) || Truth(UO.Weight() < maximum))
        {
            return 0;
        }

        UO.UOSayColor("bank", 0x0044);
        return 1;
    }

    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.UOSayColor(text, color) — UO.UOSayColor(Any,Any)

Параметры: text (Any), color (Any)

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

При вызове:

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

case "uosaycolor": bridge.Say(Text(0), Arg(1)); return InjectionValue.Unit;
⚠️ **GitHub.com Fallback** ⚠️