Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

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

Discussion in 'Руководства, инструкции, утилиты' started by NuaN, Oct 1, 2015.

Thread Status:
Not open for further replies.
  1. Автор темы
    NuaN

    NuaN Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    NuaN
    [​IMG]
    Инструкция 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-файлы для упаковки ресурсов и сжатия лаунчера​


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

    Скриншоты:
    [​IMG]
    [​IMG]


    Настройка:

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


    Настройка веб-части:
    Создадим в корне сайта пустую папку, назовём её, например, Minecraft. Туда загружаем содержимое папки WebFMX:
    [​IMG]

    Перед привязкой к базе необходимо создать дополнительную таблицу, где будут храниться данные авторизации игроков, для этого необходимо в phpMyAdmin в разделе SQL выполнить запрос из Tokens.sql:
    Code:
    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 в корне сайта, найти там следующую строчку:
    Code:
    RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]
    И закомментировать её (перед ней поставить #).

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

    Открываем файл settings.php:
    Code:
    <?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 соответственно):


    Code:
    $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:
    [​IMG]

    Содержимое папки libraries:
    [​IMG]

    Содержимое папки versions\30FPS\:
    [​IMG]
    Клиент готов к загрузке на сервер, но прежде необходимо переключить файлзиллу в режим передачи двоичных данных:
    [​IMG]
    Это необходимо для корректной загрузки бинарных файлов (assets’ов).


    Итак, загружаем клиент в папку */Minecraft/Clients/Sandbox:
    [​IMG]

    Дальше загружаем 32х-битную и 64х-битную джаву в соответствующие папки (Java/x32 и Java/x64):
    [​IMG]
    Когда все файлы загружены, необходимо их проиндексировать и пересчитать все контрольные суммы. Для этого открываем браузер и выполняем скрипт client_utils.php:
    [​IMG]

    Все файлы подготовлены и проиндексированы, можно приступать к настройке клиента.
     
    Last edited: Oct 1, 2015
  2. Хостинг MineCraft
    <
  3. Автор темы
    NuaN

    NuaN Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    NuaN
    Открываем файл servers.json и видим 3 блока:

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

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


    launcher_info:
    Code:
    "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:
    Code:
    "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 (нет)

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

    servers:
    Code:
    "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':
    [​IMG]
    Копируем строку запуска в поле arguments, по желанию вручную настраиваем аргументы.

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

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


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

    Распаковываем из архива на диск папку FMXLauncher и ищем файл полного проекта:
    [​IMG]
    Открываем его в Delphi:
    [​IMG]
    Открываем LauncherSettings.pas:
    Code:
    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:
    Code:
    //{$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’ах:
    [​IMG]
    [​IMG]
    Смена фона:
    [​IMG]
    [​IMG]
     
Thread Status:
Not open for further replies.

Share This Page