Skip to content

Пакетная часть Ориона

Hotride edited this page Nov 5, 2022 · 20 revisions

Информация по пакетной части Ориона/Ассистента

PacketOrionFeatures

От сервера

Пакет управления некоторыми возможностями Ориона.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x000B)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0032)

  • BYTE[4] - Флаги разрешений

Доступные флаги:

DRAW_CHARACTERS_STATUS_IN_WORLD  = 0x00000001 - Возможность отображения статуса персонажей в мире (полоска/текст ХП)
CHANGE_TREES_TO_STUMPS           = 0x00000002 - Возможность замен деревьев на пни
MARKING_CAVES                    = 0x00000004 - Возможность разметки пещер
NO_VEGETATION                    = 0x00000008 - Возможность скрытия растительности
NO_FIELDS_ANIMATION              = 0x00000010 - Возможность отключать анимацию филдов
COLORED_CHARACTERS_STATE         = 0x00000020 - Покраска персонажей в определенный цвет, в зависимости от состояния
TILED_FIELDS                     = 0x00000040 - Возможность замены картинок стандартных филдов на плитки
DRAW_AURA                        = 0x00000080 - Возможность отображения ауры под персонажами
NO_DRAW_ROOFS                    = 0x00000100 - Возможность скрытия крыш
BOXHACK                          = 0x00000200 - Возможность блокирования закрытия контейнеров
AVAILABLE_DARK_NIGHTS            = 0x00000400 - Возможность включения опции Dark Nights
AVAILABLE_OBJECT_HANDLES         = 0x00000800 - Возможность включения опции Object Handles
PULL_STATUSBARS_FROM_AREA        = 0x00001000 - Возможность включения опции выбора статусбаров с выделенной области
NEW_TRANSPARENT_FOLIAGES         = 0x00002000 - Возможность включения опции новой просветки деревьев
CLEARING_THE_WAY                 = 0x00004000 - Возможность включения опции очистки пути
AUTO_OPEN_DOORS                  = 0x00008000 - Возможность включения опции автооткрывания дверей
AUTO_AUTO_FOLLOW                 = 0x00010000 - Возможность преследования персонажей по Alt+LMClick
HIGHLIGHT_SPELL_AREAS            = 0x00020000 - Возможность использования подсветки зон для заклинаний
FULL_STATIC_TRANSPARENCY         = 0x00040000 - Возможность использования круга прозрачности для всей статики на экране
REPLACE_IMAGES                   = 0x00080000 - Возможность замены графики на пользовательскую (подгрузка из папки)
OFF_WORLD_MAP_GUMP               = 0x00100000 - Возможность использования гампа карты мира
OFF_GRIDDED_CONTAINER_GUMPS      = 0x00200000 - Возможность использования контейнеров с сеткой
OFF_OUT_OF_RANGE_STATUSBAR_GUMPS = 0x00400000 - Возможность использования статусбаров за пределами экрана
OFF_ENABLE_EFFECT_LIGHTS         = 0x00800000 - Возможность использования движущихся/стоящих на тайле эффектов в качестве источников освещения

ALL_FLAGS                        = 0xFFFFFFFF - Включить все (по умолчанию в клиенте)

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionFeatures : Packet
{
	public PacketOrionFeatures() : base(0xBF)
	{
		EnsureCapacity(11);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x0032);
		m_Stream.Write((uint)0xFFFFFFFF); //Разрешено все
	}
}

PacketOrionIgnoreTilesInFilters

От сервера

Пакет игнорирования некоторых тайлов при использовании фильтров Ориона (таких как замена деревьев на пни, скрытие растительности).

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0033)

  • BYTE[2] - Количество одиночных тайлов singleTilesCount

  • BYTE[2 * singleTilesCount] - Массив с ИД тайлов для игнорирования фильтрами

LOOP:

  • __BYTE[2] - ИД тайла для игнорирования

END_LOOP

  • BYTE[2] - Количество диапазонов ИД тайлов rangeTilesCount

  • BYTE[(2 + 2) * rangeTilesCount] - Массив с диапазонами ИД тайлов для игнорирования фильтрами

LOOP:

  • __BYTE[2] - Стартовый ИД диапазона тайлов для игнорирования

  • __BYTE[2] - Конечный ИД диапазона тайлов для игнорирования

END_LOOP

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionIgnoreTilesInFilters : Packet
{
	public PacketOrionIgnoreTilesInFilters() : base(0xBF)
	{
		ushort singleTilesCount = 3;
		ushort rangeTilesCount = 2;

		EnsureCapacity(7 + singleTilesCount * 2 + rangeTilesCount * 4);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x0033);

		m_Stream.Write((ushort)singleTilesCount); //Игнорируем singleTilesCount одиночных тайлов
			m_Stream.Write((ushort)0x0123);
			m_Stream.Write((ushort)0x0222);
			m_Stream.Write((ushort)0x0321);

		m_Stream.Write((ushort)rangeTilesCount); //Игнорируем rangeTilesCount диапазона тайлов
			m_Stream.Write((ushort)0x4321); //Начальный ИД тайла для первого диапазона
			m_Stream.Write((ushort)0x4444); //Конечный ИД тайла для первого диапазона
			m_Stream.Write((ushort)0x5555); //Начальный ИД тайла для второго диапазона
			m_Stream.Write((ushort)0x6666); //Конечный ИД тайла для второго диапазона
	}
}

