- Регистрация
- 8 Сен 2014
- Сообщения
- 850
- Лучшие ответы
- 1
- Репутация
- 74
Создадим простую регистрацию и авторизацию на R8 32, использованный урок Мультиязычность [ALL]
Создание диалогов и тд смотрим в уроке Мультиязычность [ALL]
В enum добавляем
Подключение
Проверка игрока в базе
Паблик получения пароля
Загружаем аккаунт.
Диалоги
PHP:
#define L(%0) %0[PlayerInfo[playerid][pLang]] // pLang можете заменить на другую переменную, 0 - русский, 1 - английский
#define PlusPVarInt(%0,%1,%2) SetPVarInt(%0,%1,GetPVarInt(%0,%1)+%2)
#define DIALOG_NULL 0 //пустой диалог. Ссылаются на него все пустышки.
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
#define DIALOG_PASS_ERROR 3
#define DIALOG_LANG 4
#define MYSQL_HOST "IP "
#define MYSQL_USER "user"
#define MYSQL_DB "DB"
#define MYSQL_PASS "PASS"
В enum добавляем
PHP:
pName,
pPass[количество символов],
pLang,
PHP:
public OnGameModeInit()
mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_DB,MYSQL_PASS);
mysql_function_query(1,"SET NAMES 'cp1251'",false,"","");
mysql_set_charset("cp1251");
mysql_log(100);
PHP:
public OnPlayerConnect(playerid)
new query[57];
format(query,sizeof(query),"SELECT Pass FROM users WHERE Name='%s'",PlayerInfo[playerid][pName]);
mysql_function_query(1,query,true,"GetPass","i",playerid);
PHP:
forwar GetPass(playerid);
public GetPass(playerid)
{
if(!rows) //аккаунта нет
{
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_MSGBOX,"Язык | Language","Select language.\nВыберите языка.","English","Русский");
return 1;
}
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,L(LoginTitle),L(LoginDlg),L(bInput),L(bExit)); // значение после L, это кнопки и надписи, сами их создавайте и ставить обязательно по порядку, а то бред выйдет
new pass[17];
cache_get_row(0,0,pass);
format(PlayerInfo[playerid][pPass],17,pass); //сразу в глобальную извлечь нельзя. Только так.
return 1;
}
PHP:
forward LoadAccount(playerid);
public LoadAccount(playerid)
{
new rows,fields; //это все на всякий случай.
cache_get_data(rows,fields); //Чтобы сервер не крашнуло.
if(!rows) return Kick(playerid);
new string[52];
PlayerInfo[playerid][pPass] = cache_get_row_int(0,0);
//Принцип простой, в каком порядке стоит переменная в enum, такой порядок пишем в cache_get_row_int, например, pPass стоит первой, значит пишем 0.0, так как в кода все начинается с нуля.
return 1;
}
PHP:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_REGISTER:
{
if(!response) return Kick(playerid);
if(strlen(inputtext) < 4 || strlen(inputtext) > 16) return SPD(playerid,DLG_REG,DIALOG_STYLE_PASSWORD,L(RegTitle),L(RegDlg),L(bInput),L(bExit));
new query[84];
format(query,sizeof(query),"INSERT INTO users(`Name`,`Pass`) VALUES ('%s','%s')",PlayerInfo[playerid][pName],inputtext);
mysql_function_query(1,query,false,"","");
format(query,sizeof(query),"SELECT * FROM users WHERE Name='%s'",PlayerInfo[playerid][pName]);
mysql_function_query(1,query,true,"LoadPlayerAccount","i",playerid);
}
case DIALOG_LOGIN:
{
if(!response) return Kick(playerid);
if(!strlen(inputtext)) return SPD(playerid,DLG_LOGIN,DIALOG_STYLE_PASSWORD,L(LoginTitle),L(LoginDlg),L(bInput),L(bExit));
new string[100];
if(strcmp(PlayerInfo[playerid][pPass],inputtext,false) != 0)
{
PlusPVarInt(playerid,"PassErrCount",1);
if(GetPVarInt(playerid,"PassErrCount") == 3) return KickEx(playerid,2);
format(string,sizeof(string),"%s %d",L(PassErrDlg),3-GetPVarInt(playerid,"PassErrCount"));
if(PlayerInfo[playerid][pLang]) strcat(string," attempts.");
else
{
if(GetPVarInt(playerid,"PassErrCount")) strcat(string," попытка."); // 1 попытка
else strcat(string," попытки."); //две попытки.
}
SPD(playerid,DIALOG_PASS_ERROR,DIALOG_STYLE_MSGBOX,L(PassErrTitle),L(PassErrDlg),L(bX),"");
}
format(string,sizeof(string),"SELECT * FROM users WHERE Name='%s'",PlayerInfo[playerid][pName]);
mysql_function_query(1,string,true,"LoadAccount","i",playerid);
}
case DIALOG_PASS_ERROR: return ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,L(LoginTitle),L(LoginDlg),L(bInput),L(bExit));
case DIALOG_LANG:
{
PlayerInfo[playerid][pLang] = response;
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,L(RegTitle),L(RegDlg),L(bInput),L(bExit));
}
}
return 1;
stock KickEx(playerid,reason)
{
new string[70];
string = L(KickPre);
strcat(string,KickDlg[PlayerInfo[playerid][pLang]+(reason*2)-2]);
SPD(playerid,DLG_NULL,DIALOG_STYLE_MSGBOX,L(KickTitle),string,L(bX),"");
SetPVarInt(playerid,"TimeToKick",1);
return 1;
}
}
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
1234
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Последнее редактирование: