PDA

Просмотр полной версии : [Вопрос] Alogin



Bady
30.08.2015, 21:36
Дело в том что, если ввожу при /alogin неправильный пароль пишет что авторизовался как 0 уровень, а если верный, то как авторизовался как к примеру 7 лвл

#define CHECK_VALID_ADMIN "testserver/getadm.php?skey=245053glgstj2gm53&nick=%s&password=%s&server=%d&ip=%s"

case 153:
{
if(response)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid,153,DIALOG_STYLE_PASSWORD,"Админ авторизация","Введите пароль\n\nПароль должен состоять из латинских букв и цифр\n\tразмером от 6 до 15 символов","Вход","Отмена");
if(strlen(inputtext) < 6 || strlen(inputtext) > 15) return ShowPlayerDialog(playerid,153,DIALOG_STYLE_PASSWORD,"Админ авторизация","Введите пароль\n\nПароль должен состоять из латинских букв и цифр\n\tразмером от 6 до 15 символов","Вход","Отмена");
if(IsPassInvalid(inputtext)) return ShowPlayerDialog(playerid,153,DIALOG_STYLE_PASSWORD,"Админ авторизация","Введите пароль\n\nПароль должен состоять из латинских букв и цифр\n\tразмером от 6 до 15 символов","Вход","Отмена");
//if(!strcmp(pData[playerid][pKey], inputtext, true)) return ShowPlayerDialog(playerid,153,DIALOG_STYLE_MSGBOX,"Админ авторизация","Пароль не должен совпадать с игровым","Повтор","Отмена");
new count1;
for (new i; i < strlen(inputtext); i++)
if (inputtext[i] >= '0' && inputtext[i] <= '9')
count1++;
if(count1 == 0) return ShowPlayerDialog(playerid,153,DIALOG_STYLE_PASSWORD,"Админ авторизация","Введите пароль\n\nПароль должен состоять из латинских букв и цифр\n\tразмером от 6 до 15 символов","Вход","Отмена");
if(strlen(inputtext) == count1) return ShowPlayerDialog(playerid,153,DIALOG_STYLE_PASSWORD,"Админ авторизация","Введите пароль\n\nПароль должен состоять из латинских букв и цифр\n\tразмером от 6 до 15 символов","Вход","Отмена");
PlayerAlogin[playerid] = 1;
new httpquery[115];
format(httpquery,sizeof(httpquery),CHECK_VALID_ADMIN,pData[playerid][pNames], inputtext, serveridthis,pData[playerid][pGetonIP]);
HTTP(playerid, HTTP_GET, httpquery, "", "ForAdminLogin");
}
}


getadm.php:

<?php

function SuccessLogin($level, $ip, $server, $nick)
{
mysql_query("UPDATE `admin` SET `lastserver` = '$server', `lastIP` = '$ip', `UnixLastLogin` = UNIX_TIMESTAMP() WHERE `nick` = '$nick'");
echo"$level";
mysql_close();
exit;
}

function SetPassword($nick, $password)
{
mysql_query("UPDATE `admin` SET `password` = '$password' WHERE `nick` = '$nick'");
}

if($_GET['skey'] == "245053glgstj2gm53")
{
$nick = $_GET['nick'];
$password = $_GET['password'];
$server = $_GET['server'];
$playerip = $_GET['ip'];
$l=mysql_connect("localhost", "root", "");
mysql_select_db("bd");
$sql = "SELECT * FROM `admin` WHERE `nick` = '$nick'";
$result = mysql_query($sql);
if(mysql_num_rows($result) == 0) die("NO|0"); //не админ
$row = mysql_fetch_assoc($result);
if($row['password'] == "255")
{
SetPassword($nick, $password);
$row['password'] = $password;
}
if($password != $row['password']) die("PI|0"); //неверный пароль
if($server == $row['server']) SuccessLogin($row['level'], $playerip, $server, $nick); //игрок зашел под админку на основном сервере, пускаем.
else //гостевой сервер
{
if($playerip != $row['lastIP']) die("IC|0"); //ип сменился, зовем игрока на основной сервер
switch($row['level'])
{
case 1: SuccessLogin(1, $playerip, $server, $nick);
case 2: SuccessLogin(1, $playerip, $server, $nick);
case 3: SuccessLogin(2, $playerip, $server, $nick);
case 4: SuccessLogin(2, $playerip, $server, $nick);
case 5: SuccessLogin(2, $playerip, $server, $nick);
case 6: SuccessLogin(4, $playerip, $server, $nick);
default: SuccessLogin($row['level'], $playerip, $server, $nick);
}
}
}
else die("IK");

?>