PacketOrionVersion

От сервера

Пакет запроса версии Ориона.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x0007)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0034)

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionVersion : Packet
{
	public PacketOrionVersion() : base(0xBF)
	{
		EnsureCapacity(7);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x0034);
	}
}

От клиента

Пакет отправки версии Ориона.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x000B)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0034)

  • BYTE[4] - Версия Ориона

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

CPacketOrionVersion::CPacketOrionVersion()
: CPacketOrion(11)
{
	WriteUInt8(0xBF);
	WriteUInt16BE(0x000B);
	WriteUInt16BE(0xFACE);
	WriteUInt16BE(0x0034);
	WriteUInt32BE(0x01000302); //Отправить версию 1.0.3.2
}

PacketOrionAssistantVersion

От сервера

Пакет запроса версии Ассистента Ориона.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x0007)

  • BYTE[2] - Номер подкоманды, выделенной для ОА (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x8002)

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionAssistantVersion : Packet
{
	public PacketOrionAssistantVersion() : base(0xBF)
	{
		EnsureCapacity(7);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x8002);
	}
}

От клиента

Пакет отправки версии Ассистента Ориона.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x000B)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x8002)

  • BYTE[4] - Версия Ассистента Ориона

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

CPacketOrionAssistantVersion::CPacketOrionAssistantVersion()
: CPacketOrion(11)
{
	WriteUInt8(0xBF);
	WriteUInt16BE(0x000B);
	WriteUInt16BE(0xFACE);
	WriteUInt16BE(0x8002);
	WriteUInt32BE(0x03000102); //Отправить версию 3.0.1.2
}

PacketOrionSeasonTilesControl

От сервера

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

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0035)

  • BYTE[1] - Режим замены: 0x00 - очистка таблицы (в соответствии с типом тайла и сезоном из следующих 2 байт пакета) и заполнение новым контентом (если он есть); 0x01 - дополнение существующей таблицы

  • BYTE[1] - Тип тайла: 0x00 - land; 0x01 - static

  • BYTE[1] - Номер сезона: 0x00 - spring; 0x01 - summer; 0x02 - fall; 0x03 - winter; 0x04 - desolation

  • BYTE[2] - Количество тайлов для замен, replacesCount

  • BYTE[(2 + 2) * replacesCount] - Массив тайлов для замены

LOOP:

  • __BYTE[2] - Оригинальный ИД тайла, для которого производить замену

  • __BYTE[2] - ИД тайла, на который заменить оригинальный тайл

END_LOOP

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionSeasonTilesControl : Packet
{
    public PacketOrionSeasonTilesControl() : base(0xBF)
    {
	ushort count = 2;

        EnsureCapacity(12 + count * 4);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x0035);
        m_Stream.Write((byte)0x00); //режим замены: 0x00 - очистка таблицы и заполнение новым контентом (если он есть); 0x01 - дополнение существующей таблицы
        m_Stream.Write((byte)0x00); //тип тайла: 0x00 - land; 0x01 - static
        m_Stream.Write((byte)0x00); //номер сезона: 0x00 - spring; 0x01 - summer; 0x02 - fall; 0x03 - winter; 0x04 - desolation

        m_Stream.Write((ushort)count); //количество замен

	//Первый тайл замены
        m_Stream.Write((ushort)0x0123);
        m_Stream.Write((ushort)0x006C);

	//Второй тайл замены (замена на 0x0000 для скрытия тайла)
        m_Stream.Write((ushort)0x0123);
        m_Stream.Write((ushort)0x0000);
    }
}

PacketOrionEarthquake

От сервера

Пакет включения/выключения режима землетрясения в клиенте.

Если координаты X,Y эпицентра не равны 0 - в зависимости от расстояния персонажа до эпицентра магнитуда снижается, за пределами UpdateRange экран не трясет совсем, находясь в координатах эпицентра - экран трясет с максимальной мощностью.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x0011)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0036)

  • BYTE[1] - Магнитуда землетрясения (максимум 30). В контексте УО характеризует базовое количество пикселей для смещения экрана.

  • BYTE[1] - Режим тряски экрана: 0x00 - сразу трясется с нужной магнитудой; 0x01 - Начинает трястись постепенно; 0x02 - Начинает сразу трястись с нужной магнитудой и постепенно затухает; 0x03 - Постепенно начинает трястись, когда достигает пика по магнитуде - тряска начинает постепенно угасать

  • BYTE[4] - Таймер землетрясения (мс)

  • BYTE[2] - Мированя координата X эпицентра

  • BYTE[2] - Мированя координата Y эпицентра

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionEarthquake : Packet
{
    public PacketOrionEarthquake() : base(0xBF)
    {
        EnsureCapacity(17);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x0036);
        m_Stream.Write((byte)30);
        m_Stream.Write((byte)0x00); //режим  тряски экрана: 0x00 - сразу трясется с нужной магнитудой; 0x01 - Начинает трястись постепенно; 0x02 - Начинает сразу трястись с нужной магнитудой и постепенно затухает; 0x03 - Постепенно начинает трястись, когда достигает пика по магнитуде - тряска начинает постепенно угасать
        m_Stream.Write((uint)15000); //таймер (мс)
        m_Stream.Write((ushort)0x0000);
        m_Stream.Write((ushort)0x0000);
    }
}

PacketOrionGameWindowColor

От сервера

Пакет изменения заливки игрового окна. По умолчанию r=255, g=255, b=255.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0037)

  • BYTE[1] - R-компонента.

  • BYTE[1] - G-компонента.

  • BYTE[1] - B-компонента.

  • BYTE[1] - Режим отображения: 0 - выключено; 1 - замена гаммы экрана кроме источников освещения без учета освещения; 2 - замена гаммы экрана с источниками освещения без учета освещения; 3 - замена гаммы экрана кроме источников освещения с учетом освещенности; 3 - замена гаммы экрана с источниками освещения с учетом освещения.

  • BYTE[2] - Скорость смены цвета, мс (0 для моментальной смены) (можно не передавать, 0 по умолчанию).

  • BYTE[4] - Таймаут эффекта, мс (0 - без таймаута) (можно не передавать, 0 по умолчанию).

  • BYTE[1] - Начальная R-компонента (можно не передавать, по умолчанию берет цвет освещения или 255, в зависимости от режима).

  • BYTE[1] - Начальная G-компонента (можно не передавать, по умолчанию берет цвет освещения или 255, в зависимости от режима).

  • BYTE[1] - Начальная B-компонента (можно не передавать, по умолчанию берет цвет освещения или 255, в зависимости от режима).

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionGameWindowColor : Packet
{
    public PacketOrionGameWindowColor() : base(0xBF)
    {
        EnsureCapacity(17);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x0037);
        m_Stream.Write((byte)255); // R-компонента
        m_Stream.Write((byte)128); // G-компонента
        m_Stream.Write((byte)64); // B-компонента
        m_Stream.Write((byte)0x01); // Режим
        m_Stream.Write((ushort)40); // Скорость смены цвета 40 мс
        m_Stream.Write((uint)11111); // Таймаут 11 секунд
    }
}

PacketOrionAssistantFeatures

От сервера

Пакет управления некоторыми возможностями ассистента Ориона.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x0017)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды ассистента Ориона (0x8001)

  • BYTE[8] - Флаги разрешений опций ассистента

  • BYTE[8] - Флаги разрешений скриптовых групп ассистента

Доступные флаги опций ассистента:

CORPSES_AUTOOPEN           = 0x0000000000000001 - Опция автооткрытия трупов
STEALTH_STEP_COUNTER       = 0x0000000000000002 - Возможность подсчета шагов, сделанных в невидимости
SOUND_FILTER               = 0x0000000000000004 - Фильтр звуков
LIGHT_FILTER               = 0x0000000000000008 - Фильтр освещения
WEATHER_FILTER             = 0x0000000000000010 - Фильтр погоды
SEASON_FILTER              = 0x0000000000000020 - Фильтр сезонов
NO_DEATH_SCREEN            = 0x0000000000000040 - Черный экран при смерти
RESERVED                   = 0x0000000000000080 - Не используется (зарезервировано для дальнейшего использования)
TRACKER                    = 0x0000000000000100 - Опция отслеживания последнего места трупа и кладов (активация квест стрелки)
LOOPED_MACRO               = 0x0000000000000200 - Зацикленные макросы
RESERVED                   = 0x0000000000000400 - Не используется (зарезервировано для дальнейшего использования)
FAST_ROTATION              = 0x0000000000000800 - Опция быстрого поворота персонажа (как при работе с FPS patch)
RECURSE_CONTAINERS_SEARCH  = 0x0000000000001000 - Рекурсивный поиск в контейнерах
AUTOSTART                  = 0x0000000000002000 - Опция запуска скрипта при входе в мир
IGNORE_STAMINA_CHECK       = 0x0000000000004000 - Игнорирование проверки стамины при проходе через персонажей
PARTY_AGENT                = 0x0000000000008000 - Агент групп (пати)
SHOP_AGENT                 = 0x0000000000010000 - Агент покупок
MINIMIZE_TO_TRAY           = 0x0000000000020000 - Возможность сворачивания ассистента в трэй
SOUND_ECHO                 = 0x0000000000040000 - Эхо звуков (звуки записываются в журнал ассистента)
ANIMATION_ECHO             = 0x0000000000080000 - Эхо анимаций (анимации записываются в журнал ассистента)
EFFECT_ECHO                = 0x0000000000100000 - Эхо эффектов (эффекты записываются в журнал ассистента)
MAP_ECHO                   = 0x0000000000200000 - Эхо карт (координаты карт записываются в журнал ассистента)
SPEECH_FILTER              = 0x0000000000400000 - Фильтр речи
TEXT_REPLACE               = 0x0000000000800000 - Замены текста, произвосимого объектами мира
RECONNECTOR                = 0x0000000001000000 - Функция автоматического переподключения к серверу при разрыве соединения
ORGANIZER                  = 0x0000000002000000 - Возможность использования органайзера
AUTOLOOT                   = 0x0000000004000000 - Возможность использования автолута
RECOUNT_CONTAINERS         = 0x0000000008000000 - Возможность использования автоподсчета предметов в подконтейнерах бакпака
SCAVENGER                  = 0x0000000010000000 - Возможность использования скавенджера

ALL                        = 0xFFFFFFFFFFFFFFFF - Разрешено все

Доступные флаги скриптовых групп ассистента:

