Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Создатель WayDev
Команда форума
Администратор
Регистрация
13 Мар 2022
Сообщения
867
Всех приветствую.
Написал небольшую системку истории наказаний.
Система написана на скорую руку, могут быть недоработки или баги.

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 ;
 
Сверху