PDA

Просмотр полной версии : [Вопрос] Проблема с авторизацией



f55555
14.05.2017, 15:15
здравствуйте ув. пользователи pro-pawn
помогите пожалуйста
когда ввожу в поле ввода этот символ - \ пропадает диалог и больше ничего не происходит
когда ввожу другие все нормально

DeimoS
14.05.2017, 16:32
Может покажешь код?

f55555
14.05.2017, 18:07
Может покажешь код?


http://pawno-info.ru/showthread.php?t=295507&attempt=1 регистрация авторизация с данного урока
не реклама извините

DeimoS
14.05.2017, 19:40
Публикация ссылок на другие форумы разрешена (п.3 (http://pro-pawn.ru/showthread.php?9968-%D0%9E%D0%B1%D1%89%D0%B8%D0%B5-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D1%84%D0%BE%D1%80%D1%83%D0%BC%D0%B0)), если это не спам, так что не нужно постоянно писать "не реклама" :)

Дай код, что сейчас есть у тебя, а не код из урока.
Нужен код диалогов самих

f55555
14.05.2017, 19:48
Публикация ссылок на другие форумы разрешена (п.3 (http://pro-pawn.ru/showthread.php?9968-%D0%9E%D0%B1%D1%89%D0%B8%D0%B5-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D1%84%D0%BE%D1%80%D1%83%D0%BC%D0%B0)), если это не спам, так что не нужно постоянно писать "не реклама" :)

Дай код, что сейчас есть у тебя, а не код из урока.
Нужен код диалогов самих

деймос спасибо что всегда помогаете !


public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 0:
{
if(!response)
return Kick(playerid);
if(!strlen(inputtext))
{
static const fmt_str[] =
"\
{F2BC58}%s{FFFFFF}, добро пожаловать на {F2BC58}Server-Rp.Ru{FFFFFF}.\
\nВаш аккаунт не найден в базе данных, поэтому Вам\
\nнужно пройти регистрацию. Введите пароль в поле.\
";
new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME];
format(string, sizeof(string), fmt_str, p_i[playerid][p_name]);
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", string, "Далее", "");
return 1;
}
if(strlen(inputtext) < 6 || strlen(inputtext) > 20)
return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация.", "{FFFFFF}Пароль должен содержать от 6 до 20 символов и букв.", "Далее", "");
for(new i = strlen(inputtext); i != 0; --i)
switch(inputtext[i])
{
case 'А'..'Я', 'а'..'я', ' ':
return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация.", "{FFFFFF}Ваш пароль не должен содержать русских букв.", "Далее", "");
}
strmid(p_i[playerid][p_password], inputtext, 0, strlen(inputtext), 20);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", "{FFFFFF}Введите Ваш действующий электронный адрес.", "Далее", "");
}
case 1:
{
if(!response)
return Kick(playerid);
if(!strlen(inputtext))
return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", "{FFFFFF}Введите Ваш действующий электронный адрес.", "Далее", "");
if(strlen(inputtext) < 10 || strlen(inputtext) > 50)
return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация.", "{FFFFFF}Почта должна содержать от 10 до 50 символов и букв.", "Далее", "");
for(new i = strlen(inputtext); i != 0; --i)
switch(inputtext[i])
{
case 'А'..'Я', 'а'..'я', ' ':
return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация.", "{FFFFFF}Ваша почта не должна содержать русских букв.", "Далее", "");
}
strmid(p_i[playerid][p_email], inputtext, 0, strlen(inputtext), 50);
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", "{FFFFFF}Введите ник игрока, который пригласил Вас на наш сервер.", "Далее", "");
}
case 2:
{
if(!response)
return Kick(playerid);
if(!strlen(inputtext))
return ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", "{FFFFFF}Введите ник игрока, который пригласил Вас на наш сервер.", "Далее", "");
if(strlen(inputtext) < 1 || strlen(inputtext) > 24)
return ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация.", "{FFFFFF}Введите ник игрока, который пригласил Вас на наш сервер.", "Далее", "");
strmid(p_i[playerid][p_referral], inputtext, 0, strlen(inputtext), MAX_PLAYER_NAME);
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация.", "{FFFFFF}Выберите Ваш пол.", "Мужской", "Женский");
}
case 3:
{
if(!response)
{
p_i[playerid][p_sex] = 1;
p_i[playerid][p_skin] = 13;
}
else
{
p_i[playerid][p_sex] = 2;
p_i[playerid][p_skin] = 230;
}
p_i[playerid][p_score] = 1;
authorization[playerid] = true;
static const fmt_str[] = "INSERT INTO `accounts` (`p_name`, `p_password`, `p_email`, `p_referral`, `p_sex`, `p_skin`, `p_score`) VALUES ('%s', '%s', '%s', '%s', '%d', '%d', '%d')";
new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME - 2 + 20 + 1 - 2 + 50 + 1 - 2 + MAX_PLAYER_NAME - 2 + 2 - 2 + 4 - 2 + 5];
format(string, sizeof(string), fmt_str, p_i[playerid][p_name], p_i[playerid][p_password], p_i[playerid][p_email], p_i[playerid][p_referral], p_i[playerid][p_sex], p_i[playerid][p_skin], p_i[playerid][p_score]);
mysql_function_query(database, string, 0, "", "");
SpawnPlayer(playerid);
}
case 4:
{
if(!response)
return Kick(playerid);
if(!strlen(inputtext))
{
static const fmt_str[] =
"\
{F2BC58}%s{FFFFFF}, добро пожаловать на {F2BC58}Server-Rp.Ru{FFFFFF}.\
\nВаш аккаунт найден в базе данных, поэтому Вам нужно\
\nпройти авторизацию. Введите свой пароль в поле.\
";
new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME];
format(string, sizeof(string), fmt_str, p_i[playerid][p_name]);
ShowPlayerDialog(playerid, 4, DIALOG_STYLE_PASSWORD, "{F2BC58}Авторизация.", string, "Далее", "");
return 1;
}
static const fmt_str[] = "SELECT * FROM `accounts` WHERE `p_name` = '%s' AND `p_password` = '%s'";
new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME - 2 + 20 + 1];
format(string, sizeof(string), fmt_str, p_i[playerid][p_name], inputtext);
mysql_function_query(database, string, 1, "p_login", "i", playerid);
}
}
return 1;
}