INFORMATION                = 0x0000000000000001 - Вывод информации в текстовое окно
TEXT_WINDOW                = 0x0000000000000002 - Работа с текстовым окном
SEARCH_CONTAINER           = 0x0000000000000004 - Поиск в контейнерах
SEARCH_GROUND              = 0x0000000000000008 - Поиск на земле
MOVING                     = 0x0000000000000010 - Перемещение персонажа в игре
RESEND                     = 0x0000000000000020 - Отправка запросов на синхронизацию мира с сервером
JOURNAL                    = 0x0000000000000040 - Работа с журналом
RENAME_MOUNTS              = 0x0000000000000080 - Возможность изменения имен питомцев
SHOP_BUY                   = 0x0000000000000100 - Возможность автопокупки
SHOP_SELL                  = 0x0000000000000200 - Возможность автопродажи
HIDE                       = 0x0000000000000400 - Возможность скрытия игровых объектов
MOVE_ITEMS                 = 0x0000000000000800 - Возможность перемещения предметов
MORPHING                   = 0x0000000000001000 - Возможность изменения тела персонажа
EMOTE_ACTIONS              = 0x0000000000002000 - Возможность отправки эмоций
FIND_TYPE_OR_IGNORE        = 0x0000000000004000 - Поиск и игнорирование предметов
FIND_ARRAYS                = 0x0000000000008000 - Поиск предметов с использованием спиской для поиска
OPTIONS_ACCESS             = 0x0000000000010000 - Доступ к опциям клиента
SEARCH_CORPSE              = 0x0000000000020000 - Поиск в трупах
EXTENDED_MENU              = 0x0000000000040000 - Расширенная работа с меню
BUFFS                      = 0x0000000000080000 - Работа с баффами/дебаффами
SECURE_TRADING             = 0x0000000000100000 - Возможность работы с окном торговли с другими персонажами
FRIEND_LIST                = 0x0000000000200000 - Работа со списком друзей
ENEMY_LIST                 = 0x0000000000400000 - Работа со списком врагов
FONT_COLOR                 = 0x0000000000800000 - Возможность изменения цвета шрифта
EXTENDED_TARGET_TILE       = 0x0000000001000000 - Расширенная работа с таргетами на тайлы
LAUNCH                     = 0x0000000002000000 - Возможность запуска сторонних приложений
REMOVED_PTR_POSITION       = 0x0000000004000000 - Возможность доступа к последним координатам цели/статуса после его удаления из мира (уход в хайд, реколл)
EXTENDED_GUMP              = 0x0000000008000000 - Расширенная работа с гампами
CHARACTER_PROPERTIES       = 0x0000000010000000 - Доступ к свойствам персонажей
CHARACTER_PROFILE          = 0x0000000020000000 - Работа с профилем персонажа
PROMPTS                    = 0x0000000040000000 - Работа с промптами
STATUSBARS                 = 0x0000000080000000 - Управление статусбарами клиента (отображение, скрытие)
LOG_OUT                    = 0x0000000100000000 - Возможность выхода из УО
TIMERS                     = 0x0000000200000000 - Работа с таймерами
CONTEXT_MENU               = 0x0000000400000000 - Работа с контекстными меню
DISPLAY_TIMERS             = 0x0000000800000000 - Работа с таймерами отображения клиента
GUMP_HANDLING              = 0x0000001000000000 - Расширенная работа со встроенными гампами клиента
TILE_HANDLING              = 0x0000002000000000 - Расширенная работа с тайлами карты клиента
EXTENDED_TEXT_DIALOGS      = 0x0000004000000000 - Расширенная работа с диалогом ввода значений
HTTP_REQUESTS              = 0x0000008000000000 - Возможность отправки HTTP(S) запросов
TCP_UDP_SOCKETS            = 0x0000010000000000 - Возможность использования UDP сокетов

ALL                        = 0xFFFFFFFFFFFFFFFF - Разрешено все

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionAssistantFeatures : Packet
{
	public PacketOrionAssistantFeatures() : base(0xBF)
	{
		EnsureCapacity(23);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x8001);
		m_Stream.Write((uint)0xFFFFFFFF); //Разрешено все
		m_Stream.Write((uint)0xFFFFFFFF); //Разрешено все
		m_Stream.Write((uint)0xFFFFFFFF); //Разрешено все
		m_Stream.Write((uint)0xFFFFFFFF); //Разрешено все
	}
}

PacketOrionFastTextPrint

От сервера

Пакет отображения "быстрого" текста.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0038)

  • BYTE[4] - серийный номер объекта, над которым должен появиться текст.

  • BYTE[2] - цвет текста.

  • BYTE[1] - номер шрифта текста.

  • BYTE[1] - тип текста, 0 - ascii, 1 unicode.

  • если тип текста ascii BYTE[N] - ascii текст, null-terminated.

  • если тип текста ascii BYTE[N] - unicode текст, null-terminated.

  • BYTE[1] - режим движения текста: 0 - вверх; 1 - вправо; 2 - вниз; 3 - влево; 4 - в правый верхний угол; 5 - в левый верхний угол; 6 - в правый нижний угол; 7 - в левый нижний угол; 8 - не двигаться

  • BYTE[1] - флаг быстрого увеличения размера текста при появлении

  • BYTE[2] - время отображения текста, в миллисекундах

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionFastTextPrint : Packet
{
    public PacketOrionFastTextPrint(string text) : base(0xBF)
    {
        EnsureCapacity(text.length * 2 + 17);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x0038);
        m_Stream.Write((uint)0x12345678); // object serial
        m_Stream.Write((ushort)0x0044); // text color
        m_Stream.Write((byte)2); // text font
        m_Stream.Write((byte)0x01); // mode (unicode)
        m_Stream.WriteBigUniNull(text); // text
        m_Stream.Write((byte)0); // moving mode (to top)
        m_Stream.Write((byte)0); // increase size mode (no change size)
        m_Stream.Write((ushort)2000); //show time (2000 ms)
    }
}

