• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Не изменяется число очереди в репорт.

Frend Williams

Умник
Доброй ночи, делал систему репорта, но вот не задача. По какой-то причине число репортов в очереди, если человек выходит не убавляется. Ниже код.

Код:
const max_report = 50;

new report_text[max_report][141];
new report_text_admin[max_report][131];
new report_player[max_report] = {-1,...};
new report_id[MAX_PLAYERS] = {-1,...};
new report_slot[max_report] = {-1,...};
new bool: report_cooldown[MAX_PLAYERS];
Код:
cmd:arep(playerid, params[])
{
    if(!p_info[playerid][admin]) return 1;

    new dialog_string[17 + (MAX_PLAYER_NAME - 4) * 2 + 9 + 16],
    string[19 + MAX_PLAYER_NAME - 3];
    global_string[0] = EOS;

    for(new i = 0; i < max_report; i++)
    {
        if(report_player[i] == -1) continue;
        if(isnull(global_string)) global_string = "{"#cRD"}№\t{"#cRD"}Отправитель\t{"#cRD"}Статус\n";
        if(report_slot[i] != -1) string = "{"#cRD"}Проверяет: ", strcat(string, p_info[report_slot[i]][name]);

        format(dialog_string, sizeof dialog_string, "%d.\t%s\t%s\n", i, p_info[report_player[i]][name], (report_slot[i] == -1) ?
        "{"#cRD"}Ожидает обработки" : string);
        strcat(global_string, dialog_string);
        string[0] = EOS;
    }

    if(!isnull(global_string)) show_dialog(playerid, d_reports, DIALOG_STYLE_TABLIST_HEADERS, !"Список репортов", global_string, !"Обработать", !"Закрыть");
    else SendClientMessage(playerid, col_white, !"На данный момент репорт пуст.");

    return 1;
}

cmd:report(playerid)
{
    if(p_info[playerid][mute]) return SendClientMessage(playerid, col_red, !"Доступ в чат заблокирован. Время до разблокировки: /time");

    show_dialog(playerid, d_mm_request, DIALOG_STYLE_INPUT, !"{FFAF00}Связь с администрацией", !"\
    {"#cRD"}Введите Вашу жалобу для администраторов (ID - Нарушение).\n\
    {"#cRD"}Внимание: за сообщение не игрового характера выдается блокировка чата.", !"Отправить", !"Отмена");
    return 1;
}
Код:
case d_reports:
        {
            if(!response) return true;

            new i = 0;
            for(new count = 0; i < max_report; i++)
                if(report_player[i] != -1)
                    if(count++ == listitem) break;

            if(report_slot[i] != -1)
            {
                SendClientMessage(playerid, col_white, !"{F81414}Данную жалобу уже обрабатывают");
                return pc_cmd_arep(playerid, "");
            }

            new dialog_string[400];
            format(dialog_string, sizeof(dialog_string), "\
            Жалоба от %s[%d]\n\n\
            %s\n", p_info[report_player[i]][name], report_player[i], report_text[i]);
            show_dialog(playerid, d_mm_request_2, DIALOG_STYLE_INPUT, !"{F81414}Жалоба", dialog_string, !"Принять", !"Отмена");

            report_id[playerid] = i;
            report_slot[i] = playerid;

            new text_string[125];
            format(text_string, sizeof(text_string), "{"#cRD"}Администратор %s начал обрабатывать Вашу жалобу", p_info[playerid][name]);
            SendClientMessage(report_player[i], col_white, text_string);
        }
        case d_mm_request:
        {
            if(!response) return 1;
            if(report_cooldown[playerid]) return SendClientMessage(playerid, col_white, !"{"#cRD"}Вы уже подавали жалобу, ожидайте ответа");
            if(report_player[max_report - 1] != -1) return SendClientMessage(playerid, col_white, !"{"#cRD"}Попробуйте чуть позже");


            new reps = 0, text_string[120];
            while(report_player[reps] != -1) reps++;

            if(!strlen(inputtext)) return pc_cmd_report(playerid);

            report_player[reps] = playerid;
            strmid(report_text[reps], (inputtext), 0, strlen(inputtext), 150);

            foreach(new i : admin_players) GameTextForPlayer(i, "+ REPORT", 3000, 1);

            format(text_string, sizeof(text_string), "{"#cRD"}Ваша жалоба: %s", inputtext);
            SendClientMessage(playerid, col_white, text_string);

            format(text_string, sizeof(text_string), "{"#cRD"}В скором времени Вам ответит администратор. Вы в очереди: %d", reps + 1);
            SendClientMessage(playerid, col_white, text_string);
            

            report_cooldown[playerid] = true;
        }
        case d_mm_request_2:
        {
            new i = report_id[playerid];
            if(!response)
            {
                report_slot[i] = report_id[playerid] = -1;
                return 1;
            }
            if(!strlen(inputtext) || strlen(inputtext) > 130)
            {
                new dialog_string[400];
                format(dialog_string, sizeof(dialog_string), "\
                Жалоба от %s[%d]\n\n\
                %s\n", p_info[report_player[i]][name], report_player[i], report_text[i]);
                return show_dialog(playerid, d_mm_request_2, DIALOG_STYLE_INPUT, !"Жалоба", dialog_string, !"Принять", !"Отмена");
            }
            if(!IsPlayerConnected(report_player[i]))
            {
                report_delete(i);
                report_id[playerid] = -1;
                return SendClientMessage(playerid, col_white, !"{"#cRD"}Игрок вышел из игры.");
            }
            new text_string[144];
            format(text_string, sizeof(text_string), "Администратор %s: %s", p_info[playerid][name], inputtext);
            SendClientMessage(report_player[i], 0xFF9945FF, text_string);
            PlayerPlaySound(report_player[i], 1085, 0.0, 0.0, 0.0);

            format(text_string, sizeof(text_string), "Администратор %s[%d] для %s[%d]: %s", p_info[playerid][name], playerid, p_info[report_player[i]][name], report_player[i], inputtext);
            foreach(new j: admin_players) SendClientMessage(j, 0xFF9945FF, text_string);

            new query_string[115];
            format(query_string, sizeof(query_string), "UPDATE `users_admins` SET `u_a_reports`=`u_a_reports`+'1' WHERE `u_a_name`='%s' LIMIT 1", p_info[playerid][name]);
            mysql_query(sql_connection, query_string);

            report_cooldown[report_player[i]] = false;
            strmid(report_text_admin[i], (inputtext), 0, strlen(inputtext), 130);
            report_id[playerid] = -1;
            return report_delete(i);
        }
Это в паблике OnPlayerDisconnect:
Код:
for(new i; i < max_report; i++)
    {
        if(report_player[i] == -1) continue;
        if(report_player[i] == playerid) report_delete(i);

    }
Код:
stock report_delete(i)
{
    report_player[i] = -1;
    report_text[i][0] = EOS;
    report_text_admin[i][0] = EOS;
    report_slot[i] = -1;
    return 1;
}
Может быть у кого-то есть предположения?
 
Сверху Снизу