- - - Добавлено - - -

можете еще подсказать
куда лучше сделать анти-чит на деньги
в OnPlayerUpdate или ежесекундный таймер

Nexius_Tailer
14.05.2017, 20:07
куда лучше сделать анти-чит на деньги
в OnPlayerUpdate или ежесекундный таймер
В OnPlayerUpdate у клиента не будут успевать синхронизироваться деньги после их выставления, так что однозначно таймер

f55555
14.05.2017, 20:08
В OnPlayerUpdate у клиента не будут успевать синхронизироваться деньги, так что однозначно таймер

спасибо

DeimoS
14.05.2017, 20:39
Можно и без таймера обойтись.
В начало мода

stock ac_GivePlayerMoney(playerid, money)
{
pInfo[playerid][pMoney] += money;
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, pInfo[playerid][pMoney]);
return 1;
}
#if defined _ALS_GivePlayerMoney
#undef GivePlayerMoney
#else
#define _ALS_GivePlayerMoney
#endif

#define GivePlayerMoney ac_GivePlayerMoney
И теперь любые попытки начитерить деньги ограничатся лишь визуальной накруткой. Только человек попытается эти деньги использовать - количество денег сразу сбросится до нормального.



Ну а касаемо твоей проблемы, скорее всего, нужно экранировать данный символ, хотя проще будет просто запретить его использовать
crashdetect что-то выдаёт в консоль?

f55555
14.05.2017, 20:40
Можно и без таймера обойтись.
В начало мода

stock ac_GivePlayerMoney(playerid, money)
{
pInfo[playerid][pMoney] += money;
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, pInfo[playerid][pMoney]);
return 1;
}
#if defined _ALS_GivePlayerMoney
#undef GivePlayerMoney
#else
#define _ALS_GivePlayerMoney
#endif

#define GivePlayerMoney ac_GivePlayerMoney
И теперь любые попытки начитерить деньги ограничатся лишь визуальной накруткой. Только человек попытается эти деньги использовать - количество денег сразу сбросится до нормального.



Ну а касаемо твоей проблемы, скорее всего, нужно экранировать данный символ, хотя проще будет просто запретить его использовать
crashdetect что-то выдаёт в консоль?

нет, кд молчит.
спасибо за помощь!
можете еще сказать
в чем отличие
mysql_query(database, string)
и mysql_tquery(database, string, "", "");

DeimoS
14.05.2017, 20:52
нет, кд молчит.
спасибо за помощь!
можете еще сказать
в чем отличие
mysql_query(database, string)
и mysql_tquery(database, string, "", "");

mysql_query - запрос отправляется и обрабатывается в том же потоке, что и работает сервер
mysql_tquery - запрос обрабатывается в отдельном потоке

f55555
14.05.2017, 20:55
хорошо спасибо
вы лучший.
как закрыть тему?