report.inc 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #include <YSI_Coding\y_hooks>
  2. #define MAX_REPORTS 30
  3. static PlayerReportID[MAX_PLAYERS];
  4. static ReportDescription[MAX_REPORTS][144];
  5. static ReporterID[MAX_REPORTS];
  6. static ReporterName[MAX_REPORTS][MAX_PLAYER_NAME];
  7. static ReportedName[MAX_REPORTS][MAX_PLAYER_NAME];
  8. static ReportTime[MAX_REPORTS];
  9. static Iterator:Report<MAX_REPORTS>;
  10. hook OnGameModeInit()
  11. {
  12. for(new i; i < MAX_REPORTS; i++)
  13. {
  14. ReporterID[i] = INVALID_PLAYER_ID;
  15. }
  16. }
  17. hook OnPlayerConnect(playerid)
  18. {
  19. PlayerReportID[playerid] = INVALID_ITERATOR_SLOT;
  20. }
  21. CMD:report(playerid, params[])
  22. {
  23. new targetid, description[144];
  24. if(sscanf(params, "us[144]", targetid, description)) return SendSyntaxMessage(playerid, "/report (playerid) (reason)");
  25. if(!IsPlayerConnected(targetid)) return SendErrorMessage(playerid, "You specified an invalid player.");
  26. new reportid = Iter_Free(Report);
  27. if(reportid == INVALID_ITERATOR_SLOT)
  28. {
  29. return SendErrorMessage(playerid, "Report limit reached. PM an administrator.");
  30. }
  31. Iter_Add(Report, reportid);
  32. format(ReportDescription[reportid], 144, description);
  33. format(ReporterName[reportid], MAX_PLAYER_NAME, ReturnPlayerRPName(playerid));
  34. format(ReportedName[reportid], MAX_PLAYER_NAME, ReturnPlayerRPName(targetid));
  35. if(strlen(description) > 54)
  36. {
  37. foreach(new i : Admin)
  38. {
  39. va_SendClientMessage(i, 0xffff00ff, "[REPORT ID %d] %s (%d) reported %s (%d), reason: %.54s ...", reportid, ReturnPlayerRPName(playerid), playerid, ReturnPlayerRPName(targetid), targetid, description);
  40. va_SendClientMessage(i, 0xffff00ff, "... %s", description[54]);
  41. }
  42. }
  43. else
  44. {
  45. foreach(new i : Admin)
  46. {
  47. va_SendClientMessage(i, 0xffff00ff, "[REPORT ID %d] %s (%d) reported %s (%d), reason: %s", reportid, ReturnPlayerRPName(playerid), playerid, ReturnPlayerRPName(targetid), targetid, description);
  48. }
  49. }
  50. ReporterID[reportid] = playerid;
  51. ReportTime[reportid] = gettime();
  52. PlayerReportID[playerid] = reportid;
  53. SendClientMessage(playerid, 0xff6666ff, "Your report has been sent to the administration team.");
  54. return 1;
  55. }
  56. CMD:reports(playerid, params[])
  57. {
  58. if(Iter_IsEmpty(Report)) return SendClientMessage(playerid, 0xc3c3c3ff, "There are no pending reports.");
  59. new string[2048];
  60. foreach(new i : Report)
  61. {
  62. strcat(string, va_return("{b3b3b3}REPORT ID %d: %s reported %s %d seconds ago.\n", i, ReporterName[i], ReportedName[i], gettime() - ReportTime[i]));
  63. strcat(string, va_return("{ff9999}%s\n\n", ReportDescription[i]));
  64. }
  65. Dialog_Show(playerid, DIALOG_STYLE_MSGBOX, "Pending reports", string, "Close");
  66. return 1;
  67. }
  68. CMD:ar(playerid, params[])
  69. {
  70. new reportid;
  71. if(sscanf(params, "i", reportid)) return SendSyntaxMessage(playerid, "/ar (report ID)");
  72. if(!Iter_Contains(Report, reportid)) return SendErrorMessage(playerid, "You specified an invalid report ID.");
  73. new reporterid = ReporterID[reportid];
  74. if(IsPlayerConnected(reporterid) && PlayerReportID[reporterid] == reportid)
  75. {
  76. PlayerReportID[reporterid] = INVALID_ITERATOR_SLOT;
  77. va_SendClientMessage(reporterid, 0xff6666ff, "%s %s (%d) accepted your report.", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), playerid);
  78. }
  79. foreach(new i : Admin)
  80. {
  81. va_SendClientMessage(i, 0xffff00ff, "[REPORT] %s %s accepted report ID %d.", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), reportid);
  82. }
  83. Iter_Remove(Report, reportid);
  84. return 1;
  85. }
  86. CMD:dr(playerid, params[])
  87. {
  88. new reportid, reason[128];
  89. if(sscanf(params, "is[128]", reportid, reason)) return SendSyntaxMessage(playerid, "/dr (report ID) (reason)");
  90. if(!Iter_Contains(Report, reportid)) return SendErrorMessage(playerid, "You specified an invalid report ID.");
  91. new reporterid = ReporterID[reportid];
  92. new reasonLength = strlen(reason);
  93. if(IsPlayerConnected(reporterid) && PlayerReportID[reporterid] == reportid)
  94. {
  95. PlayerReportID[reporterid] = INVALID_ITERATOR_SLOT;
  96. if(reasonLength > 74)
  97. {
  98. va_SendClientMessage(playerid, 0xffff00ff, "%s %s (%d) denied your report, reason: %.74s ...", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), playerid, reason);
  99. va_SendClientMessage(playerid, 0xffff00ff, "... %s", reason[74]);
  100. }
  101. else va_SendClientMessage(reporterid, 0xff6666ff, "%s %s (%d) denied your report, reason: %s", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), playerid, reason);
  102. }
  103. if(reasonLength > 74)
  104. {
  105. foreach(new i : Admin)
  106. {
  107. va_SendClientMessage(i, 0xffff00ff, "[REPORT] %s %s denied report ID %d, reason: %.74s ...", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), reportid, reason);
  108. va_SendClientMessage(i, 0xffff00ff, "... %s", reason[74]);
  109. }
  110. }
  111. else
  112. {
  113. foreach(new i : Admin)
  114. {
  115. va_SendClientMessage(i, 0xff6666ff, "[REPORT] %s %s denied report ID %d, reason: %s", Admin_GetRankName(playerid), ReturnPlayerRPName(playerid), reportid, reason);
  116. }
  117. }
  118. Iter_Remove(Report, reportid);
  119. return 1;
  120. }