Показать сообщение отдельно
Непрочитано 11.11.2016, 01:41   #1
Аватар для PROGRAMMATOR
Администратор

Автор темы (Топик Стартер) BattleServer (State 3) с чего начать?

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


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

Код:
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 отправляете то, что получили от клиента.

Будут вопросы, всегда рад помочь, но как всегда, готового ничего нет.
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Сказали спасибо: