Advertisement
ZumeZero

Untitled

Aug 1st, 2016
395
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 4.69 KB | None | 0 0
  1.  
  2. #include <a_samp>
  3. #include <sscanf2>
  4. #include <zcmd>
  5.  
  6. #define MAX_REPORTES 50
  7.  
  8. #define MAX_REPORT_STRING   128
  9.  
  10. new playerReport[MAX_PLAYERS];
  11.  
  12. enum Reportes{
  13.     reporteExiste,
  14.     reportePara[MAX_PLAYER_NAME],
  15.     reporteDe,
  16.     reporteRazon[MAX_REPORT_STRING]
  17. }
  18. new ReportData[MAX_REPORTES][Reportes];
  19.  
  20. main()
  21. {
  22. }
  23.  
  24. #define ReportExist(%1) (ReportData[%1][reporteExiste])
  25.  
  26. #define CompareString(%1:%2) ((!isnull(%1) || !isnull(%2)) && !strcmp(%1, %2, true))
  27.  
  28. #define IsValidReport(%1)   ((0 <= %1 < MAX_REPORTES) && ReportExist(%1))
  29.  
  30. #define getReportValue(%1->%2)  (ReportData[%1][%2])
  31.  
  32. stock deleteReportsBy(playerid)
  33. {
  34.     new
  35.         count = 0
  36.     ;
  37.  
  38.     if(!IsPlayerConnected(playerid))
  39.         return count;
  40.  
  41.     new nombre_1[MAX_PLAYER_NAME];
  42.     format(nombre_1, sizeof(nombre_1), GetPlayerNameEx(playerid));
  43.  
  44.     new nombre_temp[MAX_PLAYER_NAME];
  45.  
  46.     for(new i; i < sizeof(ReportData); i++) if(ReportExist(i))
  47.     {
  48.         if(!(0 <= ReportData[i][reporteDe] < MAX_PLAYERS))
  49.             continue;
  50.  
  51.         format(nombre_temp, sizeof(nombre_temp), GetPlayerNameEx(ReportData[i][reporteDe]));
  52.  
  53.         if(!CompareString(nombre_1:nombre_temp))
  54.             continue;
  55.  
  56.         DeleteReport(i);
  57.         count ++;
  58.     }
  59.     return count;
  60. }
  61.  
  62. stock DeleteReport(id)
  63. {
  64.     if(IsValidReport(id))
  65.         return 0;
  66.  
  67.     ReportData[id][reporteExiste] = false;
  68.     ReportData[id][reportePara][0] = '\0';
  69.     ReportData[id][reporteDe] = INVALID_PLAYER_ID;
  70.     ReportData[id][reporteRazon][0] = '\0';
  71.     return 1;
  72. }
  73.  
  74. stock CreateReport(playerid, reportado, razon[])
  75. {
  76.     for(new i; i < sizeof(ReportData); i++)
  77.     {
  78.         if(ReportExist(i))
  79.             continue;
  80.  
  81.         ReportData[i][reporteExiste] = true;
  82.        
  83.         format(ReportData[i][reportePara], MAX_PLAYER_NAME, GetPlayerNameEx(reportado));
  84.        
  85.         ReportData[i][reporteDe] = playerid;
  86.  
  87.         format(ReportData[i][reporteRazon], MAX_REPORT_STRING, razon);
  88.         return i;
  89.     }
  90.     return -1;
  91. }
  92.  
  93. CMD:reportar(playerid, params[])
  94. {
  95.     new
  96.         reportado,
  97.         razon[MAX_REPORT_STRING];
  98.  
  99.     if(sscanf(params, "ds[MAX_REPORT_STRING]", reportado, razon))
  100.         return SendClientMessage(playerid, 0xFFFFFFFF, "Utilice /reportar [playerid] [razon]");
  101.  
  102.     new reportID = CreateReport(playerid, reportado, razon);
  103.  
  104.     if(reportID == -1)
  105.         return SendClientMessage(playerid, 0xFFFFFFFF, "Ahora mismo hay muchos reportes, por favor espere a que sean contestados.");
  106.  
  107.     SendClientMessage(playerid, 0xFFFFFFFF, "Tu reporte se ha enviado con exito!, espera a que sea respondido.");
  108.     return 1;
  109. }
  110.  
  111. CMD:reportes(playerid, params[])
  112. {
  113.     return ShowPlayerReports(playerid);
  114. }
  115.  
  116. stock cutMessage(str[])
  117. {
  118.     new _str[128];
  119.  
  120.     if(strlen(str) > 20)
  121.     {
  122.         format(_str, sizeof(_str), "%.20s ...", str);
  123.     }
  124.     else
  125.     {
  126.         format(_str, sizeof(_str), "%s", str);
  127.     }
  128.  
  129.     return _str;
  130. }
  131.  
  132. stock ShowPlayerReports(playerid)
  133. {
  134.     new
  135.         string[1024],
  136.         count = 0,
  137.         index[64]
  138.     ;
  139.  
  140.     format(string, sizeof(string), "Reporte #\tUsuario\tReportado\tRazon");
  141.     for(new i; i < sizeof(ReportData); i++)
  142.     {
  143.         if(!ReportExist(i))
  144.             continue;
  145.  
  146.         format(string, sizeof(string), "%s\n#%i\t%s\t%s\t%s",
  147.             string,
  148.             i,
  149.             GetPlayerNameEx(getReportValue(i->reporteDe)),
  150.             getReportValue(i->reportePara),
  151.             cutMessage(getReportValue(i->reporteRazon))
  152.         );
  153.  
  154.         format(index, sizeof(index), "_report_%i", count);
  155.         SetPVarInt(playerid, index, i);
  156.  
  157.         count++;
  158.     }
  159.     if(!count)
  160.         return SendClientMessage(playerid, 0xFFFFFFFF, "No hay reportes activos!");
  161.  
  162.     ShowPlayerDialog(playerid, 5, DIALOG_STYLE_TABLIST_HEADERS, "Reportes", string, "Detalles", "Cancelar");
  163.     return 1;
  164. }
  165.  
  166. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  167. {
  168.     if(dialogid == 5)
  169.     {
  170.         new index[64];
  171.         format(index, sizeof(index), "_report_%i", listitem);
  172.  
  173.         new reportid = GetPVarInt(playerid, index);
  174.         if(!IsValidReport(reportid))
  175.             return SendClientMessage(playerid, 0xFFFFFFFF, " El reporte ya habra sido contestado, o el jugador que reporta desconectado.");
  176.            
  177.         new String[128];
  178.  
  179.         format(String, sizeof(String), "Reporte ID: #%i\n\nReportado %s\nPor: %s\nRazon: %s",
  180.             reportid,
  181.             GetPlayerNameEx(getReportValue(reportid->reporteDe)),
  182.             getReportValue(reportid->reportePara),
  183.             getReportValue(reportid->reporteRazon)
  184.         );
  185.         ShowPlayerDialog(playerid, 10, DIALOG_STYLE_MSGBOX, "Reporte", String, "Aceptar", "Rechazar");
  186.     }
  187.     return 1;
  188. }
  189.  
  190. stock GetPlayerNameEx(playerid)
  191. {
  192.     new name[MAX_PLAYER_NAME];
  193.     GetPlayerName(playerid, name, sizeof(name));
  194.  
  195.     return name;
  196. }
  197.  
  198. public OnPlayerConnect(playerid)
  199. {
  200.     playerReport[playerid] = -1;
  201. }
  202.  
  203. public OnPlayerDisconnect(playerid, reason)
  204. {
  205.     new res = deleteReportsBy(playerid);
  206.     if(res > 0)
  207.     {
  208.         playerReport[playerid] = -1;
  209.     }
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement