Я впервые вошёл в Ragnarok Online 2 через свой собственный сервер
Пять дней назад я написал здесь, что пытаюсь с нуля восстановить сервер для Ragnarok Online 2: Legend of the Second / Advent of Valkyrie.
Тогда клиент уже умел подключаться к моему эмулятору, проходил авторизацию, получал список серверов и каналов и доходил до экрана выбора персонажа. Но всё это было через заглушки — логики не было.
А ближайшую большую цель я сформулировал так:
создать персонажа → выбрать его → впервые войти в игровой мир.
Ну что ж.
Я вошёл. 🥳
Что произошло с прошлого поста
Первым делом пришлось нормально разобраться с персонажами.
До этого сервер в основном просто отдавал клиенту данные в нужном формате. Никакого нормального хранения ещё не было.
А теперь персонаж действительно принадлежит конкретному аккаунту, сохраняется в БД и после повторного входа никуда не исчезает.
Заодно сделал нормальную проверку логина и пароля.
Персонажи сначала были голые и седые
Пришлось отдельно разбираться, какие данные сервер должен отправлять для внешности и экипировки.
В какой-то момент я ещё долго не мог понять, почему неправильно отображается профессия персонажа.
Оказалось, что я банально перепутал одно поле с индексом персонажа.
Теперь внешность и броня тоже хранится отдельно для каждого персонажа.
Заодно выяснилось, что список персонажей отображался не полностью: при количестве больше пяти клиент должен переключаться на следующую страницу, а у меня этого не происходило.
Теперь работает и это, плюс поставил ограничение в 10 персонажей на аккаунт. Думаю в оригинале было так же.
Второй пароль и удаление персонажа
В Ragnarok Online 2 есть ещё один уровень защиты — отдельный PIN.
Он нужен и при удалении персонажа.
Поэтому перед переходом в игровой мир решил закрыть и эту часть.
Теперь при первом входе можно создать второй пароль, а при удалении персонажа клиент его запрашивает.
Правда сам PIN меня уже порядком задолбал и я подумываю его убрать на время разработки😄
Само удаление я сделал моментальным.
В корейских играх бесит когда персонаж какое-то время ожидает удаления.
А потом началось самое интересное
После выбора персонажа клиент отправляет уже совсем другой набор запросов.
И здесь количество данных, которое необходимо правильно ему вернуть, резко увеличивается.
Напомню, что доступа у меня к игре нет. У меня был стим аккаунт, но он не работает. Вроде говорят что через warp можно зайти, но создать игровой аккаунт уже нельзя😅
И поэтому я не могу просто подключиться к нему, записать сетевой трафик и посмотреть:
клиент отправил это → сервер ответил вот это.
Поэтому я продолжаю восстанавливать протокол по самому клиенту: Ghidra, отладчик, дизассемблер, куски структур, вызовы функций, проверка гипотез на живом клиенте.
ЕСЛИ У КОГО ТО СОХРАНИЛСЯ WARP АККАУНТ И ЕМУ НЕ ЖАЛКО ПОДЕЛИТЬСЯ — Я БУДУ ОЧЕНЬ БЛАГОДАРЕН!!!❤❤❤
Сейчас уже удалось восстановить:
🟢 имя персонажа
🟢 внешность
🟢 стартовые HP (пока у всех одинаковые)
🟢 стартовые SP (пока у всех одинаковые)
🟢 сумку
🟢 предметы внутри сумки (двигаются)
Для проверки положил туда стартовый набор зелий.
Но сами предметы пока практически декоративные.
Клиент уже знает, что предмет существует и лежит в определённой ячейке, но полноценной серверной логики предметов ещё нет.
Что дальше
Сейчас хочу последовательно восстановить стартовое состояние персонажа.
Ближайшие задачи примерно такие:
🔴 предметы
🔴 стартовые навыки
🔴 характеристики персонажа
🔴 передвижение (и вот тут вот обмен пакетами в реальном времени)
И вот передвижение для меня сейчас следующий большой рубеж.
Потому что одно дело — загрузить персонажа и поставить его в мире.
И совсем другое — заставить сервер нормально принимать координаты, обрабатывать движение и синхронизировать состояние клиента.
А после этого уже можно будет постепенно оживлять сам мир:
🔴 NPC
🔴 мобы
🔴 другие игроки
🔴 чат
🔴 бой
🔴 квесты
🔴 остальные игровые системы
До полноценного приватного сервера ещё очень далеко.
Но теперь это уже не просто клиент, который умеет подключаться к моей программе.
В игру действительно можно войти через мой сервер.
И для меня это довольно серьёзный промежуточный результат.
И внезапно и очень приятно — русский язык!!!
Параллельно пишу перевод.
Получится ли вообще нормально русифицировать клиент?
Надеюсь да...
В скринах уже вы наверное заметили что русский накатил и он даже работает. Уже переведено 50000+ строк и это ещё далеко не конец. Русский язык будет! Если, конечно, будет сервер...😅
Перевод буду постепенно приводить в порядок параллельно с сервером.
Нужна помощь тех, кто действительно играл в Ragnarok Online 2
И вот здесь внезапно обнаружилась проблема, с которой reverse engineering уже не всегда помогает.
Мне нужно восстанавливать не только формат пакетов, но и оригинальные игровые данные.
Например, сейчас я пытаюсь понять:
— одинаковые ли стартовые HP у всех профессий;
— сколько SP должно быть у нового персонажа;
— сколько зелий выдавалось в самом начале;
— получал ли лучник сразу стрелы и сколько;
— какой именно стартовый набор вещей выдавался разным профессиям.
Поэтому если вы когда-то много играли именно в Ragnarok Online 2: Legend of the Second / Advent of Valkyrie и что-то из этого помните — буду тоже очень благодарен. ❤❤❤
И тут ещё раз напишу:
ЕСЛИ У КОГО ТО СОХРАНИЛСЯ WARP АККАУНТ И ЕМУ НЕ ЖАЛКО ПОДЕЛИТЬСЯ — Я БУДУ ОЧЕНЬ БЛАГОДАРЕН!!!❤❤❤
Где следить за разработкой
На DTF продолжу иногда выкладывать такие крупные этапы.
А небольшие результаты и скриншоты публикую в Telegram:
Также завёл группу ВК для тех, кому удобнее следить там. Если там появятся люди, буду тоже вести как и ТГ.
Следующая большая цель:
заставить персонажа нормально двигаться по миру.