Автор данной статьи: KyberPrizrak (мылo:)
(создана/обновлена: 15.02.07г. - 6.07.07г.)
В качестве благодарности, отправте хотябы копейку на: R276344948837 или Z259994239465
Содержание
1. Общие сведения
2. Пакеты Client -> Login Server
3. Пакеты Login Server -> Client
4. Пакеты Client -> Game Server
5. Пакеты Game Server -> Client
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:
Чтобы не загружать ваши и без того замученные головы, вместо алгоритмов, я дам готовые исходники (немного измененные для наглядности):
Во первых заметьте, что после каждой шифрации или дешифрации ключ которым мы пользовались, будет изменен! И обратите особое внимание, у нас два ключа!!! Одним мы шифруем пакеты, которые мы отправляем серверу, вторым мы дешифруем пакеты которые сервер присылает нам. Процедура Key из данных пакета FirstKey устанавливает нам оба ключа (изначально ключи равны друг-другу).
Да, и забыл сказать - и Blowfish, и Xor-шифрация шифруют пакет начиная с третего байта! (т.е. первые два байта, означающие размер пакета - НЕ ШИФРУЮТСЯ НИКОГДА!!!)
P.S. тема "пишем своего бота" - все вопросы по пакетному уровню, или по написанию бота можете задавать туда
2. Пакеты Client -> Login Server
00 - RequestAuthLogin
00 - RequestAuthLogin (RSA)
02 - RequestServerLogin
05 - RequestServerList
07 - RequestGGAuth
RequestAuthLogin
Формат:
32 00
00
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
08 00 00 00 00 00 00 00 00
XX XX XX XX
00 00 00 00
RequestAuthLogin (RSA)
Формат:
AA 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 20
00 00 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
08 00 00 00 00 00 00 00 00
XX XX XX XX
00 00 00 00
RequestGGAuth
Формат:
22 00
07
XX XX XX XX
23 92 90 4d
18 30 b5 7c
96 61 41 47
05 07 96 fb
00 00 00
f2 12 ba a9
00 00 00 00
RequestServerLogin
Формат:
1A 00
02
XX XX XX XX
XX XX XX XX
XX
00 00 00 00 00 00
XX XX XX XX
00 00 00 00
RequestServerList
Формат:
1A 00
05
XX XX XX XX
XX XX XX XX
04 00 00 00
00 00 00
XX XX XX XX
00 00 00 00
3. Пакеты Login Server -> Client
00 - Init
00 - Init (RSA)
01 - LoginFail
03 - LoginOk
04 - ServerList
06 - PlayFail
07 - PlayOk
0B - GGAuth
Init
Формат:
0B 00
00
XX XX XX XX
XX XX XX XX
Init (RSA)
Формат:
9B 00
00
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 XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
GGAuth
Формат:
12 00
0B
XX XX XX XX
00 00 00 00
00 00 00
XX XX XX XX
LoginFail
Формат:
12 00
01
XX
00 00 00
00 00 00
XX XX XX XX
00 00 00 00
LoginOk
Формат:
32 00
03
XX XX XX XX
XX XX XX XX
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
ServerList
Формат:
XX XX
04
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
XX XX XX XX
00 00 00 00
PlayFail
Формат:
12 00
06
XX
00 00 00
00 00 00
XX XX XX XX
00 00 00 00
PlayOk
Формат:
1A 00
07
XX XX XX XX
XX XX XX XX
01 00 00 00
00 00 00
XX XX XX XX
00 00 00 00
4. Пакеты Client -> Game Server
01 - MoveBackwardToLocation
00 - ProtocolVersion
03 - EnterWorld
08 - RequestAuthLogin
0B - CharacterCreate
0C - CharacterDelete
0D - CharacterSelected
0E - NewCharacter
0F - RequestItemList
11 - RequestUnEquipItem
14 - UseItem
38 - Say2
48 - ValidatePosition
62 - CharacterRestore
63 - RequestQuestList
73 - RequestPrivateStoreManage
A8 - NetPing
D008 - RequestManorList
ProtocolVersion
Формат:
07 01
00
XX XX XX XX
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
RequestAuthLogin
Формат:
XX XX
08
XX XX ... 00 00
XX XX XX XX
XX XX XX XX
XX XX XX XX
XX XX XX XX
01 00 00 00
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
XX XX XX XX
00 08 00 00
NewCharacter
Формат:
03 00
0E
CharacterCreate
Формат:
XX XX
0B
XX XX ... 00 00
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
CharacterDelete
Формат:
07 00
0C
XX XX XX XX
CharacterRestore
Формат:
07 00
62
XX XX XX XX
Say2
Формат:
XX XX
38
XX XX ... 00 00
XX XX XX XX
XX XX ... 00 00
RequestItemList
Формат:
03 00
0F
UseItem
Формат:
0B 00
14
XX XX XX XX
00 00 00 00
RequestUnEquipItem
Формат:
07 00
11
XX XX XX XX
MoveBackwardToLocation
Формат:
1F 00
01
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
ValidatePosition
Формат:
17 00
48
XX XX XX XX
XX XX XX XX
XX XX XX XX
XX XX XX XX
00 00 00 00
RequestPrivateStoreManage
Формат:
03 00
73
5. Пакеты Game Server -> Client
00 - FirstKey
01 - MoveToLocation
03 - CharInfo ◙
04 - UserInfo ◙
0B - SpawnItem
0C - DropItem
12 - DeleteObject
13 - CharacterSelectionInfo
15 - CharacterSelected
16 - NpcInfo ◙
17 - NewCharacterSuccess
19 - CharacterCreateSuccess
1A - CharacterCreateFail
1B - ItemList
23 - CharacterDeleteSuccess
24 - CharacterDeleteFail
27 - InventoryUpdate
4A - Say2
80 - QuestList ◙
9C - PrivateStoreMsg
B9 - PrivateStoreMsgBuy
D3 - NetPing
DB - RecipeShopMsg
F8 - SSQInfo
FE1B - ExSendManorList
FirstKey
Формат:
10 00
00
XX
XX XX XX XX
01 00 00 00
01 00 00 00
CharacterSelectionInfo
Формат:
XX XX
13
XX XX XX XX
XX XX ... 00 00
XX XX XX XX
XX XX ... 00 00
XX XX XX XX
XX XX XX XX
00 00 00 00
XX XX XX XX
XX XX XX XX
XX XX XX XX
01 00 00 00
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
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
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
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
SSQInfo
Формат:
05 00
F8
XX XX
CharacterSelected
Формат:
XX XX
15
XX XX ... 00 00
XX XX XX XX
XX XX ... 00 00
XX XX XX XX
XX XX XX XX
00 00 00 00
XX XX XX XX
XX XX XX XX
XX XX XX XX
01 00 00 00
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
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
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
00 00 00 00
XX 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
ExSendManorList
Формат:
XX XX
FE
1B 00
XX XX XX XX
XX XX XX XX
XX XX ... 00 00
QuestList
!!! этот пакет не доделан!!!
Формат:
XX XX
80
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
!!! этот пакет не доделан!!!
NetPing
Формат:
07 00
D3
XX XX XX XX
NewCharacterSuccess
Формат:
XX XX
17
XX XX XX XX
XX XX XX XX
XX XX XX XX
46 00 00 00
XX XX XX XX
0a 00 00 00
46 00 00 00
XX XX XX XX
0a 00 00 00
46 00 00 00
XX XX XX XX
0a 00 00 00
46 00 00 00
XX XX XX XX
0a 00 00 00
46 00 00 00
XX XX XX XX
0a 00 00 00
46 00 00 00
XX XX XX XX
0a 00 00 00
CharacterCreateSuccess
Формат:
07 00
19
01 00 00 00
CharacterCreateFail
Формат:
07 00
1A
XX XX XX XX
CharacterDeleteSuccess
Формат:
03 00
23
CharacterDeleteFail
Формат:
07 00
24
XX XX XX XX
UserInfo
!!! этот пакет не доделан!!!
Формат:
XX XX
04
XX XX XX XX
XX XX XX XX
XX XX XX XX
00 00 00 00
XX XX XX XX
XX XX ... 00 00
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
28 00 00 00
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
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
?? ?? ... ?? ??
!!! этот пакет не доделан!!!
Say2
Формат:
XX XX
4A
XX XX XX XX
XX XX XX XX
XX XX ... 00 00
XX XX ... 00 00
NpcInfo
!!! этот пакет не доделан!!!
Формат:
XX XX
16
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
?? ?? ... ?? ??
!!! этот пакет не доделан!!!
MoveToLocation
Формат:
1F 00
01
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
CharInfo
!!! этот пакет не доделан!!!
Формат:
XX XX
03
XX XX XX XX
XX XX XX XX
XX XX XX XX
XX XX XX XX
XX XX XX XX
XX XX ... 00 00
XX XX XX XX
XX XX XX XX
XX XX XX XX
XX XX XX XX
XX XX XX XX
?? ?? ... ?? ??
!!! этот пакет не доделан!!!
DeleteObject
Формат:
0B 00
12
XX XX XX XX
00 00 00 00
SpawnItem
Формат:
23 00
0B
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
ItemList
Формат:
XX XX
1B
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
DropItem
Формат:
27 00
0C
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
PrivateStoreMsgBuy
Формат:
XX XX
B9
XX XX XX XX
XX XX ... 00 00
PrivateStoreMsg
Формат:
XX XX
9C
XX XX XX XX
XX XX ... 00 00
RecipeShopMsg
Формат:
XX XX
DB
XX XX XX XX
XX XX ... 00 00
InventoryUpdate
Формат:
XX XX
27
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
Copyright (C) 2007 La2Kings (KyberPrizrak)
Копирование материала без ссылок на эту страницу, ЗАПРЕЩАЕТСЯ!