PacketOrionAddDisplayTimer

От сервера

Пакет добавления таймера отображения.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0039)

  • BYTE[4] - ID таймера отображения. Зарезервированная ассистентом область адресов 0xFACE0000, нельзя создать таймеры с ИД 0xFACE1234, 0xFACE0045 и подобные (такие пакеты будут игнорироваться).

  • BYTE[1] - позиция таймера:

    • 0 - левая область игрового окна
    • 1 - правая область игрового окна
    • 2 - верхняя область игрового окна
    • 3 - нижняя область игрового окна
    • 4 - левый верхний угол игрового окна
    • 5 - правый верхний угол игрового окна
    • 6 - левый нижний угол игрового окна
    • 7 - правый нижний угол игрового окна
    • 8 - над персонажем
    • 9 - под персонажем
    • 10 - пользовательская
  • BYTE[4] - флаги фигуры таймера (могут комбинироваться, например: 1|0x20000 или 0|0x10000):

    • 0 - круг
    • 1 - прямоугольник
    • 2 - линия
    • 0x10000 - анимированный
    • 0x20000 - вертикальный
  • BYTE[4] - время жизни таймера, в миллисекундах

  • BYTE[2] - координата X (для Position=10 - реальная координата экрана, для других режимов - смещение)

  • BYTE[2] - координата Y (для Position=10 - реальная координата экрана, для других режимов - смещение)

  • BYTE[1] - флаг hasName

if hasName

  • BYTE[N] - unicode текст, null-terminated.

  • BYTE[1] - номер шрифта для имени/счетчика

  • BYTE[2] - цвет текста для имени/счетчика

endif

  • BYTE[4] - цвет фона таймера AARRGGBB

  • BYTE[1] - флаг обратной анимации таймера

  • BYTE[1] - флаг отображения счетчика таймера

  • BYTE[4] - серийный номер объекта, к которому привязан таймер (0 - нет объекта, используется игрок для Above/Under положения таймера)

if shape == 0

  • BYTE[2] - радиус круга

else

  • BYTE[2] - ширина таймера

  • BYTE[2] - высота таймера

endif

  • BYTE[1] - флаг hasIcon

if hasIcon

  • BYTE[1] - позиция иконки (аналогично позиции таймера но относительно таймера, над и под персонажем не используется)

  • BYTE[2] - ИД картинки иконки

  • BYTE[2] - цвет иконки иконки

  • BYTE[2] - координата X иконки (для Position=10 используется смещение относительно центра таймера)

  • BYTE[2] - координата Y иконки (для Position=10 используется смещение относительно центра таймера)

  • BYTE[2] - ширина иконки

  • BYTE[2] - высота иконки

endif

  • BYTE[1] - количество цветовых стадий colorStagesCount

LOOP colorStagesCount

  • BYTE[1] - проценты для активации стадии (0-100, стадии с одинаковыми процентами заменяют друг друга)

  • BYTE[2] - цвет текста для этой стадии

  • BYTE[4] - цвет фона для этой стадии AARRGGBB

  • BYTE[2] - цвет иконки для этой стадии

ENDLOOP colorStagesCount

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionAddDisplayTimer : Packet
{
    public PacketOrionAddDisplayTimer() : base(0xBF)
    {
	string name = "disp.timer";
        EnsureCapacity(name.length * 2 + 30);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x0039);
        m_Stream.Write((uint)0x00000001); // timer id
        m_Stream.Write((byte)2); // timer position (top of game window)
        m_Stream.Write((uint)0x00010001); // timer shape (animated rectangle)
        m_Stream.Write((uint)7500); // timer live time (7500 ms)
        m_Stream.Write((ushort)0x0000); //x
        m_Stream.Write((ushort)0x0000); //y
        m_Stream.Write((byte)1); // timer with name
        m_Stream.WriteBigUniNull(name); // name
        m_Stream.Write((byte)2); // timer name/counter font
        m_Stream.Write((ushort)0x0044); // timer name/counter color (green)
        m_Stream.Write((uint)0xFF0000FF); // timer background color (blue)
    }
}

PacketOrionRemoveDisplayTimer

От сервера

Пакет добавления таймера отображения.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x000B)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x003A)

  • BYTE[4] - ID таймера отображения. 0xFFFFFFFF - удалить все таймеры (кроме 0xFACE****). Зарезервированная ассистентом область адресов 0xFACE0000, нельзя создать таймеры с ИД 0xFACE1234, 0xFACE0045 и подобные (такие пакеты будут игнорироваться).

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionRemoveDisplayTimer : Packet
{
    public PacketOrionRemoveDisplayTimer() : base(0xBF)
    {
        EnsureCapacity(11);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x003A);
        m_Stream.Write((uint)0x00000001); // timer id
    }
}