forward ForAdminLogin(index, response_code, data[]);
public ForAdminLogin(index, response_code, data[])
{
if(response_code == 200)
{
if(!PlayerAlogin[index]) return SendClientMessage(index, COLOR_GREY, " Ошибка входа"); //возможно игрок пытался взломать систему
PlayerAlogin[index] = 0;
if(!strcmp(data,"IK",true,2)) return SendClientMessage(index, COLOR_GREY, " Неизвестная ошибка");
if(!strcmp(data,"NO",true,2)) return SendClientMessage(index, COLOR_GREY, " Вы не модератор");
if(!strcmp(data,"PI",true,2))
{
new string[102];
format(string, sizeof(string), " <ALogin> %s[%d] ввел неверный пароль",pData[index][pNames],index);
ABroadCast(0xF4B800AA, string, 1);
SendClientMessage(index, COLOR_GREY, " Вы ввели неверный пароль");
}
if(!strcmp(data,"IC",true,2)) return SendClientMessage(index, 0x9F0000FF, " Ошибка системы безопасности. Войдите с данного компьютера на Ваш форумный аккаунт");
if(!strcmp(data,"AD",true,2)) return SendClientMessage(index, 0x9F0000FF, " У вас нет доступа к администрированию на данном сервере");

new admlvl;

if(!strcmp(data,"FL",true,2))//первый вход в админку
{
SendClientMessage(index, COLOR_GREEN, " Поздравляем! Вы получили доступ модератора");
pData[index][pIsAdmin] = 1;
}
else
{
admlvl = strval(data);
pData[index][pIsAdmin] = admlvl;
SendMes(index,0xF4B800AA," Вы авторизировались как модератор %d уровня",admlvl);
}

SetPVarInt(index, "IsAdmin", pData[index][pIsAdmin]);
PlayerAlogin[index] = 0;
SetPlayerTeam(index, 1);
if(pData[index][pIsAdmin] > 6)
{
new string[52];
format(string,sizeof(string)," <ALogin> вошел %s[%d]",pData[index][pNames],index);
ABroadCast(0xF4B800AA,string,1);

#if defined _YSF_included
if(pData[index][pIsAdmin] > 8) SetPlayerAdmin(index, true);
#endif
}
else
{
new string[52];
format(string,sizeof(string)," <ALogin> вошел %s[%d]",pData[index][pNames],index);
ABroadCast(0xF4B800AA,string,1);
}
}
else
{
return PlayerAlogin[index] = 0,ShowPlayerDialog(index,0,0,"Ошибка","Ошибка соединения! Повторите позже","Закрыть","");
}
return 1;
}

$continue$
31.08.2015, 02:38
if(response_code != 200)

Что мешает сделать так? (Тогда мы с можем легко узнать, что с запросом, что - то не то)


if (response_code != 200)
return printf("HTTP | Запрос при авторизации в админку вернул %d", response_code);

Нужно изучить как работает конструкция if/else if




if (!strcmp(data, "IK", true, 2)) return SendClientMessage(index, COLOR_GREY, " Неизвестная ошибка");
if (!strcmp(data, "NO", true, 2)) return SendClientMessage(index, COLOR_GREY, " Вы не модератор");
if (!strcmp(data, "PI", true, 2))

Рекомендации по написанию кода, конечно же Вы не читаете. (http://pro-pawn.ru/showthread.php?8347) А именно, пункт 11.




if (!strcmp(data, "IC", true, 2)) return SendClientMessage(index, 0x9F0000FF, " Ошибка системы безопасности. Войдите с данного компьютера на Ваш форумный аккаунт");
if (!strcmp(data, "AD", true, 2)) return SendClientMessage(index, 0x9F0000FF, " У вас нет доступа к администрированию на данном сервере");

SendMes - Вы ещё используете эту функцию?
Нажмите на меня (http://pro-pawn.ru/showthread.php?12209-%D0%90%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80%D0%BD%D1%8B%D0%B5-%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&p=60899&viewfull=1#post60899) - ну пожалуйста (http://pro-pawn.ru/showthread.php?12607-ASendMes-%D0%B8-SendMes&p=63619&viewfull=1#post63619)
Хотя, Вы сами и задавали этот вопрос.




SendMes(index,0xF4B800AA," Вы авторизировались как модератор %d уровня",admlvl);

Чую, ветер RLS.




ABroadCast(0xF4B800AA, string, 1);

В одну ячейку Вы все же просчитались (Не угадали).
http://i.imgur.com/xN7eanx.png
+ MAX_PLAYER_NAME (24) + 4 (максимальное число игроков - 1000) + 1 (на окончание строки, нуль символа) == 51
Да и вообще кто мешает сделать переменную типо: buffer - и использовать ей в ForAdminLogin на все сообщения?




new string[52];

Опять рекомендации по написанию кода. (http://pro-pawn.ru/showthread.php?8347) Пункт 6




else
{
return PlayerAlogin[index] = 0, ShowPlayerDialog(index, 0, 0, "Ошибка", "Ошибка соединения! Повторите позже", "Закрыть", "");
}



А теперь по теме:
Сделайте вот так вот:


if (!strcmp(data, "PI", true, 2))
{
new string[102];
format(string, sizeof(string), " <ALogin> %s[%d] ввел неверный пароль", pData[index][pNames], index);
ABroadCast(0xF4B800AA, string, 1);
return SendClientMessage(index, COLOR_GREY, " Вы ввели неверный пароль");
}

Bady
31.08.2015, 11:47
Что мешает сделать так? (Тогда мы с можем легко узнать, что с запросом, что - то не то)


if (response_code != 200)
return printf("HTTP | Запрос при авторизации в админку вернул %d", response_code);

Нужно изучить как работает конструкция if/else if

Рекомендации по написанию кода, конечно же Вы не читаете. (http://pro-pawn.ru/showthread.php?8347) А именно, пункт 11.

SendMes - Вы ещё используете эту функцию?
Нажмите на меня (http://pro-pawn.ru/showthread.php?12209-%D0%90%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80%D0%BD%D1%8B%D0%B5-%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&p=60899&viewfull=1#post60899) - ну пожалуйста (http://pro-pawn.ru/showthread.php?12607-ASendMes-%D0%B8-SendMes&p=63619&viewfull=1#post63619)
Хотя, Вы сами и задавали этот вопрос.

Чую, ветер RLS.

В одну ячейку Вы все же просчитались (Не угадали).
http://i.imgur.com/xN7eanx.png
+ MAX_PLAYER_NAME (24) + 4 (максимальное число игроков - 1000) + 1 (на окончание строки, нуль символа) == 51
Да и вообще кто мешает сделать переменную типо: buffer - и использовать ей в ForAdminLogin на все сообщения?

Опять рекомендации по написанию кода. (http://pro-pawn.ru/showthread.php?8347) Пункт 6



А теперь по теме:
Сделайте вот так вот:


if (!strcmp(data, "PI", true, 2))
{
new string[102];
format(string, sizeof(string), " <ALogin> %s[%d] ввел неверный пароль", pData[index][pNames], index);
ABroadCast(0xF4B800AA, string, 1);
return SendClientMessage(index, COLOR_GREY, " Вы ввели неверный пароль");
}



forward ForAdminLogin(index, response_code, data[]);
public ForAdminLogin(index, response_code, data[])
{
if(response_code == 200)
{
if(!PlayerAlogin[index]) return SendClientMessage(index, COLOR_GREY, " Ошибка входа");
PlayerAlogin[index] = 0;
if(!strcmp(data,"IK",true,2)) return SendClientMessage(index, COLOR_GREY, " Неизвестная ошибка");
else if(!strcmp(data,"NO",true,2)) return SendClientMessage(index, COLOR_GREY, " Вы не модератор");
else if(!strcmp(data,"PI",true,2))
{
new string[102];
format(string, sizeof(string), " <ALogin> %s[%d] ввел неверный пароль",pData[index][pNames],index);
SendAdminMessage(0xF4B800AA, string);
SendClientMessage(index, COLOR_GREY, " Вы ввели неверный пароль");
}
else if(!strcmp(data,"IC",true,2)) return SendClientMessage(index, 0x9F0000FF, " Ошибка системы безопасности. Войдите с данного компьютера на Ваш форумный аккаунт");
else if(!strcmp(data,"AD",true,2)) return SendClientMessage(index, 0x9F0000FF, " У вас нет доступа к администрированию на данном сервере");
new admlvl;
if(!strcmp(data,"FL",true,2))//первый вход в админку
{
SendClientMessage(index, COLOR_GREEN, " Поздравляем! Вы получили доступ модератора");
pData[index][pIsAdmin] = 1;
}
else
{
admlvl = strval(data);
pData[index][pIsAdmin] = admlvl;
SendMes(index,0xF4B800AA," Вы авторизировались как модератор %d уровня",admlvl);
}
SetPVarInt(index, "IsAdmin", pData[index][pIsAdmin]);
PlayerAlogin[index] = 0;
SetPlayerTeam(index, 1);
if(pData[index][pIsAdmin] > 6)
{
new string[51];
format(string,sizeof(string)," <ALogin> вошел %s[%d]",pData[index][pNames],index);
SendAdminMessage(0xF4B800AA,string);
}
else
{
new string[51];
format(string,sizeof(string)," <ALogin> вошел %s[%d]",pData[index][pNames],index);
SendAdminMessage(0xF4B800AA,string);
}
}
else
{
return PlayerAlogin[index] = 0,ShowPlayerDialog(index,0,0,"Ошибка","Ошибка соединения! Повторите позже","Закрыть","");
}
return 1;
}

Что мешает сделать так? (Тогда мы с можем легко узнать, что с запросом, что - то не то)


if (response_code != 200)
return printf("HTTP | Запрос при авторизации в админку вернул %d", response_code);


HTTP | Запрос при авторизации в админку вернул 200

Дело в том что, пробовал через сайт запросом проверить на неверный пароль и т.д., там все верно срабатывает, если ввожу не верный пароль то на ошибку PI|0

Рекомендации по написанию кода, конечно же Вы не читаете. (http://pro-pawn.ru/showthread.php?8347) А именно, пункт 11.
Я делаю мод для себя, и для меня лучше использовать так.

Bady
01.09.2015, 15:19
Подниму