Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 13
  1. #1
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±

    Система регистрации [file]

    Регистрация на стандартном файловом инклуде "file".

    В начало мода, после инклудов:

    1. enum pInfo
    2. {
    3. pName[MAX_PLAYER_NAME+1], // Для записи имени игрока
    4. pLogged, // Для проверки, вошёл ли игрок в аккаунт
    5. pPassword[21], // Для записи пароля игрока
    6. pAdmin // Для записи уровня админки у игрока
    7. };
    8.  
    9. new PlayerInfo[MAX_PLAYERS][pInfo];
    10.  
    11. static const MsgBox[][] = // Массив для текста в диалоге при регистрации / авторизации
    12. {
    13. "{00CC00}Добро пожаловать на сервер, {FF0000}%s{00CC00}.\nТакой аккаунт {FF0000}не зарегистрирован{00CC00} на сервере, введите пароль в окно, чтобы зарегистрировать аккаунт.",
    14. "{00CC00}Добро пожаловать на сервер, {00FF00}%s{00CC00}.\nТакой аккаунт {00FF00}зарегистрирован{00CC00} на сервере, введите пароль в окно, чтобы войти в аккаунт."
    15. };


    В public OnPlayerConnect:
    1. PlayerInfo[playerid][pLogged] = 0;
    2. // Дать понять, что игрок не вошёл в аккаунт
    3.  
    4. GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME+1);
    5. // Получаем никнейм игрока
    6.  
    7. new str[171+MAX_PLAYER_NAME+1];
    8. str = "Accounts/", strcat(str, PlayerInfo[playerid][pName]), strcat(str, ".ini");
    9. // Accounts/ Accounts/Никнейм Accounts/Никнейм.ini
    10.  
    11. new ex = fexist(str); // Переменная для определения, существует ли аккаунт игрока
    12. format(str, sizeof(str), MsgBox[ex], PlayerInfo[playerid][pName]);
    13. ShowPlayerDialog(playerid, ex, DIALOG_STYLE_INPUT, "Добро пожаловать на сервер", str, "Далее", ""); // Если игрок зарегистрирован, покажет диалог логина, иначе - диалог регистрации


    В public OnPlayerDisconnect
    1. if(PlayerInfo[playerid][pLogged]) // если игрок входил в аккаунт, тогда
    2. SaveAccount(playerid); // сохраним аккаунт игрока


    В public OnDialogResponse:
    1. switch(dialogid)
    2. {
    3. case 0: // диалог регистрации
    4. {
    5. new str[171 + MAX_PLAYER_NAME];
    6.  
    7. if(response == 0 || !(3 <= strlen(inputtext) <= 20)) // Если длина пароля меньше 3 либо больше 20, либо игрок нажал на вторую кнопку
    8. {
    9. format(str, sizeof(str), MsgBox[0], PlayerInfo[playerid][pName]);
    10. // Превратим "%s" в полученный никнейм игрока
    11.  
    12. ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "Добро пожаловать на сервер", str, "Далее", "");
    13. }
    14.  
    15. strmid(PlayerInfo[playerid][pPassword], inputtext, 0, 21, 21);
    16. // Запишем введённый текст с диалога в массив с паролем игрока
    17.  
    18. str = "Accounts/", strcat(str, PlayerInfo[playerid][pName]), strcat(str, ".ini");
    19. // Accounts/ Accounts/Никнейм Accounts/Никнейм.ini
    20.  
    21. new File: file = fopen(str, io_write);
    22. // Откроем файл аккаунта игрока в режиме записи
    23.  
    24. if(file) // Если файл открылся
    25. {
    26. str = "Password=", strcat(str, inputtext);
    27. // Password=Введённый текст в диалог
    28.  
    29. fwrite(file, str);
    30. // Запишем получившуются строку "str" в файл
    31.  
    32. fclose(file);
    33. // Закроем файл
    34. }
    35. str = "Добро пожаловать, ", strcat(str, PlayerInfo[playerid][pName]), strcat(str, ", вы успешно зарегистрировались");
    36. SendClientMessage(playerid, 0xFF9900FF, str);
    37. PlayerInfo[playerid][pLogged] = 1; // Дать понять, что игрок вошёл в аккаунт
    38. }
    39. case 1: // диалог авторизации
    40. {
    41. new str[159+MAX_PLAYER_NAME+1];
    42. str = "Accounts/", strcat(str, PlayerInfo[playerid][pName]), strcat(str, ".ini");
    43. // Accounts/ Accounts/Никнейм Accounts/Никнейм.ini
    44.  
    45. if(response == 0 || inputtext[0] == '\0') // Если игрок нажал на вторую кнопку, либо не ввёл ничего в диалог
    46. {
    47. format(str, sizeof(str), MsgBox[1], PlayerInfo[playerid][pName]); // Превратим "%s" в полученный никнейм игрока
    48. ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "С возвращением на сервер", str, "Далее", "");
    49. return true;
    50. }
    51.  
    52. new File: file = fopen(str, io_read); // Открываем файл в режиме чтения
    53. if(file != File:0) // Если файл открылся
    54. {
    55. fread(file, str); // Прочитаем первую строку из файла
    56. GetDataAfterChar(str); // Записали данные после символа "=", в параметрах его нет, так как по умолчанию, в параметрах функции стоит этот символ
    57. if(strcmp(str, inputtext, false))
    58. {
    59. format(str, sizeof(str), MsgBox[1], PlayerInfo[playerid][pName]); // Превратим "%s" в полученный никнейм игрока
    60. ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Вы ввели неверный пароль", str, "Далее", "");
    61. fclose(file); // Закроем файл
    62. }
    63. else
    64. {
    65. strmid(PlayerInfo[playerid][pPassword], str, 0, 21, 21); // Запишем сконвертированную строку в массив с паролем игрока
    66. while(fread(file, str)) // Пробежимся по строкам из файла
    67. {
    68. // Важное примечание! Распологайте строки в файле так, чтобы потом они считывались по порядку, если у вас сначала сохраняется уровень админки, а потом деньги, то сохраняйте так, как показано ниже
    69. if(!strcmp(str, "AdminLevel=", true, 11)) PlayerInfo[playerid][pAdmin] = strval(str[11]); // уровень админки
    70. if(!strcmp(str, "Money=", true, 6)) GivePlayerMoney(playerid, strval(str[6])); // деньги
    71. }
    72. fclose(file); // Закроем файл
    73. str = "С возвращением, ", strcat(str, PlayerInfo[playerid][pName]), strcat(str, ", вы успешно вошли в аккаунт.");
    74. // С возвращением, С возвращением, Никнейм С возвращением, Никнейм, вы успешно вошли в аккаунт.
    75. SendClientMessage(playerid, 0xFF9900FF, str);
    76. PlayerInfo[playerid][pLogged] = 1; // Дать понять, что игрок вошёл в аккаунт
    77. }
    78. }
    79. }
    80. }


    В конец мода:
    1. stock GetDataAfterChar(str[], ch[] = "=") // Функция для получения данных после символа
    2. {
    3. new len = strlen(str); // Создаём переменную в которой будет записана длина строки
    4. if(str[len - 1] == '\n') str[len - 1] = '\0'; // Если последний символ строки переход на новую строку, то этот символ будет концом строки
    5. strmid(str, str, strfind(str, ch) + 1, 64, 64); // Запишем данные, полученные после символа, указанные в параметрах (по умолчанию символ "=")
    6. }
    7.  
    8. stock SaveAccount(playerid) // Функция для сохранения аккаунта игрока
    9. {
    10. new str[34];
    11. str = "Accounts/", strcat(str, PlayerInfo[playerid][pName]), strcat(str, ".ini");
    12. // Accounts/ Accounts/Никнейм Accounts/Никнейм.ini
    13.  
    14. new File: file = fopen(str, io_write);
    15. // Откроем файл аккаунта игрока в режиме записи
    16.  
    17. if(file != File:0) // Если файл открылся
    18. {
    19. format(str, 31, "Password=%s\n", PlayerInfo[playerid][pPassword]);
    20. // Запишем в аккаунт игрока его пароль
    21.  
    22. fwrite(file, str);
    23. // Запишем получившуются строку "str" в файл
    24.  
    25. format(str, 14, "AdminLevel=%d\n", PlayerInfo[playerid][pAdmin]);
    26. // Запишем в аккаунт игрока его уровень администратирования
    27.  
    28. fwrite(file, str);
    29. // Запишем получившуются строку "str" в файл
    30.  
    31. format(str, 13, "Money=%d", GetPlayerMoney(playerid));
    32. // Запишем в аккаунт игрока его количество денег
    33.  
    34. fwrite(file, str);
    35. // Запишем получившуются строку "str" в файл
    36.  
    37. fclose(file);
    38. // Закроем файл
    39. }
    40. }


    Автор: L0ndl3m

    Специально для: Pro-Pawn.Ru


    Копирование данной статьи на других ресурсах без разрешения автора запрещено!
    Последний раз редактировалось L0ndl3m; 06.02.2020 в 15:12.

  2. 9 пользователя(ей) сказали cпасибо:
    #Vito (02.02.2014) BaBuIIIkaDrifteR (13.03.2015) Daniel_Cortez (29.03.2014) Flime (28.06.2014) Hidden (01.02.2014) Johny (02.02.2014) Osetin (01.02.2014) SkillYoYo (17.02.2014) [ForD] (02.02.2014)
  3. #2
    Аватар для Hidden
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    73
    Репутация:
    43 ±
    Как же любишь ты эти файлы))

  4. #3
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от Hidden Посмотреть сообщение
    Как же любишь ты эти файлы))
    А как же :3

  5. #4
    Аватар для [ForD]
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.11.2013
    Адрес
    Свердловская обл.
    Сообщений
    688
    Репутация:
    103 ±
    Вроде хорошо,сегодня лимит,завтра отплюсую тему :3 Молодец.
    PAWN Compiler делает то, что вы приказали ему сделать, а не то, что вы хотели, чтобы он сделал..

    25% времени в программировании уходит на размышления о том, что пользователь может сделать не так.[HR]/Брайан Хьюмс/





    #FIXSAMP

  6. #5
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Баян.
    Кому-то явно нечем заняться.

  7. #6
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от Seregamil Посмотреть сообщение
    Баян.
    Кому-то явно нечем заняться.
    Нечем заняться? Найди хотя бы одну систему регистрации на этом инклуде.

  8. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    static const MsgBox[][] = // Массив для текста в диалоге при регистрации / авторизации
    {
        
    "{00CC00}Добро пожаловать на сервер, {FF0000}%s{00CC00}.\nТакой аккаунт {FF0000}не зарегистрирован {00CC00}на сервере, введите пароль в окно, чтобы зарегистрировать аккаунт.",
        
    "{00CC00}Добро пожаловать на сервер, {00FF00}%s{00CC00}.\nТакой аккаунт {00FF00}зарегистрирован {00CC00}на сервере, введите пароль в окно, чтобы войти в аккаунт."
    }; 
    Два вопроса
    1) Зачем это static const, или количество модификаторов увеличивает ваше ЧСВ? ©
    2) Какой смысл создавать для подобного текста массивы? Это разве удобно, выискивать код в начале мода, когда диалог расположен где-то в центре? Разве сложно поместить код в тот же format или создать stock, если диалог часто вызывается? Никогда не понимал к чему такие извращения :с
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #8
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Цитата Сообщение от Seregamil Посмотреть сообщение
    Баян.
    Кому-то явно нечем заняться.
    Не все на SQLite сидят.

  10. #9
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    Нечем заняться? Найди хотя бы одну систему регистрации на этом инклуде.
    Нашел. Мод Alex009, название: Wars of the Gangs.
    Да и к тому же, все файловые ридеры/райдеры основаны на этом инклуде.

  11. #10
    Аватар для Johny
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.12.2013
    Сообщений
    118
    Репутация:
    26 ±
    Дам +
    Мои работы:
    [MAP]Миникарта для Dm Servera
    [MAP]Миникарта для DM Server'a №2

    Пожертвование для создания проекта Hard-RolePlay:
    WebMoney:R116691342884


    Тыкни,если помог.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •