Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

Система истории наказаний.

𝚖𝚎𝚖𝚎𝚗𝚝𝚘 𝚖𝚘𝚛𝚒.
Мар
1,132
11,479
Команда форума
Администратор
Всех приветствую.
Написал небольшую системку истории наказаний.
Система написана на скорую руку, могут быть недоработки или баги.

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