Предисловие
В этой статье разберемся, как подключить сервер базы данных к 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:
5. Там нужно найти параметры bind-address и port, если второго нет, то добавьте его. Изменяем первый на 0.0.0.0, а второй на тот порт, который вам будет удобнее. Я для примера возьму 40234:
- bind-address = 0.0.0.0
- port = 40234
6. На данном этапе все конфигурации окончены и теперь можно заняться созданием самой БД. Для этого заходим в консоль сервера 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
Сюда нужно дописать свою конфигурацию, для примера – эту:
"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); } }
Спасибо за прочтение. Надеюсь, что вам помогла эта статья. Если у вас остались вопросы, то пишите их в комментариях!
Полезные ресурсы:
Комментарии