Online Compiler C

#include <a_samp> #define MAX_PLAYERS 50 #define INVALID_PLAYER_ID (-1) // Простые данные игрока (в реальном проекте — БД) new PlayerRegistered[MAX_PLAYERS]; // 0 = не зарегистрирован, 1 = зарегистрирован new PlayerBalance[MAX_PLAYERS]; // Баланс в игровой валюте new PlayerSpawned[MAX_PLAYERS]; // 0 = ещё не заспавнился на RP-точке public OnGameModeInit() { print("\n----------------------------------"); print("RP Mode loaded: базовая RP-логика"); print("----------------------------------\n"); SetGameModeText("RP_MODE"); UsePlayerPedAssets(0); // Инициализация массивов for (new i = 0; i < MAX_PLAYERS; i++) { PlayerRegistered[i] = 0; PlayerBalance[i] = 100; // Стартовый баланс PlayerSpawned[i] = 0; } return 1; } public OnPlayerConnect(playerid) { new name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name, sizeof(name)); SendClientMessage(playerid, 0xFFFFFFAA, "Добро пожаловать на RP-сервер!"); SendClientMessage(playerid, 0xFFFFFFAA, "Если вы здесь впервые, используйте /register <пароль>"); SendClientMessage(playerid, 0xFFFFFFAA, "После регистрации: /login <пароль> и затем /spawn"); PlayerSpawned[playerid] = 0; // При каждом входе сбрасываем флаг спавна return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp(cmdtext, "/register", true) == 0) { // В реальном сервере тут будет проверка длины, символов и запись в БД new params[256]; if (sscanf(cmdtext, "s[255]", params)) { SendClientMessage(playerid, 0xFF0000AA, "Использование: /register <пароль>"); return 1; } if (PlayerRegistered[playerid]) { SendClientMessage(playerid, 0xFF0000AA, "Вы уже зарегистрированы."); return 1; } // Сохраняем «пароль» в глобальном массиве (только для примера!) // В реальности: INSERT INTO players (name, password_hash) VALUES (...) PlayerRegistered[playerid] = 1; SendClientMessage(playerid, 0x00FF00AA, "Аккаунт успешно зарегистрирован! Теперь используйте /login <ваш пароль>."); return 1; } if (strcmp(cmdtext, "/login", true) == 0) { new params[256]; if (sscanf(cmdtext, "s[255]", params)) { SendClientMessage(playerid, 0xFF0000AA, "Использование: /login <пароль>"); return 1;
Код реализует базовую систему регистрации и логина на RP-сервере SA-MP. Он инициализирует массивы данных игроков, обрабатывает подключение и две команды, но не завершён — обрывается на середине обработки `/login`.

- В команде `/register` вы используете `sscanf` для извлечения пароля, но не проверяете, что пароль передан. После успешной регистрации вы устанавливаете `PlayerRegistered[playerid] = 1`, но не сохраняете сам пароль — это значит, что `/login` не сможет его проверить.
- В команде `/login` вы начинаете проверку, но код обрывается. Вам нужно будет сравнить введённый пароль с тем, что был сохранён при регистрации, и только после этого разрешить игроку использовать `/spawn`.