Advertisement
S4T3K

s_useful v2

May 4th, 2014
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 18.09 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. native IsValidVehicle(vehicleid);
  4.  
  5. #pragma tabsize 0
  6.  
  7. #if defined _S_USEFUL_INCLUDED
  8.     #error Vous avez déjà inclut la bibliothèque s_useful.
  9. #endif
  10.  
  11. #define _S_USEFUL_INCLUDED
  12.  
  13. #if defined MAX_PLAYER_NAME
  14.     #undef MAX_PLAYER_NAME
  15.     #define MAX_PLAYER_NAME 25
  16. #endif
  17.  
  18. /*****************************
  19.     Fonctions
  20. *****************************/
  21.  
  22.  
  23. stock GetName(playerid)
  24. {
  25.     new tszName[MAX_PLAYER_NAME+1];
  26.     GetPlayerName(playerid, tszName, sizeof(tszName));
  27.     return tszName;
  28. }
  29.  
  30. // Exemple d'utilisation : new nom[MAX_PLAYER_NAME+1] = GetName(playerid);
  31.  
  32.  
  33. stock GameTextForPlayer1(playerid, const message[], temps)
  34. {
  35.     new heure[4];
  36.     gettime(heure[0], heure[1], heure[2]);
  37.     heure[3] = heure[2]*1000+9000;
  38.     do
  39.     {
  40.         GameTextForPlayer(playerid, message, temps, 0);
  41.     }
  42.     while(heure[3] < temps);
  43.     return 1;
  44. }
  45.  
  46. stock GetPlayerID(const name[])
  47. {
  48.     for(new p = 0; p < MAX_PLAYERS; p++)
  49.     {
  50.         if(strcmp(name, GetName(p), false) == 0)
  51.         {
  52.             if(!IsPlayerConnected(p)) return INVALID_PLAYER_ID;
  53.             else return p;
  54.         }
  55.     }
  56.     return INVALID_PLAYER_ID;
  57. }
  58.  
  59. stock GetNearestCar(playerid)
  60. {
  61.     new resultID;
  62.     new Float:rdist, Float:cdist;
  63.     rdist = 10.0;
  64.     resultID = -1;
  65.     for(new v;v<=MAX_VEHICLES;v++)
  66.     {
  67.         cdist = GetPlayerDistanceFromVehicle(playerid, v);
  68.         if(cdist < rdist)
  69.         {
  70.             rdist = cdist;
  71.             resultID = v;
  72.         }
  73.     }
  74.     return resultID;
  75. }
  76.  
  77. stock Float:GetPlayerDistanceFromVehicle(playerid, vehicleid)
  78. {
  79.         new Float:pos[6];
  80.     GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  81.     GetVehiclePos(vehicleid, pos[3], pos[4], pos[5]);
  82.     return GetDistanceBetweenPoints(pos[0], pos[1], pos[2], pos[3], pos[4], pos[5]);
  83. }  
  84.  
  85. stock GetDistanceBetweenTwoPlayers(player1, player2)
  86. {
  87.     new Float:pos[6];
  88.     GetPlayerPos(player1, pos[0], pos[1], pos[2]);
  89.     GetPlayerPos(player2, pos[3], pos[4], pos[5]);
  90.     return GetDistanceBetweenPoints(pos[0], pos[1], pos[2], pos[3], pos[4], pos[5])
  91. }
  92.  
  93. stock Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
  94. {
  95.     return VectorSize(x1-x2, y1-y2, z1-z2);
  96. }
  97.  
  98. stock PlayAudioForPlayersInRange(sound_url[], Float:range, Float:x, Float:y, Float:z)
  99. {
  100.     for(new p = 0; p < MAX_PLAYERS; p++)
  101.     {
  102.         if(!strfind(sound_url, "http://")) return SendClientMessage(p, -1, "Piste audio inaccessible (http:// ou extension invalide)");
  103.         if(!strfind(sound_url, ".mp3") || !strfind(sound_url, ".ogg") || !strfind(sound_url, ".pls") || strfind(sound_url, ".m3u")) return SendClientMessage(p, -1, "Piste audio inaccessible (http:// ou extension invalide)");
  104.         if(IsPlayerConnected(p))
  105.         {
  106.             PlayAudioStreamForPlayer(p, sound_url, x, y, z, range, 1);
  107.             SendClientFormattedMessage(p, -1, "{9ACD32}[Audio]{FFFFFF} Vous écoutez maintenant %s !", sound_url);
  108.         }
  109.     }
  110.     return 1;
  111. }
  112.  
  113. stock StopAudioForPlayersInRange(Float:range, Float:x, Float:y, Float:z)
  114. {
  115.     for(new p = 0; p < MAX_PLAYERS; p++)
  116.     {
  117.         if(!IsPlayerConnected(p)) continue;
  118.         else
  119.         {
  120.             if(IsPlayerInRangeOfPoint(p, range, x, y, z))
  121.             {
  122.                 StopAudioStreamForPlayer(p);
  123.             }
  124.         }
  125.     }
  126.     return 1;
  127. }
  128.  
  129. stock SendErrorMessage(playerid, message[])
  130. {
  131.     return SendClientFormattedMessage(playerid, -1, "{FF0000}[Erreur]{FFFFFF} %s", message);
  132. }
  133.  
  134. stock SplitDateTime(datetime[], &annee, &mois, &jour, &heure, &minute, &seconde)
  135. {
  136.     new tmp[20];
  137.     strmid(tmp, datetime, 0, 4);
  138.     strdel(datetime, 0, 5);
  139.     annee = strval(tmp);
  140.     //printf("[DEBUG] %d", annee);
  141.  
  142.     strmid(tmp, datetime, 0, 2);
  143.     strdel(datetime, 0, 3);
  144.     mois = strval(tmp);
  145.     //printf("[DEBUG] %d", mois);
  146.  
  147.     strmid(tmp, datetime, 0, 2);
  148.     strdel(datetime, 0, 3);
  149.     jour = strval(tmp);
  150.     //printf("[DEBUG] %d", jour);
  151.  
  152.     strmid(tmp, datetime, 0, 2);
  153.     strdel(datetime, 0, 3);
  154.     heure = strval(tmp);
  155.     //printf("[DEBUG] %d", heure);
  156.  
  157.     strmid(tmp, datetime, 0, 2);
  158.     strdel(datetime, 0, 3);
  159.     minute = strval(tmp);
  160.     //printf("[DEBUG] %d", minute);
  161.  
  162.     strmid(tmp, datetime, 0, 2);
  163.     strdel(datetime, 0, 3);
  164.     seconde = strval(tmp);
  165.     //printf("[DEBUG] %d", seconde);
  166. }
  167.  
  168. stock SplitDate(date[], &annee, &mois, &jour)
  169. {
  170.     new tmp[20];
  171.     strmid(tmp, date, 0, 4);
  172.     strdel(date, 0, 5);
  173.     annee = strval(tmp);
  174.     strmid(tmp, date, 0, 2);
  175.     strdel(date, 0, 3);
  176.     mois = strval(tmp);
  177.     strmid(tmp, date, 0, 2);
  178.     strdel(date, 0, 3);
  179.     jour = strval(tmp);
  180. }
  181.  
  182. stock SplitTime(time[], &heure, &minute, &seconde)
  183. {
  184.     new tmp[20];
  185.     strmid(tmp, time, 0, 2);
  186.     strdel(time, 0, 3);
  187.     heure = strval(tmp);
  188.     strmid(tmp, time, 0, 2);
  189.     strdel(time, 0, 3);
  190.     minute = strval(tmp);
  191.     strmid(tmp, time, 0, 2);
  192.     strdel(time, 0, 3);
  193.     seconde = strval(tmp);
  194. }
  195.  
  196. stock ExplodeAll(type, Float:radi)
  197. {
  198.     new Float:pos[3];
  199.     for(new p = 0; p < MAX_PLAYERS; p++)
  200.     {
  201.         if(!IsPlayerConnected(p)) continue;
  202.         else
  203.         {
  204.             GetPlayerPos(p, pos[0], pos[1], pos[2]);
  205.             CreateExplosion(pos[0], pos[1], pos[2], type, radi);
  206.         }
  207.     }
  208.     return SendClientFormattedMessageToAll(-1, "{FF0000}[Explosion]{FFFFFF} Tous les joueurs ont été explosés avec une explosion de radius %f (type %d)", radi, type);
  209. }
  210.  
  211. stock RemovePlayerHealth(playerid, Float:ret)
  212. {
  213.     new Float:health;
  214.     GetPlayerHealth(playerid, health);
  215.     if(health < ret) return 0;
  216.     else SetPlayerHealth(playerid, floatsub(health, ret));
  217.     return 1;
  218. }
  219.  
  220. stock RemovePlayerArmour(playerid, Float:ret)
  221. {
  222.     new Float:arm;
  223.     GetPlayerArmour(playerid, arm);
  224.     if(arm < ret) return 0;
  225.     else SetPlayerArmour(playerid, floatsub(arm, ret));
  226.     return 1;
  227. }
  228.  
  229. stock AddPlayerHealth(playerid, Float:add)
  230. {
  231.     new Float:health;
  232.     GetPlayerHealth(playerid, health);
  233.     SetPlayerHealth(playerid, floatadd(health, add));
  234.     return 1;
  235. }
  236.  
  237. stock AddPlayerArmour(playerid, Float:add)
  238. {
  239.     new Float:arm;
  240.     GetPlayerArmour(playerid, arm);
  241.     SetPlayerArmour(playerid, floatadd(arm, add));
  242.     return 1;
  243. }
  244.  
  245. stock Float:GetPlayerHealth1(playerid)
  246. {
  247.     new Float:health;
  248.     GetPlayerHealth(playerid, health);
  249.     return health;
  250. }
  251.  
  252. stock Float:GetPlayerArmour1(playerid)
  253. {
  254.     new Float:arm;
  255.     GetPlayerArmour(playerid, arm);
  256.     return arm;
  257. }
  258.  
  259.  
  260. stock Float:GetPlayerxPos(playerid)
  261. {
  262.     new Float:x, Float:upos[2];
  263.     GetPlayerPos(playerid, x, upos[0], upos[1]);
  264.     return x;
  265. }
  266.  
  267. stock Float:GetPlayeryPos(playerid)
  268. {
  269.     new Float:y, Float:upos[2];
  270.     GetPlayerPos(playerid, upos[0], y, upos[1]);
  271.     return y;
  272. }
  273.  
  274. stock Float:GetPlayerzPos(playerid)
  275. {
  276.     new Float:z, Float:upos[2];
  277.     GetPlayerPos(playerid, upos[0], upos[1], z);
  278.     return z;
  279. }
  280.  
  281. stock ProxDetector(Float:radi, playerid, const message[], couleur)
  282. {
  283.     new Float:pos[3]
  284.     GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  285.     for(new p = 0; p < MAX_PLAYERS; p++)
  286.     {
  287.         if(IsPlayerConnected(p))
  288.         {
  289.             if(IsPlayerInRangeOfPoint(p, radi, pos[0], pos[1], pos[2]))
  290.             {
  291.                 return SendClientMessage(p, couleur, message);
  292.             }
  293.         }
  294.     }
  295.     return 1;
  296. }
  297.  
  298. // Crédits : Patrick_ , Vince
  299.  
  300. #define STATIC_OBJECT (0)
  301. #define DYNAMIC_OBJECT (1)
  302.  
  303. stock Float:GetDistanceBetweenPoints(Float:x1,Float:y1,Float:z1, Float:x2,Float:y2,Float:z2) //By Gabriel "Larcius" Cordes & Vince
  304. {
  305.     return VectorSize(x1-x2, y1-y2, z1-z2);
  306. }
  307.  
  308. stock IsPlayerInRangeOfObject(playerid, objectid, Float:radius, TYPE = DYNAMIC_OBJECT)
  309. {
  310.     new Float:ObjectOffsets[ 3 ];
  311.     if(TYPE == STATIC_OBJECT)
  312.     {
  313.         GetObjectPos(objectid, ObjectOffsets[ 0 ], ObjectOffsets[ 1 ], ObjectOffsets[ 2 ]);
  314.         if(IsPlayerInRangeOfPoint(playerid, radius, ObjectOffsets[ 0 ], ObjectOffsets[ 1 ], ObjectOffsets[ 2 ]))
  315.         return true;
  316.     }
  317.     else if(TYPE == STATIC_OBJECT)
  318.     {
  319.         GetDynamicObjectPos(objectid, ObjectOffsets[ 0 ], ObjectOffsets[ 1 ], ObjectOffsets[ 2 ]);
  320.         if(IsPlayerInRangeOfPoint(playerid, radius, ObjectOffsets[ 0 ], ObjectOffsets[ 1 ], ObjectOffsets[ 2 ]))
  321.         return true;
  322.     }
  323.     return false;
  324. }
  325.  
  326. stock IsObjectInRangePoint(objectid, Float:radius, Float:X, Float:Y, Float:Z, TYPE = DYNAMIC_OBJECT)
  327. {
  328.     new Float:ObjectOffsets[ 3 ];
  329.     if(TYPE == STATIC_OBJECT)
  330.     {
  331.         GetObjectPos(objectid, ObjectOffsets[ 0 ], ObjectOffsets[ 1 ], ObjectOffsets[ 2 ]);
  332.         if(GetDistanceBetweenPoints(ObjectOffsets[0], ObjectOffsets[1], ObjectOffsets[2], X, Y, Z) <= radius) return true;
  333.     }
  334.     else if(TYPE == STATIC_OBJECT)
  335.     {
  336.         GetDynamicObjectPos(objectid, ObjectOffsets[ 0 ], ObjectOffsets[ 1 ], ObjectOffsets[ 2 ]);
  337.         if(GetDistanceBetweenPoints(ObjectOffsets[0], ObjectOffsets[1], ObjectOffsets[2], X, Y, Z) <= radius) return true;
  338.  
  339.     }
  340.     return false;
  341. }
  342.  
  343. // Crédits : MrFredo (SendClientFormattedMessage & SendClientFormattedMessageToAll)
  344.  
  345. #define SendClientMessage SendClientFormattedMessage
  346. #define SendClientMessageToAll SendClientFormattedMessageToAll
  347.  
  348. stock SendClientFormattedMessage(playerid, color, const msg[], {Float,_}:...)
  349. {
  350.         new len = strlen(msg),d=0,posArg = 3;
  351.         new dest[512];
  352.         for(new i=0;i<len;i++)
  353.         {
  354.             if(msg[i] == '%')
  355.             {
  356.                 switch (msg[i+1])
  357.                 {
  358.                     case 's':
  359.                                 {
  360.                                         new pos,arg,tmppos;
  361.                                         new str[128];
  362.                                 while(getarg(posArg,pos)!='\0')
  363.                                         {
  364.                                         arg=getarg(posArg,pos++);
  365.                                                 str[tmppos]=arg;
  366.                                         tmppos++;
  367.                                 }
  368.                                     strins(dest,str,d,strlen(str));
  369.                                     d+=strlen(str);
  370.                                         posArg++;
  371.                                         i++;
  372.                                 }
  373.                     case 'i', 'd':
  374.                                 {
  375.                                     new str[128];
  376.                                     format(str,sizeof(str),"%d",getarg(posArg));
  377.                                     strins(dest,str,d,strlen(str));
  378.                                     d+=strlen(str);
  379.                                         posArg++;
  380.                                         i++;
  381.                                 }
  382.                     case 'f':
  383.                                 {
  384.                                     new str[128];
  385.                                     format(str,sizeof(str),"%f",getarg(posArg));
  386.                                     strins(dest,str,d,strlen(str));
  387.                                     d+=strlen(str);
  388.                                         posArg++;
  389.                                         i++;
  390.                                 }
  391.                                 case '.':
  392.                                 {
  393.                                     new len2 = msg[i+2];
  394.                                     if(len2 == 0)
  395.                                         {
  396.                                                 dest[d] = msg[i];
  397.                                                 d++;
  398.                                         }
  399.                                         else
  400.                                         {
  401.                                             new str[32],formatting[5];
  402.                                             formatting[0] = '%';
  403.                                             formatting[1] = '.';
  404.                                             formatting[2] = len2;
  405.                                             formatting[3] = 'f';
  406.                                             format(str,sizeof(str),formatting,getarg(posArg));
  407.                                             strins(dest,str,d,len2);
  408.                                             d+=len;
  409.                                                 posArg++;
  410.                                                 i+= 2;
  411.                                         }
  412.                                 }
  413.                                 default:
  414.                                 {
  415.                                         dest[d] = msg[i];
  416.                                         d++;
  417.                                 }
  418.                         }
  419.                 }
  420.                 else
  421.                 {
  422.                         dest[d] = msg[i];
  423.                         d++;
  424.                 }
  425.         }
  426.         //printf("[DEBUG] %s",dest);
  427.         return SendClientMessage(playerid,color,dest);
  428. }
  429.  
  430.  
  431. stock SendClientFormattedMessageToAll(color, const msg[], {Float,_}:...)
  432. {
  433.         new len = strlen(msg),d=0,posArg = 2;
  434.         new dest[128];
  435.         for(new i=0;i<len;i++)
  436.         {
  437.             if(msg[i] == '%')
  438.             {
  439.                 switch (msg[i+1])
  440.                 {
  441.                     case 's':
  442.                                 {
  443.                                         new pos,arg,tmppos;
  444.                                         new str[128];
  445.                                 while(getarg(posArg,pos)!='\0')
  446.                                         {
  447.                                         arg=getarg(posArg,pos++);
  448.                                                 str[tmppos]=arg;
  449.                                         tmppos++;
  450.                                 }
  451.                                     strins(dest,str,d,strlen(str));
  452.                                     d+=strlen(str);
  453.                                         posArg++;
  454.                                         i++;
  455.                                 }
  456.                     case 'i', 'd':
  457.                                 {
  458.                                     new str[128];
  459.                                     format(str,sizeof(str),"%d",getarg(posArg));
  460.                                     strins(dest,str,d,strlen(str));
  461.                                     d+=strlen(str);
  462.                                         posArg++;
  463.                                         i++;
  464.                                 }
  465.                     case 'f':
  466.                                 {
  467.                                     new str[128];
  468.                                     format(str,sizeof(str),"%f",getarg(posArg));
  469.                                     strins(dest,str,d,strlen(str));
  470.                                     d+=strlen(str);
  471.                                         posArg++;
  472.                                         i++;
  473.                                 }
  474.                                 case '.':
  475.                                 {
  476.                                     new len2 = msg[i+2];
  477.                                     if(len2 == 0)
  478.                                         {
  479.                                                 dest[d] = msg[i];
  480.                                                 d++;
  481.                                         }
  482.                                         else
  483.                                         {
  484.                                             new str[32],formatting[5];
  485.                                             formatting[0] = '%';
  486.                                             formatting[1] = '.';
  487.                                             formatting[2] = len2;
  488.                                             formatting[3] = 'f';
  489.                                             format(str,sizeof(str),formatting,getarg(posArg));
  490.                                             strins(dest,str,d,len2);
  491.                                             d+=len;
  492.                                                 posArg++;
  493.                                                 i+= 2;
  494.                                         }
  495.                                 }
  496.                                 default:
  497.                                 {
  498.                                         dest[d] = msg[i];
  499.                                         d++;
  500.                                 }
  501.                         }
  502.                 }
  503.                 else
  504.                 {
  505.                         dest[d] = msg[i];
  506.                         d++;
  507.                 }
  508.         }
  509.         //printf("[DEBUG] %s",dest);
  510.         return SendClientMessageToAll(color,dest);
  511. }
  512.  
  513. // gl_common.inc
  514.  
  515. stock isNumeric(const string[])
  516. {
  517.   new length=strlen(string);
  518.   if (length==0) return false;
  519.   for (new i = 0; i < length; i++)
  520.     {
  521.       if (
  522.             (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
  523.              || (string[i]=='-' && i!=0)                                             // A '-' but not at first.
  524.              || (string[i]=='+' && i!=0)                                             // A '+' but not at first.
  525.          ) return false;
  526.     }
  527.   if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
  528.   return true;
  529. }
  530.  
  531. /****************************
  532.     Natives
  533. ****************************/
  534.  
  535. native GetName(playerid);
  536. native GameTextForPlayer1(playerid, const message[], temps);
  537. native GetPlayerID(const name[]);
  538. native GetNearestCar(playerid);
  539. native GetDistanceBetweenTwoPlayers(player1, player2, &Float:x, &Float:y, &Float:z);
  540. native PlayAudioForPlayersInRange(sound_url[], Float:range, Float:x, Float:y, Float:z);
  541. native StopAudioForPlayersInRange(Float:range, Float:x, Float:y, Float:z);
  542. native SendErrorMessage(playerid, message[]);
  543. native SplitDateTime(datetime[], &annee, &mois, &jour, &heure, &minute, &seconde);
  544. native SplitDate(date[], &annee, &mois, &jour);
  545. native SplitTime(time[], &heure, &minute, &seconde);
  546. native ExplodeAll(type, Float:radi);
  547. native RemovePlayerHealth(playerid, Float:ret);
  548. native RemovePlayerArmour(playerid, Float:ret);
  549. native AddPlayerHealth(playerid, Float:add);
  550. native AddPlayerArmour(playerid, Float:add);
  551. native Float:GetPlayerHealth1(playerid);
  552. native Float:GetPlayerArmour1(playerid);
  553. native Float:GetPlayerxPos(playerid);
  554. native Float:GetPlayeryPos(playerid);
  555. native Float:GetPlayerzPos(playerid);
  556. native SendClientFormattedMessage(playerid, color, const msg[], {Float,_}:...);
  557. native SendClientFormattedToAllMessage(color, const msg[], {Float,_}:...);
  558. native IsNumeric(const string[]);
  559. native ProxDetector(Float:radi, playerid, const message[], couleur);
  560. native IsPlayerInRangeOfObject(playerid, objectid, Float:radius);
  561. native IsObjectInRangeOfPoint(objectid, Float:radius, Float:X, Float:Y, Float:Z);
  562. native GetDistanceBetweenToPoints(Float:x1,Float:y1,Float:z1, Float:x2,Float:y2,Float:z2);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement