Вопросы

Всем привет, нужно в моде сделать, чтобы при загрузке сервера брало айпи и порт с server.cfg и подключалось к базе данных, после чего в ней искало bind:port с server.cfg , и если этого айпи там не окажется, то сервер выключится, а если айпи найдется, то ничего не произойдет

Отредактировано пользователем kekkomomek1941

Поделиться сообщением


Ссылка на сообщение

1 ответ на этот вопрос

  • 0

Не забывай что это только мой пример, весь код ты должен оптимизировать под себя:

 

// Переменные для хранения IP и порта
new ServerIP[16];
new ServerPort;

}
stock LoadServerConfig() {
    new File:configFile = fopen("server.cfg", io_read);
    if (configFile == 0) {
        printf("Ошибка открытия server.cfg");
        return 0;
    }
    
    new line[128];
    while (fread(configFile, line)) {
        if (sscanf(line, "bind %s", ServerIP)) {
            continue;
        }
        if (sscanf(line, "port %d", ServerPort)) {
            continue;
        }
    }
    fclose(configFile);
    return 1;
}

// Функция подключения к базе данных и проверки наличия IP:Port
stock CheckServerInDatabase() {
    new MySQL:connection;
    new query[256];

    // Подключение к базе данных
    connection = mysql_connect("host""user""password""database");
    if (connection == MYSQL_INVALID_HANDLE) {
        printf("Ошибка подключения к базе данных");
        return 0;
    }
    
    // Формирование запроса
    format(query, sizeof(query), "SELECT COUNT(*) FROM servers WHERE ip='%s' AND port=%d", ServerIP, ServerPort);
    
    new result[1];
    if (mysql_query(connection, query)) {
        printf("Ошибка выполнения запроса: %s", mysql_error(connection));
        mysql_close(connection);
        return 0;
    }
    
    // Обработка результата запроса
    mysql_store_result(connection);
    if (mysql_fetch_row_format(connection, "%d", result)) {
        if (result[0] == 0) {
            printf("Сервер с IP %s и портом %d не найден в базе данных. Отключение...", ServerIP, ServerPort);
            mysql_close(connection);
            SendRconCommand("exit");
            return 0;
        }
    }
    
    mysql_free_result(connection);
    mysql_close(connection);
    return 1;
}

public OnGameModeInit() {
    // Считывание конфигурации сервера
    if (!LoadServerConfig()) {
        printf("Ошибка при загрузке конфигурации сервера");
        return 0;
    }
    
    // Проверка сервера в базе данных
    if (!CheckServerInDatabase()) {
        return 0;
    }

    // Продолжение инициализации игрового режима
    return 1;
}

Подробно объясню что оно делает:

  1. В функции LoadServerConfig читаются IP и порт из файла server.cfg.
  2. В функции CheckServerInDatabase происходит подключение к базе данных и выполняется запрос на проверку наличия записи с соответствующими IP и портом.
  3. Если запись не найдена, сервер отключается с помощью команды SendRconCommand("exit").
  4. Если запись найдена, инициализация сервера продолжается.

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Sten Developer
      От Sten Developer
      Объясню всю ситуацию, пишу систему смерти игрока но она не работает. Решил по приколу написать туда обычный вывод текста SCM(playerid, COLOR_RED, "Вы умерли");
      Но однако после смерти текст не выводиться. Не работает абсолютно все. Кто знает как решить эту проблему?