Я впервые вошёл в Ragnarok Online 2 через свой собственный сервер

Пять дней назад я написал здесь, что пытаюсь с нуля восстановить сервер для Ragnarok Online 2: Legend of the Second / Advent of Valkyrie.

Тогда клиент уже умел подключаться к моему эмулятору, проходил авторизацию, получал список серверов и каналов и доходил до экрана выбора персонажа. Но всё это было через заглушки — логики не было.

А ближайшую большую цель я сформулировал так:

создать персонажа → выбрать его → впервые войти в игровой мир.

Ну что ж.

Я вошёл. 🥳

Я впервые вошёл в Ragnarok Online 2 через свой собственный сервер

Что произошло с прошлого поста

Первым делом пришлось нормально разобраться с персонажами.

До этого сервер в основном просто отдавал клиенту данные в нужном формате. Никакого нормального хранения ещё не было.

А теперь персонаж действительно принадлежит конкретному аккаунту, сохраняется в БД и после повторного входа никуда не исчезает.

Заодно сделал нормальную проверку логина и пароля.

Я впервые вошёл в Ragnarok Online 2 через свой собственный сервер
Я впервые вошёл в Ragnarok Online 2 через свой собственный сервер

Персонажи сначала были голые и седые

Я впервые вошёл в Ragnarok Online 2 через свой собственный сервер

Пришлось отдельно разбираться, какие данные сервер должен отправлять для внешности и экипировки.

В какой-то момент я ещё долго не мог понять, почему неправильно отображается профессия персонажа.

Оказалось, что я банально перепутал одно поле с индексом персонажа.

Теперь внешность и броня тоже хранится отдельно для каждого персонажа.

Я впервые вошёл в Ragnarok Online 2 через свой собственный сервер

Заодно выяснилось, что список персонажей отображался не полностью: при количестве больше пяти клиент должен переключаться на следующую страницу, а у меня этого не происходило.

Теперь работает и это, плюс поставил ограничение в 10 персонажей на аккаунт. Думаю в оригинале было так же.

Я впервые вошёл в Ragnarok Online 2 через свой собственный сервер

Второй пароль и удаление персонажа

В Ragnarok Online 2 есть ещё один уровень защиты — отдельный PIN.

Он нужен и при удалении персонажа.

Поэтому перед переходом в игровой мир решил закрыть и эту часть.

Теперь при первом входе можно создать второй пароль, а при удалении персонажа клиент его запрашивает.

Я впервые вошёл в Ragnarok Online 2 через свой собственный сервер

Правда сам PIN меня уже порядком задолбал и я подумываю его убрать на время разработки😄

Само удаление я сделал моментальным.

В корейских играх бесит когда персонаж какое-то время ожидает удаления.

А потом началось самое интересное

После выбора персонажа клиент отправляет уже совсем другой набор запросов.

И здесь количество данных, которое необходимо правильно ему вернуть, резко увеличивается.

Напомню, что доступа у меня к игре нет. У меня был стим аккаунт, но он не работает. Вроде говорят что через warp можно зайти, но создать игровой аккаунт уже нельзя😅

И поэтому я не могу просто подключиться к нему, записать сетевой трафик и посмотреть:

клиент отправил это → сервер ответил вот это.

Поэтому я продолжаю восстанавливать протокол по самому клиенту: Ghidra, отладчик, дизассемблер, куски структур, вызовы функций, проверка гипотез на живом клиенте.
ЕСЛИ У КОГО ТО СОХРАНИЛСЯ WARP АККАУНТ И ЕМУ НЕ ЖАЛКО ПОДЕЛИТЬСЯ — Я БУДУ ОЧЕНЬ БЛАГОДАРЕН!!!❤❤❤

Сейчас уже удалось восстановить:

🟢 имя персонажа
🟢 внешность
🟢 стартовые HP (пока у всех одинаковые)
🟢 стартовые SP (пока у всех одинаковые)
🟢 сумку
🟢 предметы внутри сумки (двигаются)

Для проверки положил туда стартовый набор зелий.

Не знаю сколько было раньше я сделал по 10 каждого)
Не знаю сколько было раньше я сделал по 10 каждого)

Но сами предметы пока практически декоративные.

Клиент уже знает, что предмет существует и лежит в определённой ячейке, но полноценной серверной логики предметов ещё нет.

Что дальше

Сейчас хочу последовательно восстановить стартовое состояние персонажа.

Ближайшие задачи примерно такие:

🔴 предметы
🔴 стартовые навыки
🔴 характеристики персонажа
🔴 передвижение (и вот тут вот обмен пакетами в реальном времени)

И вот передвижение для меня сейчас следующий большой рубеж.

Потому что одно дело — загрузить персонажа и поставить его в мире.

И совсем другое — заставить сервер нормально принимать координаты, обрабатывать движение и синхронизировать состояние клиента.

А после этого уже можно будет постепенно оживлять сам мир:

🔴 NPC
🔴 мобы
🔴 другие игроки
🔴 чат
🔴 бой
🔴 квесты
🔴 остальные игровые системы

До полноценного приватного сервера ещё очень далеко.

Но теперь это уже не просто клиент, который умеет подключаться к моей программе.

В игру действительно можно войти через мой сервер.

И для меня это довольно серьёзный промежуточный результат.

И внезапно и очень приятно — русский язык!!!

Параллельно пишу перевод.

Получится ли вообще нормально русифицировать клиент?

Надеюсь да...

В скринах уже вы наверное заметили что русский накатил и он даже работает. Уже переведено 50000+ строк и это ещё далеко не конец. Русский язык будет! Если, конечно, будет сервер...😅

Перевод буду постепенно приводить в порядок параллельно с сервером.

Нужна помощь тех, кто действительно играл в Ragnarok Online 2

И вот здесь внезапно обнаружилась проблема, с которой reverse engineering уже не всегда помогает.

Мне нужно восстанавливать не только формат пакетов, но и оригинальные игровые данные.

Например, сейчас я пытаюсь понять:

— одинаковые ли стартовые HP у всех профессий;
— сколько SP должно быть у нового персонажа;
— сколько зелий выдавалось в самом начале;
— получал ли лучник сразу стрелы и сколько;
— какой именно стартовый набор вещей выдавался разным профессиям.

Поэтому если вы когда-то много играли именно в Ragnarok Online 2: Legend of the Second / Advent of Valkyrie и что-то из этого помните — буду тоже очень благодарен. ❤❤❤

И тут ещё раз напишу:

ЕСЛИ У КОГО ТО СОХРАНИЛСЯ WARP АККАУНТ И ЕМУ НЕ ЖАЛКО ПОДЕЛИТЬСЯ — Я БУДУ ОЧЕНЬ БЛАГОДАРЕН!!!❤❤❤

Где следить за разработкой

На DTF продолжу иногда выкладывать такие крупные этапы.

А небольшие результаты и скриншоты публикую в Telegram:

Также завёл группу ВК для тех, кому удобнее следить там. Если там появятся люди, буду тоже вести как и ТГ.

Следующая большая цель:

заставить персонажа нормально двигаться по миру.

2