- Регистрация
- 13 Мар 2022
- Сообщения
- 867
- Автор темы
- #1
Всех приветствую.
Написал небольшую системку истории наказаний.
Система написана на скорую руку, могут быть недоработки или баги.
MySQL R39:
MySQL R40+:
Таблица наказаний:
Написал небольшую системку истории наказаний.
Система написана на скорую руку, могут быть недоработки или баги.
MySQL R39:
Pawn:
#define TABLE_PUNISHMENT "punisment_logs" //таблица с наказаниями
#define COLOR_RED (0xFF0000FF) //цвет (пример)
#define GetName(%0) PlayerInfo[%0][pName]
new mysql_global[500];
new dbHandle;
CMD:warn(playerid, params[]) { //пример команды с использованием функции
if(PlayerInfo[playerid][pAdmin] < 4)
return SendClientMessage(playerid, COLOR_RED, "Вам недоступна данная команда!");
if(sscanf(params, "us[64]", params[0], params[1]))
return SendClientMessage(playerid, -1, "Используйте: /warn [id игрока] [причина]");
PlayerInfo[params[0]][pWarn] ++;
if(PlayerInfo[params[0]][pWarn] > 2) Ban(params[0]);
else SendClientMessage(params[0], -1, "Администратор выдал вам Warn.");
return AddPunishment(playerid, params[0], 0, params[1]);
}
CMD:showpunish(playerid) {
new temp_string[200];
format(temp_string, sizeof(temp_string), "SELECT * FROM `"TABLE_PUNISHMENT"` WHERE `Name` = '%s' LIMIT 10", GetName(playerid));
mysql_function_query(dbHandle, temp_string, true, "ShowPunishment", "i", playerid);
return 1;
}
stock AddPunishment(playerid, targetid, type, reason[]) { //функция записи наказания в базу
switch(type) {
case 0: { //Warn
mysql_format(mysql_global, 300, "\
INSERT INTO `"TABLE_PUNISHMENT"` (`Name`,`Type`,`Reason`,`Admin`) VALUES \
('%s','%d','%s','%s')", GetName(targetid), type, reason, GetName(playerid));
mysql_function_query(dbHandle, mysql_global, true);
}
case 1: { //Jail
mysql_format(mysql_global, 300, "\
INSERT INTO `"TABLE_PUNISHMENT"` (`Name`,`Type`,`Reason`,`Admin`) VALUES \
('%s','%d','%s','%s')", GetName(targetid), type, reason, GetName(playerid));
mysql_function_query(dbHandle, mysql_global, true);
}
case 2: { //Kick
mysql_format(mysql_global, 300, "\
INSERT INTO `"TABLE_PUNISHMENT"` (`Name`,`Type`,`Reason`,`Admin`) VALUES \
('%s','%d','%s','%s')", GetName(targetid), type, reason, GetName(playerid));
mysql_function_query(dbHandle, mysql_global, true);
}
}
return 1;
}
stock ShowPunishment(playerid) {
new r, f;
cache_get_data(r, f);
new punishment_list[(MAX_PLAYER_NAME * 10) + 500],
temp_string[300];
strcat(punishment_list, "{ffffff}ID\t{ffffff}Тип наказания\t{ffffff}Выдал\t{ffffff}Причина\n");
if(!r)
return SendClientMessage(playerid, -1, "Наказания не найдены.");
else {
new type,
admin[MAX_PLAYER_NAME + 1],
reason[64];
for(new i; i < r; i++) {
type = cache_get_row_int(i, 2, dbHandle);
cache_get_row(i, 3, reason, dbHandle, 64);
cache_get_row(i, 4, admin, dbHandle, 24);
format(temp_string, sizeof(temp_string), "\
{ffffff}%d\t{ffffff}%s\t{ffffff}%s\t{ffffff}%s\n",
i+1, (type == 0) ? ("Warn") : (type == 1) ? ("Jail") : ("Kick"), admin, reason);
strcat(punishment_list, temp_string);
}
}
return ShowPlayerDialog(playerid, 0000, DIALOG_STYLE_MSGBOX, "{ff0000}Последние 10 наказаний", punishment_list, "Закрыть", "");
}
MySQL R40+:
Pawn:
#define TABLE_PUNISHMENT "punisment_logs" //таблица с наказаниями
#define COLOR_RED (0xFF0000FF) //цвет (пример)
#define GetName(%0) PlayerInfo[%0][pName]
new mysql_global[500];
new MySQL:dbHandle;
CMD:warn(playerid, params[]) { //пример команды с использованием функции
if(PlayerInfo[playerid][pAdmin] < 4)
return SendClientMessage(playerid, COLOR_RED, "Вам недоступна данная команда!");
if(sscanf(params, "us[64]", params[0], params[1]))
return SendClientMessage(playerid, -1, "Используйте: /warn [id игрока] [причина]");
PlayerInfo[params[0]][pWarn] ++;
if(PlayerInfo[params[0]][pWarn] > 2) Ban(params[0]);
else SendClientMessage(params[0], -1, "Администратор выдал вам Warn.");
return AddPunishment(playerid, params[0], 0, params[1]);
}
CMD:showpunish(playerid) {
new temp_string[200];
format(temp_string, sizeof(temp_string), "SELECT * FROM `"TABLE_PUNISHMENT"` WHERE `Name` = '%s' LIMIT 10", GetName(playerid));
mysql_tquery(dbHandle, temp_string, "ShowPunishment", "i", playerid);
return 1;
}
stock AddPunishment(playerid, targetid, type, reason[]) { //функция записи наказания в базу
switch(type) {
case 0: { //Warn
mysql_format(mysql_global, 300, "\
INSERT INTO `"TABLE_PUNISHMENT"` (`Name`,`Type`,`Reason`,`Admin`) VALUES \
('%s','%d','%s','%s')", GetName(targetid), type, reason, GetName(playerid));
mysql_tquery(dbHandle, mysql_global);
}
case 1: { //Jail
mysql_format(mysql_global, 300, "\
INSERT INTO `"TABLE_PUNISHMENT"` (`Name`,`Type`,`Reason`,`Admin`) VALUES \
('%s','%d','%s','%s')", GetName(targetid), type, reason, GetName(playerid));
mysql_tquery(dbHandle, mysql_global);
}
case 2: { //Kick
mysql_format(mysql_global, 300, "\
INSERT INTO `"TABLE_PUNISHMENT"` (`Name`,`Type`,`Reason`,`Admin`) VALUES \
('%s','%d','%s','%s')", GetName(targetid), type, reason, GetName(playerid));
mysql_tquery(dbHandle, mysql_global);
}
}
return 1;
}
stock ShowPunishment(playerid) {
new rows = cache_num_rows();
new punishment_list[(MAX_PLAYER_NAME * 10) + 500],
temp_string[300];
strcat(punishment_list, "{ffffff}ID\t{ffffff}Тип наказания\t{ffffff}Выдал\t{ffffff}Причина\n");
if(!rows)
return SendClientMessage(playerid, -1, "Наказания не найдены.");
else {
new type,
admin[MAX_PLAYER_NAME + 1],
reason[64];
for(new i; i < rows; i++) {
cache_get_value_int(i, "Type", type);
cache_get_value_name(i, "Admin", admin);
cache_get_value_name(i, "Reason", reason);
format(temp_string, sizeof(temp_string), "\
{ffffff}%d\t{ffffff}%s\t{ffffff}%s\t{ffffff}%s\n",
i+1, (type == 0) ? ("Warn") : (type == 1) ? ("Jail") : ("Kick"), admin, reason);
strcat(punishment_list, temp_string);
}
}
return ShowPlayerDialog(playerid, 0000, DIALOG_STYLE_MSGBOX, "{ff0000}Последние 10 наказаний", punishment_list, "Закрыть", "");
}
Таблица наказаний:
SQL:
CREATE TABLE IF NOT EXISTS `punishment_logs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(24) NOT NULL,
`Type` int(11) NOT NULL DEFAULT '0',
`Reason` varchar(64) NOT NULL,
`Admin` varchar(24) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;