TejyDu13

/ceinture

Jul 3rd, 2012
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 16.47 KB | None | 0 0
  1. //////////////////////////////////////////// Systeme de Ceinture //////////////////////////////////////////
  2.  
  3. // Crée par : Yoyo3071a
  4.  
  5. // Avec l'aide du FS de sasuke78200 : Like GTAIV
  6. // ProxDetector par : GM GodFather
  7. // Fonction GetPlayerSpeed par Sim
  8. // PlayerToPoint by GodFather
  9.  
  10. // Version du script : v2.0
  11.  
  12.                  //===================== ChangeLog ===============================//
  13.  
  14.                  // v1.0 ==> Version 1 finial
  15.  
  16.                  // v1.5 ==> Modification du systeme pour utiliser la touche saut
  17.                  // v1.5 ==> Le message pour mettre la ceinture ce met uniquement quand on est dans le vehicule
  18.                  // v1.5 ==> Affichage d'un gametext pour indiquer la touche saut au joueur dans sa configuration
  19.  
  20.                  // v2.0 ==> Possibilité de definir la touche a utiliser en #define en haut
  21.                  // v2.0 ==> Systeme avec gestion de casque pour les scooter et moto
  22.                  // v2.0 ==> Ceinture disponible uniquement dans certain vehicule !
  23.                  // v2.0 ==> Systeme de verification de la ceinture pour une team defini par le scripteur
  24.  
  25.                  //===================== ChangeLog ===============================//
  26.  
  27. //////////////////////////////////////////// Systeme de Ceinture //////////////////////////////////////////
  28. #include <a_samp>
  29. #include <a_players>
  30.  
  31. /////////////////////////////////////////// PARAMETRE DU FILTERSCRIPT ////////////////////////////
  32.  
  33. //__________ Definition de la touche a utilisée pour la ceinture/casque __________//
  34. #define TOUCHE_CEINTURE KEY_HANDBRAKE
  35.  
  36. //__________ Definition de la team qui peut utiliser la commande /verifierceinture __________//
  37. stock IsACop(playerid)
  38.     return (CallRemoteFunction("IsACop","i",playerid));
  39. //  Instruction : Remplacer IsACop par la fonction de votre gamemod qui vous permet de dire si le joueur un policier
  40. //                ou pas et inserer les information qui permette de l'identifier ( playerid etc ... )
  41.  
  42. /////////////////////////////////////////// PARAMETRE DU FILTERSCRIPT ////////////////////////////
  43.  
  44. new Float:LastHealth[MAX_PLAYERS],Float:LastSpeed[MAX_PLAYERS]; // by sasuke78200
  45. forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
  46. forward ProxDetector(Float:radi, playerid, str[],col1,col2,col3,col4,col5);
  47. forward VerifDommage(playerid);
  48. forward Float:GetPlayerSpeed(playerid); // By Sim
  49. new ceinture[MAX_PLAYERS];
  50. new gPlayerLogged[MAX_PLAYERS];
  51. forward stopeffet(playerid);
  52.  
  53. #define COULEUR_BLANC 0xFFFFFFAA
  54. #define COULEUR_VIOLET 0xC2A2DAAA
  55. #define COULEUR_GRIS 0xAFAFAFAA
  56. #define COULEUR_JAUNE 0xF2FB25FF
  57. #define COULEUR_ROUGE 0xBD0000FF
  58. #define COULEUR_BLEUCLAIR 0x33CCFFAA
  59.  
  60. /*--------------------------------------INCLUDE: UTILS------------------------*/
  61. IsNumeric(const string[])
  62. {
  63.     for (new i = 0, j = strlen(string); i < j; i++)
  64.     {
  65.         if (string[i] > '9' || string[i] < '0') return 0;
  66.     }
  67.     return 1;
  68. }
  69.  
  70. ReturnUser(text[], playerid = INVALID_PLAYER_ID)
  71. {
  72.     new pos = 0;
  73.     while (text[pos] < 0x21) // Strip out leading spaces
  74.     {
  75.         if (text[pos] == 0) return INVALID_PLAYER_ID; // No passed text
  76.         pos++;
  77.     }
  78.     new userid = INVALID_PLAYER_ID;
  79.     if (IsNumeric(text[pos])) // Check whole passed string
  80.     {
  81.         // If they have a numeric name you have a problem (although names are checked on id failure)
  82.         userid = strval(text[pos]);
  83.         if (userid >=0 && userid < MAX_PLAYERS)
  84.         {
  85.             if(!IsPlayerConnected(userid))
  86.             {
  87.                 /*if (playerid != INVALID_PLAYER_ID)
  88.                 {
  89.                     SendClientMessage(playerid, 0xFF0000AA, "User not connected");
  90.                 }*/
  91.                 userid = INVALID_PLAYER_ID;
  92.             }
  93.             else
  94.             {
  95.                 return userid; // A player was found
  96.             }
  97.         }
  98.         /*else
  99.         {
  100.             if (playerid != INVALID_PLAYER_ID)
  101.             {
  102.                 SendClientMessage(playerid, 0xFF0000AA, "Invalid user ID");
  103.             }
  104.             userid = INVALID_PLAYER_ID;
  105.         }
  106.         return userid;*/
  107.         // Removed for fallthrough code
  108.     }
  109.     // They entered [part of] a name or the id search Echoue (check names just incase)
  110.     new len = strlen(text[pos]);
  111.     new count = 0;
  112.     new name[MAX_PLAYER_NAME];
  113.     for (new i = 0; i < MAX_PLAYERS; i++)
  114.     {
  115.         if (IsPlayerConnected(i))
  116.         {
  117.             GetPlayerName(i, name, sizeof (name));
  118.             if (strcmp(name, text[pos], true, len) == 0) // Check segment of name
  119.             {
  120.                 if (len == strlen(name)) // Exact match
  121.                 {
  122.                     return i; // Return the exact player on an exact match
  123.                     // Otherwise if there are two players:
  124.                     // Me and MeYou any time you entered Me it would find both
  125.                     // And never be able to return just Me's id
  126.                 }
  127.                 else // Partial match
  128.                 {
  129.                     count++;
  130.                     userid = i;
  131.                 }
  132.             }
  133.         }
  134.     }
  135.     if (count != 1)
  136.     {
  137.         if (playerid != INVALID_PLAYER_ID)
  138.         {
  139.             if (count)
  140.             {
  141.                 SendClientMessage(playerid, 0xFF0000AA, "Multiple users found, please narrow earch");
  142.             }
  143.             else
  144.             {
  145.                 SendClientMessage(playerid, 0xFF0000AA, "ERROR ECRAN");
  146.             }
  147.         }
  148.         userid = INVALID_PLAYER_ID;
  149.     }
  150.     return userid; // INVALID_USER_ID for bad return
  151. }
  152.  
  153. /*----------------------------------END INCLUDE: UTILS----------------------------------------------------*/
  154.  
  155. strtok(const string[], &index)
  156. {
  157.     new length = strlen(string);
  158.     while ((index < length) && (string[index] <= ' '))
  159.     {
  160.         index++;
  161.     }
  162.  
  163.     new offset = index;
  164.     new result[20];
  165.     while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  166.     {
  167.         result[index - offset] = string[index];
  168.         index++;
  169.     }
  170.     result[index - offset] = EOS;
  171.     return result;
  172. }
  173. public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z) // by godfathers
  174. {
  175.     if(IsPlayerConnected(playerid))
  176.     {
  177.         new Float:oldposx, Float:oldposy, Float:oldposz;
  178.         new Float:tempposx, Float:tempposy, Float:tempposz;
  179.         GetPlayerPos(playerid, oldposx, oldposy, oldposz);
  180.         tempposx = (oldposx -x);
  181.         tempposy = (oldposy -y);
  182.         tempposz = (oldposz -z);
  183.         //printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
  184.         if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
  185.         {
  186.             return 1;
  187.         }
  188.     }
  189.     return 0;
  190. }
  191.  
  192. public OnFilterScriptInit()
  193. {
  194.     print("[[[[[ Systeme de Ceinture v2.0 ... Chargement en cours ]]]]]");
  195. }
  196.  
  197. public OnFilterScriptExit()
  198. {
  199.     print("[[[[[ Systeme de Ceinture v2.0 ... FilterScript terminée ]]]]]");
  200. }
  201.  
  202. public OnPlayerConnect(playerid)
  203. {
  204.     gPlayerLogged[playerid] = 0;
  205.     ceinture[playerid] = 0;
  206.     LastHealth[playerid] = 0; // by sasuke78200
  207.     LastSpeed[playerid] = 0; // by sasuke78200
  208.     SetTimerEx("VerifDommage", 150, 1, "i", playerid);
  209.     return 1;
  210. }
  211.  
  212. public OnPlayerDisconnect(playerid, reason)
  213. {
  214.     LastHealth[playerid] = 0; // by sasuke78200
  215.     LastSpeed[playerid] = 0; // by sasuke78200
  216.     return 1;
  217. }
  218.  
  219. public OnPlayerCommandText(playerid, cmdtext[])
  220. {
  221.     new cmd[256];
  222.     new tmp[256];
  223.     new string[256];
  224.     new giveplayerid, idx;
  225.     cmd = strtok(cmdtext, idx);
  226.  
  227.     if(strcmp("/verifierceinture", cmdtext, true, 9) == 0)
  228.     {
  229.         tmp = strtok(cmdtext, idx);
  230.         if(!strlen(tmp))
  231.         {
  232.             SendClientMessage(playerid, COULEUR_GRIS, "Commande: /verifierceinture [playerid]");
  233.             return 1;
  234.         }
  235.         giveplayerid = ReturnUser(tmp);
  236.         if(IsACop(playerid))
  237.         {
  238.         if(IsPlayerConnected(giveplayerid))
  239.             {
  240.                 if(giveplayerid != INVALID_PLAYER_ID)
  241.                 {
  242.                     new Float:x, Float:y, Float:z;
  243.                     new PlayerName[256];
  244.                     GetPlayerPos(giveplayerid, x, y, z);
  245.                     GetPlayerName(giveplayerid, PlayerName, 24);
  246.                     if(PlayerToPoint(6.0, playerid, x, y, z) && ceinture[giveplayerid] == 1)
  247.                     {
  248.                         format(string, sizeof(string), "* %s a sa ceinture de sécurité ou son casque.", PlayerName);
  249.                         SendClientMessage(playerid, COULEUR_BLEUCLAIR, string);
  250.                         return 1;
  251.                     }
  252.                     else if(PlayerToPoint(6.0, playerid, x, y, z) && ceinture[giveplayerid] == 0)
  253.                     {
  254.                         format(string, sizeof(string), "* %s n'a pas sa ceinture de sécurité ou son casque.", PlayerName);
  255.                         SendClientMessage(playerid, COULEUR_BLEUCLAIR, string);
  256.                         return 1;
  257.                     }
  258.                     else
  259.                     {
  260.                         SendClientMessage(playerid, COULEUR_GRIS, " Ce joueur est trop loing de vous !");
  261.                         return 1;
  262.                     }
  263.                 }
  264.                 else
  265.                 {
  266.                     SendClientMessage(playerid, COULEUR_GRIS, "  Le joueur que vous avez indiquer n'existe pas !");
  267.                     return 1;
  268.                 }
  269.             }
  270.         }
  271.         else
  272.         {
  273.             SendClientMessage(playerid, COULEUR_GRIS, " Vous n'êtes pas un membre des forces de l'odres !");
  274.             return 1;
  275.         }
  276.     }
  277.     return 0;
  278. }
  279.  
  280. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  281. {
  282.     return 1;
  283. }
  284.  
  285. public OnPlayerStateChange(playerid, newstate, oldstate)
  286. {
  287.     new vehiclenum = GetPlayerVehicleID(playerid);
  288.     if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
  289.     {
  290.         if (GetVehicleModel(vehiclenum) == 448 || GetVehicleModel(vehiclenum) == 461 || GetVehicleModel(vehiclenum) == 462 || GetVehicleModel(vehiclenum) == 463 || GetVehicleModel(vehiclenum) == 468 || GetVehicleModel(vehiclenum) == 471 || GetVehicleModel(vehiclenum) == 481 || GetVehicleModel(vehiclenum) == 509 || GetVehicleModel(vehiclenum) == 510 || GetVehicleModel(vehiclenum) == 521 || GetVehicleModel(vehiclenum) == 522 || GetVehicleModel(vehiclenum) == 581 || GetVehicleModel(vehiclenum) == 586 )
  291.         {
  292.             SendClientMessage(playerid, COULEUR_JAUNE, "[INFO] Votre moto/scooter est équipée d'un casque !");
  293.         }
  294.         else
  295.         {
  296.             SendClientMessage(playerid, COULEUR_JAUNE, "[INFO] Votre vehicule est équipée de ceinture de sécuritée !");
  297.         }
  298.     }
  299. }
  300.  
  301. public OnPlayerExitVehicle(playerid, vehicleid)
  302. {
  303.     LastHealth[playerid] = 0; // by sasuke78200
  304.     LastSpeed[playerid] = 0; // by sasuke78200
  305.     new string[256];
  306.     new nomjoueur[MAX_PLAYER_NAME];
  307.     new vehiclenum = GetPlayerVehicleID(playerid);
  308.  
  309.     if(IsPlayerInAnyVehicle(playerid) == 1 && ceinture[playerid] == 1)
  310.     {
  311.         if (GetVehicleModel(vehiclenum) == 448 || GetVehicleModel(vehiclenum) == 461 || GetVehicleModel(vehiclenum) == 462 || GetVehicleModel(vehiclenum) == 463 || GetVehicleModel(vehiclenum) == 468 || GetVehicleModel(vehiclenum) == 471 || GetVehicleModel(vehiclenum) == 481 || GetVehicleModel(vehiclenum) == 509 || GetVehicleModel(vehiclenum) == 510 || GetVehicleModel(vehiclenum) == 521 || GetVehicleModel(vehiclenum) == 522 || GetVehicleModel(vehiclenum) == 581 || GetVehicleModel(vehiclenum) == 586 )
  312.         {
  313.             GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  314.             SendClientMessage(playerid, COULEUR_BLANC, "Vous avez retiré votre casque automatiquement !");
  315.             format(string, sizeof(string), "* %s descends et retire son casque.", nomjoueur);
  316.             ceinture[playerid] = 0;
  317.         }
  318.         else
  319.         {
  320.             GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  321.             SendClientMessage(playerid, COULEUR_BLANC, "Vous avez retiré votre ceinture automatiquement !");
  322.             format(string, sizeof(string), "* %s descends et retire sa ceinture de sécuritée.", nomjoueur);
  323.             ceinture[playerid] = 0;
  324.         }
  325.  
  326.     }
  327.     else if(IsPlayerInAnyVehicle(playerid) == 1 && ceinture[playerid] == 0)
  328.     {
  329.         ceinture[playerid] = 0;
  330.         return 1;
  331.     }
  332.     ProxDetector(30.0, playerid, string, COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET);
  333.     printf("%s", string);
  334.     return 1;
  335. }
  336.  
  337. public Float:GetPlayerSpeed(playerid)
  338. {
  339.     new Float:X, Float:Y, Float:Z;
  340.     GetVehicleVelocity(GetPlayerVehicleID(playerid), X, Y, Z);
  341.     return (floatsqroot(X * X + Y * Y + Z * Z) * 180);
  342. }
  343.  
  344. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  345. {
  346.     new string[256];
  347.     new nomjoueur[MAX_PLAYER_NAME];
  348.     new vehiclenum = GetPlayerVehicleID(playerid);
  349.  
  350.     if((newkeys==TOUCHE_CEINTURE)&&(IsPlayerInAnyVehicle(playerid))&&(GetPlayerState(playerid)==PLAYER_STATE_DRIVER))
  351.     {
  352.         if(IsPlayerInAnyVehicle(playerid) == 1 && ceinture[playerid] == 0)
  353.         {
  354.             if(GetVehicleModel(vehiclenum) == 448 || GetVehicleModel(vehiclenum) == 461 || GetVehicleModel(vehiclenum) == 462 || GetVehicleModel(vehiclenum) == 463 || GetVehicleModel(vehiclenum) == 468 || GetVehicleModel(vehiclenum) == 471 || GetVehicleModel(vehiclenum) == 481 || GetVehicleModel(vehiclenum) == 509 || GetVehicleModel(vehiclenum) == 510 || GetVehicleModel(vehiclenum) == 521 || GetVehicleModel(vehiclenum) == 522 || GetVehicleModel(vehiclenum) == 581 || GetVehicleModel(vehiclenum) == 586 )
  355.             {
  356.                 GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  357.                 SendClientMessage(playerid, COULEUR_BLANC, "Vous avez mis votre casque !");
  358.                 format(string, sizeof(string), "* %s prends et mets son casque.", nomjoueur);
  359.                 ceinture[playerid] = 1;
  360.             }
  361.             else
  362.             {
  363.                 GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  364.                 SendClientMessage(playerid, COULEUR_BLANC, "Vous avez mis votre ceinture !");
  365.                 format(string, sizeof(string), "* %s prends et mets sa ceinture de sécuritée.", nomjoueur);
  366.                 ceinture[playerid] = 1;
  367.             }
  368.         }
  369.         else if(IsPlayerInAnyVehicle(playerid) == 1 && ceinture[playerid] == 1)
  370.         {
  371.             if(GetVehicleModel(vehiclenum) == 448 || GetVehicleModel(vehiclenum) == 461 || GetVehicleModel(vehiclenum) == 462 || GetVehicleModel(vehiclenum) == 463 || GetVehicleModel(vehiclenum) == 468 || GetVehicleModel(vehiclenum) == 471 || GetVehicleModel(vehiclenum) == 481 || GetVehicleModel(vehiclenum) == 509 || GetVehicleModel(vehiclenum) == 510 || GetVehicleModel(vehiclenum) == 521 || GetVehicleModel(vehiclenum) == 522 || GetVehicleModel(vehiclenum) == 581 || GetVehicleModel(vehiclenum) == 586 )
  372.             {
  373.                 GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  374.                 SendClientMessage(playerid, COULEUR_BLANC, "Vous avez retiré votre ceinture !");
  375.                 format(string, sizeof(string), "* %s prends et retire sa ceinture de sécuritée.", nomjoueur);
  376.                 ceinture[playerid] = 0;
  377.             }
  378.             else
  379.             {
  380.                 GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  381.                 SendClientMessage(playerid, COULEUR_BLANC, "Vous avez retiré votre casque !");
  382.                 format(string, sizeof(string), "* %s prends et retire son casque.", nomjoueur);
  383.                 ceinture[playerid] = 0;
  384.             }
  385.         }
  386.         ProxDetector(30.0, playerid, string, COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET);
  387.     }
  388. }
  389.  
  390. public VerifDommage(playerid)
  391. {
  392.     if(IsPlayerInAnyVehicle(playerid) == 1 && ceinture[playerid] == 0)
  393.     {
  394.         new Float:health = 0.0; // by sasuke78200
  395.         new vehicleid = GetPlayerVehicleID(playerid);
  396.         new Float:Speed = GetPlayerSpeed(playerid);
  397.         GetVehicleHealth(vehicleid,health);
  398.         if(LastSpeed[playerid] - Speed >= 50 && LastHealth[playerid] - health >= 250)
  399.         {
  400.             new Float:x,Float:y,Float:z;
  401.             GetPlayerPos(playerid,x,y,z);
  402.             SetPlayerPos(playerid,x,y,z + 5);
  403.             GetVehicleVelocity(vehicleid,x,y,z);
  404.             SetPlayerVelocity(playerid,x *2,y*2,z + 3);
  405.             SendClientMessage(playerid, COULEUR_ROUGE, "Et voilà, pas de ceinture on passe par le pare brise est sa fait mal !! Pensez a votre ceinture !!");
  406.             SetPlayerDrunkLevel(playerid, 50000);
  407.             SetTimerEx("stopeffet", 60000, 0, "i", playerid);
  408.         }
  409.         LastHealth[playerid] = health;
  410.         LastSpeed[playerid] = Speed;
  411.     }
  412.     return 1;
  413. }
  414.  
  415. public stopeffet(playerid)
  416. {
  417.     SetPlayerDrunkLevel(playerid, 0);
  418.     return 1;
  419. }
  420.  
  421. public ProxDetector(Float:radi, playerid, str[],col1,col2,col3,col4,col5) // ProxDetector du GodFather
  422. {
  423.     if(IsPlayerConnected(playerid))
  424.     {
  425.         new Float:posx, Float:posy, Float:posz;
  426.         new Float:oldposx, Float:oldposy, Float:oldposz;
  427.         new Float:tempposx, Float:tempposy, Float:tempposz;
  428.         GetPlayerPos(playerid, oldposx, oldposy, oldposz);
  429.         for(new i = 0; i < MAX_PLAYERS; i++)
  430.         {
  431.             if(IsPlayerConnected(i))
  432.             {
  433.  
  434.                 GetPlayerPos(i, posx, posy, posz);
  435.                 tempposx = (oldposx -posx);
  436.                 tempposy = (oldposy -posy);
  437.                 tempposz = (oldposz -posz);
  438.                 if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
  439.                 {
  440.                     SendClientMessage(i, col1, str);
  441.                 }
  442.                 else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
  443.                 {
  444.                     SendClientMessage(i, col2, str);
  445.                 }
  446.                 else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
  447.                 {
  448.                     SendClientMessage(i, col3, str);
  449.                 }
  450.                 else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
  451.                 {
  452.                     SendClientMessage(i, col4, str);
  453.                 }
  454.                 else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
  455.                 {
  456.                     SendClientMessage(i, col5, str);
  457.                 }
  458.             }
  459.         }
  460.     }
  461.     return 1;
  462. }
Advertisement
Add Comment
Please, Sign In to add comment