Сергей
20.02.2019, 04:08
Доброго времени суток, суть в том, что я заметил забавный баг, при авторизации на сервере.
Как обстоит дело:
Подключаются 2 игрока. Подключаюсь например я, и Я с другого компа.
Так вот, вводит кто-то из меня первый пароль, и собственно авторизовывается, и потом ввожу второй я пароль, и тоже прохожу авторизацию.
Или ещё такой прикол, когда одновременно ввести пароль, 1 игрок авторизуется, второй нет...
Суть в том, что у одного из меня получается ник -1...
Не пойму в чём суть...
Немного по игравшись с принтами, выяснилось
Запрос:
GetPlayerName(playerid, PI[playerid][pName], MAX_PLAYER_NAME);
new query121[75+MAX_PLAYER_NAME+4];
format(query121, sizeof(query121), "SELECT `acc_id`,`pass`,`salt_pass` FROM `account` WHERE `nick`='%s'", PlayerInfo[playerid][pName]);
mysql_function_query(MysqlConnect, query121, true, "OnRegCheckCallBack","d",playerid);
Ответ:
forward OnRegCheckCallBack(playerid);
public OnRegCheckCallBack(playerid)
{
new rows, fields;
cache_get_data(rows, fields,MysqlConnect);
if(rows)
{
PlayerInfo[playerid][pID] = cache_get_field_content_int(0, "acc_id", MysqlConnect);
cache_get_field_content(0, "pass", PlayerInfo[playerid][pPassword], MysqlConnect, 33);
cache_get_field_content(0, "salt_pass", PlayerInfo[playerid][salt_pass], MysqlConnect, 11);
printf("ID: %d",PI[playerid][pID]);
printf("Password: %s",PI[playerid][pPassword]);
printf("salt_pass: %s",PI[playerid][salt_pass]);
OnPlayerDialogD_REG_AUTOS(playerid,1);// показываю диалог авторизации
}
else OnPlayerDialogD_REG_AUTOS(playerid,2);// показываю диалог регистрации
return 1;
}
Смешно стало после того, как я добавил принт, захожу, нормально всё, убираю принт, всё печально, одного пропускает, второй:
[03:44:16] Отправляем ид mysqlID: 144 |pl: 0 | N: Test_One
[03:44:16] Отправляем ид mysqlID: 44 |pl: 1 | N: -1
Главное первого спавнит, всё нормально, второй зависает, и окно авторизации падает, выключаем сервер.
Включаем снова, принт активный, и всё равно, 1-го спавнит, второй завис..
Действия в самом диалоге после верного ввода пароля:
new query2[51+11+2];
format(query2, sizeof(query2), "SELECT * FROM `account` WHERE `acc_id`='%d'", PlayerInfo[playerid][pID]);
mysql_function_query(MysqlConnect, query2, true, "OnPlayerLoginCallBack", "dd",PlayerInfo[playerid][pID], playerid);
Из этой всей кучи, логический вопрос, что я стал делать не так?
Логи, после того как ник игрока снова стал -1
Первый аккаунт:
ID: 144
Password: принт чёткая тема
salt_pass: и это
Второй:
ID: 58
Password: принт чёткая тема
salt_pass: и это
В самом диалоге после успешного ввода пароля:
Первый аккаунт:
Пароль верный: Test_One| 144 (это mysql_id)
Отправляем ид m: 144 |playerid: 0
Второй аккаунт:
Пароль верный: -1 | 44
Отправляем ид m: 44 |pl: 1
Как обстоит дело:
Подключаются 2 игрока. Подключаюсь например я, и Я с другого компа.
Так вот, вводит кто-то из меня первый пароль, и собственно авторизовывается, и потом ввожу второй я пароль, и тоже прохожу авторизацию.
Или ещё такой прикол, когда одновременно ввести пароль, 1 игрок авторизуется, второй нет...
Суть в том, что у одного из меня получается ник -1...
Не пойму в чём суть...
Немного по игравшись с принтами, выяснилось
Запрос:
GetPlayerName(playerid, PI[playerid][pName], MAX_PLAYER_NAME);
new query121[75+MAX_PLAYER_NAME+4];
format(query121, sizeof(query121), "SELECT `acc_id`,`pass`,`salt_pass` FROM `account` WHERE `nick`='%s'", PlayerInfo[playerid][pName]);
mysql_function_query(MysqlConnect, query121, true, "OnRegCheckCallBack","d",playerid);
Ответ:
forward OnRegCheckCallBack(playerid);
public OnRegCheckCallBack(playerid)
{
new rows, fields;
cache_get_data(rows, fields,MysqlConnect);
if(rows)
{
PlayerInfo[playerid][pID] = cache_get_field_content_int(0, "acc_id", MysqlConnect);
cache_get_field_content(0, "pass", PlayerInfo[playerid][pPassword], MysqlConnect, 33);
cache_get_field_content(0, "salt_pass", PlayerInfo[playerid][salt_pass], MysqlConnect, 11);
printf("ID: %d",PI[playerid][pID]);
printf("Password: %s",PI[playerid][pPassword]);
printf("salt_pass: %s",PI[playerid][salt_pass]);
OnPlayerDialogD_REG_AUTOS(playerid,1);// показываю диалог авторизации
}
else OnPlayerDialogD_REG_AUTOS(playerid,2);// показываю диалог регистрации
return 1;
}
Смешно стало после того, как я добавил принт, захожу, нормально всё, убираю принт, всё печально, одного пропускает, второй:
[03:44:16] Отправляем ид mysqlID: 144 |pl: 0 | N: Test_One
[03:44:16] Отправляем ид mysqlID: 44 |pl: 1 | N: -1
Главное первого спавнит, всё нормально, второй зависает, и окно авторизации падает, выключаем сервер.
Включаем снова, принт активный, и всё равно, 1-го спавнит, второй завис..
Действия в самом диалоге после верного ввода пароля:
new query2[51+11+2];
format(query2, sizeof(query2), "SELECT * FROM `account` WHERE `acc_id`='%d'", PlayerInfo[playerid][pID]);
mysql_function_query(MysqlConnect, query2, true, "OnPlayerLoginCallBack", "dd",PlayerInfo[playerid][pID], playerid);
Из этой всей кучи, логический вопрос, что я стал делать не так?
Логи, после того как ник игрока снова стал -1
Первый аккаунт:
ID: 144
Password: принт чёткая тема
salt_pass: и это
Второй:
ID: 58
Password: принт чёткая тема
salt_pass: и это
В самом диалоге после успешного ввода пароля:
Первый аккаунт:
Пароль верный: Test_One| 144 (это mysql_id)
Отправляем ид m: 144 |playerid: 0
Второй аккаунт:
Пароль верный: -1 | 44
Отправляем ид m: 44 |pl: 1