Добрый день, подскажите, пытался в интернете найти темы по поводу написания самому сервера, но везде только ссылки на готовые.
С чего начать, что почитать про создание сервера к существующей уже игре?
Как пишут сервера для Mu и Lineage с нуля, с чего они начинали, чтобы понять, как писать их?
Где можно увидеть пример кода?
Написание такого сервера достаточно сложная процедура и если не было опыта в разработке, то маловероятно что со старта получится что-то работоспособное. Могу посоветовать посмотреть на эту книгу, примеры кода в ней тоже имеются. https://vk.com/wall-54530371_90186
там сама программа, там нечего понимать, 3 кнопки нажал и всё работает.
нет кода, нет примера, готовый продукт.
я хочу написать что-то похожее сам(свой сервер MU), пусть будет криво работать, пусть не идеально, но чтобы оно имело хотя бы топорный вид и к нему можно было подключиться и с горем пополам играть.
реверс-инжиниринг протокола в первую очередь, это вообще далеко от написания кода и требует умения в сети/дебаг.
Софт написать это наименьшая проблема при старте. Написать можно худо-бедно и работать будет, но без протокола ничего не сделаешь(под чужую игру это как выучить иностранный язык без переводчика с помощью носителя языка, т.е. тыкая пальцами в предметы и жестами пытаться узнать весь язык для того чтобы можно было общаться).
Но протоколы связи сервера и клиента почти всегда зашифрованы, как раз таки от любителей запилить пиратки.
А так же очень любят шифрование менять при каждом удобном случае.
И только когда протокол уже расковыряли, то можно и сервер писать полноценный(или вообще начать писать в этот момент).
А это уже C(++)/Java/C# в основном т.к. нужен быстрый реалтаймовый софт.
Ну и последнее это повторить механику оригинала скиллы/итемы/крафты/прокачку/npc ну и т.д.
В общем конкретно к разработке игр написание эмуляторов для чужих игр относится примерно никак.
Это больше про взлом игр.
Ну для своей игры конечно первые два шага опускаются.
Ingernirated: протокол это в данном контексте уникальнный язык между игрой(клиентом) и сервером.
Везде свой.
Копать - сети, ловить пакеты, копать память запущенного клиента, копать сам клиент на наличие данных за которые можно зацепиться.
Т.е. самый простой сценарий:
написать эмулятор входа в игру/на окно выбора персонажа.
Чтобы узнать как сервер должен отвечать и что шлет клиент
1. включаем снифер трафика(Wireshark например из самых на слуху)
2. запускаем игру
3. вводим логин пароль
4. смотри что наловил снифер т.е. ищем в пакетах логин/пароль(данные которые мы знаем наверняка, пароль правда шифрованный будет скорее всего так что логин только).
5. пытаемся разобрать на глаз структура пакета. По "байтово"
6. пишем код сервера который понимает пакеты и отвечает правильно. (Ответы тоже с оригинала надо парсить и разбирать)
7. повторять 3-6 пункты с каждым действием в игре/клиенте до получения играбельного сервера.
Всё это познается опытным путём.
И это цепочка действий без учета того что на клиента как правило висит защита и трафик шифруется.
Т.е. чтобы получить вот такой сырой пакет надо для начала обойти защиту, это опять же hexинг/хакинг игры.
Конечно есть более простые варианты когда в клиенте можно найти какие-то базы данных внутренние в описанием протокола/вещей/скиллов и т.д. Но это тоже надо найти и написать софт чтобы читать удобно.
Александр Аксентьев: от души просто, спасибон душевный!
Этот пакет, он приходит каждые 50мс(старается) или в зависимости от изменения окружающего мира, действия игрок(в том числе и во время раздумия, какого персонажа выбрать)?
значит каждая магия(её использование), каждый шаг(вперед,бок, назад) или нажатие кнопки принять в тексте, для всего этого нужно написать свой код обмена данными в такой форме?
Т.е. этот код мы можем словить, когда играем с клиента и останется только научить свой сервер понимать, как он должен реагировать на пакет, который отправлен ему с клиента?
Т.е. коды пакетов лежат в клиенте?
Этот пакет, он приходит каждые 50мс(старается) или в зависимости от изменения окружающего мира, действия игрок(в том числе и во время раздумия, какого персонажа выбрать)?
Во-первых конечно общее состояние окружающего мира постоянно приходит от сервера, прям вот очень постоянно, по времени я даже не знаю, пингом ограниченно. И это очень много пакетов.
значит каждая магия(её использование), каждый шаг(вперед,бок, назад) или нажатие кнопки принять в тексте, для всего этого нужно написать свой код обмена данными в такой форме?
Да, вообще на некоторые действия происходит по несколько обменов пакетами, Цепочки целые.
Сначала проверяет например что возможность использовать магию есть вообще, потом отправляет на клиенту пакет "окей, показывай специальный курсор, который является прицеливанием", и только потом клик отправляется на сервер и говорит что скилл использован.
Т.е. этот код мы можем словить, когда играем с клиента и останется только научить свой сервер понимать, как он должен реагировать на пакет, который отправлен ему с клиента?
да в этом еще сложность. Если мир достаточно уникален и нет возможности получить инфу из клиента - нужно проходить реально игру чтобы получать информацию. Например тексты NPC/квестов стандартных.
Поэтому собственно эмуляторы никогда не будут одинакового с оффом работать.
Т.е. коды пакетов лежат в клиенте?
да, клиент знает что и когда отправлять/принимать.
Но не факт что это можно извлечь в готовом виде для разработки.
Вот например список пакетов Ragnarok Online, эмуляторы практически со старта оффа развиваются.
Постоянно меняется всё, куча условий и т.д.
И вот на выходе получаем 4000+ пакетов.
Естественно необязательно собирать всё руками.
В основном под каждый эмулятор(игру) пишут свой анализатор пакетов т.к. правила всё-таки какие-то прослеживаются и уже частично можно понять/разобрать пакеты исходя из старых данных.