在线编译器 C

#include <a_samp> enum E_PLAYER_STATE { PS_NONE, PS_MENU_PICK } new PlayerState[MAX_PLAYERS]; public OnGameModeInit() { SetGameModeText("RP MENU EXAMPLE"); print("\n[INFO] RP Menu Mode loaded"); return 1; } public OnPlayerConnect(playerid) { PlayerState[playerid] = PS_MENU_PICK; SendClientMessage(playerid, 0xFFFFFFAA, "Добро пожаловать! Выберите стартовую зону:"); ShowPlayerDialog(playerid, 1001, DIALOG_STYLE_LIST, "Выбор стартовой зоны", "1. Собственный дом (спавн в интерьере дома)\n" "2. Центральный рынок (площадь у больницы)\n" "3. Спавн по умолчанию", "Выбрать", "Отмена"); return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if (dialogid != 1001) return 0; if (!response) { // Игрок нажал «Отмена» — кик или спавн в собственном доме Kick(playerid); return 1; } switch (listitem) { case 0: // Центральный рынок { SetPlayerPos(playerid, 2560.45, -1670.12, 13.5); SetPlayerFacingAngle(playerid, 90.0); SendClientMessage(playerid, 0x00FF00AA, "Вы появились на центральном рынке."); } case 1: // Собственный дом { SetPlayerPos(playerid, 1958.37, -1916.09, 10.12); SetPlayerFacingAngle(playerid, 270.0); SendClientMessage(playerid, 0x00FF00AA, "Вы появились в в собственном доме."); } case 2: // Вокзал { // Можно оставить дефолтную точку или тоже задать координаты SetPlayerPos(playerid, 1958.37, -1916.09, 10.12); SendClientMessage(playerid, 0x00FF00AA, "Вокзал."); } } TogglePlayerControllable(playerid, true); PlayerState[playerid] = PS_NONE; return 1; } #include <a_samp> #include <streamer> // Обязательно для TextDraw // --- Переменные игрока --- new PlayerHunger[MAX_PLAYERS]; // Сытость: 0–100 new PlayerBalance[MAX_PLAYERS];// Баланс (деньги) // --- TextDraw (статистика) --- new Text:TD_Stats[MAX_PLAYERS]; // --- Константы (координаты и цвета) --- #define COLOR_HEALTH 0xFF0000AA // Красный #define COLOR_HUNGER 0xFFFF00AA // Жёлтый #define COLOR_MONEY 0xFFFFFFAA // Белый #define COLOR_ONLINE 0x00FF00AA // Зелёный public OnGameModeInit() { SetGameModeText("RP STATS HUD"); // Инициализация: стартовые значения for (new i = 0; i < MAX_PLAYERS; i++) { PlayerHunger[i] = 100; PlayerBalance[i] = 500; // Стартовые деньги } print("[INFO] RP Stats HUD loaded"); return 1; } public OnPlayerConnect(playerid) { // Создаём TextDraw для каждого игрока при входе CreatePlayerStatsTD(playerid); SendClientMessage(playerid, 0xFFFFFFAA, "Статистика HUD активирована."); return 1; } public OnPlayerDisconnect(playerid, reason) { // Удаляем TextDraw при выходе (чтобы не висели) if (TD_Stats[playerid] != INVALID_TEXT_DRAW) { TextDrawDestroy(TD_Stats[playerid]); TD_Stats[playerid] = INVALID_TEXT_DRAW; } return 1; }
Код содержит две несвязанные части: меню выбора стартовой зоны и систему HUD со статистикой. Вторая часть неполная — функция CreatePlayerStatsTD не определена, а также есть дублирование OnGameModeInit и лишнее включение a_samp.

- В коде дважды объявлен `OnGameModeInit` — это вызовет ошибку компиляции. Нужно оставить только один.
- Функция `CreatePlayerStatsTD` используется, но нигде не написана. Её нужно реализовать, чтобы TextDraw создавался и отображался.