06.08.2015, 13:05
(
Last edited by Whiteman; 06/08/2015 at 08:35 PM.
)
Привет всем жителям форума
Решил с вами поделится функцией из своего мода, который сейчас я разрабатываю.Автор урока: Whiteman (Dominik_Shakur)
Для данного урока нам понадобится плагин от BlueG MySQL R39-2:
* Ссылка на плагин MySQL R39-2
И небольшое представление о том что такое MySQL
Начнем!
Для начала нам необходимо создать таблицу в которой будут сохранятся наши логи:
PHP Code:
CREATE TABLE IF NOT EXISTS `kick_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`kicked_name` varchar(24) NOT NULL,
`kicker_name` varchar(24) NOT NULL,
`reason` varchar(64) NOT NULL,
`date` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
PHP Code:
id - Идентификатор в БД
kicked_name - Никнейм игрока которого кикнули
kicker_name - Никнейм игрока который кикнул
reason - Причина кика
date - Дата и время кика
PHP Code:
KickEx(playerid, kicker[], reason[]) // Создаем нашу функцию c тремя аргументами
{
if(!IsPlayerConnected(playerid)) return true; // Тут мы проверяем присоединен ли игрок к серверу
new minute, sec, hour, day, month, year, dates[32], mysql_string[300], name[MAX_PLAYER_NAME]; // Создаем переменные
gettime(hour, minute, sec); // Получаем время
getdate(year, month, day); // Получаем дату
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
format(dates, sizeof(dates), "%02d:%02d:%02d | %02d.%02d.%02d", hour, minute, sec, day, month, year); // Форматируем время и дату и записываем все в переменную
format(mysql_string, sizeof(mysql_string), "INSERT INTO `kick_log` (`kicked_name`, `kicker_name`, `reason`, `date`) VALUES ('%s', '%s', '%s', '%s')", name, kicker, reason, dates); // Тут мы форматируем запрос добавляя в него наши данные
mysql_tquery(connects, mysql_string, "", ""); // Теперь отправляем запрос
SetTimerEx("PlayerKick", 30, false, "d", playerid); // И напоследок создаем таймер на 30 мс, который вызывает public с функцией Kick(playerid)
return true;
}
forward PlayerKick(playerid);
public PlayerKick(playerid) return Kick(playerid); // Данный public мы создали, чтобы игрок которого кикнули успел увидеть сообщение с причиной по которой его кикнули
Создаем команду с помощью dc_cmd:
PHP Code:
CMD:kick(playerid, params[]) // Создаем команду
{
if(PlayerInfo[playerid][pAdmin] >= 1) // Проверяем есть ли у игрока который вводит команду админка
{
new reason[64];
if(sscanf(params, "us[64]", params[0], params[1])) return SendClientMessage(playerid, -1, " Введите: /kick [id][reason]"); // Сравниваем аргументы команды с введенными аргументами в чате
format(reason, sizeof(reason), "Вы были кикнуты администратором %s Причина: %s", PlayerInfo[playerid][pName], params[1]);
SendClientMessage(playerid, -1, reason);
KickEx(params[0], PlayerInfo[playerid][pName], params[1]); // И тут мы используем нашу функцию (params[0] - id игрока кого нужно кикнуть, PlayerInfo[playerid][pName] - Имя игрока который вводит команду, params[1] - Причина по которой мы кикаем игрока)
}
return true;
}
PHP Code:
public OnPlayerText(playerid, text[]) // Public который вызывается когда игрок пишет что-то в чат
{
if(IsPlayerConnected(playerid)) // Проверяем присоединен ли игрок к серверу
{
if(GetPVarInt(playerid, "AntiFlood") > gettime()) // Сравниваем PVar "AntiFlood" который в данном случае является счетчиком с полученым временем
{
KickEx(playerid, "Server", "You have been kicked for flood!"); // Кикаем игрока от имени сервера с причиной которую вы пожелаете
return 0;
}
SetPVarInt(playerid, "AntiFlood", gettime() + 1);
}
return 1;
}