СергейTaz
Ученик
Вечер в хату, pawno-info.
Сегодня постараюсь показать, как сделать систему бана точно такую-же ( +-) как на Advance.
В итоге мы получим вот такую картину:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Использованные плагины, инклуды:
- Mysql R9-39;
- DC_CMD;
- Sscanf;
- mxdate;
Приступаем.
Первым шагом мы идем в самый вверх, там где у нас различные энуменаторы ( Enum ) и добавляем:
PHP:
enum bInfo
{
bBan_name[MAX_PLAYER_NAME],
bAdmin_Name[MAX_PLAYER_NAME],
bBan_Reason[30],
bUnban_Date,
bBan_Date
};
new ban_variable[MAX_PLAYERS][bInfo];
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Вторым шагом будет импортирование базы данных:
Скачиваем
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
далее выбираем базу данных и нажимаем OK.
Третьим шагом создаем команду для бана, а так же проверка аккаунт на нахождение в банлисте.
Ко всем командам
PHP:
CMD:ban(playerid, params[])
{
new
ban_ID,
ban_time,
ban_reason[30];
if(sscanf(params, "iis[30]", ban_ID, ban_time, ban_reason))
return SendClientMessage(playerid, 0xCECFCEFF, "Используй /ban [id игрока] [срок в днях] [причина(необязательно)]");
if(!(2 <= ban_time <= 31))
return SendClientMessage(playerid, 0xCECFCEFF, "Срок может быть от до 2 до 30 дней");
ban_variable[ban_ID][bUnban_Date] = gettime() + ban_time*86400;
ban_variable[ban_ID][bBan_Date] = gettime()-366;
static const
frm_string[] = "INSERT INTO `banlist` (`ban_name`, `admin_name_ban`, `reason`, `unbane_date`, `ban_date`) VALUES ('%s', '%s', '%s', '%i', '%i')";
new query_string[sizeof(frm_string)-2+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME-2+30-2+11-2+11];
format(query_string, sizeof(query_string), frm_string, player_name[ban_ID], player_name[playerid], ban_reason, ban_variable[ban_ID][bUnban_Date], ban_variable[ban_ID][bBan_Date]);
mysql_function_query(mysql_connect_ID, query_string, false, "", "");
static const
form_string[] = "Администратор %s забанил игрока %s на %i дней. Причина: %s";
new string[sizeof(form_string)-2+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME-2+144];
format(string, sizeof(string), form_string, player_name[playerid], player_name[ban_ID], ban_time, ban_reason);
SendClientMessageToAll(0xFF4F00FF, string);
return true;
}
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
В паблик OnPlayerConnect проверка на нахождение в банлисте
PHP:
static const
frm_string[] = "SELECT * FROM `banlist` WHERE `ban_name` = '%s'";
new string[sizeof(frm_string)-2+MAX_PLAYER_NAME];
format(string, sizeof(string), frm_string, player_name);
mysql_function_query(mysql_connect_ID, string, true, "IsPlayerOnBanList", "i", playerid);
PHP:
forward IsPlayerOnBanList(playerid);
public IsPlayerOnBanList(playerid)
{
new rows, fields;
cache_get_data(rows, fields);
if(rows)
{
cache_get_field_content(0, "admin_name_ban", ban_variable[playerid][bAdmin_Name], mysql_connect_ID, MAX_PLAYER_NAME);
cache_get_field_content(0, "ban_name", ban_variable[playerid][bBan_name], mysql_connect_ID, MAX_PLAYER_NAME);
cache_get_field_content(0, "reason", ban_variable[playerid][bBan_Reason], mysql_connect_ID, 30);
ban_variable[playerid][bBan_Date]= cache_get_field_content_int(0, "ban_date", ban_variable[playerid][bBan_Date]);
ban_variable[playerid][bUnban_Date] = cache_get_field_content_int(0, "unbane_date", ban_variable[playerid][bUnban_Date]);
if(ban_variable[playerid][bUnban_Date] > gettime())
{
static const
frm_string[] = "{ffffff}Этот аккаунт заблокирован на {FF8000}%i дней{ffffff}\n\n\
{ffffff}Ник администратора: %s\n\
Причина блокировки: %s\n\
Дата и время: %s\n\n\
Введите {ffd200}/q (/quit){ffffff} чтобы выйти.";
new string[sizeof(frm_string)-2+11-2+MAX_PLAYER_NAME-2+30-2+11];
format(string, sizeof(string), frm_string, (floatround(ban_variable[playerid][bUnban_Date],floatround_ceil)-gettime())/86400, ban_variable[playerid][bAdmin_Name], ban_variable[playerid][bBan_Reason], date("%yyyy-%mm-%dd %hh:%mm:%ss",ban_variable[playerid][bBan_Date]));
ShowPlayerDialog(playerid, 999, DIALOG_STYLE_MSGBOX, "{63cbff}Advance RolePlay", string, "Закрыть", "");
}
else
{
static const
frm_string[] = "DELETE FROM `banlist` WHERE `ban_name` = '%s'";
new query_string[sizeof(frm_string)-2+MAX_PLAYER_NAME];
format(query_string, sizeof(query_string), frm_string, ban_variable[playerid][bBan_name]);
mysql_function_query(mysql_connect_ID, query_string, false, "", "");
}
}
}
Возможные ошибки:
PHP:
error 017: undefined symbol "player_name"
К глобальным переменым добавляем
PHP:
new player_name[MAX_PLAYERS][MAX_PLAYER_NAME];
PHP:
GetPlayerName(playerid, player_name[playerid], MAX_PLAYER_NAME);
Автор: СергейTaz
---------- Сообщение добавлено в 17:52 ---------- Предыдущее сообщение добавлено в 17:45 ----------
Так же в скором времени добавлю команду /offban FULL COPY ADVANCE
Последнее редактирование:
