Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Туториал Полная инструкция по настройке FMX Launcher

Статус
Закрыто для дальнейших ответов.

NuaN

Активный участник
Пользователь
Баллы
96
Имя в Minecraft
NuaN
FMXLauncher-Logo-1024x576.jpg

Инструкция by HoShiMin
Все вопросы задавать в официальной теме!
​
FMXLauncher – серверный лаунчер, построенный на платформе FireMonkey в среде Delphi XE7.



Возможности:

– Веб-часть на PDO
– Запуск игры через JNI
– Работа с online-mode по стандартному протоколу Yggdrasil
– Работа со своей Java-машиной: защита от всех универсальных обходов
– Шифрование и GZip-сжатие запросов
– Мультисерверность\мультиклиентность
– Пофайловая проверка и загрузка клиентов
– Полноценные 3D-скины с возможность установки, удаления и загрузки на диск
– Простая настройка на стороне сервера
– Поддержка клиентов с любой файловой иерархией
– 32х-битные и 64х-битные версии под соответствующие разрядности JVM
– Широкое использование библиотеки параллельного программирования PPL для многократного ускорения работы
– Антиотладочная защита СЗПУ “Периметр”
– Защита от редакторов памяти СЗПУ “Ратиборец”


Технические особенности платформы FM³:

– Полная поддержка DirectX 11.1
– Использование возможностей GPU при расчёте графики
– Лёгкое создание оформления: начиная нестандартными формами и заканчивая анимациями и шейдерными эффектами
– Стилизация стандартных элементов управления


В стандартном комплекте поставляются:

– Веб-часть
– Исходники формы и главного модуля лаунчера со всей логикой
– Полные исходники защиты лаунчера (СЗПУ “Периметр” и СЗПУ “Ратиборец”)
– PSD дизайна и распарсенный дизайн
– Bat-файлы для упаковки ресурсов и сжатия лаунчера​


Скачать: Офф.тема

Скриншоты:
09-03-2015-22-06-55.png

09-03-2015-22-05-35-1024x646.png
​


Настройка:

Для настройки нам понадобятся Delphi XE8 (скачать с Яндекс-диска), Notepad++ и FileZilla.


Настройка веб-части:
Создадим в корне сайта пустую папку, назовём её, например, Minecraft. Туда загружаем содержимое папки WebFMX:
29-03-2015-13-06-59-1024x576.png


