Регистрация и авторизация. Не отображается диалог
Здравствуйте! Так как я еще плохо разбираюсь в PAWN-скриптинге, прошу помощи у опытных скриптеров.
В общем у меня такая проблема, иногда, при подключении к серверу, при авторизации не появляется диалог для ввода пароля, а так же диалог для регистрации, именно на этом баге мы с другом и застряли, несколько смогли исправить самостоятельно, а с этим уже три дня не можем решить, я решил попросить помощи у Вас. Повторюсь, такое случается не всегда, то есть иногда эти диалоги появляются, например если сделать глобальный рестарт сервера.
Скриншот
Show code
PHP код:
public Register(playerid)
{
new r, f;
new string[294];
cache_get_data(r, f);
if(!r)
{
format(string,sizeof(string),"{4ADF29}Добро пожаловать на сервер\nВаш аккаунт не был найден в базе данных\n\nЛогин: {FFFFFF}%s\n\nВведите пароль в окно:\n\n{4ADF29}Примечание:\n- Пароль должен содержать не менее 6 символов\n- В пароле должны присутствовать символы 'A-z'",User[playerid][Name]);
ShowPlayerDialog(playerid, D_REG, 1, "{FFFFFF}Регистрация",string, "Далее", "Выход");
printf("Не нашел в базе, отправил на регу!");
}
else
{
format(string,sizeof(string),"{4ADF29}Добро пожаловать на сервер\nВаш аккаунт найден в базе данных\n\nЛогин: {FFFFFF}%s\n\nВведите пароль в окно:",User[playerid][Name]);
ShowPlayerDialog(playerid, D_LOGIN, 3, "{FFFFFF}Авторизация",string, "Вход", "Выход");
printf("Показал окно для ввода 0!");
}
// return 1;
}
PHP код:
case D_REG:
{
if(!response) return KickD(playerid,"Используйте (/q)it для выхода");
new null_[2];
for(new i = strlen(inputtext); i != 0; --i)
switch(inputtext[i])
{
case '0'..'9': null_[0]++;
case 'a'..'z': null_[1]++;
}
if(strlen(inputtext) < 6 || strlen(inputtext) > 16 || IsTextRussian(inputtext) || null_[0] == 0 || null_[1] == 0)
{
new string[294];
format(string,sizeof(string),"{4ADF29}Добро пожаловать на сервер\nВаш аккаунт не был найден в базе данных\n\nЛогин: {FFFFFF}%s\n\nВведите пароль в окно:\n\n{FF8300}Примечание:\n- Пароль должен содержать не менее 6 символов\n- В пароле должны присутствовать символы 'A-z'",User[playerid][Name]);
return ShowPlayerDialog(playerid, D_REG, 1, "{FFFFFF}Регистрация",string, "Далее", "Выход");
}
SwitchRegister(playerid, inputtext);
}
case D_LOGIN:
{
if(!response || User[playerid][Login]) return KickD(playerid,"Используйте (/q)it для выхода");
if(!strlen(inputtext))
{
new string[175];
format(string,sizeof(string),"{4ADF29}Добро пожаловать на сервер\nВаш аккаунт найден в базе данных\n\nЛогин: {FFFFFF}%s\n\nВведите пароль в окно:",User[playerid][Name]);
printf("Показал поле для ввода пароля");
return ShowPlayerDialog(playerid, D_LOGIN, 3, "{FFFFFF}Авторизация",string, "Вход", "Выход");
}
mysql_format(DATABASE, QUERY, sizeof(QUERY), "SELECT * FROM `accounts` WHERE `Name` = '%e' AND `Password` = '%e'",User[playerid][Name],inputtext);
return mysql_function_query(DATABASE, QUERY, true, "OnLogin", "d", playerid);
}
PHP код:
public OnRegister(i)
{
SetPlayerScore(i, User[i][Level]);
SetHealth(i,100);
SendClientMessage(i, COLOR_YELLOW,"Поздравляем вас с успешной регистрацией!");
SendClientMessage(i, COLOR_YELLOW,"Подтверждение E-Mail адреса поможет Вам обеспечить безопасность аккаунта.");
mysql_format(DATABASE, QUERY, sizeof(QUERY), "SELECT * FROM `accounts` WHERE `Name` = '%e' AND `Password` = '%e'",User[i][Name],User[i][Password]);
return mysql_function_query(DATABASE, QUERY, true, "OnLogin", "d", i);
}
public OnLogin(i)
{
new rows,fields;
cache_get_data(rows, fields);
if(!rows)
{
if(GetPVarInt(i, "PasswordNot") > 2) return KickD(i,"Введен неверный пароль 3 раза, вы были кикнуты с сервера");
SetPVarInt(i, "PasswordNot", GetPVarInt(i, "PasswordNot")+1);
SendMes(i,-1,"Вы ввели неверный пароль (%i/3)",GetPVarInt(i, "PasswordNot"));
new string[135];
format(string,sizeof(string),"{4ADF29}Добро пожаловать на сервер\nВаш аккаунт найден в базе данных\n\nЛогин: {FFFFFF}%s\n\nВведите пароль в окно:",User[i][Name]);
return ShowPlayerDialog(i, D_LOGIN, 3, "{FFFFFF}Авторизация",string, "Вход", "Выход");
}
new ip[30];
GetPlayerIp(i,ip,sizeof(ip));
cache_get_field_content(0, "IpVhod",User[i][IpVhod],DATABASE,16);
User[i][CheckIp] = cache_get_field_content_int(0,"CheckIp");
if(User[i][CheckIp] && strcmp(ip, User[i][IpVhod],false) != 0)
{
ShowPlayerDialog(i,1000,DIALOG_STYLE_INPUT, "{4ADF29}Введите ключ безопасности", "{FFFFFF}Ваш IP адрес сменился, для входа в аккаунт\nнеобходимо ввести ключ безопасности", "Готово", "Отмена");
return true;
}
cache_get_field_content(0, "Password",User[i][Password],DATABASE,16);
User[i][Sex] = cache_get_field_content_int(0,"Sex");
User[i][Skin] = cache_get_field_content_int(0,"Skin");
cache_get_field_content(0, "Mail",User[i][Mail],DATABASE,64);
User[i][Cash] = cache_get_field_content_int(0,"Cash");
User[i][Level] = cache_get_field_content_int(0,"Level");
User[i][UID] = cache_get_field_content_int(0,"ID");
User[i][PayDay] = cache_get_field_content_int(0,"PayDay");
User[i][Exp] = cache_get_field_content_int(0,"Exp");
User[i][Bank] = cache_get_field_content_int(0,"Bank");
User[i][Leader] = cache_get_field_content_int(0,"Leader");
User[i][Member] = cache_get_field_content_int(0,"Member");
User[i][Model] = cache_get_field_content_int(0,"Model");
User[i][Rank] = cache_get_field_content_int(0,"Rank");
User[i][Kills] = cache_get_field_content_int(0,"Kills");
User[i][Deaths] = cache_get_field_content_int(0,"Deaths");
User[i][Wanted] = cache_get_field_content_int(0,"Wanted"), SetPlayerWantedLevel(i,User[i][Wanted]);
cache_get_field_content(0, "DataReg",User[i][DataReg],DATABASE,16);
cache_get_field_content(0, "IpReg",User[i][IpReg],DATABASE,16);
cache_get_field_content(0, "Vhod",User[i][Vhod],DATABASE,16);
cache_get_field_content(0, "KeyIp",User[i][KeyIp],DATABASE,16);
User[i][Crimes] = cache_get_field_content_int(0,"Crimes");
User[i][JailTime] = cache_get_field_content_int(0,"JailTime");
User[i][MestoJail] = cache_get_field_content_int(0,"MestoJail");
User[i][Arested] = cache_get_field_content_int(0,"Arrested");
User[i][Mute] = cache_get_field_content_int(0,"Mute");
cache_get_field_content(0, "Lics",User[i][Lics],DATABASE,6);
cache_get_field_content(0, "Phones",User[i][Phones],DATABASE,36);
cache_get_field_content(0, "Texts",User[i][UTexts],DATABASE,6);
User[i][Lottery] = cache_get_field_content_int(0,"Lottery");
User[i][Health] = cache_get_field_content_float(0,"Health"), SetHealth(i,User[i][Health]);
User[i][Locked] = cache_get_field_content_int(0,"Locked");
cache_get_field_content(0, "Warns",User[i][Warns],DATABASE,7);
cache_get_field_content(0, "Drugs",User[i][Drugs],DATABASE,19);
cache_get_field_content(0, "Upgrades",User[i][Upgrades],DATABASE,19);
cache_get_field_content(0, "GunSkills",User[i][GunSkills],DATABASE,30);
User[i][PayDayCash] = cache_get_field_content_int(0,"PayDayCash");
User[i][Addiction][0] = cache_get_field_content_int(0,"Addiction");
User[i][Addiction][1] = cache_get_field_content_int(0,"Addiction2");
User[i][WantedDeaths] = cache_get_field_content_int(0,"WantedDeaths");
User[i][Mats] = cache_get_field_content_int(0,"Mats");
User[i][Debt][0] = cache_get_field_content_int(0,"Debt");
User[i][Debt][1] = cache_get_field_content_int(0,"Debt2");
User[i][Job] = cache_get_field_content_int(0,"Job");
User[i][Obedience] = cache_get_field_content_int(0,"Obedience");
cache_get_field_content(0, "Referal",User[i][Referal],DATABASE,MAX_PLAYER_NAME);
User[i][Station] = cache_get_field_content_int(0,"Station");
User[i][TaxiSkill][0] = cache_get_field_content_int(0,"TaxiSkill");
User[i][TaxiSkill][1] = cache_get_field_content_int(0,"TaxiSkill2");
cache_get_field_content(0, "Weapons",User[i][pWeapons],DATABASE,32);
cache_get_field_content(0, "Ammos",User[i][Ammos],DATABASE,32);
User[i][Satiety] = cache_get_field_content_int(0,"Satiety");
cache_get_field_content(0, "Married",User[i][Married],DATABASE,50);
User[i][MemGroup] = cache_get_field_content_int(0,"MemGroup");
cache_get_field_content(0, "Quests",User[i][Quests],DATABASE,6);
sscanf(User[i][Lics], "p<,>a<i>[2]",User[i][Lic]);
sscanf(User[i][Phones], "p<,>a<i>[2]",User[i][Phone]);
sscanf(User[i][UTexts], "p<,>a<i>[3]",User[i][Text]);
sscanf(User[i][Warns], "p<,>a<i>[2]",User[i][Warn]);
sscanf(User[i][Drugs], "p<,>a<i>[5]",User[i][Drug]);
sscanf(User[i][Upgrades], "p<,>a<i>[4]",User[i][Upgrade]);
sscanf(User[i][GunSkills], "p<,>a<i>[6]",User[i][GunSkill]);
sscanf(User[i][pWeapons], "p<,>a<i>[11]",User[i][Weapon]);
sscanf(User[i][Ammos], "p<,>a<i>[11]",User[i][Ammo]);
sscanf(User[i][Quests], "p<,>a<i>[2]",User[i][Quest]);
if(User[i][Locked] == -1) return SendClientMessage(i,COLOR_GREY,"Аккаунт заблокирован."), KickD(i,"");
if(User[i][Locked] > getdate()) return SendMes(i,COLOR_GREY,"Аккаунт заблокирован, разбан через %i дня(ей)",User[i][Locked]-getdate()), KickD(i,"");
else User[i][Locked] = 0;
strmid(User[i][IpVhod],ip, 0, strlen(ip), 32);
SetPVarInt(i, "GunCheck", gettime() + 6);
User[i][Login] = 1;
new string[64];
format(string, sizeof(string), "~w~Welcome ~n~~y~ %s",User[i][Name]);
GameTextForPlayer(i, string, 5000, 1);
mysql_format(DATABASE, QUERY, sizeof(QUERY), "SELECT * FROM `admins` WHERE `Name` = '%e'", User[i][Name]);
mysql_function_query(DATABASE, QUERY, true, "Admins", "d", i);
mysql_format(DATABASE, QUERY, sizeof(QUERY), "SELECT * FROM `supports` WHERE `Name` = '%e'", User[i][Name]);
mysql_function_query(DATABASE, QUERY, true, "Supports", "d", i);
if(User[i][Text][0])
{
SendClientMessage(i,COLOR_LIGHTRED,"Ваш бизнес был продан гос-ву за неуплату налогов"),
SendClientMessage(i,COLOR_LIGHTRED,"Деньги были зачислены на ваш банковский счет!");
User[i][Text][0] = 0;
}
if(User[i][Text][1])
{
SendClientMessage(i,COLOR_LIGHTRED,"Ваш дом был продан гос-ву за неуплату квартплаты"),
SendClientMessage(i,COLOR_LIGHTRED,"Деньги были зачислены на ваш банковский счет!");
User[i][Text][0] = 0;
}
if(User[i][Text][2]) SendClientMessage(i,COLOR_GOLD,"Вы получили 100000 долларов, за приглашенного друга!"), User[i][Text][2] = 0, User[i][Bank]+=100000;
if(User[i][Lottery] > 0 && TOTALPRIZ >= User[i][Lottery]) SendMes(i,COLOR_WHITE,"Вы имеете лотерейный билет, номер билета %i!",User[i][Lottery]);
else if(TOTALPRIZ < User[i][Lottery]) User[i][Lottery] = 0;
if(User[i][Warn][0] > 0)
{
if(User[i][Warn][1] > getdate())
{
SendMes(i,COLOR_LIGHTRED,"На вашем аккаунте имеются %i Warn's",User[i][Warn][0]);
SendMes(i,COLOR_LIGHTRED,"Warn's будут сняты через %i дней!",User[i][Warn][1]-getdate());
}
else
{
User[i][Warn][0] = 0;
User[i][Warn][1] = 0;
SendMes(i,COLOR_WHITE,"С вашего аккаунта сняты все предупреждения!");
}
}
if(ZoneID != 0)
{
GangZoneShowForAll(ZoneWar, 0xB2B2B2AA);
GangZoneFlashForAll(ZoneWar,COLOR_LIGHTRED);
}
LoadMyCar(i);
SpawnPlayerEx(i);
SetPlayerScore(i, User[i][Level]);
SetPlayerTeamColor(i);
return true;
}
В логах мускула и сервера никаких ошибок нет.