Jump to content


Photo

Руководство по Extdb3


  • Please log in to reply
6 replies to this topic

#1 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

  • Пользователи
  • 264 posts
  • Откуда:Moscow

Posted 11 January 2018 - 11:40

Как то раз, мне очень захотелось узнать как наладить extdb3 в купе с армой, я спрашивал на форумах, лазил по скриптам из ексайлов и алтислайфов, но никто так и не объяснил, как это сделать. Пришлось поломать голову самому))
Так вот, чтобы облегчить мучения тем, кто решит сделать тоже самое, я решил написать небольшое руководство. Не смотря на то, что это мой первый гайд, я постараюсь быть максимально понятным и конечно, надеюсь, что мое руководство будет кому-то полезно.

Приступим...

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.

  • 4

#2 OFFLINE   Tarhun

Tarhun

    Рядовой

  • Пользователи
  • 4 posts

Posted 09 November 2018 - 10:12

Действительно хорошее руководство, Спасибо ! Все работает! Но вот только попытался добавить свой столбец в БД , и никак не могу догнать как его от туда извлечь, просто не понятно как оно работает :(
  • 0

#3 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 posts
  • Откуда:Донецк

Posted 09 November 2018 - 12:07

Tarhun, Создайте  в testcostom.ini нужный вам параметр, и в файле достаньте его с помощью этого когда:
 

((call compile ("Extdb3" callExtension format ["0:%1:ТУТ НАЗВАНИЕ ВАШЕГО ПАРАМЕТРА:%2", (ceil random 9999), ПЕРЕДАВАЕМЫЕ ПАРАМЕТРЫ ДЛЯ ОБРАЩЕНИЯ])) select 1) select 0

Вам конечно будет сложно так разобраться, ибо тут не все однотипно, и в зависимости от запроса это все меняется, поэтому советую посмотреть как устроенна EXTDB2 в моде Exile, посмотрите что и как, и научитесь ей пользоваться.


  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1844 posts

Posted 09 November 2018 - 18:15

Можно ещё использовать

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.


  • 0

#5 OFFLINE   Warcat06

Warcat06

    Рядовой

  • Пользователи
  • 2 posts
  • Откуда:Voronezh

Posted 04 May 2019 - 23:31

Может быть кому-то вроде меня, для кого это все - темный лес, будет полезно:

 

  • В примере от автора SQL-запросы внутри testcustom.ini написаны в столбики вида

 

SQL1_1 = часть SQL запроса

SQL1_2 = часть SQL запроса

SQL1_3 = часть SQL запроса

SQL1_INPUTS = 1,2,3...

 

По сути, все это в итоге объединяется в один SQL-запрос, так что разницы особой я не увидел, будет запрос разбит по частям, как в примере или написан одной строкой в SQL1_1

 

  • В скриптах, при обращении к DLL, есть вот такое:
"Extdb3" callExtension format ["0:...];

и

"Extdb3" callExtension format ["9:...];

 

Цифры в данном случае обозначают тип обращения к обработчику.

9 - системные команды. Нужны для подключения к БД, обозначения кастомного файла с запросами и т.д.

0 - основной тип запроса для работы с БД.

 

  • Получение значений из БД возвращается в переменную без каких-либо селектов в виде:

[1, [[значение1, значение2, значение3]]]

1 означает, что запрос прошел без ошибок.

 

Очень удобно все это тестить на сервере напрямую, через консоль отладки с помощью

[format ['Значение 1: %1', _sqlResult]] remoteExecCall ["hint", -2];

Edited by Warcat06, 04 May 2019 - 23:32.

  • 1

#6 OFFLINE   Коси&Забивай

Коси&Забивай

    Рядовой

  • Пользователи
  • 1 posts

Posted 06 April 2020 - 13:13

Всем привет.

 

Мне не понятно как связываются операторы    SQL1_1

                                                                              SQL1_2

                                                                              SQL1_3

                                                                              SQL1_4 и тп

                                                                                              со столбцами в самой базе?

У автора есть таблица "testplayers"  и 5-ть столбцов                    1 p_id

                                                                                                           2 p_guid

                                                                                                           3 p_name

                                                                                                           4 p_equipment

                                                                                                           5 p_lastloc

На примере "p_lastloc"

 

В действии [loadPlayer]

 

SQL1_3 =     p_lastloc

 

В действии [savePlayer]

 

SQL1_5 =     p_lastloc = ?

 

 

В доках

Что такое SQLX_Y ???

X = номер линии Y = номер детали линии

Что такое SQLX_INPUT ???

X = номер строки
 
То есть я не понимаю смотря на базу,где одна таблица "testplayers" и 5 столбцов как это "координатная сетка" работает!?
Прошу помощи,подскажите.Иначе не могу сделать свою базу и файл *.ini с операторами.

  • 1

#7 OFFLINE   Кирилл Дербенев

Кирилл Дербенев

    Рядовой

  • Пользователи
  • 2 posts
  • Откуда:Россия
  • Отряд:DST

Posted 15 November 2021 - 14:17

А что делать если пишет:
/* Ошибка SQL (1227): Access denied; you need (at least one of) the RELOAD privilege(s) for this operation */ 
При создании пользователя


  • 0




Яндекс.Метрика