PDA

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



PawnoNoob
05.02.2017, 16:37
Приветствую. Делаю систему регистрации, запнулся на одном моменте: после проверки на блокировку IP-адреса (если не заблокирован) должно показывать диалог авторизации/регистрации. У меня примерно такая проблема: если IP-адрес заблокирован, то после вывода информации о блокировке (в диалоговом окне) сразу же выводит диалог авторизации/регистрации, а это мне не нужно. Что делать?

public OnPlayerConnect(playerid)
{
GetPlayerName(playerid, pinfo[playerid][pName], MAX_PLAYER_NAME);
GetPlayerIp(playerid, pinfo[playerid][pIP], 16);.
CheckBanIP(playerid);
// Загрузка номера аккаунта и пароля.
static const s_acc[] = "SELECT `id`, `password` FROM "T_ACC" WHERE `nick` = '%s'";
new query[sizeof(s_acc) + (-2+MAX_PLAYER_NAME)];
format(query, sizeof(query), s_acc, pinfo[playerid][pName]);
mysql_tquery(mysql, query, "Search", "i", playerid);
return true;
}


public Search(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows)
{
// Показываем диалог авторизации.
}
else
{
// Показываем диалог регистрации.
}
return true;
}

Теперь проверка на блокировку IP:

CheckBanIP(playerid)
{
static const banip[] = "SELECT * FROM "T_BANIP" WHERE `ip` = '%s'";
new query[sizeof(banip) + (-2+16)];
format(query, sizeof(query), banip, PlayerInfo[playerid][pIP]);
mysql_tquery(mysql, query, "GetBanIp", "i", playerid);
return true;
}


public GetBanIp(playerid)
{
new bandate, unbandate, reason[50], adm[MAX_PLAYER_NAME], ban, rows;
cache_get_row_count(rows);
if(rows)
{
cache_get_value_name(0, "adm", adm, MAX_PLAYER_NAME);
cache_get_value_name(0, "reason", reason, 51);
cache_get_value_name_int(0, "bandate", bandate);
cache_get_value_name_int(0, "unbandate", unbandate);
if(unbandate-gettime() > 0) ban = 1;
else if(unbandate-gettime() <= 0)
{
// Удаляем информацию о блокировке.
}
}
if(ban == 1)
{
// Показываем информацию о блокировке и отключаем игрока.
MesKick(playerid, COLOR_RED, "/quit");
}
return true;
}

И MesKick:

MesKick(playerid, color, string[])
{
SendClientMessage(playerid, color, string);
SetTimerEx("kick", 200, false, "i", playerid);
return true;
}

public kick(playerid)
{
Kick(playerid);
}

Nexius_Tailer
05.02.2017, 16:55
Вот этот код:

// Загрузка номера аккаунта и пароля.
static const s_acc[] = "SELECT `id`, `password` FROM "T_ACC" WHERE `nick` = '%s'";
new query[sizeof(s_acc) + (-2+MAX_PLAYER_NAME)];
format(query, sizeof(query), s_acc, pinfo[playerid][pName]);
mysql_tquery(mysql, query, "Search", "i", playerid);
из OnPlayerConnect переместить в GetBanIp, добавив там:

public GetBanIp(playerid)
{
//...
if(ban == 1)
{
// Показываем информацию о блокировке и отключаем игрока.
MesKick(playerid, COLOR_RED, "/quit");
}
//Здесь
else
{
// Загрузка номера аккаунта и пароля.
static const s_acc[] = "SELECT `id`, `password` FROM "T_ACC" WHERE `nick` = '%s'";
new query[sizeof(s_acc) + (-2+MAX_PLAYER_NAME)];
format(query, sizeof(query), s_acc, pinfo[playerid][pName]);
mysql_tquery(mysql, query, "Search", "i", playerid);
}
return true;
}

PawnoNoob
05.02.2017, 19:20
Вот этот код:

// Загрузка номера аккаунта и пароля.
static const s_acc[] = "SELECT `id`, `password` FROM "T_ACC" WHERE `nick` = '%s'";
new query[sizeof(s_acc) + (-2+MAX_PLAYER_NAME)];
format(query, sizeof(query), s_acc, pinfo[playerid][pName]);
mysql_tquery(mysql, query, "Search", "i", playerid);
из OnPlayerConnect переместить в GetBanIp, добавив там:

public GetBanIp(playerid)
{
//...
if(ban == 1)
{
// Показываем информацию о блокировке и отключаем игрока.
MesKick(playerid, COLOR_RED, "/quit");
}
//Здесь
else
{
// Загрузка номера аккаунта и пароля.
static const s_acc[] = "SELECT `id`, `password` FROM "T_ACC" WHERE `nick` = '%s'";
new query[sizeof(s_acc) + (-2+MAX_PLAYER_NAME)];
format(query, sizeof(query), s_acc, pinfo[playerid][pName]);
mysql_tquery(mysql, query, "Search", "i", playerid);
}
return true;
}

Приходило в голову, но не решался почему-то :wizard: Спасибо за помощь!