Реклама ООО Таймвэб
Реклама ООО Таймвэб
Реклама ООО Таймвэб

Как подключить сервер базы данных к Sourcemod [Source | MariaDB]

Обсудить
Как подключить сервер базы данных к Sourcemod [Source | MariaDB]

Предисловие

В этой статье разберемся, как подключить сервер базы данных к Sourcemod на вашем игровом сервере. В качестве сервера возьмем MariaDB, установленный на другом сервере, отличном от игрового.

Подготовка mariadb

1. Устанавливаем:

sudo apt install mariadb-server

2. Вводим эту команду и начинаем конфигурирование:

sudo mysql_secure_installation

3. Далее нам предлагают ответить на вопросы. Вот эти вопросы с рекомендованными мною ответами:

  • Switch to unix_socket authentication [Y/n] n
  • Change the root password? [Y/n] n
  • Remove anonymous users? [Y/n] y
  • Disallow root login remotely? [Y/n] y
  • Reload privilege tables now? [Y/n] y

4. Теперь нужно настроить сетевые параметры. Для этого открываем конфиг файл 50-server.cnf:

50-server.cnf

5. Там нужно найти параметры bind-address и port, если второго нет, то добавьте его. Изменяем первый на 0.0.0.0, а второй на тот порт, который вам будет удобнее. Я для примера возьму 40234:

  • bind-address            = 0.0.0.0
  • port                             = 40234

6. На данном этапе все конфигурации окончены и теперь можно заняться созданием самой БД. Для этого заходим в консоль сервера MariaDB:

sudo mariadb

sudo mariadb

Так выглядит консоль сервера MariaDB. Я замазал некоторую информацию в целях собственной безопасности.

7. Нам нужно создать юзера, который будет использоваться Sourcemod для манипулирования данных. Выполняем команду:

CREATE USER 'plugin'@'%' IDENTIFIED BY 'password';

Поменяйте password на свой пароль.

8. Далее создаем базу данных с именем server:

CREATE DATABASE server;

9. Передаем все права на базу данных server пользователю plugin:

GRANT ALL PRIVILEGES ON server.* TO 'plugin'@'%';

10. И напоследок создаем таблицу в базе данных:

USE server;

CREATE TABLE players(userid VARCHAR(20), ip VARCHAR(16));

Второй командой мы создаем таблицу, где будет две колонки: players и ip. Это просто пример, поэтому можете сделать данную таблицу такой, как нужно вам.

Вот так это получилось у меня:

Команды

На этом конфигурация сервера полностью закончена. Если у вас что-то не будет работать, то попробуйте перезагрузить сервер MariaDB.

Конфигурирование Sourcemod

Приступим к конфигурированию игрового сервера. Заходим на него по ssh и открываем файл databases.cfg, лежащий по пути tf/addons/sourcemod/configs

databases.cfg

Сюда нужно дописать свою конфигурацию, для примера – эту:

"server"
{
        "driver"            "mysql"
        "host"              "example.com"
        "database"          "server"
        "user"              "plugin"
        "pass"              "password"
        "port"              "40234"
}

Думаю, что эти параметры не требуют объяснения. Введите все то, что вводили в MariaDB ранее.

Конфигрурация

На этом все. После сохранения файла и перезагрузки сервера база данных будет доступна плагинам из кода, но если у вас нет возможности перезагрузить сервер, то можно  просто ввести команду:

sm_reload_databases

Она переподгрузит вам все базы данных, указанные в файле databases.cfg.

Подключение из кода

В качестве бонуса покажу, как подключить БД из кода.

В документации функций есть раздел dbi, где описаны все функции. Нам нужна SQL_Connect или асинхронная SQL_TConnect. Вот примеры кода для каждой из них.

SQL_TConnect:

#include <dbi>
new Handle:DB = INVALID_HANDLE;

public void OnPluginStart()
{
        SQL_TConnect(InitDB, "server");
}

public void InitDB(Handle:owner, Handle:hndl, const char[] error, any data)
{
        if(hndl == INVALID_HANDLE || !StrEqual(error, ""))
        {
                SetFailState("Error: %s", error);
        }
        else
        {
                DB = hndl;
        }
}

SQL_Connect:

#include <dbi>
new Handle:DB = INVALID_HANDLE;

public void OnPluginStart()
{
        char error[255];
        DB = SQL_Connect("server", true, error, sizeof(error));

        if (DB == INVALID_HANDLE || !StrEqual(error, ""))
        {
                SetFailState("Error: %s", error);
        }
}

Спасибо за прочтение. Надеюсь, что вам помогла эта статья. Если у вас остались вопросы, то пишите их в комментариях!

Мы тут не в игры играем, а публикуем новости, обзоры и инструкции.

Комментарии

С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
С помощью соцсетей
У меня уже есть аккаунт Войти
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте