Пишем свой мультиплеер для игр серии GTA. Часть первая.
|
|
adamix | Дата: Пятница, 27.05.2011, 08:32 | Сообщение # 1 |
Постоялец
Группа:
Продвинутые
Сообщений: 376
Награды: 14
Город: Ульяновск
Репутация: 884
Замечания: 0%
Статус: ![](/f_icons/off.gif)
| Я долго думал прежде чем начать писать подобное руководство. Начать я решил с азов мультиплееро-строения. В первой статье я расскажу о том как пишут мультиплееры и что для этого нужно.
Что нам понадобится: - Знания С++ на уровне выше новичка.
- Знание ассемблера.
- Умение работать с декомпилятором.
- Умение разбирать чужой код.
- Начальные навыки работы со структурой игр серии GTA.
- Microsoft Visual Studio 9.0.
- DXSDK.
Как работают мультиплееры Мы инжектим в память игры свой процесс. Обычно - это просто DLL с нужным нам кодом. Для отображения чата мы используем DirectX Hook. Это необходимо для управления рендером. Так как в GTA 3/VC/SA возможно создать всего одного игрока, для переключения между остальными мы используем Context Switching(его придумал kyeman, кстати). Для GTA 3/VC/SA мы используем Script Executor. Это несколько небольших функций, которые позволяют использовать опкоды SCM из С++ кода. Это нужно для быстрого создания простеньких функций. В идеале все должно быть написано с мемхаком. Получать информацию из процесса мы будем мемхаком(а можно как то по другому?).
Как работает синхронизация Допустим, у нас есть игроки А и Б. Игрок А передвинулся на 2 метра вперед. В то время как он начал движение(зажал кнопку) - мы получаем информацию о нажатых кнопках, текущей позиции и ускорения. Мы передаем их на сервер. Сервер же, рассылает эти данные остальным игрокам. В итоге мы видим что игрок А начал движение у игрока Б. Транспорт: здесь все немного по другому. У транспорта есть так называемый Синхронизатор. Это водитель транспорта. Впрочем, все остальное точно так же как и с обычным игроком. Водитель передает данные на сервер, а сервер рассылает их клиентам. Синхронизация транспорта без водителей работает так же, только разница лишь в том, что синхронизатором выступает обычно случайный игрок который находится рядом с транспортом. Когда мы синхронизируем оружие, мы должны получить векторы камеры и передать их остальным игрокам.
Как работает встроенный стример У RenderWare довольно таки жесткие лимиты. Но в данном случае стример работает точно так же, как и заскриптованные стримеры в павне. Правда не на уровне сервера, а на уровне клиента.
Как у нас будет работать сеть Я не буду оригинальничать и буду использовать RakNet в данных статьях, так как он дает хороший функционал при этом оставаясь простым. Для всех функций мы будем использовать RPC4. Для всех данных(игроки, транспорт, акторы, чекпоинты, прочее) мы будем использовать менеджеры. В коде это может выглядеть так: Code g_pVehicleManager->Add(174, CVector3(10.0f, 10.0f, 10.0f)); В итоге в этот менеджер мы добавим новый транспорт с идом модели 174 и нужными координатами спавна.
А будет ли скриптинг? Пока для меня это сложный вопрос. Изначально я не собирался в данных статьях рассказывать о скриптинге. Но может быть я еще передумаю.
Пока всё. Задавайте свои вопросы, я постараюсь на них ответить.
Тысячи игроков SA-MP, как миллионы мух, конечно же не могут ошибаться. Законы математики, имеющие какое-либо отношение к реальному миру, ненадежны; а надежные математические законы не имеют отношения к реальному миру. © Альберт Эйнштейн.
|
|
|
|
Interpol | Дата: Пятница, 27.05.2011, 08:56 | Сообщение # 2 |
Мастер джэдай
Группа:
I'm V.I.P.
Сообщений: 5358
Награды: 77
Город: НеБаку
Репутация: 3795
Замечания: 20%
Статус: ![](/f_icons/off.gif)
| adamix, отлично, может теперь будут мп для модификаций са)
|
|
|
|
adamix | Дата: Пятница, 27.05.2011, 09:02 | Сообщение # 3 |
Постоялец
Группа:
Продвинутые
Сообщений: 376
Награды: 14
Город: Ульяновск
Репутация: 884
Замечания: 0%
Статус: ![](/f_icons/off.gif)
| Quote (Interpol) отлично, может теперь будут мп для модификаций са) Я уверен, что 95% форума даже не поймут о чем я написал.
Тысячи игроков SA-MP, как миллионы мух, конечно же не могут ошибаться. Законы математики, имеющие какое-либо отношение к реальному миру, ненадежны; а надежные математические законы не имеют отношения к реальному миру. © Альберт Эйнштейн.
|
|
|
|
PaNyA | Дата: Пятница, 27.05.2011, 09:35 | Сообщение # 4 |
Группа:
I'm V.I.P.
Сообщений: 273
Награды: 11
Город: SPB,Волхов
Репутация: 230
Замечания: 100%
Статус: ![](/f_icons/off.gif)
| Отличная статья,спасибо
Valkyrie Roleplay v.3.2 63% readiness.In it of 62.500 lines.Working out is suspended for uncertain time. P.S. Если помог,не скупись дай + ;) Мои работы: [FS] Простой спидометр
|
|
|
|
uDenX | Дата: Пятница, 27.05.2011, 10:32 | Сообщение # 5 |
Группа:
Media-ProGroup
Сообщений: 1193
Награды: 23
Город: Салават
Репутация: 1301
Замечания: 0%
Статус: ![](/f_icons/off.gif)
| Очень интересно жду новых статей
|
|
|
|
s3ap | Дата: Пятница, 27.05.2011, 11:40 | Сообщение # 6 |
Местный
Группа:
Продвинутые
Сообщений: 570
Награды: 7
Город: Саратов
Репутация: 382
Замечания: 80%
Статус: ![](/f_icons/off.gif)
| Quote (Ghost-X) У RenderWare довольно таки жесткие лимиты. Но в данном случае стример работает точно так же, как и заскриптованные стримеры в павне. Правда не на уровне сервера, а на уровне клиента. Они были переделаны с исходников са-мпа же
|
|
|
|
Vantage | Дата: Суббота, 28.05.2011, 20:02 | Сообщение # 7 |
Уважаемый человек
Группа:
Пользователи
Сообщений: 974
Награды: 8
Город: -=Los Santos The Best=-
Репутация: 467
Замечания: 80%
Статус: ![](/f_icons/off.gif)
| Конечно не все возьмутся писать свои мп да этого и не нужно наверное) но почитать как все это работает интересно, спасибо
.. Мои работы: [GM]Ls:Rus TDM v1.0 | [GM]Ls:Rus TDM v1.2 | [GM]Ls:Rus TDM v1.3(1%)[blink]|[/blink] [FS]Rampa
|
|
|
|
Winner_ | Дата: Воскресенье, 12.08.2012, 16:23 | Сообщение # 8 |
Новенький
Группа:
Пользователи
Сообщений: 2
Награды: 0
Город: Сергиев Посад
Репутация: 0
Замечания: 0%
Статус: ![](/f_icons/off.gif)
| Вместо RakNet можно спокойно использовать WinSock / WinSock2
Developer
|
|
|
|