Приватный сервер Ragnarok Online 2: Legend of the Second — пишу эмулятор сервера
Когда-то давно я немного играл в Ragnarok Online 2 — часов 20. Потом по какой-то причине забросил, не помню почему, и несколько лет вообще о ней не вспоминал.
Недавно решил снова зайти, скачал игру в Steam, запустил — в игру не пускает. Полез разбираться и обнаружил, что ещё в 2019 году разработка и дальнейшая поддержка Ragnarok Online 2 были прекращены.
Тогда я начал искать, может, уже существует какой-нибудь приватный сервер Ragnarok Online 2, на котором можно снова поиграть.
Но для Ragnarok Online 2: Legend of the Second / Advent of Valkyrie я не нашёл ни работающего private server, ни готового server emulator, который можно было бы просто взять и запустить.
Поэтому решил попробовать написать сервер сам.
Что я сейчас делаю
Сейчас занимаюсь reverse engineering клиента Ragnarok Online 2, который скачал с офф. сайта.
Официальный сервер недоступен, поэтому посмотреть настоящий обмен между клиентом и сервером уже нельзя. Поэтому мне приходится заниматься статическим разбором клиента(копаюсь в байтах).
Сейчас моя задача — восстановить RMI-протокол игры, то есть понять всю схему общения клиента с сервером:
--------------------------------------------------------------------------------------------------------------------------
что клиент отправляет → какие данные передаёт → какой ответ ожидает → что происходит дальше.
--------------------------------------------------------------------------------------------------------------------------
На этом этапе я не занимаюсь самой логикой сервера: базой данных, хранением персонажей, проверками, валидацией и игровыми механиками. Пока сервер нужен прежде всего для того, чтобы воспроизводить найденный протокол и двигаться по клиенту дальше.
Что уже работает
🟢 Клиент подключается к моему серверу
🟢 Начальное соединение и вход
🟢 Проверка версии клиента
🟢 Получение списка серверов и каналов
🟢 Отображение заполненности каналов
🟢 Выбор канала
🟢 Переход к экрану персонажей
🟡 Список и создание персонажей — сейчас занимаюсь этим
Есть ещё отдельная часть сетевого взаимодействия через UDP. Её пока сознательно отложил — на текущем этапе она не мешает двигаться дальше.
Что предстоит
Сначала хочу восстановить по RMI весь путь до первого входа в игровой мир:
🔴 Получение списка персонажей
🔴 Создание персонажа
🔴 Выбор персонажа
🔴 Вход в игровой мир
После этого уже можно будет переходить от эмуляции протокола к нормальной серверной логике и собрать первый полноценный рабочий сценарий:
--------------------------------------------------------------------------------------------------------------------------
регистрация → логин → выбор сервера и канала → создание персонажа → вход в мир
--------------------------------------------------------------------------------------------------------------------------
На этом этапе появятся база данных, хранение аккаунтов и персонажей, проверки, валидация, сохранение и загрузка данных.
А дальше — непосредственно игровой мир:
🔴 Загрузка карты
🔴 Передвижение персонажа
🔴 NPC и мобы
🔴 Инвентарь и характеристики
🔴 Чат
🔴 Квесты и остальные игровые системы
То есть ближайшая большая цель — создать персонажа, выбрать его и впервые войти в игровой мир.
Кстати в планах ещё и русификатор сделать! — Но это, так сказать, наполеоновские планы:D
Стек
Пока стек небольшой, потому что сейчас основная задача — исследование протокола, а не разработка полноценного игрового сервера.
Server Emulator
- C#
- .NET
Reverse Engineering / инструменты
- Ghidra
- x32dbg
- CDB
- Python
Ghidra использую для статического анализа клиента и разбора RMI, x32dbg и CDB — для динамической отладки и проверки найденного уже на работающем клиенте.
Python использую для вспомогательных скриптов, анализа данных и автоматизации рутинной части reverse engineering.
База данных и остальная серверная инфраструктура появятся на следующем этапе. В качестве БД пока планирую PostgreSQL.
Где следить за разработкой
На DTF буду иногда выкладывать крупные результаты.
Текущий прогресс, небольшие находки, скриншоты и заметки по reverse engineering буду публиковать в Telegram:
👉 Telegram: Midgard — Ragnarok Online 2 Private Server