| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #include <YSI_Coding\y_hooks>
- #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<MAX_REPORTS>;
- 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;
- }
|