Advertisement
Guest User

Systeme de ceinture 2.0

a guest
Mar 24th, 2010
650
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 16.76 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 et d'un régulateur de vitesse (LCTRL enfoncée) !");
  293.             GameTextForPlayer(playerid,"~r~ Utilisez la touche ~k~~TOUCHE_CEINTURE~",3000,4);
  294.         }
  295.         else
  296.         {
  297.             SendClientMessage(playerid, COULEUR_JAUNE, "[INFO] Votre vehicule est équipée de ceinture de sécuritée et d'un régulateur de vitesse (LCTRL enfoncée) !");
  298.             GameTextForPlayer(playerid,"~r~ Utilisez la touche ~k~~TOUCHE_CEINTURE~",3000,4);
  299.         }
  300.     }
  301. }
  302.  
  303. public OnPlayerExitVehicle(playerid, vehicleid)
  304. {
  305.     LastHealth[playerid] = 0; // by sasuke78200
  306.     LastSpeed[playerid] = 0; // by sasuke78200
  307.     new string[256];
  308.     new nomjoueur[MAX_PLAYER_NAME];
  309.     new vehiclenum = GetPlayerVehicleID(playerid);
  310.  
  311.     if(IsPlayerInAnyVehicle(playerid) == 1 && ceinture[playerid] == 1)
  312.     {
  313.         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 )
  314.         {
  315.             GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  316.             SendClientMessage(playerid, COULEUR_BLANC, "Vous avez retiré votre casque automatiquement !");
  317.             format(string, sizeof(string), "* %s descends et retire son casque.", nomjoueur);
  318.             ceinture[playerid] = 0;
  319.         }
  320.         else
  321.         {
  322.             GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  323.             SendClientMessage(playerid, COULEUR_BLANC, "Vous avez retiré votre ceinture automatiquement !");
  324.             format(string, sizeof(string), "* %s descends et retire sa ceinture de sécuritée.", nomjoueur);
  325.             ceinture[playerid] = 0;
  326.         }
  327.        
  328.     }
  329.     else if(IsPlayerInAnyVehicle(playerid) == 1 && ceinture[playerid] == 0)
  330.     {
  331.         ceinture[playerid] = 0;
  332.         return 1;
  333.     }
  334.     ProxDetector(30.0, playerid, string, COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET);
  335.     printf("%s", string);
  336.     return 1;
  337. }
  338.  
  339. public Float:GetPlayerSpeed(playerid)
  340. {
  341.     new Float:X, Float:Y, Float:Z;
  342.     GetVehicleVelocity(GetPlayerVehicleID(playerid), X, Y, Z);
  343.     return (floatsqroot(X * X + Y * Y + Z * Z) * 180);
  344. }
  345.  
  346. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  347. {
  348.     new string[256];
  349.     new nomjoueur[MAX_PLAYER_NAME];
  350.     new vehiclenum = GetPlayerVehicleID(playerid);
  351.    
  352.     if((newkeys==TOUCHE_CEINTURE)&&(IsPlayerInAnyVehicle(playerid))&&(GetPlayerState(playerid)==PLAYER_STATE_DRIVER))
  353.     {
  354.         if(IsPlayerInAnyVehicle(playerid) == 1 && ceinture[playerid] == 0)
  355.         {
  356.             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 )
  357.             {
  358.                 GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  359.                 SendClientMessage(playerid, COULEUR_BLANC, "Vous avez mis votre casque !");
  360.                 format(string, sizeof(string), "* %s prends et mets son casque.", nomjoueur);
  361.                 ceinture[playerid] = 1;
  362.             }
  363.             else
  364.             {
  365.                 GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  366.                 SendClientMessage(playerid, COULEUR_BLANC, "Vous avez mis votre ceinture !");
  367.                 format(string, sizeof(string), "* %s prends et mets sa ceinture de sécuritée.", nomjoueur);
  368.                 ceinture[playerid] = 1;
  369.             }
  370.         }
  371.         else if(IsPlayerInAnyVehicle(playerid) == 1 && ceinture[playerid] == 1)
  372.         {
  373.             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 )
  374.             {
  375.                 GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  376.                 SendClientMessage(playerid, COULEUR_BLANC, "Vous avez retiré votre ceinture !");
  377.                 format(string, sizeof(string), "* %s prends et retire sa ceinture de sécuritée.", nomjoueur);
  378.                 ceinture[playerid] = 0;
  379.             }
  380.             else
  381.             {
  382.                 GetPlayerName(playerid, nomjoueur, sizeof(nomjoueur));
  383.                 SendClientMessage(playerid, COULEUR_BLANC, "Vous avez retiré votre casque !");
  384.                 format(string, sizeof(string), "* %s prends et retire son casque.", nomjoueur);
  385.                 ceinture[playerid] = 0;
  386.             }
  387.         }
  388.         ProxDetector(30.0, playerid, string, COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET,COULEUR_VIOLET);
  389.     }
  390. }
  391.  
  392. public VerifDommage(playerid)
  393. {
  394.     if(IsPlayerInAnyVehicle(playerid) == 1 && ceinture[playerid] == 0)
  395.     {
  396.         new Float:health = 0.0; // by sasuke78200
  397.         new vehicleid = GetPlayerVehicleID(playerid);
  398.         new Float:Speed = GetPlayerSpeed(playerid);
  399.         GetVehicleHealth(vehicleid,health);
  400.         if(LastSpeed[playerid] - Speed >= 50 && LastHealth[playerid] - health >= 250)
  401.         {
  402.             new Float:x,Float:y,Float:z;
  403.             GetPlayerPos(playerid,x,y,z);
  404.             SetPlayerPos(playerid,x,y,z + 5);
  405.             GetVehicleVelocity(vehicleid,x,y,z);
  406.             SetPlayerVelocity(playerid,x *2,y*2,z + 3);
  407.             SendClientMessage(playerid, COULEUR_ROUGE, "Et voilà, pas de ceinture on passe par le pare brise est sa fait mal !! Pensez a votre ceinture !!");
  408.             SetPlayerDrunkLevel(playerid, 50000);
  409.             SetTimerEx("stopeffet", 60000, 0, "i", playerid);
  410.         }
  411.         LastHealth[playerid] = health;
  412.         LastSpeed[playerid] = Speed;
  413.     }
  414.     return 1;
  415. }
  416.  
  417. public stopeffet(playerid)
  418. {
  419.     SetPlayerDrunkLevel(playerid, 0);
  420.     return 1;
  421. }
  422.  
  423. public ProxDetector(Float:radi, playerid, str[],col1,col2,col3,col4,col5) // ProxDetector du GodFather
  424. {
  425.     if(IsPlayerConnected(playerid))
  426.     {
  427.         new Float:posx, Float:posy, Float:posz;
  428.         new Float:oldposx, Float:oldposy, Float:oldposz;
  429.         new Float:tempposx, Float:tempposy, Float:tempposz;
  430.         GetPlayerPos(playerid, oldposx, oldposy, oldposz);
  431.         for(new i = 0; i < MAX_PLAYERS; i++)
  432.         {
  433.             if(IsPlayerConnected(i))
  434.             {
  435.  
  436.                 GetPlayerPos(i, posx, posy, posz);
  437.                 tempposx = (oldposx -posx);
  438.                 tempposy = (oldposy -posy);
  439.                 tempposz = (oldposz -posz);
  440.                 if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
  441.                 {
  442.                     SendClientMessage(i, col1, str);
  443.                 }
  444.                 else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
  445.                 {
  446.                     SendClientMessage(i, col2, str);
  447.                 }
  448.                 else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
  449.                 {
  450.                     SendClientMessage(i, col3, str);
  451.                 }
  452.                 else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
  453.                 {
  454.                     SendClientMessage(i, col4, str);
  455.                 }
  456.                 else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
  457.                 {
  458.                     SendClientMessage(i, col5, str);
  459.                 }
  460.             }
  461.         }
  462.     }
  463.     return 1;
  464. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement