Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Создание системы регистрации.[MYSQL]

Fernando_Capraso

Умник
Нужные нам файлы

Стример -
sscanf -
mysql plugin и инклуд -
libMYSQL - В папку с сервером -
И Denwer -

====================================================================================================

И так,после того как мы подключили все нужные нам файлы к моду давайте разберёмся с денвером.

Устанавливаем его.

И сейчас он нам не нужен!

И так,приступим.

Давайте удалим ненужные нам строки!

PHP:
#if defined FILTERSCRIPT  
  
public OnFilterScriptInit()  
{  
    print("\n--------------------------------------");  
    print(" Blank Filterscript by your name here");  
    print("--------------------------------------\n");  
    return 1;  
}  
  
public OnFilterScriptExit()  
{  
    return 1;  
}  
  
#else
Удаляем также строку

PHP:
#endif
Для подключения мода к Базе данных мы будем использовать #define.Конечно можно и не использовать,но так удобнее.

В любое место мода,(токо не в паблик) вставляем:

PHP:
#define sql_connect "localhost" // localhost - локальный,тоесть запуск мода у себя на компе.
#define sql_db "test"  // Названия базы данных.
#define sql_user "root"   // пользователь.
#define sql_pass ""  // пароля нету.И ненадо.
#define send(%0,%1) SendClientMessage(%0, -1, %1)
Теперь чтобы подключится к базе данных.

Ко всем new или добавляем в любое место мода.(токо не в паблик):

PHP:
new mysqlconnection;
Дальше,приконектимся к нашей базе данных.

В public OnGameModeInit вставляем:

PHP:
mysqlconnection = mysql_connect(sql_connect,sql_user,sql_db,sql_pass);
Сделаем проверку,успешно ли подключенны мы,чтобы вы не мучелись!

Сразу после коннекта к мускуле добавляем:

PHP:
if(mysql_ping() != 1) print("Подключение к базе данных: false.");
if(mysql_ping() == 1) print("Подключение к базе данных: true.");
!= 1 - значение !(не) =(равно) 1.
== 1 - равно 1.

Давайте подключим инклуды к моду,которые вы напихали в мод.

PHP:
#include <streamer>  
#include <sscanf2>  
#include <a_mysql>
Дальше для регистрации нам понадобится enum pInfo.В любое место мода(не паблик) вставляем:

PHP:
enum pInfo   
{   
    Key[128],
    Level,
    rName[MAX_PLAYER_NAME],
};   
new PlayerInfo[MAX_PLAYERS][pInfo];
Дальше,при отключении мода,отключаем коннект с мускулом,добавляем в public OnGameModeExit()

PHP:
mysql_close(mysqlconnection);
В public OnPlayerConnect

PHP:
new str[128];   
mysql_real_escape_string(Name(playerid), Name(playerid));   
format(str, sizeof(str),"SELECT `Name` FROM `Accounts` WHERE `Name` = '%s'", Name(playerid));   
mysql_function_query(connectionHandle, str, true, "OnPlayerRegCheck","d", playerid);
Отключаем возможность писать не авторизованому игроку в чат добавив в OnPlayerText:

PHP:
if(!GetPVarInt(playerid, "Logged")) return send(playerid, "Что бы писать в чат, нужно быть авторизированым.");
В OnDialogResponse добавляем диалог:

PHP:
switch(dialogid)   
    {   
         case 1://Регистрация   
        {   
            if(!strlen(inputtext))return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Регистрация","Добро пожаловать на сервер!\nВаш аккаунт не зарегистрирован!\n\nВведите пароль:","Далее","Отмена");   
            OnPlayerRegister(playerid,inputtext);   
            return 1;   
        }   
        case 2://Авторизация   
        {   
            if(!strlen(inputtext))return ShowPlayerDialog(playerid,2,DIALOG_STYLE_PASSWORD,"Авторизация","Здравствуйте!\n\nВы зарегистрированы!\nВведите пароль:","Вход","Отмена");   
            OnPlayerLogin(playerid,inputtext);   
            return 1;   
        }   
    }
В самый конец мода вставляем код:

PHP:
stock Name(i) { new pl[24]; GetPlayerName(i, pl, 24); return pl; }   
  
