Используй обычный static вместо static const. Зачем каждый раз вызывать GetPlayerName? Создай переменную и запиши туда ник игрока, и на всякий случай сделай для этого макрос, так как у многих таковое уже имеется
На каждой этой функции столько ошибок.Код HTML:error 017: undefined symbol "GetDeclensionWord"
warning 202: number of arguments does not match definition
warning 202: number of arguments does not match definition
warning 202: number of arguments does not match definition
warning 202: number of arguments does not match definition
warning 202: number of arguments does not match definition
PHP код:
GetDeclensionWord(days_string, sizeof(days_string), days, "день", "дня", "дней");
В OnPlayerConnect, где идёт проверка на наличие аккаунта, делай проверку перед диалогом авторизации.
Переписать систему авторизации придётся немного, если всё по уму сделать хочешь.
Должно быть так:
PHP код:
public OnPlayerConnect(...)
{
if(игрок зарегистрирован?)
{//Нет
Регистрация
}
else
{//Да
Запрос в таблицу "banlist" (ищешь игрока в списке забаненных
}
return 1;
}
PHP код:
коллбэк_вызываемый_запросом
{
if(забанен)
{
Игрок забанен => кик
}
else
{
Авторизация
}
return 1;
}
Как ты получаешь значение пароля из таблицы с банами? Я конечно все понимаю, но думать хоть чуть-чуть нужно. Получай значение пароля в FindPlayerInTable (там ведь запрос в таблицу аккаунтов?) или дублируй запрос в таблицу аккаунтов из OnPlayerConnect (желательно конечно первое, что бы не дублировать одинаковые запросы).
Вообщем, если выше я написал слишком сложно, то скопируй это с заменой -
PHP код:
public FindPlayerInTable(playerid)
{
new rows, fields, string[300];
cache_get_data(rows, fields);
if(!rows)
{
SendClientMessage(playerid, COLOR_WHITE, "Этот ник не {FF0000}зарегистрирован {FFFFFF}на этом сервере! Зарегистрируйся, пожалуйста.");
format(string,sizeof(string),"{FFDEAD}Здравствуй, %s \n\n- Ты зашел на сервер AscarY(0.3.7)[RUS/UA]\n- Игровой Режим: AscarY: LS/SF/LV\n- На сервере: \n- Бизнесов: \n- Сбизнесов: \n- Сайт Сервера: \n\nИспользуемый тобой ник свободен.\nЗарегистрируйся чтобы продолжить.\n\nЗадай пароль от аккаунта:",PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid, 1 ,DIALOG_STYLE_INPUT,!"Регистрация",string,"Далее","Отмена");
}
else
{
cache_get_field_content(0, "password", PlayerInfo[playerid][pPassword], mysql_connect_id, 25);
static const auto_query_string[] = "SELECT * FROM `banlist` WHERE `Name` = '%s'";
new query_string[sizeof(auto_query_string) - 2 + MAX_PLAYER_NAME + 1];
format(query_string, sizeof(query_string), auto_query_string, PlayerInfo[playerid][pName]);
mysql_function_query(mysql_connect_id, query_string, true, "OnPlayerFindInBanlist", "d", playerid);
}
return 1;
}
PHP код:
public OnPlayerFindInBanlist(playerid)
{
new rows, fields, unbanunixtime, string[250+ MAX_PLAYER_NAME + 1];
cache_get_data(rows, fields);
if(rows)
{
unbanunixtime = cache_get_field_content_int(0, !"UnbanUNIXTime", 1);
new playerid_name[MAX_PLAYER_NAME + 1], admin_name[MAX_PLAYER_NAME + 1];
GetPlayerName(playerid, playerid_name, MAX_PLAYER_NAME);
if(gettime() >= unbanunixtime)
{
static const auto_query_string[] = "DELETE FROM `banlist` WHERE `Name` = '%s'";
new query_string[sizeof(auto_query_string) - 2 + MAX_PLAYER_NAME + 1];
format(query_string, sizeof(query_string), auto_query_string, playerid_name);
mysql_function_query(mysql_connect_id, query_string, false, "", "");
return 1;
}
new days_string[4+1],
word_string[8+1],
reason[32+1],
days = (unbanunixtime - gettime()) / 86400 + 1;
cache_get_field_content(0, !"Admin", admin_name);
cache_get_field_content(0, !"Reason", reason);
GetDeclensionWord(word_string, sizeof(word_string), days, "Остался", "Осталось", "Осталось");
GetDeclensionWord(days_string, sizeof(days_string), days, "день", "дня", "дней");
format(string,sizeof(string),"Аккаунт {FF6347}%s{ffffff} временно {FF6347}заблокирован.{ffffff}",playerid_name);
SendClientMessage(playerid, -1, string);
format(string,sizeof(string),"Причина: {FF6347}%s{ffffff}. Забанил: {FF6347}%s.",reason, admin_name);
SendClientMessage(playerid, -1, string);
format(string, sizeof(string), "%s: {ff6347}%d %s {ffffff}до {FF6347}разблокировки.", word_string, days, days_string);
SendClientMessage(playerid, -1, string);
Kick(playerid);
}
else
{
format(string,sizeof(string),"{FFDEAD}Здравствуй, %s \n\n- Ты зашел на сервер AscarY (0.3.7)[RUS/UA]\n- Игровой режим: AscarY: LS/SF/LV(RPG)\n- На сервере:\n- Бизнесов: \n- Сбизнесов: \n- Сайт Сервера: \n\nЭтот аккаунт уже зарегистрирован\n\nВведи пароль от аккаунта:",PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid,2,DIALOG_STYLE_PASSWORD,!"Авторизация",string,"Вход","Отмена");
}
return 1;
}
Спасибо большое.
Скиньте таблицу у кого есть