По поводу Регистрации MySQL
Ребят кроме вашего форума некому обратится. Помогите пожалуйста более разумнее сделать.
PHP код:
#include <a_mysql>
PHP код:
forward OnPlayerDataLoaded(playerid);
forward OnPlayerAccounLoaded(playerid);
PHP код:
enum Player
{
ID,
Name[MAX_PLAYER_NAME],
Password[15]
};
new pInfo[MAX_PLAYERS][Player];
new connectionHandle;
PHP код:
public OnGameModeInit()
{
connectionHandle = mysql_connect("127.0.0.1", "root", "db_rp", "");
mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_TEXT);
if(mysql_errno() != 0)
print("Не удалось подключиться к базе данных!");
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
PHP код:
public OnPlayerConnect(playerid)
{
new query[128];
GetPlayerName(playerid, pInfo[playerid][Name], MAX_PLAYER_NAME);
mysql_format(connectionHandle, query, sizeof(query), "SELECT * FROM `Accounts` WHERE `User` = '%e' LIMIT 1", pInfo[playerid][Name]);
mysql_tquery(connectionHandle, query, "OnPlayerDataLoaded", "d", playerid);
return 1;
}
PHP код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 0:
{
if(!response) return Kick(playerid);
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Регистрация", "", "Готово", "Отмена");
else if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Регистрация", "", "Готово", "Отмена");
else if(strlen(inputtext) > 15) return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Регистрация", "", "Готово", "Отмена");
for (new i = strlen(inputtext) -1; i != -1; i--)
{
switch(inputtext[i])
{
case '0'..'9', 'а'..'я', 'a'..'z', 'А'..'Я', 'A'..'Z': continue;
default: return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Регистрация", "", "Готово", "Отмена");
}
}
strins(pInfo[playerid][Password], inputtext, 0);
CreateAccount(playerid, pInfo[playerid][Password]);
return 1;
}
case 1:
{
if(!response) return Kick(playerid);
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", "", "Войти", "Отмена");
for (new i = strlen(inputtext) -1; i != -1; i--)
{
switch(inputtext[i])
{
case '0'..'9', 'а'..'я', 'a'..'z', 'А'..'Я', 'A'..'Z': continue;
default: return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", "", "Войти", "Отмена");
}
}
if(!strcmp(pInfo[playerid][Password], inputtext))
{
new query[128];
mysql_format(connectionHandle, query, sizeof(query), "SELECT * FROM `Accounts` WHERE `User` = '%e' LIMIT 1", pInfo[playerid][Name]);
mysql_tquery(connectionHandle, query, "OnPlayerAccounLoaded", "d", playerid);
}
switch(GetPVarInt(playerid, "invalid_password"))
{
case 0: ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", "3", "Войти", "Отмена");
case 1: ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", "2", "Войти", "Отмена");
case 2: ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", "1", "Войти", "Отмена");
case 3: ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", "0", "Войти", "Отмена");
default: return Kick(playerid);
}
SetPVarInt(playerid, "invalid_password", GetPVarInt(playerid, "invalid_password")+1);
return 1;
}
}
return 1;
}
PHP код:
public OnPlayerDataLoaded(playerid)
{
new rows, fields;
cache_get_data(rows, fields);
if(!rows)
{
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "Регистрация", "", "Готово", "Отмена");
}
else
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Авторизация", "", "Войти", "Отмена");
cache_get_field_content(0, "Key", pInfo[playerid][Password], connectionHandle, 15);
}
return 1;
}
PHP код:
public OnPlayerAccounLoaded(playerid)
{
pInfo[playerid][ID] = cache_get_field_content_int(0, "id");
SpawnPlayer(playerid);
return 1;
}
PHP код:
stock CreateAccount(playerid, Key[])
{
new query[256];
mysql_format(connectionHandle, query, sizeof(query), "INSERT INTO `Accounts` (`User`, `Key`) VALUES ('%e', '%s')", pInfo[playerid][Name], Key);
mysql_tquery(connectionHandle, query, "", "");
SpawnPlayer(playerid);
return 1;
}
PHP код:
stock SaveAccount(playerid)
{
new query[128];
mysql_format(connectionHandle, query, sizeof(query), "UPDATE `Accounts` SET `User` = '%e', `Key` = '%s' WHERE `id` = '%d' LIMIT 1", pInfo[playerid][Name], pInfo[playerid][Password], pInfo[playerid][ID]);
mysql_tquery(connectionHandle, query, "", "");
return 1;
}
База данных успешно подключается но диалог Регистрации и авторизации не выходит!