Онлайн компилятор C

#include <a_samp> #include <a_mysql> // Используем для сохранения аккаунтов #include <zcmd> // Удобный командный процессор (скачайте zcmd.inc, если его нет) // Настройки подключения к вашей базе данных на хостинге #define MYSQL_HOST "127.0.0.1" // Сюда впишите IP хостинга #define MYSQL_USER "root" // Логин БД #define MYSQL_PASS "" // Пароль БД #define MYSQL_DB "samp_db" // Название базы данных // Переменные для хранения данных игрока во время сессии enum pInfo { pID, pName[MAX_PLAYER_NAME], pMoney, pAdminLevel, bool:pLoggedIn } new PlayerInfo[MAX_PLAYERS][pInfo]; new MySQL:dbHandle; main() { print("----------------------------------"); print(" Мобильный SAMP Проект Успешно Запущен!"); print("----------------------------------"); } // Срабатывает при старте сервера public OnGameModeInit() { // Подключаемся к MySQL dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB); if(mysql_errno(dbHandle) != 0) { print("[MySQL] Ошибка подключения! Проверьте данные в коде."); } else { print("[MySQL] Успешное подключение к базе данных."); } SetGameModeText("Mobile RP v0.1"); AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); // Спавн return 1; } // Срабатывает, когда игрок заходит на сервер public OnPlayerConnect(playerid) { // Сбрасываем данные игрока до нуля GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME); PlayerInfo[playerid][pMoney] = 0; PlayerInfo[playerid][pAdminLevel] = 0; PlayerInfo[playerid][pLoggedIn] = false; // Приветственное окно (Диалог) ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Добро пожаловать!", "Приветствуем на нашем мобильном сервере!\nНажмите 'Далее' для входа.", "Далее", "Выход"); return 1; } // Срабатывает, когда игрок нажимает кнопки в диалоге public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 1) // Наш диалог приветствия { if(!response) return Kick(playerid); // Если нажал Выход — кикаем // Тут должна быть проверка в БД, но для теста просто авторизуем PlayerInfo[playerid][pLoggedIn] = true; SendClientMessage(playerid, 0x00FF00FF, "[Сервер] Вы успешно вошли! Используйте /bonus"); SpawnPlayer(playerid); } return 1; } // Срабатывает при спавне игрока public OnPlayerSpawn(playerid) { SetPlayerColor(playerid, 0xFFFFFFFF); SetPlayerInterior(playerid, 0); return 1; } // ==================== КОМАНДЫ (ZCMD) ==================== // Команда получения бонуса новичка CMD:bonus(playerid, params[]) { if(!PlayerInfo[playerid][pLoggedIn]) return SendClientMessage(playerid, 0xFF0000FF, "Вы не авторизованы!"); if(PlayerInfo[playerid][pMoney] > 0) { return SendClientMessage(playerid, 0xFF0000FF, "[Ошибка] Вы уже получали бонус!"); } PlayerInfo[playerid][pMoney] = 50000; // Выдаем 50к виртуальной валюты GivePlayerMoney(playerid, 50000); SendClientMessage(playerid, 0xFFFF00FF, "[Бонус] Вам выдано $50,000 на стартовое развитие!"); return 1; }
Этот код — основа для мультиплеерного режима SA-MP (San Andreas Multiplayer) с регистрацией через MySQL. Он подключается к базе данных, встречает игрока диалогом, при нажатии "Далее" автоматически авторизует (без проверки пароля) и даёт команду /bonus для получения стартовых денег.

- В OnDialogResponse для dialogid == 1 нет проверки существования игрока в базе данных — код просто ставит pLoggedIn = true. Для реальной авторизации нужно выполнить MySQL-запрос и обработать результат.
- В OnPlayerConnect не проверяется, загружены ли данные из БД для этого игрока (например, если он уже зарегистрирован). Сейчас все данные сбрасываются в ноль, что может затереть сохранённую информацию.