Advertisement
S4T3K

s_radars

Apr 12th, 2014
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 15.09 KB | None | 0 0
  1. #include <a_samp>
  2. #include <a_mysql>
  3. #include <streamer>
  4. #include <sscanf2>
  5. #include <Thread>
  6. #include <s_useful>
  7.  
  8. #define HOTE "localhost"
  9. #define USER "root"
  10. #define DB "samp"
  11. #define PASS ""
  12.  
  13. #define MAX_RADARS 3000
  14.  
  15. #define D_VITESSE 1998
  16. #define D_AMENDE 1999
  17. #define D_RADIUS 2000
  18.  
  19. enum rInfo
  20. {
  21.     Float:xPos,
  22.     Float:yPos,
  23.     Float:zPos,
  24.     Float:radi,
  25.     Float:xRot,
  26.     Float:yRot,
  27.     Float:zRot,
  28.     rVitesse,
  29.     rAmende,
  30.     rPoseur[MAX_PLAYER_NAME+1],
  31.     rObjet,
  32. };
  33.  
  34. new InfoRadar[MAX_RADARS][rInfo];
  35.  
  36. new MySQL, requete[1024], radaractu, sauv, posi;
  37.  
  38. public OnFilterScriptInit()
  39. {
  40.     MySQL = mysql_connect(HOTE, USER, DB, PASS);
  41.     if(MySQL) printf("~- Connexion à l'hôte SQL réussie.");
  42.     else mysql_reconnect(MySQL);
  43.     ChargerRadars();
  44.     sauv = CreateThread("SauvRadars");
  45.     posi = CreateThread("CheckPos");
  46.     printf(">> s_radars chargé !");
  47.     return 1;
  48. }
  49.  
  50. public OnFilterScriptExit()
  51. {
  52.     mysql_close(MySQL);
  53.     DechargerRadars();
  54.     DestroyThread(sauv);
  55.     DestroyThread(posi);
  56.     printf(">> s_radars déchargé !");
  57.     return 1;
  58. }
  59.  
  60. public OnPlayerCommandText(playerid, cmdtext[])
  61. {
  62.     new cmd[26], params[128];
  63.     sscanf(cmdtext, "'/'s[26] s[128]", cmd, params);
  64.     if(strcmp(cmd, "radar", true) == 0)
  65.     {
  66.         if(!strlen(params)) return SendSyntaxMessage(playerid, "/radar [Action]", "35B000", "Actions", "poser, detruire, modifier");
  67.         if(strcmp(params, "poser", true) == 0)
  68.         {
  69.             if(radaractu + 1 >= MAX_RADARS) return SendErrorMessage(playerid, "La limite maximale de radars posés à été atteinte !");
  70.             for(new r = 1; r < MAX_RADARS; r++)
  71.             {
  72.                 if(IsPlayerInRangeOfPoint(playerid, 3.0, InfoRadar[r][xPos], InfoRadar[r][yPos], InfoRadar[r][zPos])) return SendErrorMessage(playerid, "Il y a déjà un radar posé dans un rayon de 3 unités.");
  73.                 if(!IsValidDynamicObject(InfoRadar[r][rObjet]))
  74.                 {
  75.                     SetPVarInt(playerid, "CreeRadar", r);
  76.                     InfoRadar[r][xPos] = GetPlayerxPos(playerid);
  77.                     InfoRadar[r][yPos] = GetPlayeryPos(playerid);
  78.                     InfoRadar[r][zPos] = GetPlayerzPos(playerid);
  79.  
  80.  
  81.                     InfoRadar[r][rPoseur] = GetName(playerid);
  82.  
  83.                     InfoRadar[r][rObjet] = CreateDynamicObject(18880, InfoRadar[r][xPos], InfoRadar[r][yPos], InfoRadar[r][zPos], 0.0, 0.0, 0.0, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid));
  84.                     format(requete, sizeof(requete),"INSERT INTO `Radars` VALUES('%d', '%f', '%f', '%f', '0.0', '0.0', '0.0', '0.0' '%s', '0', '0')", r, GetPlayerxPos(playerid), GetPlayeryPos(playerid), GetPlayerzPos(playerid), GetName(playerid));
  85.                     mysql_tquery(MySQL, requete);
  86.                     radaractu++;
  87.                     if(cache_affected_rows() >  0)
  88.                     {
  89.                         SendRadarMessage(playerid, "Le radar a correctement été ajouté à la base de données. Vous pourrez le repositionner plus tard. Vous allez maintenant pouvoir renseigner la vitesse limite et le prix de l'amende.");
  90.                         ShowPlayerDialog(playerid, D_VITESSE, DIALOG_STYLE_INPUT, "{35B000}Radars", "Rentrez dans la boîte de dialogue ci-dessous la {35B000}vitesse limite{FFFFFF} \n qui ne doit pas être dépassée par le conducteur.", "Valider", "");
  91.                         return 1;
  92.                     }
  93.                     else return SendRadarMessage(playerid, "Le radar n'a pas pu être ajoutée à la base de données. Veuillez réessayer.");
  94.                 }
  95.             }
  96.  
  97.         }
  98.  
  99.         if(strcmp(params, "detruire", true) == 0)
  100.         {
  101.             for(new r = 1; r < MAX_RADARS; r++)
  102.             {
  103.                 if(IsPlayerInRangeOfPoint(playerid, 3.0, InfoRadar[r][xPos], InfoRadar[r][yPos], InfoRadar[r][zPos]) && strcmp(InfoRadar[r][rPoseur], GetName(playerid), false) == 0)
  104.                 {
  105.                     DestroyDynamicObject(InfoRadar[r][rObjet]);
  106.                     format(requete, sizeof(requete), "DELETE FROM `Radars` WHERE `id` = '%d'", r);
  107.                     mysql_tquery(MySQL,  requete);
  108.                     return SendRadarMessage(playerid, "Vous venez de détruire ce radar !");
  109.                 }
  110.                 else return SendErrorMessage(playerid, "Vous n'êtes pas à proximité d'un radar ou vous n'êtes pas autorisé à détruire ce radar.");
  111.             }
  112.         }
  113.  
  114.         if(strcmp(params, "modifier", true) == 0)
  115.         {
  116.             new subpar[36];
  117.             if(!sscanf(params, "s[36]", subpar)) return SendSyntaxMessage(playerid, "/radar modifier [Modif]", "35B000", "Modifs", "Radius, Vitesse, Amende");
  118.             for(new r = 1; r < MAX_RADARS; r++)
  119.             {
  120.                 if(IsPlayerInRangeOfPoint(playerid, 3.0, InfoRadar[r][xPos], InfoRadar[r][yPos], InfoRadar[r][zPos]) && !strcmp(GetName(playerid), InfoRadar[r][rPoseur], false))
  121.                 {
  122.                     if(!strcmp(subpar, "radius", true) || !strcmp(subpar, "radi", true))
  123.                     {
  124.                         SetPVarInt(playerid, "ModifRadar", r);
  125.                         ShowPlayerDialog(playerid, D_RADIUS, DIALOG_STYLE_INPUT, "{35B000}Radars", "Entrez la valeur voulue comme radius (en unités samp) pour ce radar.", "Valider", "");
  126.                         return 1;
  127.                     }
  128.                     else if(!strcmp(subpar, "vitesse", true))
  129.                     {
  130.                         SetPVarInt(playerid, "ModifRadar", r);
  131.                         ShowPlayerDialog(playerid, D_VITESSE, DIALOG_STYLE_INPUT, "{35B000}Radars", "Entrez la valeur voulue comme vitesse limite (en km/h) pour ce radar.", "Valider", "");
  132.                         return 1;
  133.                     }
  134.                     else if(!strcmp(subpar, "amende", true))
  135.                     {
  136.                         SetPVarInt(playerid, "ModifRadar", r);
  137.                         ShowPlayerDialog(playerid, D_AMENDE, DIALOG_STYLE_INPUT, "{35B000}Radars", "Entrez la valeur voulue comme amende à payer (en dollars) si un conducteur se fait flasher sur votre radar.", "Valider", "");
  138.                         return 1;
  139.                     }
  140.                     else return SendSyntaxMessage(playerid, "/radar modifier [Modif]", "35B000", "Modifs", "Radius, Vitesse, Amende");
  141.                 }
  142.             }
  143.         }
  144.     }
  145.     return 0;
  146. }
  147.  
  148. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  149. {
  150.     if(dialogid == D_VITESSE)
  151.     {
  152.         if(!IsNumeric(inputtext))
  153.         {
  154.             ShowPlayerDialog(playerid, D_VITESSE, DIALOG_STYLE_INPUT, "{35B000}Radars", "Vous devez entrer une valeur numérique en km/h dans la boîte de dialogue ci-dessous.", "Valider", "");
  155.             return 1;
  156.         }
  157.         if(!response)
  158.         {
  159.             ShowPlayerDialog(playerid, -1, DIALOG_STYLE_MSGBOX, "fermer", "fermer", "fermer", "");
  160.             return 1;
  161.         }
  162.         for(new r = 1; r < MAX_RADARS; r++)
  163.         {
  164.             if(r == GetPVarInt(playerid, "CreeRadar"))
  165.             {
  166.                 InfoRadar[r][rVitesse] = strval(inputtext);
  167.                 SendClientFormattedMessage(playerid, -1, "{35B000}[Radars]{FFFFFF} Vous avez mit la vitesse minimale du radar à %d km/h. Maintenant, vous devez renseigner l'amende payée par le conducteur si il dépasse cette vitesse limite.", strval(inputtext));
  168.                 ShowPlayerDialog(playerid, D_AMENDE, DIALOG_STYLE_INPUT, "{35B000}Radars", "Insérez maintenant l'amende que le conducteur va recevoir si il dépasse la vitesse limite insérée.", "Valider", "");
  169.                 format(requete, sizeof(requete), "UPDATE `Radars` SET `vitesse` = '%d' WHERE `id` = '%d'", strval(inputtext), r);
  170.                 mysql_tquery(MySQL, requete);
  171.                 return 1;
  172.             }
  173.             else if(r == GetPVarInt(playerid, "ModifRadar"))
  174.             {
  175.                 InfoRadar[r][rVitesse] = strval(inputtext);
  176.                 format(requete, sizeof(requete), "UPDATE `Radars` SET `vitesse` = '%d' WHERE `id` = '%d'", strval(inputtext), r);
  177.                 mysql_tquery(MySQL, requete);
  178.                 if(cache_affected_rows() > 0) return SendClientFormattedMessage(playerid, -1, "{35B000}[Radars]{FFFFFF} Vous avez mit la vitesse minimale du radar à %d km/h.", strval(inputtext));
  179.                 else return SendRadarMessage(playerid, "Il y a eu un problème lors de la modification de ce radar dans la base de données.");
  180.             }
  181.         }
  182.     }
  183.  
  184.     if(dialogid == D_AMENDE)
  185.     {
  186.         if(!IsNumeric(inputtext))
  187.         {
  188.             ShowPlayerDialog(playerid, D_VITESSE, DIALOG_STYLE_INPUT, "{35B000}Radars", "Vous devez entrer une valeur numérique en $ dans la boîte de dialogue ci-dessous.", "Valider", "");
  189.             return 1;
  190.         }
  191.         if(!response)
  192.         {
  193.             ShowPlayerDialog(playerid, D_VITESSE, DIALOG_STYLE_INPUT, "{35B000}Radars", "Vous devez entrer une valeur numérique en $ dans la boîte de dialogue ci-dessous.", "Valider", "");
  194.             return 1;
  195.         }
  196.         for(new r = 1; r < MAX_RADARS; r++)
  197.         {
  198.             if(r == GetPVarInt(playerid, "CreeRadar"))
  199.             {
  200.                 InfoRadar[r][rAmende] = strval(inputtext);
  201.                 SendClientFormattedMessage(playerid, -1, "{35B000}[Radars]{FFFFFF} Vous avez mit l'amende du radar à $%d. Maintenant, vous devez renseigner le radius d'action (au format flottant)", strval(inputtext));
  202.                 ShowPlayerDialog(playerid, D_RADIUS, DIALOG_STYLE_INPUT, "{35B000}Radars", "Insérez maintenant le radius d'activité du radar (en unité samp flottantes)", "Valider", "");
  203.                 format(requete, sizeof(requete), "UPDATE `Radars` SET `amende` = '%d' WHERE `id` = '%d'", strval(inputtext), r);
  204.                 mysql_tquery(MySQL, requete);
  205.                 return 1;
  206.             }
  207.             else if(r == GetPVarInt(playerid, "ModifRadar"))
  208.             {
  209.                 InfoRadar[r][rAmende] = strval(inputtext);
  210.                 format(requete, sizeof(requete), "UPDATE `Radars` SET `amende` = '%d' WHERE `id` = '%d'", strval(inputtext), r);
  211.                 mysql_tquery(MySQL, requete);
  212.                 if(cache_affected_rows() > 0) return SendClientFormattedMessage(playerid, -1, "{35B000}[Radars]{FFFFFF} Vous avez mit l'amende du radar à $%d.", strval(inputtext));
  213.                 else return SendRadarMessage(playerid, "Il y a eu un problème lors de la modification de ce radar dans la base de données.");
  214.             }
  215.         }
  216.     }
  217.  
  218.     if(dialogid == D_RADIUS)
  219.     {
  220.         if(!strfind(inputtext, "."))
  221.         {
  222.             ShowPlayerDialog(playerid, D_VITESSE, DIALOG_STYLE_INPUT, "{35B000}Radars", "Vous devez entrer une valeur flottante en unités samp dans la boîte de dialogue ci-dessous.", "Valider", "");
  223.             return 1;
  224.         }
  225.         if(!response)
  226.         {
  227.             ShowPlayerDialog(playerid, D_VITESSE, DIALOG_STYLE_INPUT, "{35B000}Radars", "Vous devez entrer une valeur flottante en unités samp dans la boîte de dialogue ci-dessous.", "Valider", "");
  228.             return 1;
  229.         }
  230.         for(new r = 1; r < MAX_RADARS; r++)
  231.         {
  232.             if(r == GetPVarInt(playerid, "CreeRadar"))
  233.             {
  234.                 InfoRadar[r][radi] = floatstr(inputtext);
  235.                 SendClientFormattedMessage(playerid, -1, "{35B000}[Radars]{FFFFFF} Vous avez mit le radius du radar à %f unités. Vous pouvez maintenant éditer le radar à proprement parler.");
  236.                 EditDynamicObject(playerid, InfoRadar[r][rObjet]);
  237.                 format(requete, sizeof(requete), "UPDATE `Radars` SET `radius` = '%f' WHERE `id` = '%d'", floatstr(inputtext), r);
  238.                 mysql_tquery(MySQL, requete);
  239.                 return 1;
  240.             }
  241.             else if(r == GetPVarInt(playerid, "ModifRadar"))
  242.             {
  243.                 InfoRadar[r][radi] = floatstr(inputtext);
  244.                 format(requete, sizeof(requete), "UPDATE `Radars` SET `radius` = '%d' WHERE `id` = '%d'", floatstr(inputtext), r);
  245.                 mysql_tquery(MySQL, requete);
  246.                 if(cache_affected_rows() > 0) return SendClientFormattedMessage(playerid, -1, "{35B000}[Radars]{FFFFFF} Vous avez mit le radius du radar à %f unités.", floatstr(inputtext));
  247.                 else return SendRadarMessage(playerid, "Il y a eu un problème lors de la modification de ce radar dans la base de données.");
  248.             }
  249.         }
  250.     }
  251.     return 0;
  252. }
  253.  
  254. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  255. {
  256.     for(new r = 0; r < MAX_RADARS; r++)
  257.     {
  258.         if(objectid == InfoRadar[r][rObjet])
  259.         {
  260.             if(response == 0 && GetPVarInt(playerid, "CreeRadar") == 0)
  261.             {
  262.                 EditDynamicObject(playerid, objectid);
  263.                 return 1;
  264.             }
  265.             else if(GetPVarInt(playerid, "CreeRadar") != 0)
  266.             {
  267.                 CancelEdit(playerid);
  268.                 return 1;
  269.             }
  270.             if(response == 1)
  271.             {
  272.                 InfoRadar[r][xPos] = x;
  273.                 InfoRadar[r][yPos] = y;
  274.                 InfoRadar[r][zPos] = z;
  275.  
  276.                 InfoRadar[r][xRot] = rx;
  277.                 InfoRadar[r][yRot] = ry;
  278.                 InfoRadar[r][zRot] = rz;
  279.                 DeletePVar(playerid, "CreeRadar");
  280.                 SauvRadars();
  281.                 return 1;
  282.             }
  283.         }
  284.     }
  285.     return 0;
  286. }
  287.  
  288.  
  289. stock SendSyntaxMessage(playerid, cmd[], couleur[], param[], parinfo[])
  290. {
  291.     SendClientFormattedMessage(playerid, -1, "{33CCFF}[Usage]{FFFFFF} %s", cmd);
  292.     if(strlen(param) < 3 && strlen(parinfo) < 3) return 1;
  293.     else return SendClientFormattedMessage(playerid, -1, "{%s}[%s]{FFFFFF} %s", couleur, param, parinfo);
  294. }
  295.  
  296. stock SendRadarMessage(playerid, message[])
  297. {
  298.     return SendClientFormattedMessage(playerid, -1, "{35B000}[Radars]{FFFFFF} %s", message);
  299. }
  300.  
  301. stock ChargerRadars()
  302. {
  303.     for(new r = 1; r < MAX_RADARS; r++)
  304.     {
  305.         format(requete, sizeof(requete), "SELECT * FROM `Radars` WHERE `id` = '%d'", r);
  306.         mysql_tquery(MySQL, requete);
  307.         if(cache_num_rows() > 0)
  308.         {
  309.             InfoRadar[r][xPos] = cache_get_field_content_float(0, "xPos", MySQL);
  310.             InfoRadar[r][yPos] = cache_get_field_content_float(0, "yPos", MySQL);
  311.             InfoRadar[r][zPos] = cache_get_field_content_float(0, "zPos", MySQL);
  312.             InfoRadar[r][xRot] = cache_get_field_content_float(0, "xRot", MySQL);
  313.             InfoRadar[r][yRot] = cache_get_field_content_float(0, "yRot", MySQL);
  314.             InfoRadar[r][zRot] = cache_get_field_content_float(0, "zRot", MySQL);
  315.  
  316.             InfoRadar[r][rObjet] = CreateDynamicObject(18880, InfoRadar[r][xPos], InfoRadar[r][yPos], InfoRadar[r][zPos], InfoRadar[r][xRot], InfoRadar[r][yRot], InfoRadar[r][zRot]);
  317.             InfoRadar[r][rAmende] = cache_get_field_content_int(0, "amende", MySQL);
  318.             InfoRadar[r][rVitesse] = cache_get_field_content_int(0, "vitesse", MySQL);
  319.             InfoRadar[r][radi] = cache_get_field_content_float(0, "radius", MySQL);
  320.         }
  321.         else break;
  322.         radaractu = r-1;
  323.         printf("Tous les radars ont été chargés !");
  324.     }
  325. }
  326.  
  327. stock SauvRadars()
  328. {
  329.     for(new r = 1; r < MAX_RADARS; r++)
  330.     {
  331.         format(requete, sizeof(requete), "UPDATE `Radars` SET `xPos` = '%f', `yPos` = '%f', `zPos` = '%f', `xRot` = '%f', `yRot` = '%f', `zRot` = '%f', `radius` = '%f', `amende` = '%d', `vitesse` = '%d' WHERE `id` = '%d'",
  332.             InfoRadar[r][xPos], InfoRadar[r][yPos], InfoRadar[r][zPos],
  333.             InfoRadar[r][xRot], InfoRadar[r][yRot], InfoRadar[r][zRot],
  334.             InfoRadar[r][radi], InfoRadar[r][rAmende], InfoRadar[r][rVitesse], r);
  335.         mysql_tquery(MySQL, requete);
  336.     }
  337.     SleepThread(5000);
  338. }
  339.  
  340. stock DechargerRadars()
  341. {
  342.     SauvRadars();
  343.     for(new r = 1; r < MAX_RADARS; r++)
  344.     {
  345.         if(IsValidDynamicObject(InfoRadar[r][rObjet])) DestroyDynamicObject(InfoRadar[r][rObjet]);
  346.         else break;
  347.         printf("Tous les radars ont été déchargés !");
  348.     }
  349. }
  350.  
  351. stock GetVehicleSpeed(vehicleid)
  352. {
  353.     new Float:speed[4];
  354.     GetVehicleVelocity(vehicleid, speed[0], speed[1], speed[2]);
  355.     speed[3] = floatsqroot(floatabs(floatpower(speed[0] + speed[1] + speed[2],2)));
  356.     return floatround(speed[3] * 100 * 1.61);
  357. }
  358.  
  359. stock CheckPos()
  360. {
  361.     for(new p = 0; p < MAX_PLAYERS; p++)
  362.     {
  363.         for(new r = 0; r < MAX_RADARS; r++)
  364.         {
  365.             if(IsPlayerConnected(p) && IsPlayerInAnyVehicle(p))
  366.             {
  367.                 if(IsPlayerInRangeOfPoint(p, InfoRadar[r][radi], InfoRadar[r][xPos], InfoRadar[r][yPos], InfoRadar[r][zPos]))
  368.                 {
  369.                     if(GetVehicleSpeed(GetPlayerVehicleID(p)) >= InfoRadar[r][rVitesse])
  370.                     {
  371.                         GivePlayerMoney(playerid, -InfoRadar[r][rAmende]);
  372.                         SendClientFormattedMessage(playerid, -1, "{35B000}[Radars]{FFFFFF} Vous écopez d'une amende de $%d pour excès de vitesse (flashé à %dkm/h alors que la vitesse limite est de %d km/h)", InfoRadar[r][rAmende], GetVehicleSpeed(GetPlayerVehicleID(playerid), true), InfoRadar[r][rVitesse]);
  373.                         GivePlayerMoney(GetPlayerID(InfoRadar[r][rPoseur], InfoRadar[r][rAmende]);
  374.                         SendClientFormattedMessage(GetPlayerID(InfoRadar[r][rPoseur]), -1, "{35B000}[Radars]{FFFFFF} %s a été flashé à %d km/h sur un radar que vous avez posé. Il écope d'une amende de $%d.", GetVehicleSpeed(GetPlayerVehicleID(playerid), true), InfoRadar[r][rAmende]);
  375.                     }
  376.                 }
  377.             }
  378.         }
  379.     }
  380.     SleepThread(100);
  381. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement