#include #define MAX_REPORTS 30 static PlayerReportID[MAX_PLAYERS]; static ReportDescription[MAX_REPORTS][144]; static ReporterID[MAX_REPORTS]; static ReporterName[MAX_REPORTS][MAX_PLAYER_NAME]; static ReportedName[MAX_REPORTS][MAX_PLAYER_NAME]; static ReportTime[MAX_REPORTS]; static Iterator:Report; hook OnGameModeInit() { for(new i; i < MAX_REPORTS; i++) { ReporterID[i] = INVALID_PLAYER_ID; } } hook OnPlayerConnect(playerid) { PlayerReportID[playerid] = INVALID_ITERATOR_SLOT; } CMD:report(playerid, params[]) { new targetid, description[144]; if(sscanf(params, "us[144]", targetid, description)) return SendSyntaxMessage(playerid, "/report (playerid) (reason)"); if(!IsPlayerConnected(targetid)) return SendErrorMessage(playerid, "You specified an invalid player."); new reportid = Iter_Free(Report); if(reportid == INVALID_ITERATOR_SLOT) { return SendErrorMessage(playerid, "Report limit reached. PM an administrator."); } Iter_Add(Report, reportid); format(ReportDescription[reportid], 144, description); format(ReporterName[reportid], MAX_PLAYER_NAME, ReturnPlayerRPName(playerid)); format(ReportedName[reportid], MAX_PLAYER_NAME, ReturnPlayerRPName(targetid)); if(strlen(description) > 54) { foreach(new i : Admin) { va_SendClientMessage(i, 0xffff00ff, "[REPORT ID %d] %s (%d) reported %s (%d), reason: %.54s ...", reportid, ReturnPlayerRPName(playerid), playerid, ReturnPlayerRPName(targetid), targetid, description); va_SendClientMessage(i, 0xffff00ff, "... %s", description[54]); } } else { foreach(new i : Admin) { va_SendClientMessage(i, 0xffff00ff, "[REPORT ID %d] %s (%d) reported %s (%d), reason: %s", reportid, ReturnPlayerRPName(playerid), playerid, ReturnPlayerRPName(targetid), targetid, description); } } ReporterID[reportid] = playerid; ReportTime[reportid] = gettime(); PlayerReportID[playerid] = reportid; SendClientMessage(playerid, 0xff6666ff, "Your report has been sent to the administration team."); return 1; } CMD:reports(playerid, params[]) { if(Iter_IsEmpty(Report)) return SendClientMessage(playerid, 0xc3c3c3ff, "There are no pending reports."); new string[2048]; foreach(new i : Report) { strcat(string, va_return("{b3b3b3}REPORT ID %d: %s reported %s %d seconds ago.\n", i, ReporterName[i], ReportedName[i], gettime() - ReportTime[i])); strcat(string, va_return("{ff9999}%s\n\n", ReportDescription[i])); } Dialog_Show(playerid, DIALOG_STYLE_MSGBOX, "Pending reports", string, "Close"); return 1; } CMD:ar(playerid, params[]) { new reportid; if(sscanf(params, "i", reportid)) return SendSyntaxMessage(playerid, "/ar (report ID)"); if(!Iter_Contains(Report, reportid)) return SendErrorMessage(playerid, "You specified an invalid report ID."); new reporterid = ReporterID[reportid]; if(IsPlayerConnected(reporterid) && PlayerReportID[reporterid] == reportid) { PlayerReportID[reporterid] = INVALID_ITERATOR_SLOT; va_SendClientMessage(reporterid, 0xff6666ff, "%s %s (%d) accepted your report.", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), playerid); } foreach(new i : Admin) { va_SendClientMessage(i, 0xffff00ff, "[REPORT] %s %s accepted report ID %d.", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), reportid); } Iter_Remove(Report, reportid); return 1; } CMD:dr(playerid, params[]) { new reportid, reason[128]; if(sscanf(params, "is[128]", reportid, reason)) return SendSyntaxMessage(playerid, "/dr (report ID) (reason)"); if(!Iter_Contains(Report, reportid)) return SendErrorMessage(playerid, "You specified an invalid report ID."); new reporterid = ReporterID[reportid]; new reasonLength = strlen(reason); if(IsPlayerConnected(reporterid) && PlayerReportID[reporterid] == reportid) { PlayerReportID[reporterid] = INVALID_ITERATOR_SLOT; if(reasonLength > 74) { va_SendClientMessage(playerid, 0xffff00ff, "%s %s (%d) denied your report, reason: %.74s ...", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), playerid, reason); va_SendClientMessage(playerid, 0xffff00ff, "... %s", reason[74]); } else va_SendClientMessage(reporterid, 0xff6666ff, "%s %s (%d) denied your report, reason: %s", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), playerid, reason); } if(reasonLength > 74) { foreach(new i : Admin) { va_SendClientMessage(i, 0xffff00ff, "[REPORT] %s %s denied report ID %d, reason: %.74s ...", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), reportid, reason); va_SendClientMessage(i, 0xffff00ff, "... %s", reason[74]); } } else { foreach(new i : Admin) { va_SendClientMessage(i, 0xff6666ff, "[REPORT] %s %s denied report ID %d, reason: %s", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), reportid, reason); } } Iter_Remove(Report, reportid); return 1; }