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
В каждой карточке команды есть несколько самостоятельных сценариев: прямой код, функции и классы. Ниже приведены отдельные короткие сценарии; ограничения и полный разбор находятся в карточках.
Параметры, результат и все сценарии
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("Hello");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddChatUserIgnore(object? userName);Добавляет имя отправителя в локальный список фильтрации сообщений журнала. Фильтр действует в этом клиенте и не отправляет запрос на сервер.
-
userName— имя отправителя журнала. Пустое или состоящее из пробелов значение игнорируется; пробелы по краям удаляются.
void. Команда не возвращает признак успешного добавления.
- Сравнение имени отправителя выполняется без учёта регистра. Сообщения от совпавшего имени скрываются локальным фильтром журнала; это не блокировка игрока на сервере.
UO.ClearChatUserIgnore()очищает весь локальный список имён. Очистка фильтра не восстанавливает записи, уже исключённые из отображения.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.AddChatUserIgnore");
UO.AddChatUserIgnore("ExampleVendor");Параметры и ход выполнения:
- Скрывать новые записи журнала от этого имени в текущем клиенте.
UO.AddChatUserIgnore("ExampleVendor");Параметры и ход выполнения:
- Передать имя через строковую переменную.
return RunScenario();
object? RunScenario()
{
var sender = "ExampleVendor";
UO.AddChatUserIgnore(sender);
return null;
}Параметры и ход выполнения:
- Добавить два имени в локальный фильтр; вызов не блокирует их на сервере.
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.
Параметры: userName (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddChatUserIgnore:bridge.AddChatUserIgnore(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутренний код реализации, не самостоятельный скрипт.
case "addchatuserignore": bridge.AddChatUserIgnore(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Bow();Отправляет действие персонажа bow через GameActions.EmoteAction.
Параметров нет.
void — возвращаемого значения нет.
- Это анимация/действие персонажа. Команда не возвращает подтверждение сервера и не ждёт окончания анимации.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.Bow");
UO.Bow();Параметры и ход выполнения:
- Отправить один поклон.
UO.Bow();Параметры и ход выполнения:
- Проверка соединения предшествует отправке действия.
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;Параметры и ход выполнения:
- Полностью объявленная процедура отправляет то же действие.
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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Bow:bridge.Bow().
Внутренний код реализации, не самостоятельный скрипт.
case "bow": bridge.Bow(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearChatUserIgnore();Удаляет все регистронезависимые фильтры имён отправителей JournalManager.
Параметров нет.
void — возвращаемого значения нет.
- Удаление фильтров не удаляет записи истории и не отменяет текстовые фильтры AddJournalIgnore.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.ClearChatUserIgnore");
UO.ClearChatUserIgnore();Параметры и ход выполнения:
- Удаляет все регистронезависимые фильтры имён отправителей JournalManager.
UO.ClearChatUserIgnore();Параметры и ход выполнения:
- Снова разрешить отображение сообщений от имени Vendor.
return RunScenario();
object? RunScenario()
{
UO.AddChatUserIgnore("Vendor");
UO.ClearChatUserIgnore();
return null;
}Параметры и ход выполнения:
- Очистка пустого набора допустима и не создаёт новую настройку.
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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearChatUserIgnore:bridge.ClearChatUserIgnore().
Внутренний код реализации, не самостоятельный скрипт.
case "clearchatuserignore": bridge.ClearChatUserIgnore(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.EmoteAction(object? action);Отправляет строковое имя действия/анимации персонажа в GameActions.EmoteAction.
-
action— Имя действия, например bow или salute; преобразуется в string. Распознавание действия выполняет GameActions.
void — возвращаемого значения нет.
- Это действие персонажа, не печать фразы в журнал. Команда не возвращает подтверждение сервера и не ждёт анимации.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.EmoteAction");
UO.EmoteAction("bow");Параметры и ход выполнения:
- Передаётся имя действия bow.
UO.EmoteAction("bow");Параметры и ход выполнения:
- Передаётся имя действия salute.
return RunScenario();
object? RunScenario()
{
UO.EmoteAction("salute");
return null;
}Параметры и ход выполнения:
- Строка 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.
Параметры: action (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.EmoteAction:bridge.EmoteAction(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0).
Внутренний код реализации, не самостоятельный скрипт.
case "emoteaction": bridge.EmoteAction(Text(0)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FilterSpeech();
void UO.FilterSpeech(object? enabled);Включает или выключает клиентский фильтр речи.
-
enabled— Необязательное значение: без аргумента фильтр включается; 0 выключает, ненулевое int включает.
void — возвращаемого значения нет.
- Записывает нормализованный флаг в runtime state и передаёт его менеджеру. Фильтр влияет на обработку клиентом; серверные события и остальные настройки журнала остаются отдельными.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.FilterSpeech");
UO.FilterSpeech();Параметры и ход выполнения:
- Нулевое число аргументов означает включение, а не чтение.
UO.FilterSpeech();Параметры и ход выполнения:
- Явный 0 выключает клиентский фильтр.
return RunScenario();
object? RunScenario()
{
UO.FilterSpeech(0);
return null;
}Параметры и ход выполнения:
- Фильтр включается и явно возвращается в выключенное состояние.
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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetSpeechFilter:bridge.SetSpeechFilter(state.SpeechFilter).
Внутренний код реализации, не самостоятельный скрипт.
case "filterspeech": state.SpeechFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetSpeechFilter(state.SpeechFilter); break;Параметры: enabled (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetSpeechFilter:bridge.SetSpeechFilter(state.SpeechFilter).
Внутренний код реализации, не самостоятельный скрипт.
case "filterspeech": state.SpeechFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetSpeechFilter(state.SpeechFilter); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FixTalk();Печатает уведомление, что устаревший патч нативного клиента FixTalk не требуется ClassicUO.
Параметров нет.
void — возвращаемого значения нет.
- Ветка ExecuteLegacyManualAlias только вызывает SystemMessage. Она не исправляет движение, речь, контейнеры или сетевой протокол.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.FixTalk");
UO.FixTalk();Параметры и ход выполнения:
- Сообщение описывает отсутствие необходимости в старом патче.
UO.FixTalk();Параметры и ход выполнения:
- Процедура совместимости не изменяет игровой мир.
return RunScenario();
object? RunScenario()
{
CompatibilityNotice();
return null;
}
void CompatibilityNotice()
{
UO.FixTalk();
}Параметры и ход выполнения:
- После диагностического сообщения выполнение продолжается.
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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"{name}: obsolete native-client patch; ClassicUO does not require it.").
Внутренний код реализации, не самостоятельный скрипт.
case "boxhack":
case "fixtalk":
case "fixwalk":
SystemMessage($"{name}: obsolete native-client patch; ClassicUO does not require it.");
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GlobalChatActiveChannel();Читает ChatManager.CurrentChannelName.
Параметров нет.
string — CurrentChannelName либо пустая строка, если канал не выбран.
- Читает ChatManager.CurrentChannelName. Пустая строка — отсутствие имени, не код ошибки; вход в канал сам не выполняется.
- Читает текущее локальное состояние. Пакета, target и автоматического обновления нет; отдельные чтения могут видеть разные состояния.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.GlobalChatActiveChannel();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- Читает ChatManager.CurrentChannelName.
UO.Print(UO.GlobalChatActiveChannel());Параметры и ход выполнения:
- Читает 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;Параметры и ход выполнения:
- Читает текущее локальное состояние. Пакета, 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.
Параметры: Параметров нет.
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GlobalChatActiveChannel:bridge.GlobalChatActiveChannel().
Внутренний код реализации, не самостоятельный скрипт.
case "globalchatactivechannel": return new InjectionValue(bridge.GlobalChatActiveChannel());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GlobalChatChannelsList();Bridge возвращает ChatManager.Channels.Keys.OrderBy(name => name).
Параметров нет.
Array строк имён каналов, отсортированный по имени. Пустая локальная таблица даёт пустой массив.
- Bridge возвращает ChatManager.Channels.Keys.OrderBy(name => name). Список известен клиенту и может быть неполным до серверного обновления.
- Читает текущее локальное состояние. Пакета, target и автоматического обновления нет; отдельные чтения могут видеть разные состояния.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.GlobalChatChannelsList();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- Bridge возвращает ChatManager.Channels.Keys.OrderBy(name => name).
var channels = UO.GlobalChatChannelsList();
UO.Print(UO.GetArrayLength(channels));Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- Читает текущее локальное состояние. Пакета, 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.
Параметры: Параметров нет.
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GlobalChatChannels()). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GlobalChatChannels:bridge.GlobalChatChannels().
Внутренний код реализации, не самостоятельный скрипт.
case "globalchatchannelslist": return StringArray(bridge.GlobalChatChannels());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GlobalChatJoinChannel(object? chName);Запрашивает вход в канал глобального чата.
-
chName— Текст через ToString; сохраняется как передан.
void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.
- Отправляет Send_ChatJoinCommand с переданным именем канала. Наличие канала и разрешение входа определяет сервер. Имя локального активного канала читается отдельно.
- Bridge посылает запрос на игровом потоке. Действуют правила сервера; встроенного ожидания подтверждения нет.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.GlobalChatJoinChannel");
UO.GlobalChatJoinChannel("General");Параметры и ход выполнения:
- Запрашивает вход в канал глобального чата.
UO.GlobalChatJoinChannel("General");Параметры и ход выполнения:
- Отправляет 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;Параметры и ход выполнения:
- 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.
Параметры: chName (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GlobalChatJoin:bridge.GlobalChatJoin(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутренний код реализации, не самостоятельный скрипт.
case "globalchatjoinchannel": bridge.GlobalChatJoin(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GlobalChatLeaveChannel();Запрашивает выход из канала глобального чата.
Параметров нет.
void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.
- GlobalChatLeave отправляет Send_ChatLeaveChannelCommand. Локальное имя канала изменится после обработки данных чата.
- В примерах UO.Wait задаёт только паузу скрипта; окончание паузы не доказывает выполнение запроса сервером.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.GlobalChatLeaveChannel");
UO.GlobalChatLeaveChannel();Параметры и ход выполнения:
- Запрашивает выход из канала глобального чата.
UO.GlobalChatLeaveChannel();Параметры и ход выполнения:
- GlobalChatLeave отправляет Send_ChatLeaveChannelCommand. Локальное имя канала изменится после обработки данных чата.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.GlobalChatActiveChannel());
UO.GlobalChatLeaveChannel();
return null;
}Параметры и ход выполнения:
- В примерах 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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GlobalChatLeave:bridge.GlobalChatLeave().
Внутренний код реализации, не самостоятельный скрипт.
case "globalchatleavechannel": bridge.GlobalChatLeave(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GlobalChatSendMsg(object? msgText);Отправляет сообщение в глобальный чат.
-
msgText— Текст через ToString; сохраняется как передан.
void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.
- Отправляет Send_ChatMessageCommand с переданным текстом. Канал использует состояние чата клиента/сервера; команда не выбирает канал сама.
- Bridge посылает запрос на игровом потоке. Действуют правила сервера; встроенного ожидания подтверждения нет.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.GlobalChatSendMsg");
UO.GlobalChatSendMsg("Hello");Параметры и ход выполнения:
- Отправляет сообщение в глобальный чат.
UO.GlobalChatSendMsg("Hello");Параметры и ход выполнения:
- Отправляет 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;Параметры и ход выполнения:
- 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.
Параметры: msgText (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GlobalChatSend:bridge.GlobalChatSend(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутренний код реализации, не самостоятельный скрипт.
case "globalchatsendmsg": bridge.GlobalChatSend(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой и не возвращает значение (void). Текст сообщения указан прямо в вызове.
UO.Msg("Hello from C#");Параметры и ход выполнения:
- processed=12 — демонстрационное число уже обработанных предметов. Convert.ToString превращает его в строку. Этот пример только сообщает число, сам предметы не переносит.
var processed = 12;
UO.Msg("Processed item entries: " + Convert.ToString(processed));Параметры и ход выполнения:
- Читаются вес и максимум персонажа. Нулевой/неизвестный максимум не считается перегрузом. При 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;Параметры и ход выполнения:
- 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.
Параметры: message (String)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Msg. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ServerPrint:bridge.ServerPrint(message).
Внутренний код реализации, не самостоятельный скрипт.
public void Msg(string message) => bridge.ServerPrint(message);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Salute();Запрашивает анимацию приветствия.
Параметров нет.
void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.
- Salute вызывает GameActions.EmoteAction("salute") через Invoke. Это действие персонажа, не текст UO.Say.
- В примерах UO.Wait задаёт только паузу скрипта; окончание паузы не доказывает выполнение запроса сервером.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.Salute");
UO.Salute();Параметры и ход выполнения:
- Запрашивает анимацию приветствия.
UO.Salute();Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- В примерах 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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Salute:bridge.Salute().
Внутренний код реализации, не самостоятельный скрипт.
case "salute": bridge.Salute(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.Say");
UO.Say("bank");Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: message (String)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Say. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Say:bridge.Say(message).
Внутренний код реализации, не самостоятельный скрипт.
public void Say(string message) => bridge.Say(message);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.SayU");
UO.SayU("bank");Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: text (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.Say:Say(arguments.Length > 0 ? arguments[0].ToString() : string.Empty). -
InjectionScript.Runtime.InjectionValue.ToString:arguments[0].ToString().
Внутренний код реализации, не самостоятельный скрипт.
case "sayu": Say(arguments.Length > 0 ? arguments[0].ToString() : string.Empty); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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).
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой и не возвращает значение (void). Текст сообщения указан прямо в вызове.
UO.UOAMessage("Hello from C#");Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- Полная 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);
}Параметры и ход выполнения:
- 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.
Параметры: text (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Print:bridge.Print(state.FontColor, Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0).
Внутренний код реализации, не самостоятельный скрипт.
case "uoamessage": bridge.Print(state.FontColor, Text(0)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.UOSay");
UO.UOSay("bank");Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: text (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.Say:Say(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутренний код реализации, не самостоятельный скрипт.
case "uosay": Say(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.UOSayColor");
UO.UOSayColor("bank", 0x0044);Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: text (Any), color (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Say:bridge.Say(Text(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
Внутренний код реализации, не самостоятельный скрипт.
case "uosaycolor": bridge.Say(Text(0), Arg(1)); return InjectionValue.Unit;