forward OnPlayerRegCheck(playerid);   
public OnPlayerRegCheck(playerid)   
{   
    if(IsPlayerConnected(playerid))   
    {   
        new rows, fields;   
        cache_get_data(rows, fields);   
        if(rows)   
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_PASSWORD,"Авторизация","Добро пожаловать на {6495ED}gamemode-rp\n\n{ffffff}Этот аккаунт зарегистрирован\n\n{ffffff}Логин: %s\n{ffffff}Введите пароль:", "Далее", "Выход");","Вход","Отмена", rName);   
        else  
            ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Регистрация","Добро пожаловать на {6495ED}gamemode-rp\n{ffffff}Ваш аккаунт не зарегистрирован!\n\n{ffffff}Логин: %s\n{ffffff}Введите пароль:","Далее","Отмена",rName);   
    }   
    return 1;   
}   
  
stock OnPlayerRegister(p, password[])   
{   
    new str[128];   
    format(str, sizeof(str), "INSERT INTO `Accounts` (`Name`, `Key`) VALUES ('%s', '%s')", Name(p), password);   
    mysql_function_query(connectionHandle, str, false, "RegisterCallback","d", p);   
    return 1;   
}   
  
forward RegisterCallback(playerid);   
public RegisterCallback(playerid)   
{   
    send(playerid,"Регистрация прошла успешно!");   
    SetPVarInt(playerid,"Logged", 1), SpawnPlayer(playerid);   
    return 1;   
}   
  
stock SavePlayer(p)   
{   
    if(GetPVarInt(p,"Logged") > 0)   
    {   
        new str[128];   
        format(str,sizeof(str),"UPDATE `Accounts` SET `Key`, `Level` = '%d'",   
        PlayerInfo[p][Key], PlayerInfo[p][Level]);   
        format(str, sizeof(str),"%s WHERE `Name` = '%s'", str, Name(p));   
        mysql_query(str, -1, 0, connectionHandle);   
    }   
     return 1;   
}   
  
stock OnPlayerLogin(i, password[])   
{   
    new str[128];   
    format(str, sizeof(str),"SELECT * FROM `Accounts` WHERE `Name` = '%s' AND `Key` = '%s'", Name(i), password);   
    mysql_function_query(connectionHandle, str, true, "LoginCallback","ds", i, password);   
    return 1;   
}   
  
forward LoginCallback(i, password[]);   
public LoginCallback(i, password[])   
{   
    new rows, fields, string[144], maximum[128];   
    cache_get_data(rows, fields);   
    if(!rows)   
    {   
          if(GetPVarInt(i, "wrongPass") == 2) return send(i,"Вы ввели 3 раза неверный пароль, поэтому были кикнуты сервером."), Kick(i);   
         SetPVarInt(i, "wrongPass", GetPVarInt(i, "wrongPass")+1);   
         format(string, sizeof(string), "Неверный пароль(осталось %i/3)\nВведите пароль:", 3 - GetPVarInt(i, "wrongPass"));   
          ShowPlayerDialog(i, 2, DIALOG_STYLE_PASSWORD, "Авторизация", string, "Вход", "Отмена");   
        return 1;   
    }   
    cache_get_field_content(0, "Level", maximum), PlayerInfo[i][Level] = strval(maximum);   
        
    SetPVarInt(i, "Logged", 1);   
    send(i, "Вы успешно авторизовались!");   
    SpawnPlayer(i), SavePlayer(i);   
    return 1;   
}
Ну вот,с регистрацией мы закончили,давайте теперь к базе данных.
После того как вы установили денвер и запустили его(Start Denwer)
Зайдя в браузер в Адресной Строке введём .
В вкладке Базы Данных заходим туда.
И добавляем новую Базу Данных с именем: test
Всё.Создали.Теперь во вкладке SQL или структура,заходим туда.
И в поле которое появилось вставляем вот этот код:

PHP:
CREATE TABLE IF NOT EXISTS `Accounts` (   
  `Name` varchar(24) COLLATE cp1251_bin NOT NULL,   
  `Key` varchar(30) CHARACTER SET utf8 NOT NULL,   
  `Level` int(3) NOT NULL   
) ENGINE=MyISA
Нажимаем ок,и всё.Запускаем наш мод,регаемся,и аккаунт сохранился в таблице Accounts.

Автор:Fernando_Capraso.
Удачи.
 
Последнее редактирование:
Сверху Снизу