Skip to content

xxx #44

Open
Open
xxx#44
@VaheHA

Description

@VaheHA

#include <a_samp>

// Максимальное количество игроков
#define MAX_PLAYERS 1000

// Диалоги имеют ID: 101 - Логин, 102 - Регистрация, 103 - Заявка

// Для простоты данные хранятся в массивах (для реального проекта рекомендуется использовать базу данных)
new bool:Registered[MAX_PLAYERS];
new playerLogin[MAX_PLAYERS][32];
new playerPass[MAX_PLAYERS][32];

// Обработчик текстовых команд игрока
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/login", true) == 0)
{
ShowLoginDialog(playerid);
return 1;
}
if(strcmp(cmdtext, "/register", true) == 0)
{
ShowRegisterDialog(playerid);
return 1;
}
if(strcmp(cmdtext, "/apply", true) == 0)
{
ShowApplicationDialog(playerid);
return 1;
}
return 0;
}

// Функция показа диалога для входа
public ShowLoginDialog(playerid)
{
ShowPlayerDialog(playerid, 101, DIALOG_STYLE_INPUT, "Вход",
"Введите логин;Введите пароль", "Войти", "Отмена");
}

// Функция показа диалога для регистрации
public ShowRegisterDialog(playerid)
{
ShowPlayerDialog(playerid, 102, DIALOG_STYLE_INPUT, "Регистрация",
"Введите логин;Введите пароль", "Зарегистрироваться", "Отмена");
}

// Функция показа диалога для подачи заявки
public ShowApplicationDialog(playerid)
{
ShowPlayerDialog(playerid, 103, DIALOG_STYLE_INPUT, "Заявка",
"Введите текст заявки", "Отправить", "Отмена");
}

// Обработчик выбора в диалоговом окне
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
// Если игрок нажал "ОК" (response == 1)
if(response == 1)
{
switch(dialogid)
{
case 101: // Логин
{
HandleLogin(playerid, inputtext);
}
case 102: // Регистрация
{
HandleRegistration(playerid, inputtext);
}
case 103: // Заявка
{
HandleApplication(playerid, inputtext);
}
}
}
return 1;
}

// Функция обработки входа
// Ожидается, что в inputtext будет строка вида "логин;пароль"
public HandleLogin(playerid, inputtext[])
{
new username[32], password[32];
// Разбиваем строку по символу ';'
SplitInput(inputtext, ';', username, sizeof(username), password, sizeof(password));

if(!strcmp(username, playerLogin[playerid], true) && !strcmp(password, playerPass[playerid], true))
{
    SendClientMessage(playerid, 0x00FF00FF, "Вход выполнен успешно!");
}
else
{
    SendClientMessage(playerid, 0xFF0000FF, "Неверный логин или пароль!");
}

}

// Функция обработки регистрации
// Ожидается, что в inputtext будет строка вида "логин;пароль"
public HandleRegistration(playerid, inputtext[])
{
new username[32], password[32];
SplitInput(inputtext, ';', username, sizeof(username), password, sizeof(password));

// Простейшая проверка: если игрок уже зарегистрирован
if(Registered[playerid])
{
    SendClientMessage(playerid, 0xFF0000FF, "Вы уже зарегистрированы!");
    return;
}

strcopy(playerLogin[playerid], sizeof(playerLogin[]), username);
strcopy(playerPass[playerid], sizeof(playerPass[]), password);
Registered[playerid] = true;

SendClientMessage(playerid, 0x00FF00FF, "Регистрация прошла успешно! Теперь вы можете войти.");

}

// Функция обработки заявки
public HandleApplication(playerid, inputtext[])
{
// Здесь можно добавить проверку, запись в базу, логирование и т.д.
printf("Игрок %d подал заявку: %s", playerid, inputtext);
SendClientMessage(playerid, 0x00FF00FF, "Заявка отправлена!");
}

// Функция для разбивки входной строки по разделителю
// input - исходная строка, separator - символ-разделитель,
// output1 и output2 - буферы для записанных подстрок.
stock SplitInput(const input[], separator, output1[], len1, output2[], len2)
{
new i = 0, j = 0, k = 0, inputlen = strlen(input);

// Копируем символы в output1 до разделителя
while(i < inputlen && input[i] != separator)
{
    output1[j++] = input[i++];
    if(j >= len1 - 1) break;
}
output1[j] = '\0';

// Если разделитель найден, пропускаем его
if(i < inputlen && input[i] == separator) i++;

// Копируем оставшуюся часть в output2
while(i < inputlen)
{
    output2[k++] = input[i++];
    if(k >= len2 - 1) break;
}
output2[k] = '\0';

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      pFad - Phonifier reborn

      Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

      Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy