Frend Williams
Умник
Доброй ночи, делал систему репорта, но вот не задача. По какой-то причине число репортов в очереди, если человек выходит не убавляется. Ниже код.
Это в паблике OnPlayerDisconnect:
Может быть у кого-то есть предположения?
Код:
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);
}
Код:
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;
}
