Все о пакетах в Lineage 2. 1. Общие сведения 1) Каждый пакет состоит из размера пакета(2 байта), типа пакета(1 байт) и блока параметров(переменная длина). В пакетах логин серверу в конце пакета добавляется контрольная сумма и дополняется нулями так, чтобы размер пакета был кратен 8-ми байтам. 2) Строки в пакетах представлены байтами ANSI разделенными нулями, признаком конца строки является два нуля подряд. Пример: 'A', 0x00, 'B', 0x00, 'C', 0x00, 0x00, 0x00 3) Байты в словах и двойных словах высылаются в обратном порядке. Т.е. если надо отправить число 1, то его следует записать как 01 00 00 00, а не 00 00 00 01. 4) Контрольная сумма пакета расчитывается так: unsigned long checksum( unsigned char *packet, int count ) { long chksum = 0L; for( int i = 0; i < count; i += 4 ) chksum ^= *((unsigned long *)&raw[i]); return chksum; }; 5) Процесс соединения с гейм сервером: 1. Сразу после установки соединения сервер отправляет клиенту пакет Init 2. В ответ на него клиент отправляет пакет RequestGGAuth 3. Сервер отвечает на него пакетом GGAuth 4. Если сервер ответил, что авторизация прошла успешно, то клиент высылает пакет RequestAuthLogin, содержащий логин и пароль 5. Проверка логина и пароля, в случае неудачи, сервер высылает пакет LoginFail, инатче LoginOk, содержащий session key #1. Для явы он постоянный. 6. Далее клиент запрашивает список серверов пакетом RequestServerList 7. В ответ на этот пакет сервер высылает клиенту ServerList, в нем содержиться список серверов и их IP адреса с номерами портов. 8. После выбора game-сервера, и нажатия на ОК, клиент отсылает пакет RequestServerLogin 9. LoginServer выполняет проверки на бан, максимальное количество игроков, доступность сервера и т.п., если все проверки пройдены, то высылает пакет PlayOk, содержащий session key #2, этот ключь генерируется из текущего времени системы в мс, номера сокета и еще всякой лабуды. 10. После этого клиент высылает пакет AuthLogin выбраному серверу, содержащий session key #1, session key #2 и логин, необходимые для генерации ключа по которому будет шифроваться весь трафик. 11. Сервер высылает пакет PlayOk, содержащий список чаров 2. Пакеты от клиетна серверу (Login Server) 00 - RequestAuthLogin 02 - RequestServerLogin 05 - RequestServerList 07 - RequestGGAuth -------------------------------------------------------------------------------- RequestAuthLogin Назначение: запрашивает авторизацию на логин сервере Формат: 00 XX XX XX XX 00 00 // строка содержащая логин XX XX XX XX 00 00 // строка содержащая пароль 08 // маркер конца секции логин/пароль 00 00 00 00 00 00 00 00 // не используется XX XX XX XX // контрольная сумма 00 00 00 00 // выравнивание размера пакета -------------------------------------------------------------------------------- RequestServerLogin Назначение: запрашивает подключение к гейм серверу Формат: 02 -------------------------------------------------------------------------------- RequestServerList Назначение: запрашивает список game серверов Формат: 05 ?? -------------------------------------------------------------------------------- RequestGGAuth Назначение: запрашивает Game Guard авторизицию Формат: 07 ?? -------------------------------------------------------------------------------- 3. Пакеты от сервера клиенту (Login Server) 00 - Init 01 - LoginFail 03 - LoginOk 04 - ServerList 04 - PlayOk 0B - GGAuth -------------------------------------------------------------------------------- Init Назначение: передает клиенту список серверов и их состояние Формат: 00 XX XX XX XX // ID сессии XX XX XX XX // Ревизия протокола 0x785a или 0xc62 // Публичный ключ XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX // Неизвестно 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -------------------------------------------------------------------------------- LoginFail Назначение: сообщает о неудачной попытке подключения к логин серверу Формат: 01 XX XX XX XX // причина неудачи: // 0x01 - системная ошибка // 0x02 - неправельный пароль // 0x03 - логин или пароль неверен // 0x04 - доступ запрещен // 0x05 - информация на аккаунте неверна(хз, наверно имеется ввиду ошибка в БД) // 0x07 - аккаунт уже используется // 0x09 - аккаунт забанен // 0x10 - на сервере идут сервисные работы // 0x12 - срок действия истек // 0x13 - на аккаунте не осталось больше времени (видимо NCSoft собирается или собиралось заморочить и почасовую оплату :) -------------------------------------------------------------------------------- LoginOk Назначение: высылается в подтсверждение на пакет RequestAuthLogin, в случае успешной проверки логина и пароля. Формат: 03 XX XX XX XX // ? На яве 0x55555555 XX XX XX XX // session id. Это первая часть session id, для явы он постоянный 00 00 00 00 00 00 00 00 EA 03 00 00 00 00 00 00 00 00 00 00 02 00 00 00 XX XX XX XX // контрольная сумма 00 00 00 00 // выравнивание размера пакета 00 00 00 00 00 00 00 -------------------------------------------------------------------------------- ServerList Назначение: передает клиенту список серверов и их состояние Формат: 04 XX // количество серверов в списке 00 // неиспользуется или зарезервировано // <<<<< Следующий блок повторяется для каждлого сервера в списке XX // ID сервера XX XX XX XX // IP аддрес гейм сервера XX XX XX XX // порт сервера XX // возрастной лимит XX // PVP сервер: 00 - нет, 01 - да XX XX // количество игроков онлайн XX XX // максимальное количество игроков XX // тестовый сервер: 00 - нет, 01 - да XX XX XX XX // контрольная сумма 00 00 00 00 // выравнивание размера пакета 00 00 00 00 00 -------------------------------------------------------------------------------- PlayOk Назначение: ответ на запрос авторизации на game-сервере Формат: 07 XX XX XX XX // session id #2, вторая половина ключа сессии, генерируется случайно ?? ?? ?? ?? // непонятно, ява просто ставит тут 0x55667788 XX XX XX XX // контрольная сумма 00 00 00 00 // выравнивание размера пакета 00 00 00 00 00 -------------------------------------------------------------------------------- GGAuth Назначение: ответ на запрос GameGuard авторизации Формат: 0B XX XX XX XX // ответ: // 0x0B - Пропустить авторизацию -------------------------------------------------------------------------------- 4. Пакеты от сервера клиенту (Game Server) 01 - CharMoveToLocation 14 - AuthLoginFail 19 - CharCreateOk 1A - CharCreateFail 23 - CharDeleteOk 24 - CharDeleteFail 2F - ChangeWaitType 38 - TeleportToLocation 3E - ChangeMoveType E1 - ChairSit -------------------------------------------------------------------------------- CharMoveToLocation Назначение: сообщает клиенту что чар переместился Формат: 01 XX XX XX XX // ID объекта XX XX XX XX // Текущее положение X XX XX XX XX // Текущее положение Y XX XX XX XX // Текущее положение Z XX XX XX XX // Точка назначения X XX XX XX XX // Точка назначения Y XX XX XX XX // Точка назначения Z -------------------------------------------------------------------------------- AuthLoginFail Назначение: сообщает клиенту game-сервер отверг запрос на подключение Формат: 14 // и/или 12 ??? XX XX XX XX // Причина: // 0x00 - Текста нет // 0x01 - Системная ошибка // 0x02 - Пароль не соответствует аккаунту (причем тут тут game server ??? ему пароль даже не высылается Oo) // 0x03 - Пароль не соответствует аккаунту (опять 25, корейцы млин) // 0x04 - Попытка доступа неудачна, попробуйте позже. // 0x05 - Неверный аккаунт, свяжитесь с службой поддержки // 0x06 - Попытка доступа неудачна, попробуйте позже.(что-то у них многовато кодов на одну ошибку) // 0x07 - Аккаунт уже используется(это вроде тоже логин сервер проверять должен) // 0x08 - Попытка доступа неудачна, попробуйте позже. // 0x09 - Попытка доступа неудачна, попробуйте позже. // 0x10 - Попытка доступа неудачна, попробуйте позже. -------------------------------------------------------------------------------- CharCreateOk Назначение: сообщает клиенту что создание чара успешно завершено Формат: 19 01 -------------------------------------------------------------------------------- CharCreateFail Назначение: сообщает клиенту что попытка создания чара авершилась неудачей Формат: 1A XX XX XX XX // Причина: // Creation Failed // Слишком много чаров на акке // Имя чара уже существует // 16 eng chars. (слишком длинное имя ???) -------------------------------------------------------------------------------- CharDeleteOk Назначение: сообщает клиенту что удаление чара прошло успешно Формат: 23 -------------------------------------------------------------------------------- CharDeleteFail Назначение: сообщает клиенту что удаление чара завершилось неудачей Формат: 24 -------------------------------------------------------------------------------- ChangeWaitType Назначение: сообщает клиенту что чар изменил wait тип(незнаю как это лучше на русский перевести :-/ Короче по параметрам понятоно что это такое) Формат: 2F XX XX XX XX // ID чара XX XX XX XX // wait тип: // 00 - сидеть // 01 - стоять // 02 - fake death // 03 - отменить fake death XX XX XX XX // X XX XX XX XX // Y XX XX XX XX // Z -------------------------------------------------------------------------------- TeleportToLocation Назначение: сообщает клиенту что чар телепортировался Формат: 38 XX XX XX XX // ID чара XX XX XX XX // X XX XX XX XX // Y XX XX XX XX // Z -------------------------------------------------------------------------------- ChangeMoveType Назначение: сообщает клиенту что чар изменил тип перемещения Формат: 3E XX XX XX XX // ID чара XX XX XX XX // 00 - хотьба, 01 - бег 00 00 00 00 // C2 -------------------------------------------------------------------------------- ChairSit Назначение: сообщает клиенту что чар сел Формат: E1 XX XX XX XX // ID объекта XX XX XX XX // Static object ID -------------------------------------------------------------------------------- 5. Пакеты от клиетна серверу (Game Server) 00 - ProtocolVersion 01 - MoveBackwardToLocation 02 - Say 03 - EnterWorld 04 - Action 08 - AuthLogin 09 - Logout 0A - AttackRequest 0B - CharacterCreate 0C - CharacterDelete 0D - CharacterSelected 0F - RequestItemList 11 - RequestUnEquipItem 12 - RequestDropItem 14 - UseItem 15 - TradeRequest 16 - AddTradeItem 17 - TradeDone 1B - RequestSocialAction 1C - ChangeMoveType // устарел. Теперь юзается 'RequestActionUse' 1D - ChangeWaitType // устарел. Теперь юзается 'RequestActionUse' 1F - RequestBuyItem 21 - RequestBypassToServer 24 - RequestJoinPledge 25 - RequestAnswerJoinPledge 26 - RequestWithdrawalPledge 27 - RequestOustPledgeMember 29 - RequestJoinParty 2A - RequestAnswerJoinParty 2B - RequestWithDrawalParty 2C - RequestOustPartyMember 2F - RequestMagicSkillUse 30 - Appearing 33 - RequestShortCutReg 35 - RequestShortCutDel 37 - RequestTargetCanceld 38 - Say2 3С - RequestPledgeMemberList 3F - RequestSkillList 40 - AnswerTradeRequest 45 - RequestActionUse 46 - RequestRestart 48 - ValidatePosition 4A - StartRotating 4B - FinishRotating 4D - RequestStartPledgeWar 4F - RequestStopPledgeWar 55 - RequestGiveNickName 58 - RequestEnchantItem 59 - RequestDestroyItem 5E - RequestFriendInvite 5F - RequestAnswerFriendInvite 60 - RequestFriendList 61 - RequestFriendDel 62 - CharacterRestore 63 - RequestQuestList 64 - RequestQuestAbort 66 - RequestPledgeInfo 68 - RequestPledgeCrest 6A - RequestRide 6B - RequestAquireSkillInfo 6C - RequestAquireSkill 6D - RequestRestartPoint 6E - RequestGMCommand 6F - RequestPartyMatchConfig 70 - RequestPartyMatchList 71 - RequestPartyMatchDetail 72 - RequestCrystallizeItem 77 - SetPrivateStoreMsgSell 81 - RequestGmList 82 - RequestJoinAlly 83 - RequestAnswerJoinAlly 84 - AllyLeave 85 - AllyDismiss 88 - RequestAllyCrest 89 - RequestChangePetName 8A - RequestPetUseItem 8B - RequestGiveItemToPet 8C - RequestGetItemFromPet 8E - RequestAllyInfo 8F - RequestPetGetItem 94 - SetPrivateStoreMsgBuy 98 - RequestStartAllianceWar 9А - RequestStopAllianceWar A0 - RequestBlock A2 - RequestSiegeAttackerList A4 - RequestJoinSiege AС - RequestRecipeBookOpen B9 - RequestEvaluate BA - RequestHennaList BB - RequestHennaItemInfo BС - RequestHennaEquip C1 - RequestMakeMacro C2 - RequestDeleteMacro CF - RequestAutoSoulShot В0:10 - RequestExPledgeCrestLarge В0:11 - RequestExSetPledgeCrestLarge EE - RequestChangePartyLeader -------------------------------------------------------------------------------- ProtocolVersion Назначение: передает версию протокола используемого клиентом серверу Формат: 00 XX XX XX XX // Версия протокола -------------------------------------------------------------------------------- MoveBackwardToLocation Назначение: запрос на перемещение чара Формат: 01 XX XX XX XX // Координата X точки назначения XX XX XX XX // Координата Y точки назначения XX XX XX XX // Координата Z точки назначения XX XX XX XX // Координата X текущего положения чара XX XX XX XX // Координата Y текущего положения чара XX XX XX XX // Координата Z текущего положения чара XX XX XX XX // 00 - для движения используеться клавиатура, 01 - для движения используется мышь -------------------------------------------------------------------------------- Say Назначение: отправляет сообщение другим игрокам Формат: 02 XX XX XX XX 00 00 // Cтрока сообщения XX XX XX XX // Тип сообщение // 0x00 - ALL // 0x01 - SHOUT ( ! ) // 0x02 - TELL ( " ) // 0x03 - PARTY ( # ) // 0x04 - CLAN ( @ ) // 0x05 - GM // 0x06 - PETITION_PLAYER // 0x07 - PETITION_GM // 0x08 - TRADE ( + ) // 0x09 - ALLIANCE ( $ ) // 0x0A - ANNOUNCEMENT // 0x0F - PARTYROOM_ALL ( желтый ) // 0x10 - PARTYROOM_COMMANDER ( синий ) // 0x11 - Голос героя XX XX XX XX 00 00 // Для приватных сообщений. Содержит ник чара которому предназначено сообщение. -------------------------------------------------------------------------------- EnterWorld Назначение: пакет, который отсылается клиентом при нажатии на кномпку "Start" в меню выбора чара Формат: 03 -------------------------------------------------------------------------------- Action Назначение: пакет, который отсылается клиентом при клике мышью по НПЦ или другому чару Формат: 04 XX XX XX XX // ID объекта XX XX XX XX // Координата X положения чара XX XX XX XX // Координата Y положения чара XX XX XX XX // Координата Z положения чара XX // 00 - просто клик, 01 - клик с зажатым шифтом -------------------------------------------------------------------------------- AuthLogin Назначение: запрос авторизации на game сервере Формат: 08 XX XX XX XX 00 00 // строка содержащая login XX XX XX XX // session key #1(дается логин сервером) XX XX XX XX // session key #2(дается логин сервером) -------------------------------------------------------------------------------- Logout Назначение: пакет, который отсылается клиентом при выходе из игры Формат: 09 -------------------------------------------------------------------------------- AttackRequest Назначение: запрос на атаку Формат: 0A XX XX XX XX // ID того, кого собираемся атаковать XX XX XX XX // X координата позиции чара XX XX XX XX // Y координата позиции чара XX XX XX XX // Z координата позиции чара XX XX XX XX // 0 - Ctrl не нажат, 1 - Ctrl нажат -------------------------------------------------------------------------------- CharacterCreate Назначение: запрос на создание чара Формат: 0B XX XX XX XX 00 00 // Строка с именем чара XX XX XX XX // Расса XX XX XX XX // Пол XX XX XX XX // Класс XX XX XX XX // INT XX XX XX XX // STR XX XX XX XX // CON XX XX XX XX // MEN XX XX XX XX // DEX XX XX XX XX // WIT XX XX XX XX // Стиль волос XX XX XX XX // Цвет волос XX XX XX XX // Тип лица -------------------------------------------------------------------------------- CharacterDelete Назначение: ставит чара на удаление Формат: 0C XX XX XX XX // Номер слота с чаром -------------------------------------------------------------------------------- CharacterSelected Назначение: выбирает чара. Отсылается при клике на чара в меню выбора чара. Формат: 0D XX XX XX XX // Номер слота с чаром -------------------------------------------------------------------------------- RequestItemList Назначение: запросить список вещей находящихся в инвентаре.(клиент открывает инвентарь, когда сервер высылает этот список) Формат: 0F -------------------------------------------------------------------------------- RequestUnEquipItem Назначение: Снимает эквип с чара Формат: 11 XX XX XX XX // Номер слота -------------------------------------------------------------------------------- RequestDropItem Назначение: запрос за дроп итема. Отправляется клиентом, при попытке выбросить из инвентаря какую-либо вещь Формат: 12 XX XX XX XX // ID итема который хотим выбросить XX XX XX XX // количество итемов которое мы хотим выбросить XX XX XX XX // X кордината места в которое выбрасываем итем XX XX XX XX // Y кордината места в которое выбрасываем итем XX XX XX XX // Z кордината места в которое выбрасываем итем -------------------------------------------------------------------------------- UseItem Назначение: запрос на использование итема Формат: 14 XX XX XX XX // ID объекта -------------------------------------------------------------------------------- TradeRequest Назначение: запрос торговлю. Формат: 15 XX XX XX XX // ID объекта с которым хотим торговать -------------------------------------------------------------------------------- AddTradeItem Назначение: добавляет итем в трейд лист. Формат: 16 XX XX XX XX // ID трейда XX XX XX XX // ID объекта XX XX XX XX // количество -------------------------------------------------------------------------------- TradeDone Назначение: запрос на завершение торговли. Формат: 17 XX XX XX XX // 0 - отменить сделку, 1 - подтвердить сделку -------------------------------------------------------------------------------- RequestSocialAction Назначение: вызывает анимацию социальных действий вроде смеха и т.п. Формат: 1B XX XX XX XX // Номер экшина // 0x02 - Greeting // 0x03 - Victory // 0x04 - Advance // 0x05 - No // 0x06 - Yes // 0x07 - Bow // 0x08 - Unaware // 0x09 - Social Waiting // 0x0A - Laugh // 0x0B - Applaud // 0x0C - Dance // 0x0D - Sorrow // 0x0F - Анимация как при lvl-up // 0x10 - Анимация героев -------------------------------------------------------------------------------- ChangeMoveType Назначение: включает/выключает бег Формат: 1C XX XX XX XX // 0 - бег выключен, 1 - бег включен -------------------------------------------------------------------------------- ChangeWaitType Назначение: сесть/встать Формат: 1D XX XX XX XX // 0 - сесть, 1 - встать -------------------------------------------------------------------------------- RequestTargetCanceld Назначение: Отменяет таргет Формат: 1D -------------------------------------------------------------------------------- RequestBuyItem Назначение: Запрос на покупку вещей Формат: 1F XX XX XX XX // ID сиска покупок XX XX XX XX // количество вещей которые нужно купить // <<< Блок повторяется столько раз, сколько разных вещей нужно купить XX XX XX XX // ID предмета который нужно купить XX XX XX XX // количество предметов которые нужно купить ... -------------------------------------------------------------------------------- RequestBypassToServer Назначение: передает "bypass"(содержаться в HTML) команду серверу. Формат: 21 XX XX XX XX 00 00 // строка с коммандой -------------------------------------------------------------------------------- RequestJoinPledge Назначение: отправляет чару предложение вступить в клан. Формат: 24 XX XX XX XX // ID чара, которому высылается предложение -------------------------------------------------------------------------------- RequestAnswerJoinPledge Назначение: ответ на предложение о вступлении в клан Формат: 25 XX XX XX XX // ответ: 00 - нет, 01 - да -------------------------------------------------------------------------------- RequestWithdrawalPledge Назначение: выйти из клана Формат: 26 -------------------------------------------------------------------------------- RequestOustPledgeMember Назначение: удалить чара из клана Формат: 27 XX XX XX XX 00 00 // строка с именем чара -------------------------------------------------------------------------------- RequestJoinParty Назначение: предложить вступить в пати Формат: 29 XX XX XX XX 00 00 // ник чара, которому отсылается предложение XX XX XX XX // тип распределения предметов: // 0x00 - дроп получает подобравший его чар, споил - достается спойлеру // 0x01 - дроп распределяется случайным образом, споил - достается спойлеру // 0x02 - дроп и споил, распределяется случайным образом // 0x03 - дроп дается чарам по очереди, споил - достается спойлеру // 0x04 - дроп и споил, дается чарам по очереди -------------------------------------------------------------------------------- RequestAnswerJoinParty Назначение: ответ на предложение вступить в пати Формат: 2A XX XX XX XX // ответ: 00 - нет, 01 - да -------------------------------------------------------------------------------- RequestWithDrawalParty Назначение: выйти из пати Формат: 2B -------------------------------------------------------------------------------- RequestOustPartyMember Назначение: удалить чара из пати Формат: 2C XX XX XX XX 00 00 // строка с именем чара которого следует удалить -------------------------------------------------------------------------------- RequestMagicSkillUse Назначение: использовать магический скилл Формат: 2F XX XX XX XX // ID скилла XX XX XX XX // состояние CTRL : 00 - отпущен, 01 - нажат XX XX XX XX // состояние SHIFT: 00 - отпущен, 01 - нажат -------------------------------------------------------------------------------- Appearing Назначение: Запрашивает возрождение чара после смерти. Вызывается после пакетов RequestRestartPoint и ValidatePosition Формат: 30 -------------------------------------------------------------------------------- RequestShortCutReg Назначение: Регестрирует ярлык на панеле быстрого доступа. Формат: 33 XX XX XX XX // Тип ярлыка // 0x01 - итем // 0x02 - скилл // 0x03 - действие // 0x04 - макрос XX XX XX XX // идентификатор объекта выносимого на панель XX XX XX XX // номер слота XX XX XX XX // номер закладки XX XX XX XX // неизвестно -------------------------------------------------------------------------------- RequestShortCutDel Назначение: Удаляет ярлык с панели быстрого доступа. Формат: 35 XX XX XX XX // номер слота XX XX XX XX // номер закладки -------------------------------------------------------------------------------- Say2 Назначение: отправляет сообщение другим игрокам Формат: 38 XX XX XX XX 00 00 // Cтрока сообщения XX XX XX XX // Тип сообщение // 0x00 - ALL // 0x01 - SHOUT ( ! ) // 0x02 - TELL ( " ) // 0x03 - PARTY ( # ) // 0x04 - CLAN ( @ ) // 0x05 - GM // 0x06 - PETITION_PLAYER // 0x07 - PETITION_GM // 0x08 - TRADE ( + ) // 0x09 - ALLIANCE ( $ ) // 0x0A - ANNOUNCEMENT // 0x0F - PARTYROOM_ALL ( желтый ) // 0x10 - PARTYROOM_COMMANDER ( синий ) // 0x11 - Голос героя XX XX XX XX 00 00 // Для приватных сообщений. Содержит ник чара которому предназначено сообщение. -------------------------------------------------------------------------------- RequestPledgeMemberList Назначение: запросить список членов клана Формат: 3C -------------------------------------------------------------------------------- RequestSkillList Назначение: запрашивает список изученных скилов Формат: 3F -------------------------------------------------------------------------------- AnswerTradeRequest Назначение: ответ на трейд Формат: 40 XX XX XX XX // Ответ на трейд: 00 - отклонить, 01 - подтвердить -------------------------------------------------------------------------------- RequestActionUse Назначение: выполняет действие Формат: 45 XX XX XX XX // Action ID (список не полный, экшинов там дофига) // 0x00 - Сесть/встать // 0x01 - Идти/бежать // 0x19 - Ансаммонить пета // 0x33 - General manufacture // 0x38 - Зазезть/слезть с страйдера (вирна ???) XX XX XX XX // 00 - CTRL не нажат, 01 - CTRL нажат XX // 01 - SHIFT не нажат, 01 - SHIFT нажат -------------------------------------------------------------------------------- RequestRestart Назначение: возвращает в меню выбора чара Формат: 46 -------------------------------------------------------------------------------- ValidatePosition Назначение: вызывает перезагрузку данных, НПЦ, других игроков и прочее. Фактически вызывает телепортацию в текущие координаты игрока. Формат: 48 XX XX XX XX // X XX XX XX XX // Y XX XX XX XX // Z XX XX XX XX // Направление взгляда XX XX XX XX // ??? -------------------------------------------------------------------------------- StartRotating Назначение: Включает вращение чара вокруг своей оси Формат: 4A XX XX XX XX // Угол (принимает значения от 0 до 65535) XX XX XX XX // сторона ( 01 00 00 00 - вращение вправо, FF FF FF FF - вращение влево ) -------------------------------------------------------------------------------- FinishRotating Назначение: прекращает вращение чара вокруг своей оси Формат: 4B XX XX XX XX // Неизвестно XX XX XX XX // Неизвестно -------------------------------------------------------------------------------- RequestStartPledgeWar Назначение: начать кланвар Формат: 4D XX XX XX XX 00 00 // строка с названием клана, которому объявляется кланвар -------------------------------------------------------------------------------- RequestStartPledgeWar Назначение: закончить клан вар Формат: 4F XX XX XX XX 00 00 // строка с названием клана -------------------------------------------------------------------------------- RequestGiveNickName Назначение: устанавить титул. Формат: 55 XX XX XX XX 00 00 // строка содержащая ник чара которому требуется установить титул XX XX XX XX 00 00 // строка содержащая титул -------------------------------------------------------------------------------- RequestEnchantItem Назначение: запрашивает энчат интема. Формат: 58 XX XX XX XX // ID итема который хотим заэнчатить -------------------------------------------------------------------------------- RequestDestroyItem Назначение: запрос на уничтожение итема Формат: 59 XX XX XX XX // ID итема XX XX XX XX // количество итемов? -------------------------------------------------------------------------------- RequestFriendInvite Назначение: занести чара в френд лист Формат: 5E XX XX XX XX 00 00 // строка с именем чара, которого следует добавить -------------------------------------------------------------------------------- RequestAnswerFriendInvite Назначение: ответ на предложение добавления в список друзей Формат: 5F XX XX XX XX // 00 - нет, 01 - да -------------------------------------------------------------------------------- RequestFriendList Назначение: запрос френдлиста Формат: 60 -------------------------------------------------------------------------------- RequestFriendDel Назначение: запрос на удаление чара из френд листа Формат: 61 XX XX XX XX 00 00 // строка с именем чара, которого следует удалить -------------------------------------------------------------------------------- CharacterRestore Назначение: отменяет удаление чара Формат: 62 XX XX XX XX // номер слота с чаром -------------------------------------------------------------------------------- RequestQuestList Назначение: запросить список квестов Формат: 63 -------------------------------------------------------------------------------- RequestQuestAbort Назначение: прервать выполнение квеста Формат: 64 XX XX XX XX // ID квеста -------------------------------------------------------------------------------- CharacterRestore Назначение: запрос информации о клане Формат: 66 XX XX XX XX // ID клана -------------------------------------------------------------------------------- RequestPledgeCrest Назначение: устанавливает иконку клана Формат: 68 XX XX XX XX // ID иконки -------------------------------------------------------------------------------- RequestRide Назначение: залезть/слезть на страйдера/вирна Формат: 6A XX XX XX XX // 0 - слезть, 1 - залезть XX XX XX XX // 1 - страйдер, 2 - вивирен -------------------------------------------------------------------------------- RequestAquireSkillInfo Назначение: запрос информации о скилле Формат: 6B XX XX XX XX // ID скилла XX XX XX XX // уровень скилла -------------------------------------------------------------------------------- RequestAquireSkill Назначение: запрос на изучение скилла Формат: 6C XX XX XX XX // ID скилла XX XX XX XX // уровень скилла -------------------------------------------------------------------------------- RequestRestartPoint Назначение: запрашивает рестарт после смерти чара Формат: 6D XX XX XX XX // точка в которую будет возвращен игрок // 0x00 - Город // 0x01 - Клан холл // 0x02 - Замок // 0x03 - Флаг (при осаде замка) // 0x04 - Ресс на месте на котором умер игрок, используется на фестивале -------------------------------------------------------------------------------- RequestGMCommand Назначение: отсылает запрос на GM комманду Формат: 6E XX XX XX XX 00 00 // строка с именем чара - цели XX XX XX XX // идентификатор комманды // 0x01 - статус игрока // 0x02 - клан игрока // 0x03 - скилы игрока // 0x04 - квесты игрока // 0x05 - инвентарь игрока // 0x06 - вархаус игрока XX XX XX XX // неизвестно -------------------------------------------------------------------------------- RequestPartyMatchConfig Назначение: открыть окно поиска пати Формат: 6F XX XX XX XX // автомтическая регистрация: 00 - нет, 01 - да XX XX XX XX // показывать уровень: 00 - нет, 01 - да XX XX XX XX // показывать класс: 00 - нет, 01 - да -------------------------------------------------------------------------------- RequestPartyMatchList Назначение: запросить список чаров ищущих пати Формат: 70 XX XX XX XX // статус может быть 1 и 3. Что значит наверняка, я не знаю. -------------------------------------------------------------------------------- RequestPartyMatchDetail Назначение: запросить подробную информуцию о чаре ищущем пати Формат: 71 XX XX XX XX // ID чара -------------------------------------------------------------------------------- RequestCrystallizeItem Назначение: запрос на кристализацию итема Формат: 72 XX XX XX XX // ID итема который нужно кристализовать XX XX XX XX // количество итемов, которые нужно кристализовать -------------------------------------------------------------------------------- SetPrivateStoreMsgSell Назначение: устанавливает сообщение на продажу для PrivateStore Формат: 77 XX XX XX XX 00 00 // строка с сообщением -------------------------------------------------------------------------------- RequestGmList Назначение: запрос списка GMов Формат: 81 -------------------------------------------------------------------------------- RequestJoinAlly Назначение: предложить вступить в аллианс Формат: 82 XX XX XX XX // ID лидера клана, который преглашается в алли -------------------------------------------------------------------------------- RequestAnswerJoinAlly Назначение: ответ на предложение вступления в аллианс Формат: 83 XX XX XX XX // ответ: 00 - нет, 01 - да -------------------------------------------------------------------------------- AllyLeave Назначение: покинуть аллианс Формат: 84 XX XX XX XX 00 00 // строка с названием клана -------------------------------------------------------------------------------- AllyDismiss Назначение: запрос на роспуск аллианса Формат: 85 XX XX XX XX 00 00 // строка с именем клана -------------------------------------------------------------------------------- RequestAllyCrest Назначение: запрос на установку иконки аллианса Формат: 88 XX XX XX XX // ID иконки -------------------------------------------------------------------------------- RequestChangePetName Назначение: меняет имя пета Формат: 89 XX XX XX XX 00 00 // строка с новым именем пита -------------------------------------------------------------------------------- RequestPetUseItem Назначение: команда питу использовать итем Формат: 8A XX XX XX XX // ID объекта которых нужно использовать -------------------------------------------------------------------------------- RequestGiveItemToPet Назначение: переместить итем из своего инвентаря в инвентарь пита Формат: 8B XX XX XX XX // ID итема XX XX XX XX // количество -------------------------------------------------------------------------------- RequestGetItemFromPet Назначение: переместить итем из инвентаря пита к себе в инвентарь Формат: 8С XX XX XX XX // ID итема XX XX XX XX // количество XX XX XX XX // фиг его знает. В большинстве случаев - 0 -------------------------------------------------------------------------------- RequestAllyInfo Назначение: запрос информации об аллиансе. Формат: 8E -------------------------------------------------------------------------------- RequestPetGetItem Назначение: команда питу поднять итем. Формат: 8F XX XX XX XX // ID который надлежит поднять -------------------------------------------------------------------------------- SetPrivateStoreMsgBuy Назначение: устанавливает сообщение на покупку для PrivateStore Формат: 94 XX XX XX XX 00 00 // строка с сообщением -------------------------------------------------------------------------------- RequestStartAllianceWar Назначение: объявить алли вар Формат: 98 XX XX XX XX 00 00 // строка с именем аллианса -------------------------------------------------------------------------------- RequestStopAllianceWar Назначение: запрос о прекращении алли вар'а Формат: 9A XX XX XX XX 00 00 // строка с именем аллианса -------------------------------------------------------------------------------- RequestBlock Назначение: запрос операции над черным списком Формат: A0 XX XX XX XX // тип запроса: // 0x00 - добавить чара в игнор // 0x01 - удалить чара из игнора // 0x02 - вывесли список чаров занесенных в игнор // 0x03 - игнор всех // 0x04 - отменить игнор всех XX XX XX XX 00 00 // строка с именем чара которого надо занести в игнор -------------------------------------------------------------------------------- RequestSiegeAttackerList Назначение: запрашивает список записаных на осаду замка атакующих кланов Формат: A2 XX XX XX XX // ID замка -------------------------------------------------------------------------------- RequestJoinSiege Назначение: добавить/удалить клан в список осады замка Формат: A4 XX XX XX XX // ID замка XX XX XX XX // 00 - присоедениться к защитникам, 01 - присоедениться к атакующим XX XX XX XX // 00 - удалить клан из списка, 01 - добавить клан в список -------------------------------------------------------------------------------- RequestRecipeBookOpen Назначение: открыть книгу рецептов Формат: AС -------------------------------------------------------------------------------- RequestEvaluate Назначение: запрос на рекомендацию игрока Формат: B9 XX XX XX XX // ID цели -------------------------------------------------------------------------------- RequestHennaList Назначение: запросить список доступных татуировок Формат: BA XX XX XX XX // неизвестно -------------------------------------------------------------------------------- RequestHennaItemInfo Назначение: получить информацию о татуировке Формат: BB XX XX XX XX // ID татуировки -------------------------------------------------------------------------------- RequestHennaEquip Назначение: запрос на нанесение татуировки Формат: BС XX XX XX XX // ID татуировки которую нужно нанести -------------------------------------------------------------------------------- RequestMakeMacro Назначение: запрос на создание макроса Формат: С1 XX XX XX XX // ID макроса XX XX XX XX 00 00 // строка содержащая имя макроса XX XX XX XX 00 00 // строка с описанием макроса XX XX XX XX 00 00 // строка с текстом на иконке XX // ID иконки XX // количество строк // <<<<< Следующий блок повторяется столько раз, сколько строк в макросе. XX // строка XX // тип XX // ID скилла XX // ID ярлыка на панели XX XX XX XX 00 00 // имя комманды -------------------------------------------------------------------------------- RequestDeleteMacro Назначение: запрос на удаление макроса Формат: C2 XX XX XX XX // ID макроса -------------------------------------------------------------------------------- RequestAutoSoulShot Назначение: включает/выключает использование AutoSS Формат: CF XX XX XX XX // идентификатор итема XX XX XX XX // 1 - включить : 0 - выключить -------------------------------------------------------------------------------- RequestExPledgeCrestLarge Назначение: запросить данные изображения большой иконки клана(те что размещаються на вещах клана типа щитов) клана Формат: D0 10 XX XX XX XX // ID иконки -------------------------------------------------------------------------------- RequestExSetPledgeCrestLarge Назначение: отправить данные изображения большой иконки клана(те что размещаються на вещах клана типа щитов) на сервер Формат: D0 11 XX XX XX XX // размер данных // <<<<< Следующий блок повторяется столько раз, сколько байт в данных изображения XX // данные изображения -------------------------------------------------------------------------------- RequestChangePartyLeader Назначение: передает лидерство в пати Формат: EE XX XX XX XX 00 00 // строка с именем чара, которому передается лидерство 1. Общие сведения 1.1. Процесс входа в игру: 1) Сразу после установки соединения сервер отправляет клиенту пакет Init 2) С этого момента, все следующие пакеты для/от LS зашифрованны Blowfish'ем, ключем является: Token + символ с кодом ноль (так что длина ключа не 20, а 21!) 3) Клиент отправляет пакет RequestAuthLogin, содержащий логин и пароль 4) Если авторизация прошла успешно, сервер присылает пакет LoginOk, содержащий SessionKey1. Иначе, сервер присылает пакет LoginFail, содержащий информацию о причине неудачной авторизации. 5) Клиент запрашивает список серверов отправляя пакет RequestServerList 6) Сервер присылает пакет ServerList, в котором содержится список доступных гейм серверов, с указанием IP-адресов/портов каждого сервера, его состояния, количеством игроков и некоторой другой информацией 7) Клиент отсылает пакет RequestServerLogin 8) Сервер проверяет, можно ли подключится к выбранному GS, если да - сервер присылает пакет PlayOk, содержащий SessionKey2. Иначе, сервер присылает пакет PlayFail, содержащий информацию почему нельзя подключится. 9) Теперь мы можем попрощатся с LS и закрыть соединение с ним. (мы получили от него все необходимые данные) 10) Открываем соединение с GS. (IP-адресс и порт сервера мы получили в пакете ServerList) 11) Клиент отправляет пакет ProtocolVersion 12) Сервер присылает пакет FirstKey, содержащий первые 4 байта ключа XorKey 13) С этого момента, все следующие пакеты для/от GS зашифрованны! (о шифровании и ключе - будет чуть ниже) 14) Клиент отправляет пакет RequestAuthLogin 15) Сервер присылает CharacterSelectionInfo, содержащий список чаров 16) [тут может идти общение с сервером по управлению чарами - созадание, удаление, востановление. Вдаватся не буду, ибо вам это пока не нужно. Просто пропускаем этот пункт.] 17) Клиент отправляет пакет CharacterSelected, содержащий номер чара, которым мы хотим зайти 18) Сервер присылает пакет SSQInfo, он необходим клиенту для выбора цвета неба и луны. 19) Сервер присылает пакет CharacterSelected 20) Клиент отправляет пакет RequestManorList, и сразу же за ним отправляет пакет RequestQuestList 21) Сервер присылает пакет ExSendManorList 22) Сервер присылает пакет QuestList, но обратите внимание - в данный момент нам будет сказанно что квестов/итемов - ноль, даже если это не так 23) Клиент отправляет пакет EnterWorld - Поздравляю, мы в игре! Замечание: GS через определенные интервалы времени (~60сек), присылает пакет NetPing, из которого мы должны сохранить значение, и вставив его в одноименный пакет NetPing, отправить серверу. Дальше могу вас обрадовать - все просто до безобразия! ^_^ Кроме ответа на NetPing мы мы не обязанны чтолибо отсылать серверу. А значит можем бесконечно долго находится в игре и просто слушать то, что нам шлет сервер. Неизвестные пакеты мы просто игнорируем! 1.1.2 Общение с сервером по управлению чарами: Создание: 1) Когда клиент открывает окошко создания чара, серверу отправляется пакет NewCharacter 2) Сервер присылает пакет NewCharacterSuccess, содержащий статы базовых классов в игре 3) При нажатии на кнопку создать, клиент оправляет пакет CharacterCreate 4) Если чар удачно создан, сервер присылает пакет CharacterCreateSuccess, и следом за ним присылает обновленный список чаров: CharacterSelectionInfo. Если же создать чара не удалось, сервер присылает пакет CharacterCreateFail, и возвращаемся в предыдущий пункт Удаление: 1) Клиент отправляет пакет CharacterDelete, содержащий номер чара, которого мы хотим удалить 2) Если чр удачно удален, сервер присылает пакет CharacterDeleteSuccess, если же удалить чара не удалось, сервер присылает пакет CharacterDeleteFail 3) Удалось удалить чара или нет, сервер присылает обновленный список чаров: CharacterSelectionInfo Востановление: 1) Клиент отправляет пакет CharacterRestore, содержащий номер чара, которого мы хотим востановить 2) Если востановление было удачно, сервер присылает обновленный список чаров: CharacterSelectionInfo, если же нет, то ничего. 1.2. Шифрация пакетов GameServer'a: Чтобы не загружать ваши и без того замученные головы, вместо алгоритмов, я дам готовые исходники (немного измененные для наглядности): char key_sc[8]; char key_cs[8]; void Encrypt(char *raw, int size) { int temp = 0; for (int i=0; i> 0x08 &0xff); key_cs[2] = (char)(old >> 0x10 &0xff); key_cs[3] = (char)(old >> 0x18 &0xff); } void Decode(char *input, int size) { int i = 0; int j = 0; for(int k=0; k < size; k++) { int i1 = input[k] & 0xFF; input[k] = (char)(i1 ^ key_sc[j++] & 0xFF ^i); i = i1; if(j>7) j=0; } long l = key_sc[0] & 0xFF; l |= key_sc[1] << 8 & 0xFF00; l |= key_sc[2] << 16 & 0xFF0000; l |= key_sc[3] << 24 & 0xFF000000; l += size; key_sc[0] = (char)(l & 255L); key_sc[1] = (char)(l >> 8 & 255L); key_sc[2] = (char)(l >> 16 & 255L); key_sc[3] = (char)(l >> 24 & 255L); } void Key(char* packet, int len) { key_sc[0] = packet[4]; key_sc[1] = packet[5]; key_sc[2] = packet[6]; key_sc[3] = packet[7]; key_sc[4] = (char)0xA1; key_sc[5] = (char)0x6C; key_sc[6] = (char)0x54; key_sc[7] = (char)0x87; for(i=0;i<8;i++) {key_cs[i]=key_sc[i];} } void add_ckecksum(unsigned char *raw, int count) //вычисляет чексумму и вставляет её в пакет { //как пользоватся: add_ckecksum(CelyjPaket+2, DlinaPaketa-(2+4+4)); unsigned long chksum = 0; unsigned long ecx; int i = 0; for(i = 0; i < count; i += 4) { ecx = (unsigned long)raw[i]; ecx |= (unsigned long)raw[i + 1]<<8; ecx |= (unsigned long)raw[i + 2]<<16; ecx |= (unsigned long)raw[i + 3]<<24; chksum ^= ecx; } memcpy(raw+count, (char *)&chksum, 4); } Во первых заметьте, что после каждой шифрации или дешифрации ключ которым мы пользовались, будет немного изменен! И обратите особое внимание, у нас два ключа!!! Одним мы шифруем пакеты, которые мы отправляем серверу, вторым мы дешифруем пакеты которые сервер присылает нам. Процедура Key из данных пакета FirstKey устанавливает нам оба ключа (изначально они равну друг другу). Да, и забыл сказать - и Blowfish, и Xor-шифрация шифруют пакет начиная с третего байта! (т.е. первые два байта, означающие размер пакета - НЕ ШИФРУЮТСЯ!!!) 2. Пакеты Client -> Login Server 00 - RequestAuthLogin 02 - RequestServerLogin 05 - RequestServerList -------------------------------------------------------------------------------- RequestAuthLogin Формат: 32 00 // Длина 00 // Тип XX XX XX XX XX XX XX XX XX XX XX XX XX XX // Login (учтите, эта строка - массив из 14 символов) XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX // Password (... из 16 символов ...) 08 00 00 00 00 00 00 00 00 XX XX XX XX // чексумма 00 00 00 00 Замечание: Если длина логина/пароля равна длине массива, то строка идет без ноль-терминатора! -------------------------------------------------------------------------------- RequestServerLogin Формат: 1A 00 // Длина 02 // Тип XX XX XX XX // SessionKey1_FistPart из LoginOk XX XX XX XX // SessionKey1_SecondPart из LoginOk XX // ID сервера 00 00 00 00 00 00 XX XX XX XX // чексумма 00 00 00 00 -------------------------------------------------------------------------------- RequestServerList Формат: 1A 00 // Длина 05 // Тип XX XX XX XX // SessionKey1_FistPart из LoginOk XX XX XX XX // SessionKey1_SecondPart из LoginOk 04 00 00 00 00 00 00 XX XX XX XX // чексумма 00 00 00 00 -------------------------------------------------------------------------------- 3. Пакеты Login Server -> Client 00 - Init 01 - LoginFail 03 - LoginOk 04 - ServerList 07 - PlayOk -------------------------------------------------------------------------------- Init Формат: 0B 00 // Длина 00 // Тип XX XX XX XX // ID сессии XX XX XX XX // Ревизия протокола, на моем сервере она равна 0x785A -------------------------------------------------------------------------------- LoginFail Формат: 12 00 // Длина 01 // Тип XX // причина неудачной авторизации 00 00 00 00 00 00 XX XX XX XX // чексумма 00 00 00 00 Причина: 0x03 - Password does not match this account. 0x07 - The account is already in use. Access denied. 0x12 - Your usage term has expired. Please visit the official Lineage2 website at... Замечание: в байтах 5-10, и последних четырех - часто попадается мусор... -------------------------------------------------------------------------------- LoginOk Формат: 32 00 // Длина 03 // Тип XX XX XX XX // SessionKey1_FistPart XX XX XX XX // SessionKey1_SecondPart 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 XX XX XX XX // чексумма 00 00 00 00 Замечание: в байтах 40-42, и последних четырех - часто попадается мусор... -------------------------------------------------------------------------------- ServerList Формат: XX XX // Длина 04 // Тип XX // Количество серверов XX // {номер LS} [начало повторяющегося блока] XX // ID сервера XX XX XX XX // IP-аддресс GS XX XX XX XX // Port GS XX // возрастной лимит XX // PVP сервер: 1-да, 0 - нет XX XX // Количество игроков онлайн XX XX // Максимальное количество игроков XX // Статус сервера: 1-UP, 0-DOWN XX XX XX XX // {Статус сервера} XX // {Статус сервера} [конец повторяющегося блока] 00 00 00 XX XX XX XX // чексумма 00 00 00 00 Замечание: в последних 4 байтах и 2 байтах перед чексуммой - часто попадается мусор... -------------------------------------------------------------------------------- PlayOk Формат: 1A 00 // Длина 07 // Тип XX XX XX XX // SessionKey2_FistPart XX XX XX XX // SessionKey2_SecondPart 01 00 00 00 00 00 00 XX XX XX XX // чексумма 00 00 00 00 Замечание: в байтах 13-18, и последних четырех - часто попадается мусор... -------------------------------------------------------------------------------- PlayFail Формат: 12 00 // Длина 06 // Тип XX // Причина 00 00 00 00 00 00 XX XX XX XX // чексумма 00 00 00 00 Причина: { 0x08 - Access failed. Please try again later... } Замечание: в байтах 5-10, и последних четырех - часто попадается мусор... -------------------------------------------------------------------------------- 4. Пакеты Client -> Game Server 00 - ProtocolVersion 03 - EnterWorld 08 - RequestAuthLogin 0B - CharacterCreate 0C - CharacterDelete 0D - CharacterSelected 0E - NewCharacter 62 - CharacterRestore 63 - RequestQuestList A8 - NetPing D008 - RequestManorList -------------------------------------------------------------------------------- ProtocolVersion Формат: 07 01 // Длина 00 // Тип XX XX XX XX // ProtocolVersion [далее идет массив-константа, который хз от чего зависит, у меня он такой:] 09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07 53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02 53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06 01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D 01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06 Др.названия: VersionCheck, SendProtocolVersion Замечание: кто знает, от чего зависит этот "массив-константа", плз напишите мне на мыло: -------------------------------------------------------------------------------- RequestAuthLogin Формат: XX XX // Длина 08 // Тип XX XX ... 00 00 // Login (Unicode строка) XX XX XX XX // SessionKey2_SecondPart XX XX XX XX // SessionKey2_FistPart XX XX XX XX // SessionKey1_FistPart XX XX XX XX // SessionKey1_SecondPart 01 00 00 00 Др.названия: AuthLogin -------------------------------------------------------------------------------- CharacterSelected Формат: 15 00 // Длина 0D // Тип XX XX XX XX // Номер чара 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -------------------------------------------------------------------------------- RequestManorList Формат: 05 00 // Длина D0 // Тип 08 00 // Подтип -------------------------------------------------------------------------------- RequestQuestList Формат: 03 00 // Длина 63 // Тип -------------------------------------------------------------------------------- EnterWorld Формат: 13 00 // Длина 03 // Тип 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -------------------------------------------------------------------------------- NetPing Формат: 0F 00 // Длина A8 // Тип XX XX XX XX // {ID пинга}, из пакета NetPing XX XX XX XX // Пинг 00 08 00 00 -------------------------------------------------------------------------------- NewCharacter Формат: 03 00 // Длина 0E // Тип -------------------------------------------------------------------------------- CharacterCreate Формат: XX XX // Длина 0B // Тип XX XX ... 00 00 // Имя создаваемого чара (Unicode строка) XX XX XX XX // Race XX XX XX XX // Sex XX XX XX XX // ClassID XX XX XX XX // INT XX XX XX XX // STR XX XX XX XX // CON XX XX XX XX // MEN XX XX XX XX // DEX XX XX XX XX // WIT XX XX XX XX // HairStyle XX XX XX XX // HairColor XX XX XX XX // Face Замечание: STR,DEX,CON,INT,WIT,MEN - это базовые статы выбранного класса, знаем мы их из пакета NewCharacterSuccess (но на самом деле, сервер их игнорирует!) -------------------------------------------------------------------------------- CharacterDelete Формат: 07 00 // Длина 0C // Тип XX XX XX XX // Номер чара -------------------------------------------------------------------------------- CharacterRestore Формат: 07 00 // Длина 62 // Тип XX XX XX XX // Номер чара -------------------------------------------------------------------------------- 5. Пакеты Game Server -> Client 00 - FirstKey 04 - UserInfo 0 13 - CharacterSelectionInfo 15 - CharacterSelected 17 - NewCharacterSuccess 19 - CharacterCreateSuccess 1A - CharacterCreateFail 23 - CharacterDeleteSuccess 24 - CharacterDeleteFail 4A - Say2 80 - QuestList 0 D3 - NetPing F8 - SSQInfo FE1B - ExSendManorList -------------------------------------------------------------------------------- FirstKey Формат: 10 00 // Длина 00 // Тип XX // Неизвестно XX XX XX XX // XorKey_FistPart 01 00 00 00 01 00 00 00 Др.названия: KeyPacket, XorKey -------------------------------------------------------------------------------- CharacterSelectionInfo Формат: XX XX // Длина 13 // Тип XX XX XX XX // количество чаров [начало повторяющегося блока] XX XX ... 00 00 // Name (Unicode строка) XX XX XX XX // Char ID XX XX ... 00 00 // Login (Unicode строка) XX XX XX XX // Session ID XX XX XX XX // Clan ID 00 00 00 00 XX XX XX XX // Sex XX XX XX XX // Race XX XX XX XX // BaseClass ID 01 00 00 00 XX XX XX XX // X XX XX XX XX // Y XX XX XX XX // Z XX XX XX XX XX XX XX XX // HP (вещественный тип - Double) XX XX XX XX XX XX XX XX // MP (вещественный тип - Double) XX XX XX XX // SP XX XX XX XX // EXP XX XX XX XX // lvl XX XX XX XX // Karma 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 XX XX XX XX // ItemObjectID Under XX XX XX XX // ItemObjectID REar XX XX XX XX // ItemObjectID LEar XX XX XX XX // ItemObjectID Neck XX XX XX XX // ItemObjectID RFinger XX XX XX XX // ItemObjectID LFinger XX XX XX XX // ItemObjectID Head XX XX XX XX // ItemObjectID RHand XX XX XX XX // ItemObjectID LHand XX XX XX XX // ItemObjectID Gloves XX XX XX XX // ItemObjectID Chest XX XX XX XX // ItemObjectID Legs XX XX XX XX // ItemObjectID Feet XX XX XX XX // ItemObjectID Back XX XX XX XX // ItemObjectID LRHand XX XX XX XX // ItemObjectID Hair XX XX XX XX // ItemID Under XX XX XX XX // ItemID REar XX XX XX XX // ItemID LEar XX XX XX XX // ItemID Neck XX XX XX XX // ItemID RFinger XX XX XX XX // ItemID LFinger XX XX XX XX // ItemID Head XX XX XX XX // ItemID RHand XX XX XX XX // ItemID LHand XX XX XX XX // ItemID Gloves XX XX XX XX // ItemID Chest XX XX XX XX // ItemID Legs XX XX XX XX // ItemID Feet XX XX XX XX // ItemID Back XX XX XX XX // ItemID LRHand XX XX XX XX // ItemID Hair XX XX XX XX // HairStyle XX XX XX XX // HairColor XX XX XX XX // Face XX XX XX XX XX XX XX XX // MaxHP (вещественный тип - Double) XX XX XX XX XX XX XX XX // MaxMP (вещественный тип - Double) XX XX XX XX // Delete (количество секунд до удаления) XX XX XX XX // Class ID XX XX XX XX // Last Used? (for auto-select char) XX // Enchant Effect (на сколько заточенна пушка) [конец повторяющегося блока] Др.названия: CharSelectInfo -------------------------------------------------------------------------------- SSQInfo Формат: 05 00 // Длина F8 // Тип XX XX // кто победил в Seven Signs: 258: Dawn 257: Dusk { 256: None } Др.названия: SignsSky -------------------------------------------------------------------------------- CharacterSelected Формат: XX XX // Длина 15 // Тип XX XX ... 00 00 // CharName (Unicode строка) XX XX XX XX // Char ID XX XX ... 00 00 // { Title (Unicode строка) } XX XX XX XX // Session ID XX XX XX XX // Clan ID 00 00 00 00 XX XX XX XX // Sex XX XX XX XX // Race XX XX XX XX // { Class ID } 01 00 00 00 XX XX XX XX // X XX XX XX XX // Y XX XX XX XX // Z XX XX XX XX XX XX XX XX // HP (вещественный тип - Double) XX XX XX XX XX XX XX XX // MP (вещественный тип - Double) XX XX XX XX // SP XX XX XX XX // EXP XX XX XX XX // lvl XX XX XX XX // Karma 00 00 00 00 XX XX XX XX // STR XX XX XX XX // DEX XX XX XX XX // CON XX XX XX XX // INT XX XX XX XX // WIT XX XX XX XX // MEN [дальше идет муть какаято, в которой я так и не разобрался (зависит от ProtocolVersion)] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 XX XX 00 00 // { in-game time??? } 00 00 00 00 XX 00 00 00 // неизвестно 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Др.названия: CharSelected -------------------------------------------------------------------------------- ExSendManorList Формат: XX XX // Длина FE // Тип 1B 00 // Подтип XX XX XX XX // количество территорий, где можно манорить [начало повторяющегося блока] XX XX XX XX // номер XX XX ... 00 00 // имя территории (Unicode строка) [конец повторяющегося блока] -------------------------------------------------------------------------------- QuestList !!! этот пакет не доделан!!! Формат: XX XX // Длина 80 // Тип XX XX // Количество незавершенных квестов [начало повторяющегося блока 1] XX XX XX XX // Quest ID XX XX XX XX // Stage of quest progress [конец повторяющегося блока 1] XX XX // {Количество какихто итемов} [начало повторяющегося блока 2] XX XX XX XX // dropItemObjID XX XX XX XX // dropItemID XX XX XX XX // dropItemCount XX XX XX XX // неизвестно [конец повторяющегося блока 2] !!! этот пакет не доделан!!! -------------------------------------------------------------------------------- NetPing Формат: 07 00 // Длина D3 // Тип XX XX XX XX // {ID пинга} -------------------------------------------------------------------------------- NewCharacterSuccess Формат: XX XX // Длина 17 // Тип XX XX XX XX // Количество базовых классов в игре [начало повторяющегося блока] XX XX XX XX // расса XX XX XX XX // класс 46 00 00 00 XX XX XX XX // STR 0a 00 00 00 46 00 00 00 XX XX XX XX // DEX 0a 00 00 00 46 00 00 00 XX XX XX XX // CON 0a 00 00 00 46 00 00 00 XX XX XX XX // INT 0a 00 00 00 46 00 00 00 XX XX XX XX // WIT 0a 00 00 00 46 00 00 00 XX XX XX XX // MEN 0a 00 00 00 [конец повторяющегося блока] Др.названия: CharTemplates -------------------------------------------------------------------------------- CharacterCreateSuccess Формат: 07 00 // Длина 19 // Тип 01 00 00 00 Др.названия: CharCreateOk -------------------------------------------------------------------------------- CharacterCreateFail Формат: 07 00 // Длина 1A // Тип XX XX XX XX // Причина: 0x02 - Name already exists. Др.названия: CharCreateFail -------------------------------------------------------------------------------- CharacterDeleteSuccess Формат: 03 00 // Длина 23 // Тип Др.названия: CharDeleteOk -------------------------------------------------------------------------------- CharacterDeleteFail Формат: 07 00 // Длина 24 // Тип XX XX XX XX // Причина Др.названия: CharDeleteFail -------------------------------------------------------------------------------- UserInfo !!! этот пакет не доделан!!! Формат: XX XX // Длина 04 // Тип XX XX XX XX // X XX XX XX XX // Y XX XX XX XX // Z 00 00 00 00 XX XX XX XX // ObjectId XX XX ... 00 00 // Name (Unicode строка) XX XX XX XX // Race XX XX XX XX // Sex XX XX XX XX // ClassId XX XX XX XX // lvl XX XX XX XX // Exp XX XX XX XX // STR XX XX XX XX // DEX XX XX XX XX // CON XX XX XX XX // INT XX XX XX XX // WIT XX XX XX XX // MEN XX XX XX XX // MaxHP XX XX XX XX // CurrentHP XX XX XX XX // MaxMP XX XX XX XX // CurrentMP XX XX XX XX // SP XX XX XX XX // CurrentLoad XX XX XX XX // MaxLoad 28 00 00 00 XX XX XX XX // ItemObjectID Under XX XX XX XX // ItemObjectID REar XX XX XX XX // ItemObjectID LEar XX XX XX XX // ItemObjectID Neck XX XX XX XX // ItemObjectID RFinger XX XX XX XX // ItemObjectID LFinger XX XX XX XX // ItemObjectID Head XX XX XX XX // ItemObjectID RHand XX XX XX XX // ItemObjectID LHand XX XX XX XX // ItemObjectID Gloves XX XX XX XX // ItemObjectID Chest XX XX XX XX // ItemObjectID Legs XX XX XX XX // ItemObjectID Feet XX XX XX XX // ItemObjectID Back XX XX XX XX // ItemObjectID LRHand XX XX XX XX // ItemObjectID Hair XX XX XX XX // ItemID Under XX XX XX XX // ItemID REar XX XX XX XX // ItemID LEar XX XX XX XX // ItemID Neck XX XX XX XX // ItemID RFinger XX XX XX XX // ItemID LFinger XX XX XX XX // ItemID Head XX XX XX XX // ItemID RHand XX XX XX XX // ItemID LHand XX XX XX XX // ItemID Gloves XX XX XX XX // ItemID Chest XX XX XX XX // ItemID Legs XX XX XX XX // ItemID Feet XX XX XX XX // ItemID Back XX XX XX XX // ItemID LRHand XX XX XX XX // ItemID Hair XX XX XX XX // P.Atk XX XX XX XX // P.Atk Speed XX XX XX XX // P.Def XX XX XX XX // EvasionRate XX XX XX XX // Accuracy XX XX XX XX // CriticalHit XX XX XX XX // M.Atk XX XX XX XX // Casting Speed XX XX XX XX // P.Atk Speed XX XX XX XX // M.Def XX XX XX XX // Чар в режиме PvP? XX XX XX XX // Karma [дальше идет муть, в которой я пока не разобрался] ?? ?? ... ?? ?? !!! этот пакет не доделан!!! -------------------------------------------------------------------------------- Say2 Формат: XX XX // Длина 4A // Тип XX XX XX XX // Object Id того чара, от кого это сообщение XX XX XX XX // Тип сообщения XX XX ... 00 00 // Имя чара, от кого это сообщение (Unicode строка) XX XX ... 00 00 // Само сообщение (Unicode строка) Тип сообщения: 0x00 - General 0x01 - Shout 0x02 - Whisper 0x03 - Party 0x04 - Clan 0x08 - Trade 0x09 - Alliance 0x0A - Announcement Др.названия: CreatureSay -------------------------------------------------------------