- Баллы
- 153
- Имя в Minecraft
- NC22
API для создания лаунчера [ исходники на Delphi, ООП ]
Исходники ядра, мониторинга серверов и трех лаунчеров-примеров, каждый со своими особенностями.
Скомпоновал в одну тему, чтобы флуда было меньше. С общей темой Delphi исходники.
Необходимый набор для сборки:
Если файлы не требуют обновления, соответственно они не закачиваются повторно.
(в папке обновлений на сервере, вместе с обновляемым файлом должен быть расположен файл _ИМЯ_ОБНОВЛЯЕМОГО_ФАЙЛА_.md5 в котором содержится MD5-хэш этого файла)
Это самый оптимальный способ проверки.
( если же заставлять сервер каждый раз генерировать MD5 хэш через PHP файл, то это лишний повод для DDOSа т.к. подсчет MD5 для файлов большого размера это весьма ресурсоемкий процесс )
Файлы API
c_core.pas - Основной набор функций
c_query.pas - Функция для мониторинга сервера
c_crypt.pas - шифрование. Реализация тривиальная, взята с просторов.
MD5.pas - набор функций для генерации MD5-хэша, автор Angus Johnson
В архиве c_core_10 три лаунчера и API [ папка c_core ]
По размеру файла лаунчера можно уложится в 1 мегабайт и меньше. С upxом еще меньше.
Все исходные файлы одним архивом: C_CORE 1.0 | C_CORE 1.1 ( только в версии под Delphi XE )
Скомпилированные лаунчеры consoleML | ML1998 | TinyLauncher ( + пример файла настроек для сервера с webMCR, загружать через меню настройки )
Генератор MD5 хэша ( можете и сами такой собрать, благо функций достаточно)
Исходники ядра, мониторинга серверов и трех лаунчеров-примеров, каждый со своими особенностями.
Скомпоновал в одну тему, чтобы флуда было меньше. С общей темой Delphi исходники.
Необходимый набор для сборки:
- Delphi 6.0 , 7.0 ( начиная с версии 1.1 XE )
- Библиотека Abbrevia 5.0 (работа с zip архивами, никаких дополнительных dll )
- Для версии Delphi 6.0 и ниже INDY 9.0.18
- Авторизация по протоколам оригинального лаунчера\сервера
- Обработка внештатных ситуаций
- Обновление клиента по списку файлов ( поддерживаются zip архивы)
- Игровые настройки
- Скачивание/загрузка локального файла авто настройки
- Сохранение/загрузка файла настроек ( поддержка шифрования данных )
- Проверка подлинности файлов по MD5-хэшу как перед скачиванием так и при запуске игры
- Авто поиск директории игры и Java
- Почему лаунчер качает клиент каждый раз хотя он скачан?
К любому загружаемому файлу на сервере должна быть пара - файл с тем же названием и расширением md5 например windows_natives.jar.md5
содержащий контрольную сумму md5 для этого файла. Генератор контрольной суммы прикложен к сообщению.
В функции DownloadFile это строка Download.hash := DownloadMD5(fname + '.md5');
содержащий контрольную сумму md5 для этого файла. Генератор контрольной суммы прикложен к сообщению.
В функции DownloadFile это строка Download.hash := DownloadMD5(fname + '.md5');
- Какое функциональное предназначение параметра в структуре настроек
- Distr_list ?
Options.webOptions.Distr := 'http://s3.amazonaws.com/MinecraftDownload/'; // Сервер - поставщик
Options.webOptions.Distr_list := 'minecraft.jar|jinput.jar|lwjgl.jar|lwjgl_util.jar|windows_natives.jar'; // Выкачиваемые файлы с сервера-поставщика
- GameBuild ?
Оригинальный лаунчер сохраняет в папку с игрой файл с текущей параметром GameBuild, по нему проверяет нужно ли перекачивать игру или нет.
Здесь же этот параметр передается в рамках совместимости со скриптом авторизации webMCR и прочих.
- PassBase ?
Если включен режим шифрования используется мастер-ключ шифрования конфиг файла и всех параметров в памяти лаунчера
(т.е. через программу-взломщик найти и подменить параметр непосредственно в лаунчере не получится, если в настройках задан ключ шифрования).
Но основные параметры естественно в любом случае можно раскрыть при должном желании, это просто защита от дурака, не более.
Options.webOptions.Distr := 'http://s3.amazonaws.com/MinecraftDownload/'; // Сервер - поставщик
Options.webOptions.Distr_list := 'minecraft.jar|jinput.jar|lwjgl.jar|lwjgl_util.jar|windows_natives.jar'; // Выкачиваемые файлы с сервера-поставщика
- GameBuild ?
Оригинальный лаунчер сохраняет в папку с игрой файл с текущей параметром GameBuild, по нему проверяет нужно ли перекачивать игру или нет.
Здесь же этот параметр передается в рамках совместимости со скриптом авторизации webMCR и прочих.
- PassBase ?
Если включен режим шифрования используется мастер-ключ шифрования конфиг файла и всех параметров в памяти лаунчера
(т.е. через программу-взломщик найти и подменить параметр непосредственно в лаунчере не получится, если в настройках задан ключ шифрования).
Но основные параметры естественно в любом случае можно раскрыть при должном желании, это просто защита от дурака, не более.
- Почему не расспаковывает zip файл?
Рекомендуется использовать архивы без сжатия.
- По какому протоколу проходит взаимодействие с сервером авторизации?
Протокол соответствует протоколу авторизации MC ниже версии 1.6, а именно
Лаунчер отправляет POST запрос на адресс указанный в webOptions.Login ( например http://s3.amazonaws.com/login/ )
C параметрами
(string) user,
(string) password,
(int) version
Ответ сервера - текстовая строка;
Ответ сервера информирующий об успешной авторизации:
GAME_BUILD:depricated:USER_NAME:SESSION_ID:
где SESSION_ID - идентификатор сессии без префикса token:
depricated - ранее ключ для загрузки файлов с сервера, ныне игнорируемая лаунчером информация
USER_NAME - имя пользователя авторизовавшегося под заданным идентификатором (соответствует POST (string) user)
Ответ информирующий об ошибке:
Old vesion или Bad login
Далее соответсвующий идентификатор сессии и имя пользователя передается запускаемому minecraft-клиенту
Лаунчер отправляет POST запрос на адресс указанный в webOptions.Login ( например http://s3.amazonaws.com/login/ )
C параметрами
(string) user,
(string) password,
(int) version
Ответ сервера - текстовая строка;
Ответ сервера информирующий об успешной авторизации:
GAME_BUILD:depricated:USER_NAME:SESSION_ID:
где SESSION_ID - идентификатор сессии без префикса token:
depricated - ранее ключ для загрузки файлов с сервера, ныне игнорируемая лаунчером информация
USER_NAME - имя пользователя авторизовавшегося под заданным идентификатором (соответствует POST (string) user)
Ответ информирующий об ошибке:
Old vesion или Bad login
Далее соответсвующий идентификатор сессии и имя пользователя передается запускаемому minecraft-клиенту
- Генерация настроек:
- ссылка на страницу новостей
- ссылка на страницу авторизации
- ссылка на страницу регистрации
- ссылка на папку обновлений
- ссылка на файл авто настройки
- список файлов для обновления
- версия клиента
- код шифрования
- триггер запрета изменения настроек ( часть настроек будет доступна только самому ядру, до пользовательского интерфейса они дойдут в виде завуалированной строки )
- ...
- Настройки по умолчанию на конкретный сервер, необходимы только данные для авторизации.
- Сброс настроек до настроек по умолчанию
- Загрузка файла авто настроек с удаленного сервера. ( синхронизируется версия клиента, ссылка на страницу авторизации и д.р. )
- Загрузка локального файла настроек.
- Загрузка файла с удаленного сервера с проверкой по md5 необходимости загрузки.
- Правила приема файлов: Проверка существующих файлов по md5-хэшу ( описана ниже ) ; Если файл был загружен то для любых файлов копирование в папку bin; для ZIP архивов разархивирование в папку игры; для архива windows_natives.jar разархивирование в подпапку bin\natives;
- Загрузка списка файлов по правилам описанным выше.
- Проверка установлена ли игра, по ряду ключевых файлов. (Windows)
- Сохранение настроек в файл.
- Возможность шифрования настроек подключения как в памяти программы так и при сохранении данных в файл.
- Запуск игры с проверкой подлинности minecraft.jar по MD5.
- Авторизация по протоколам оригинального лаунчера\сервера. Совместимо с webMCR
- События для синхронизации интерфейса:
- Процесс разархивирования zip архива
- Процесс загрузки файла ( возможность реализовать процентное отображение )
- Неизвестный ответ от сервера
- Протокол лаунчера устарел ( ошибка возникает при неудачном чтении файла автонастроек \ настроек )
- Ответ сервера - Oldversion
- Сервер авторизации недоступен
- Ответ сервера - BadLogin
Если файлы не требуют обновления, соответственно они не закачиваются повторно.
(в папке обновлений на сервере, вместе с обновляемым файлом должен быть расположен файл _ИМЯ_ОБНОВЛЯЕМОГО_ФАЙЛА_.md5 в котором содержится MD5-хэш этого файла)
Это самый оптимальный способ проверки.
( если же заставлять сервер каждый раз генерировать MD5 хэш через PHP файл, то это лишний повод для DDOSа т.к. подсчет MD5 для файлов большого размера это весьма ресурсоемкий процесс )
Файлы API
c_core.pas - Основной набор функций
c_query.pas - Функция для мониторинга сервера
c_crypt.pas - шифрование. Реализация тривиальная, взята с просторов.
MD5.pas - набор функций для генерации MD5-хэша, автор Angus Johnson
В архиве c_core_10 три лаунчера и API [ папка c_core ]
Лаунчер с оконным интерфейсом. Мультиклиентный. Максимально раскрыт функционал C_Core . Т.к. разрабатывался вместе с API. Есть доступ ко всем настройкам через формы. Требует наличия библиотеки BussinesSkinForm




Все исходные файлы одним архивом: C_CORE 1.0 | C_CORE 1.1 ( только в версии под Delphi XE )
Скомпилированные лаунчеры consoleML | ML1998 | TinyLauncher ( + пример файла настроек для сервера с webMCR, загружать через меню настройки )
Генератор MD5 хэша ( можете и сами такой собрать, благо функций достаточно)
Вложения:
Последнее редактирование:




