Пакетная часть Ориона - Hotride/OrionUO GitHub Wiki
Информация по пакетной части Ориона/Ассистента
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);
}
}