Перед привязкой к базе необходимо создать дополнительную таблицу, где будут храниться данные авторизации игроков, для этого необходимо в phpMyAdmin в разделе SQL выполнить запрос из Tokens.sql:
Код:
CREATE TABLE IF NOT EXISTS `Tokens` (
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `uuid` varchar(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `accessToken` varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `serverId` varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Если у вас DLE:
По-умолчанию DLE блокирует загрузку файлов, не имеющих расширений (например, файлы assets’ов), вместо них выдавая HTML-страницу об ошибке. Чтобы это предотвратить, нужно открыть .htaccess в корне сайта, найти там следующую строчку:
Код:
RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]
И закомментировать её (перед ней поставить #).

Настраиваем дальше:

Открываем файл settings.php:
Код:
<?php
$dbhost = 'localhost';
$dbname = 'dbName';
$dbuser = 'User';
$dbpass = '12345';
$players_table_name = 'Players'; // Имя таблицы с данными игроков (для DLE = dle_users)
$tokens_table_name  = 'Tokens'; // Имя таблицы с данными для авторизации (запрос на создание в Tokens.sql)
$main_folder = 'http://gaga121as.pe.hu/Minecraft/'; // Путь к рабочей папке на хостинге
$servers_list    = 'servers.json'; // Название файла с настройками клиентов
$skins_folder    = 'MinecraftSkins'; // Папка со скинами
$cloaks_folder   = 'MinecraftCloaks'; // Папка с плащами
$previews_folder = 'Previews'; // Папка с превью-картинками серверов
$key = '12345'; // Ключ для шифрования запросов
?>

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

Имя таблицы с аккаунтами – зависит от CMS. Например, в DLE это ‘dle_users’.

Имя таблицы с авторизационными данными – таблица, которую мы создали выше (в нашем случае ‘Tokens’).

Файл с настройками клиентов – JSON с настройками каждого клиента, ссылками на необходимые скрипты и файлы Java (servers.json).

ПЛАЩИ (для 1.7.5 и выше):
В папке $cloaks_folder должны быть плащи с добавкой “_cloak”, например так: “Player_cloak.png”. Если у вас плащи называются по-другому, редактируйте имя в profile_info.php, но имя плаща не должно совпадать с именем скина!



Следующим шагом настроим запрос для выборки пользователя в базе аккаунтов.

Открываем файл sql_utils.php:

В массиве $user настраиваем хэширование пароля: например, для DLE = md5(md5(…)).

В SQL-запросе меняем названия столбцов таблицы на свои (для DLE это name и password соответственно):


Код:
$user = array(
'login'    => $login,
'password' => md5(md5($password))
);
...
$sql = $db_handle->prepare("SELECT COUNT(1) FROM `{$players_table_name}` WHERE `name`=:login AND BINARY `password`=:password");

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



Готовые клиенты и аргументы для них можно скачать ЗДЕСЬ.



В папке со скриптами веб-части создаём папки Clients, Previews и Java:

Clients – в эту папку будем загружать необходимые клиенты (Clients\ClientName)

Previews – здесь будут располагаться превью-картинки серверов (Previews\ServerPreview.png)

Java – здесь будет располагаться Java обеих разрядностей (Java\x32\…; Java\x64\…)



Настроим Sandbox-клиент 1.7.10 с оптифайном и шейдерами 30FPS.

Все библиотеки лежат в папке libraries, *.jar-файл клиента в папке versions\30FPS\, natives-библиотеки в versions\30FPS\natives:

Содержимое папки Sandbox:
29-03-2015-13-54-09.png

Содержимое папки libraries:
29-03-2015-13-54-20.png

Содержимое папки versions\30FPS\:
29-03-2015-13-54-38.png

​
Клиент готов к загрузке на сервер, но прежде необходимо переключить файлзиллу в режим передачи двоичных данных:
29-03-2015-14-02-29.png

​
Это необходимо для корректной загрузки бинарных файлов (assets’ов).


Итак, загружаем клиент в папку */Minecraft/Clients/Sandbox:
29-03-2015-14-05-33.png

Дальше загружаем 32х-битную и 64х-битную джаву в соответствующие папки (Java/x32 и Java/x64):
29-03-2015-14-33-38.png

​
Когда все файлы загружены, необходимо их проиндексировать и пересчитать все контрольные суммы. Для этого открываем браузер и выполняем скрипт client_utils.php:
29-03-2015-14-40-05.png

Все файлы подготовлены и проиндексированы, можно приступать к настройке клиента.
 
Последнее редактирование:
Открываем файл servers.json и видим 3 блока:

launcher_info – информация о версии лаунчера и ссылки на обновления
java_settings – информация и настройки иерархии джавы
servers – список серверов и настройки клиентов

Разберём каждый блок.


launcher_info:
Код:
"launcher_info" : {
"version" : 2,
"link32"  : "http://gaga121as.pe.hu/Minecraft/FMXLauncher32.exe",
"link64"  : "http://gaga121as.pe.hu/Minecraft/FMXLauncher64.exe"
}

version – номер версии лаунчера
link32 – ссылка на 32х-битный лаунчер
link64 – ссылка на 64х-битный лаунчер


java_settings:
Код:
"java_settings":{
"jvm32_library_path" : "bin/client/jvm.dll",
"jvm64_library_path" : "bin/server/jvm.dll",
"java32_executable_path" : "bin/java.exe",
"java64_executable_path" : "bin/java.exe",

"java_version"       : 8,
"jvm_arguments"      : "-Xmn128m",
"java_checked_folders" : [
{
"name"      : "bin",
"type"      : "*.jar",
"recursive" : "true"
},
{
"name"      : "lib",
"type"      : "*.jar",
"recursive" : "true"
},
{
"name"      : "bin",
"type"      : "*.dll",
"recursive" : "true"
},
{
"name"      : "lib",
"type"      : "*.dll",
"recursive" : "true"
}
]
}

jvm32(64)_library_path – путь к jvm.dll относительно java32(64)_folder
java32(64)_executable_path
– путь к java(w).exe относительно java32(64)_folder для legacy-запуска
java_version – версия java на сервере (число 6 для Java 6, число 7 для Java 7, число 8 для Java 8)
jvm_arguments – аргументы JVM
java_checked_folders – проверяемые файлы и папки:
– name – имя проверяемой папки
– type – тип проверяемых файлов (можно указать имя конкретного файла)
– recursive – проверять ли в подпапках, может принимать значения true (да) или false (нет)

Чтобы отключить использование джавы с сервера, необходимо поставить восклицательный знак перед именем блока:
Код:
"!java_settings" : {
    ...
},


servers:
Код:
"servers":[
{
"name" : "Sandbox Server",
"info" : "1.7.10 + GLSL Shaders",
"ip"   : "127.0.0.1",
"port" : "25565",
"legacy_Launch" : "false",

"client_folder"    : "Clients/Sandbox",
"natives_folder"   : "versions/$client_version/natives",
"assets_folder"    : "assets",
"asset_index"      : "1.7.10",

"version"    : "30FPS",
"main_class" : "net.minecraft.launchwrapper.Launch",
"arguments"  : "--username $username --version $client_version --gameDir $client_dir --assetsDir $client_dir/assets --assetIndex 1.7.10 --accessToken $access_token --uuid $uuid --userProperties [] --userType legacy --tweakClass optifine.OptiFineTweaker --tweakClass shadersmodcore.loading.SMCTweaker",
"!manual_loading" : [
{"name" : "libraries/launchwrapper.jar"},
{"name" : "versions/$client_version.jar"}
],
"jar_folders" : [
{"name" : "libraries"},
{"name" : "versions/30FPS"}
],

"client_checked_folders" : [
{
"name"      : "libraries",
"type"      : "*.jar",
"recursive" : "true",
"exclusives" : [
{"name" : "custom_folder"},
{"name" : "custom_lib.jar"},
{"name" : "else_custom_lib.jar"}
]
},
{
"name"      : "versions",
"type"      : "*.jar",
"recursive" : "true"
},
{
"name"      : "resourcepacks",
"type"      : "*.zip",
"recursive" : "true"
}
],
"preview_image"         : "Sandbox.png",
"requested_client_name" : "Sandbox"
},
{
...
}
]

name – отображаемое в лаунчере имя сервера
info – отображаемая в лаунчере информация о сервере
client_folder – путь к папке с клиентом относительно main_folder из host_info

natives_folder – папка с natives-библиотеками относительно client_folder
assets_folder
– папка с assets’ами
asset_index – индекс версии assets’ов (например, 1.7.10)

legacy_launch – тип запуска: true – через java(w).exe, false – через JNI

version – название версии клиента
main_class – главный класс (смотреть в JSON’е собираемого клиента)
arguments – параметры запуска (смотреть в JSON’е собираемого клиента)
manual_loading – список jar-файлов, которые необходимо загрузить
jar_folders – список папок, из которых необходимо подключить все jar-файлы (эта опция перекрывает manual_loading!)
client_checked_folders – список проверяемых файлов и папок
* поле exclusives – список исключаемых из проверки файлов и папок
preview_link – имя превьюшки в папке previews_folder в host_info
requested_client_file
– имя папки с клиентом в Clients


Для использования в блоке servers доступны следующие переменные:

$username
– ник игрока

$client_dir
– путь к папке с клиентом (%APPDATA%\.FMXLauncher\Clients\ClientName)

$client_version
– содержимое поля version в блоке servers

$access_token
– сессия

$uuid
– UUID игрока

$ip
– IP сервера

$port
– порт сервера


Также можно использовать переменные из оригинального JSON’а (скопировав и вставив строку запуска целиком).


Настройка поля arguments:

Если клиент был собран с помощью TLauncher’a или официального лаунчера от Mojang, то в папке с *.jar-файлом клиента будет лежать

JSON-файл с аргументами запуска. Открываем его в Notepad++ и находим поле ‘minecraftArguments':
29-03-2015-16-26-24.png

​
Копируем строку запуска в поле arguments, по желанию вручную настраиваем аргументы.

Внимание! Использовать только прямые слэши (“/”)!

Сохраняем servers.json, обновляем его на FTP. Настройка веб-части закончена.


Настройка лаунчера:

Распаковываем из архива на диск папку FMXLauncher и ищем файл полного проекта:
29-03-2015-16-36-56.png

​
Открываем его в Delphi:
29-03-2015-16-52-56-1024x576.png

​
Открываем LauncherSettings.pas:
Код:
var
  // Необходимые скрипты:
  AuthScriptAddress     : string = 'http://gaga121as.pe.hu/Minecraft/auth.php';
  SkinScriptAddress     : string = 'http://gaga121as.pe.hu/Minecraft/skin_utils.php';
  GetFilesScriptAddress : string = 'http://gaga121as.pe.hu/Minecraft/get_client_files.php';

  // Информация об иерархии на хосте:
  PreviewsHostFolder : string = 'http://gaga121as.pe.hu/Minecraft/Previews/';
  BaseHostFolder     : string = 'http://gaga121as.pe.hu/Minecraft/';

  MainFolder   : string = '.FMXLauncher'; // Имя папки в %APPDATA%
  RegistryPath : string = 'FMXLauncher';  // Название записи в реестре в ветке HKEY_CURRENT_USER\\Software\\

  LauncherVersion: Integer = 3;

  Key: AnsiString = '12345';

Прописываем адреса скриптов, имя рабочей папки, имя ветки в реестре для хранения настроек, версию лаунчера (не должна быть меньше, чем указано в servers.json, иначе лаунчер потребует обновиться, а также ключ – должен совпадать с ключом в settings.php.


Открываем Definitions.inc:
Код:
//{$DEFINE USE_PERIMETER} // Использовать СЗПУ "Периметр" (только х32)
//{$DEFINE USE_RATIBOR}   // Использовать СЗПУ "Ратиборец"

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// Настройки СЗПУ "Ратиборец":
//{$DEFINE HIDE_PROCESS}          // Скрывать процесс
//{$DEFINE FLUSH_PROCESS_INFO}    // Стирать информацию о процессе
//{$DEFINE INVALIDATE_PROCESS_ID} // Сделать идентификатор процесса недействительным одним из следующих способов:
  //{$DEFINE EQUALS_9999}           // Заменить ProcessID на 9999
  //{$DEFINE AS_CURRENT_PROCESS_ID} // Заменить на ID процесса, пытающегося получить доступ к лаунчеру
  //{$DEFINE RANDOM_PROCESS_ID}     // Случайный ProcessID в диапазоне [0..9999]
{$DEFINE MEMORY_READ_PROTECT}  // Защита от чтения памяти
{$DEFINE MEMORY_WRITE_PROTECT} // Защита от изменения памяти

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

{$DEFINE HOOK_JAVA_HALT} // Перехватывать завершение процесса из клиента (для отладки, только в Debug-режиме)
{$DEFINE HIDE_LAUNCHER} // Скрывать лаунчер перед запуском игры
{$DEFINE CLEAR_JVM_FLAGS} // Очищать флаги JVM перед запуском игры
{$DEFINE INGAME_CLIENT_CHECKING} // Проверка клиента во время игры

// Загрузка файлов:
//{$DEFINE DOWNLOAD_FILES_LIST_ONCE}  // При проверке файлов не загружать список файлов
{$DEFINE SINGLE_THREAD_DOWNLOADING} // Загрузка файлов в один поток
{$DEFINE GZIP_DOWNLOADS}            // GZip-сжатие файлов при загрузке

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// Настройки рендера FireMonkey (по-умолчанию используется DirectX 10/11.1):
//{$DEFINE USE_DIRECTX_9}        // Использовать DirectX 9.0c
//{$DEFINE USE_SOFTWARE_DIRECTX} // Софтварное ускорение
//{$DEFINE NOT_USE_DIRECTX}      // Не использовать DirectX
//{$DEFINE NOT_USE_CLEAR_TYPE}   // Не использовать ClearType для рендеринга шрифтов

Комментируя или раскомментируя эти флаги, можно менять функционал лаунчера.

По окончании настройки жмём Shift + F9 (собрать проект),

в соответствующей архитектуре и режиму компиляции папке (Win32/Win64 -> Debug/Release) будет создан FMXLauncher.exe.

Поочерёдно собираем лаунчер в режиме релизной компиляции для Win32 и Win64 (см. скрин выше), переходим в папку с исходниками и запускаем Pack’n’Capture.bat – этот батник извлечёт из Win32/Release и Win64/Release скомпилированный лаунчер в корень папки с исходниками, сожмёт его UPX’ом и переименует в FMXLauncher32.exe/FMXLauncher64.exe – это и есть готовый к использованию лаунчер.


Настройка дизайна:

Смена картинок в TImage’ах:
29-03-2015-17-21-46-1024x576.png

29-03-2015-17-23-43-1024x410.png

​
Смена фона:
29-03-2015-17-26-16.png

29-03-2015-17-29-44-1024x560.png
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх