Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
BattleServer (State 3) с чего начать?
#1
BattleServer общается с клиентом игры посредством UDP протокола. Ниже опкоды клиентских пакетов:
  • 0x03 – основной пакет с различными событиями на карте;
  • 0x41 – подключения клиента к бою;
  • 0x43 – отключение клиента от боя;
  • 0x61 – предполагаю, что это так званый «Ping-Pong».

Подробнее узнать о структуре пакетов можно из темы «Структура, крипт и декрипт Tcp и Udp пакетов».

Цитата:Настройка подключения (State, IP, Port) к BattleServer находится в пакете PROTOCOL_BATTLE_PRESTARTBATTLE_ACK.

Начинается всё с подключения клиента к бою – это первый пакет, приходящий на сервер от игрового клиента. В ответ необходимо отправить (пустой) пакет с опкодом 0x42.

После успешного подключения клиент присылает пакет с опкодом 0x03 в начале тела которого находится так называемый «подзаголовок» - SubHead который помогает определить к какой группе событий отнести эти данные.

Получение всех перечислений SubHead

Рассмотрим стандартную ситуацию. Вы поймали пакет 0x03 от клиента, в теле которого содержится следующая информация:

Код:
00 // SubHead.User
00 00 // Slot 0
15 00 // Size
04 00 00 00 // Events.PosRotation
CA 47 // X
B6 00 // Y
FE 48 // Z
BA 4D // CamX
FB D4 // CamY
03 00 // Area

Первые пять байт - это информация о группе данных, первый байт (00) является тем самым подзаголовком, следующие два байта (00 00) слот игрока которого затронуло данное событие (в моём случае это первый игрок красной команды), последние два байта (15 00) общая длина данных включая эти пять байт.

Следующие четыре байта (04 00 00 00) являются маской флагов событий, я для примера взял пакет с одним событием PosRotation которое содержит координаты игрока, направление взгляда и локацию. Кстати, не лишним будет упомянуть, что координаты данного пакета в формате half float.

Короткая видео запись о том, как найти флаги событий Udp пакетов:



В ответ вам необходимо отправить пакет с опкодом 0x04 и слотом 0xFF (получателями являются все слоты) с обработанными данными которые вы получили от клиента всем игрокам на карте. Если вы отправите полученный PosRotation, то все игроки будут видеть перемещение друг друга.

В State 3 у вас нет ограничений. Например выдать нужное количество HP:

Код:
08 // SubHead.StageInfoChara
00 00 // Slot 0
0b 00 // Size
00 10 00 00 // Events.HpSync
00 1c // HP

[Изображение: 96xOK.png]

Или выдать необходимое оружие:

Код:
00 // SubHead.User
00 00 // Slot 0
0f 00 // Size
40 00 00 00 // Events.WeaponSync
00 // Maybe extensions
DA 97 04 00 // WeaponId



На пакет 0x43 отвечать не требуется, а на 0x61 отправляете то, что получили от клиента.

Будут вопросы, всегда рад помочь, но как всегда, готового ничего нет. kappa
Ответ
#2
What is the structure of event 262144?
Ответ
#3
The Chara_GetWeaponForHost event has 17 data bytes. Look for structure in pb.exe file.
Ответ
#4
The event 262144 is the died info, i need more info to complete the structure.
Ответ
#5
262144 = 0x40000 = Chara_GetWeaponForHost (PICKUPWEAPON)
Ответ
#6
I tested on my udp3 and event 262144 is death, but ignoring this, can you tell me the structure of a player's death event?
Ответ
#7
UDP 3 Server answer is encrypted with BitShift or only client decrypt require bitshift ?
yeah server answer require bit shift too

i have done a small sniffer to help me in proccess Big Grin

[Изображение: skRPQr8.png]
Ответ
#8
Programmator, Session Value is a room identificator ? i mean, all players has the same session ID ? or is like a connection ID ?
Ответ
#9
bola, it must be id connection. The room id is at the footer of packet (Id matches with that which you had sent in PROTOCOL_BATTLE_PRESTARTBATTLE_ACK packet).
Ответ
#10
PROGRAMMATOR Написал:bola, it must be id connection. The room id is at the footer of packet (Id matches with that which you had sent in PROTOCOL_BATTLE_PRESTARTBATTLE_ACK packet).

in official server they don't match, is correct this ID ?

[Изображение: 9t5aA91.png]
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)