Так вот, чтобы облегчить мучения тем, кто решит сделать тоже самое, я решил написать небольшое руководство. Не смотря на то, что это мой первый гайд, я постараюсь быть максимально понятным и конечно, надеюсь, что мое руководство будет кому-то полезно.
Приступим...
1. Шаг это установка необходимого софта.
Я вам настоятельно рекомендую MariaDb, так как это абсолютный аналог MySQL, к которому в подарок идет БЕСПЛАТНЫЙ клиент для работы с Базой Данных, под названием - HeidiSQL. Navicat же, в отличии от Heidi является платным, но Функционала Heidi, поверьте, нам хватит и даже больше чем.
2. Переходим по этой ссылке
Скачиваем (ВНИМАНИЕ) последнюю версию с расширением MSI! Не ZIP!
Или же берем из моего архива, который я приложу ниже.
3. Устанавливаем MariaDB, все настройки оставляем по дефолту, кроме пароля,
его советую поставить легким, что-бы не забыть на первое время. В любом случае вы его сможете изменить. Я ставлю пароль 12345.
Далее есть две галочки.
Enable root acces from remote - Если вы собираетесь подключатся к вашей базе удаленно, т.е. с другого компа, то ставим,
мне же, это не нужно. Оставляю пустым. Да и вообще, в нашем случае - это не нужно.
Вторая галочка - анонимный аккаунт, оставляю пустым, что-бы в логах базы всегда было видно, какой пользователь подключился и когда. Опять же, оно нам сейчас не нужно.
4. Завершаем нашу установку, после чего на рабочем столе появится значок HeidiSQL, открываем его.
Открывается Менеджер сеансов, в нем оставляем все как есть и вводим свой пароль, который указали при установке (мой 12345).
Выглядеть должно это примерно так:
- Имя сеанса - оставляем Unnamed - это нам для наглядности.
- Тип сети - MySQL (TCP/IP)
- Имя хоста / IP - 127.0.0.1
- Запрашивать учетные данные - оставляем пустым.
- Аутентификация Windows - оставляем пустым.
- Пользователь root
- Пароль - 12345
- Порт - 3306
- Сжатый протокол - оставляем пустым.
- Базы данных - оставляем как есть (Внутри должны быть : information_schema, mysql, performance_schema, test).
- Комментарий - оставляем пустым.
5. Нажимаем - открыть (Heidi предложит сохранить настройки для сеанса и мы соглашаемся с ней).
Если открылось, значит все установилось правильно и мы можем идти дальше.
Если нет, то у вас может быть занят порт 3306, неправильный пароль к BD или же другие несовместимости, в которых вам придется разобраться самостоятельно.
6. Нам надо создать базу данных с именем testdb.
- Правой кнопкой по сеансу Unnamed.
- Создать >> База данных.
Открылось окно, в нем пишем (ВНИМАНИЕ, пишем с учетом регистра, в нашем случае все маленькими буквами!!!)
- Имя - testdb
- Сопоставление - utf8_general_ci
7. Теперь в поле слева должна была появится testdb (Если не появилась, ищем кнопку обновить или нажимаем F5), нажимаем по testdb правой кнопкой мыши:
- Создать >> Таблица
Теперь у вас открылась вкладка "ТАБЛИЦА", справа от нее есть вкладка "ЗАПРОС" (Её значок - синий треугольник, как кнопка play на mp3 плеере). Тыкаем по вкладке "ЗАПРОС". Видим поле для ввода текста, в котором моргает курсор, далее делаем.
- Жмем (CTRL + O) ИЛИ В поле для ввода текста, нажимаем правой кнопкой мыши в любое место и ищем "загрузить SQL файл", нажимаем на него.
- Теперь открываем файл из моего архива под названием testTable.sql
- нажимаем ОК.
- В пустое поле должна была загрузится форма создания таблицы, если так оно и есть, тогда нажимаем F9 или ищем кнопку (синий треугольник, как ранее мы видели на вкладке) и нажимаем на неё.
База и таблица создана, теперь на всякий случай проверяем это.
- в левом столбце с базами данных, выделяем testdb (если не выделена).
- нажимаем по вкладке База данных: testdb
- нажимаем F5
Должна появится строка с именем testplayers.
Далее нам надо создать пользователя для нашей Extdb3.
8. Создаем пользователя:
- ищем на панели значок, с двумя "человечками" (справа от кнопки обновить) или же открываем - Инструменты >> управление пользователями. Нажимаем.
В окне, которое открылось делаем:
- жмём кнопку добавить (значок - зеленый плюс +)
- имя пользователя - arma - (ставим с учетом регистра!!! Позже это же имя поставим в конфиге Extdb3)
- пароль - 12345 - (позже такой же пароль нужно сделать в конфиге Extdb3)
- Хост - localhost
- ставим галочку на глобальные разрешения
- сохранить
О_ГОСПАДИ_СПАСИБА_МЫ_НАСТРОИЛИ_НАКАНЕЦТА_MARIADB_ПАЙДУ_ПАКУРЮ
9. Теперь из моего архива берем папку @Extdb3 и кидаем ее в корневую папку своего выделенного сервера.
Далее В моём архиве находим файлы:
- tbbmalloc.dll
- tbbmalloc_x64.dll
- start.bat
- server.cfg
Копируем и перекидываем в корневую папку сервера, что-бы лежали в одной папке с arma3server.exe и папкой @Extdb3.
10. Мою папку mpmissions кидаем в корневую папку своего выделенного сервера и заменяем моей.
Вуаля, на данном этапе, у вас всё настроено и вы можете запустить сервер с моей тестовой миссией (start.bat), на котором будет работать:
1. Внесение нового игрока в базу данных.
2. Загрузка игроков которые уже были на сервере.
3. Каждые 30 сек, будет сохранятся снаряжение игрока и его координаты.
То есть если вы выйдите с сервера и зайдете вновь, вы появитесь на том же месте, где были в момент отсоединения и с тем же снаряжением.
Теперь небольшое пояснение самой главное мысли моего монолога о Extdb3. Скажем так, основные положения.
A1. Наладка соединения сервера и БД. (ini файлы в папке Extdb3).
Для того, что-бы наладить общение сервера Армы и БД, вам необходимо в папке @extdb3 найти файл extdb3-conf.ini
В нем самое главное:
A1.1 Команда - Allow Reset = true
Это для режима разработки, нужна она для того, что-бы закрыть соединение с БД, после чего можно соединится повторно.
Вы поймете почему это удобно, когда решите написать свою систему взаимодействия клиент<- ->сервер<- ->бд
A1.2 Это настройка пользователя для БД:
[testdb] // Должно совпадать с пунктом Database(будет ниже), если верить забугорам IP = 127.0.0.1 // Это дураку понятно Port = 3306 // Это тоже. PS Если не понятно, смотреть пункт 4. Username = arma //Это имя пользователя, которое мы указывали в настройках БД. Смотреть Пункт 8. Password = 12345 //Это пароль пользователя, который мы указывали в настройках БД. Смотреть Пункт 8. Database = testdb //Должно полностью совпадать с вашей базой данный, которую вы создали в HeidiSql или другом ДБклиенте. Смотреть пункт 6 и 7.A1.3 Очень важно, это папка sql_custom.
В ней должен находится ini, скажем так с пресетами, в которых вы указываете, что и в каком порядке будет принимать или возвращать ваша БД вашему серверу. Для примера посмотрите мой testcustom.ini
A2. Наладка соединения сервера и БД. (SQF).
Основные команды, которые я успел узнать на данный момент.
A2.1
- "Extdb3" callExtension "9:ADD_DATABASE:testdb" // сервер Арма 3 подключается к базе данных.
Там где testdb, имя вашей базы данных, указанное в extdb3-conf.ini // пункт A1
- "Extdb3" callExtension format "9:ADD_DATABASE_PROTOCOL:testdb:SQL_CUSTOM:777:testcustom.ini"
Там где testdb - имя вашей базы данных, указанное в extdb3-conf.ini
Там где 777 - Это протокол, грубо говоря ID соединения. И его обязательно нужно установить, в противном случае вы не сможете меняться пакетами с БД, так как у вас нет моста для этого. Так же протокол играет защитную функцию.
Там где testcustom.ini - Это ваш файл с шаблонами, пункт A1.3
- Другие смотреть в скриптах из приложенного мной архива. Так будет нагляднее.
Это вроде бы все, а теперь предлагаю вам ознакомится с моей миссией DATABASE в папке mpmissions, что-бы понять как это работает.
PS. На нашем форуме, есть люди которые гораздо лучше меня разбираются в SQF и его грамотном написании.
Я обращаюсь к нашим уважаемым старожилам!
Скрипты в моем примере были написаны для наглядности и могут быть не оптимальны, прошу сильно не критиковать меня за это, так как ради всех старался)
Но адекватные замечания приветствуются.
Описание файлов
- HPAwesomeQuery.sqf - Тут массив с принятыми пакетами от игроков, нужен для того что-бы пакеты обрабатывались по очереди, так как DB не может выполнять 2 запроса одновременно.
- client/fn_DBSUC.sqf - Клиент формирует пакет в котором сохраняется его снаряга и координаты, затем отправляет пакет в очередь на сторону сервера, а сервер помещает их в ту самую очередь (Исполнение только на клиенте)
- client/fn_DBLUC.sqf - Клиент отправляет пакет, в котором содержится запрос, что-бы сервер загрузил снаряжение и координаты клиента и после, применил их к клиенту (Исполнение тоже только на клиенте).
В принципе всё.
С уважением, ваш ReXcOr =)
PS. если что упустил, пишите, подредактирую.
Ссылка на архив
Мой ВК
PSS В прикрепленном файле, отсутствует MariaDB, т.к. на форуме ограничение на вес файлов.
Ссылка на архив с MariaDB на пару строк выше.
Attached Files
Edited by ReXcOr, 12 January 2018 - 10:52.