PacketOrionChangePlayerWalkSpeed

От сервера

Пакет изменения стандартных задержек на перемещение персонажа.

Для корректной работы требуется изменение в серверной части!

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x000А)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x003B)

  • BYTE[2] - Задержка для шага пешком (мс).

  • BYTE[2] - Задержка для бега пешком (мс).

  • BYTE[2] - Задержка для шага на маунте (мс).

  • BYTE[2] - Задержка для бега на маунте (мс).

Пример пакета для RunUO/ServUO сервера (чуть-чуть увеличим скорость перемещения персонажа):

public sealed class PacketOrionChangePlayerWalkSpeed : Packet
{
    public PacketOrionChangePlayerWalkSpeed() : base(0xBF)
    {
        EnsureCapacity(15);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x003B);
        m_Stream.Write((ushort)300);
        m_Stream.Write((ushort)150);
        m_Stream.Write((ushort)150);
        m_Stream.Write((ushort)75);
    }
}

PacketOrionAddItemAura

От сервера

Пакет добавления ауры под предметами

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x003C)

  • BYTE[1] - type тип добавления: 0 - по графике, 1 - по серийному номеру

  • BYTE[2] - count количество итемов для добавления ауры.

LOOP count

if type==0 //добавление по графике

  • BYTE[2] - графика предмета

else if type==1 //добавление по серийному номеру

  • BYTE[4] - серийный номер предмета

endif

  • BYTE[4] - цвет AARRGGBB

  • BYTE[2] - смещение ауры по оси X (в пикселях)

  • BYTE[2] - смещение ауры по оси Y (в пикселях)

  • BYTE[1] - радиус ауры 0-255

  • BYTE[1] - насыщенность цвета ауры 0-5

ENDLOOP count

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionAddItemAuraByGraphic : Packet
{
    public PacketOrionAddItemAuraByGraphic() : base(0xBF)
    {
	ushort count = 3;

	EnsureCapacity(10 + count * 12);
	m_Stream.Write((ushort)0xFACE);
	m_Stream.Write((ushort)0x003C);

	m_Stream.Write((ushort)0); //тип добавления - по графике
	m_Stream.Write((ushort)count);

	for (int i = 0; i < count; i++)
	{
		m_Stream.Write((ushort) itemGraphic ); //графика предмета
		m_Stream.Write((uint)0xFFFF0000); //красный цвет
		m_Stream.Write((ushort)0x0000); //без смещения по X
		m_Stream.Write((ushort)0x0000); //без смещения по Y
		m_Stream.Write((byte)30); //радиус 30 (как для стандартных аур под персонажами)
		m_Stream.Write((byte)3); //сатурация 3 (как для стандартных аур под персонажами)
	}
    }
}
public sealed class PacketOrionAddItemAuraBySerial : Packet
{
    public PacketOrionAddItemAuraBySerial() : base(0xBF)
    {
	ushort count = 3;

	EnsureCapacity(10 + count * 14);
	m_Stream.Write((ushort)0xFACE);
	m_Stream.Write((ushort)0x003C);

	m_Stream.Write((ushort)1); //тип добавления - по серийному номеру
	m_Stream.Write((ushort)count);

	for (int i = 0; i < count; i++)
	{
		m_Stream.Write((uint) itemSerial ); //серийный номер предмета
		m_Stream.Write((uint)0xFFFF0000); //красный цвет
		m_Stream.Write((ushort)0x0000); //без смещения по X
		m_Stream.Write((ushort)0x0000); //без смещения по Y
		m_Stream.Write((byte)30); //радиус 30 (как для стандартных аур под персонажами)
		m_Stream.Write((byte)3); //сатурация 3 (как для стандартных аур под персонажами)
	}
    }
}

PacketOrionRemoveItemAura

От сервера

Пакет удаления ауры под предметами

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x003D)

  • BYTE[1] - type тип удаления: 0 - по графике, 1 - по серийному номеру, 2 - очистить список по графике, 3 - очистить список по серийному номеру

  • BYTE[2] - count количество итемов для удаления ауры.

LOOP count

if type==0 //удаление по графике

  • BYTE[2] - графика предмета

else if type==1 //удаление по серийному номеру

  • BYTE[4] - серийный номер предмета

endif

ENDLOOP count

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionRemoveItemAuraByGraphic : Packet
{
	public PacketOrionRemoveItemAuraByGraphic() : base(0xBF)
	{
		ushort count = 3;

		EnsureCapacity(10 + count * 2);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x003D);

		m_Stream.Write((ushort)0); //тип удаления - по графике
		m_Stream.Write((ushort)count);

		for (int i = 0; i < count; i++)
		{
			m_Stream.Write((ushort) itemGraphic ); //графика предмета
		}
	}
}
public sealed class PacketOrionRemoveItemAuraBySerial : Packet
{
	public PacketOrionRemoveItemAuraBySerial() : base(0xBF)
	{
		ushort count = 3;

		EnsureCapacity(10 + count * 4);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x003C);

		m_Stream.Write((ushort)1); //тип удаления - по серийному номеру
		m_Stream.Write((ushort)count);

		for (int i = 0; i < count; i++)
		{
			m_Stream.Write((uint) itemSerial ); //серийный номер предмета
		}
	}
}
public sealed class PacketOrionRemoveAllItemsAuraByGraphic : Packet
{
	public PacketOrionRemoveAllItemsAuraByGraphic() : base(0xBF)
	{
		EnsureCapacity(8);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x003D);

		m_Stream.Write((ushort)2); //тип удаления - очистка списка по графике
	}
}
public sealed class PacketOrionRemoveAllItemsAuraBySerial : Packet
{
	public PacketOrionRemoveAllItemsAuraBySerial() : base(0xBF)
	{
		EnsureCapacity(8);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x003D);

		m_Stream.Write((ushort)3); //тип удаления - очистка списка по серийному номеру
	}
}

PacketOrionDoubleClickOnMapNotification

От сервера

Включение/выключение режима отправки уведомлений о даблкликах по карте/статике/компонентах мульти.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x0008)

  • BYTE[2] - номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x003E)

  • BYTE[1] - включение или выключение отправки уведомлений от клиента (0/1)

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionDoubleClickOnMapNotification : Packet
{
	public PacketOrionDoubleClickOnMapNotification(bool enabled) : base(0xBF)
	{
		EnsureCapacity(8);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x003E);
		m_Stream.Write((byte)enabled);
	}
}

От клиента

Уведомление о даблклике по карте/статике/компоненту мульти.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x000E)

  • BYTE[2] - номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x003E)

  • BYTE[2] - графика тайла (0 для land тайлов, не 0 для статики/компонента мульти)

  • BYTE[2] - координата X тайла в мире

  • BYTE[2] - координата Y тайла в мире

  • BYTE[1] - координата Z тайла в мире

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

CPacketOrionDoubleClickOnMapNotification::CPacketOrionDoubleClickOnMapNotification(uint16_t graphic, uint16_t x, uint16_t y, uint8_t z)
: CPacketOrion(14)
{
	WriteUInt8(0xBF);
	WriteUInt16BE(0x000B);
	WriteUInt16BE(0xFACE);
	WriteUInt16BE(0x003E);
	WriteUInt16BE(graphic);
	WriteUInt16BE(x);
	WriteUInt16BE(y);
	WriteUInt8(z);
}

PacketOrionAddCustomGraphic

От сервера

Пакет добавления/замены графики для тайлов/гампов/освещения.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x003F)

  • BYTE[1] - Тип таблицы для замены: 0 - LandArt, 1 - StaticArt, 2 - GumpArt, 3 - LandTexture, 4 - Light

  • BYTE[2] - Count, количество картинок для добавления.

LOOP

  • BYTE[2] - Индекс картинки в таблице. Максимальный индекс для: LandArt - 0x3FFF, StaticArt - 0xFFFF, GumpArt - 0xFFFF, LandTexture - 0x3FFF, Light - 0x0064

  • BYTE[4] - CRC32 изображения (для сравнения с кэшем на стороне клиента), 0 для игнорирования проверки CRC32.

  • BYTE[1] - Флаг сохранения картинки на диске на стороне клиента.

  • BYTE[*] - Unicode строка, ссылка на картинку, null-terminated.

END_LOOP

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionAddCustomGraphic : Packet
{
    public PacketOrionAddCustomGraphic(string link) : base(0xBF)
    {
        EnsureCapacity(link.length * 2 + 19);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x003F);
        m_Stream.Write((byte)1); //StaticArt
        m_Stream.Write((ushort)1); //Count
        m_Stream.Write((ushort)0x0CDA); //Graphic
        m_Stream.Write((uint)0); //CRC32 ignored
        m_Stream.Write((byte)0); //don't save this image on client HDD
        m_Stream.WriteBigUniNull(link); // link
    }
}

PacketOrionRemoveCustomGraphic

От сервера

Пакет удаления графики для тайлов/гампов/освещения.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0040)

  • BYTE[1] - Тип таблицы для замены: 0 - LandArt, 1 - StaticArt, 2 - GumpArt, 3 - LandTexture, 4 - Light

  • BYTE[2] - Count, количество картинок для удаления. 0xFFFF для очистки всех картинок в указанной таблице.

  • BYTE[Count * 2] - Массив индексов картинок в таблице. Максимальный индекс для: LandArt - 0x3FFF, StaticArt - 0xFFFF, GumpArt - 0xFFFF, LandTexture - 0x3FFF, Light - 0x0064

Пример пакета для RunUO/ServUO сервера для очистки всей таблицы StaticArt:

public sealed class PacketOrionRemoveCustomGraphic : Packet
{
    public PacketOrionRemoveCustomGraphic() : base(0xBF)
    {
        EnsureCapacity(10);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x0040);
        m_Stream.Write((byte)1); //StaticArt
        m_Stream.Write((ushort)0x0000); //Clear all custom graphics
    }
}

Пример пакета для RunUO/ServUO сервера для удаления нескольких кастомных картинок StaticArt:

public sealed class PacketOrionRemoveCustomGraphic : Packet
{
    public PacketOrionRemoveCustomGraphic() : base(0xBF)
    {
        EnsureCapacity(16);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x0040);
        m_Stream.Write((byte)1); //StaticArt
        m_Stream.Write((ushort)0x0003); //Count
        	m_Stream.Write((ushort)0x0CDA); //Graphic 1 to remove
        	m_Stream.Write((ushort)0x0CD7); //Graphic 2 to remove
        	m_Stream.Write((ushort)0x0ABE); //Graphic 3 to remove
    }
}

Extended/customized server gumps


PacketOrionManageOption

От сервера

Пакет удаления графики для тайлов/гампов/освещения.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0042)

  • BYTE[2] - Номер опции.

  • BYTE[2] - Новое значение.

Пример пакета для RunUO/ServUO сервера для включения опции показа ников персонажей:

public sealed class PacketOrionManageOption : Packet
{
    public PacketOrionManageOption() : base(0xBF)
    {
        EnsureCapacity(11);
        m_Stream.Write((ushort)0xFACE);
        m_Stream.Write((ushort)0x0042);
        m_Stream.Write((ushort)110); // Show names
        m_Stream.Write((ushort)0x0001); // Enabled
    }
}

PacketOrionCummaryInformation

От сервера

Пакет запроса суммарной информации о клиенте.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x0007)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0043)

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionCummaryInformation : Packet
{
	public PacketOrionCummaryInformation() : base(0xBF)
	{
		EnsureCapacity(7);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x0043);
	}
}

От клиента

Пакет отправки суммарной информации о клиенте.

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0043)

  • BYTE[N] - null-terminated utf-8 данные

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

PacketOrionCummaryInformation::PacketOrionCummaryInformation(char *content, int contentSize)
: CPacketOrion(7 + contentSize + 1)
{
	WriteUInt8(0xBF);
	WriteUInt16BE(7 + contentSize + 1);
	WriteUInt16BE(0xFACE);
	WriteUInt16BE(0x0043);
	WriteDataLE((uint8_t*)&content[0], contentSize);
}

PacketOrionHumanoidAnimationInfo

От сервера

Пакет изменения хуманоидной анимации клиента

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x000D)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0044)

  • BYTE[2] - ИД анимации (может быть 0xFFFF, тогда спользуется текущая анимация игрока)

  • BYTE[2] - ИД анимации мертвого персонажа (может быть 0xFFFF, тогда не используется)

  • BYTE[2] - ИД гампа тела для папердолла (может быть 0xFFFF, тогда не используется)

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionCummaryInformation : Packet
{
	public PacketOrionCummaryInformation() : base(0xBF)
	{
		EnsureCapacity(13);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x0044);
		m_Stream.Write((ushort)0x0190);
		m_Stream.Write((ushort)0x0192);
		m_Stream.Write((ushort)0x000C);
	}
}

PacketOrionSetExtraPaperdollData

От сервера

Пакет установки дополнительной графики, отображаемой на папердолле, поверх тела, но под одеждой (не кликабельна).

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (динамический)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0045)

  • BYTE[4] - серийный номер персонажа

  • BYTE[2] - количество отображаемых предметов

LOOP:

  • __BYTE[2] - Номер отображаемого гампа

  • __BYTE[2] - Цвет гампа

  • __BYTE[2] - Смещение отображения по X

  • __BYTE[2] - Смещение отображения по Y

  • __BYTE[2] - Ширина (если указано 0 - используется стандартная ширина гампа)

  • __BYTE[2] - Высота (если указано 0 - используется стандартная высота) гампа

END_LOOP

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionCummaryInformation : Packet
{
	public PacketOrionCummaryInformation() : base(0xBF)
	{
		EnsureCapacity(85);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x0055);
		m_Stream.Write((uint)0x12345678);
		m_Stream.Write((ushort)0x0002);

			m_Stream.Write((ushort)0xC5D2); //war mace
			m_Stream.Write((ushort)0x0000);
			m_Stream.Write((ushort)50);
			m_Stream.Write((ushort)50);
			m_Stream.Write((ushort)0);
			m_Stream.Write((ushort)0);
			m_Stream.Write((ushort)0xC592); //wooden shield
			m_Stream.Write((ushort)0x0000);
			m_Stream.Write((ushort)30);
			m_Stream.Write((ushort)20);
			m_Stream.Write((ushort)0);
			m_Stream.Write((ushort)0);
	}
}

PacketOrionCustomPaperdollGump

От сервера

Пакет изменения гампа тела в папердолле для указанного персонажа

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x000D)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0046)

  • BYTE[4] - Серийный номер игрока

  • BYTE[2] - ИД гампа тела для папердолла

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionCummaryInformation : Packet
{
	public PacketOrionCummaryInformation() : base(0xBF)
	{
		EnsureCapacity(13);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x0046);
		m_Stream.Write((uint)0x12345678);
		m_Stream.Write((ushort)0x000C);
	}
}

PacketOrionSetNewTargetSystemSerial

От сервера

Пакет установки серийника для новой таргет системы

  • BYTE[1] - ID пакета (0xBF)

  • BYTE[2] - размер пакета (0x000B)

  • BYTE[2] - Номер подкоманды, выделенной для Ориона (0xFACE)

  • BYTE[2] - ИД команды Ориона (0x0047)

  • BYTE[4] - Серийный номер объекта

Пример пакета для RunUO/ServUO сервера:

public sealed class PacketOrionSetNewTargetSystemSerial : Packet
{
	public PacketOrionSetNewTargetSystemSerial() : base(0xBF)
	{
		EnsureCapacity(11);
		m_Stream.Write((ushort)0xFACE);
		m_Stream.Write((ushort)0x0047);
		m_Stream.Write((uint)0x12345678);
	}
}
Clone this wiki locally