Guest User

Get Nearest [LIB]

a guest
Feb 27th, 2012
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.83 KB | None | 0 0
  1. //***** Made by TopAz in 15 minutes.
  2.  
  3.  
  4. //----- Header
  5. #if defined _getnearest_included
  6.     #endinput
  7. #endif
  8. #define _getnearest_included
  9. #pragma library samp
  10. //----------------
  11.  
  12. //----- External Library(ies)
  13. #include <a_samp>
  14. //------------------------
  15.  
  16. //----- Constants
  17. /*#if defined USE_STREAMER
  18.     #include "streamer"
  19. #endif*/
  20.  
  21. #define OBJECT              (0)
  22. #define PLAYER              (1)
  23. #define VEHICLE             (2)
  24. #define DYNAMIC_OBJECT      (3)
  25.  
  26. #define MAX_DISTANCE        (1000.0)           
  27. //----------------
  28.  
  29. //------ Variables
  30.  
  31. //Floats
  32. new
  33.     Float:px,
  34.     Float:py,
  35.     Float:pz,
  36.     Float:ox,
  37.     Float:oy,
  38.     Float:oz,
  39.     Float:distance = MAX_DISTANCE
  40. ;
  41.  
  42. //----------------
  43.  
  44. GetNearest(playerid, type);
  45.  
  46. stock GetNearest(playerid, type)
  47. {
  48.     switch(type)
  49.     {
  50.         case OBJECT:
  51.         {
  52.             GetNearest_Object(playerid);
  53.         }
  54.         case PLAYER:
  55.         {
  56.             GetNearest_Player(playerid);
  57.         }
  58.         case VEHICLE:
  59.         {
  60.             GetNearest_Vehicle(playerid);
  61.         }
  62.         case DYNAMIC_OBJECT:
  63.         {
  64.             GetNearest_DynObject(playerid);
  65.         }
  66.     }
  67. }
  68.  
  69. stock GetNearest_Object(playerid)
  70. {
  71.     new currentobject = -1;
  72.     GetPlayerPos(playerid, px, py, pz);
  73.     for(new i = 0; i < MAX_OBJECTS; i++)
  74.     {
  75.         if(!IsValidObject(i)) continue;
  76.         GetDynamicObjectPos(i, ox, oy, oz);
  77.         new Float:odist = floatsqroot(
  78.             floatpower(floatabs(floatsub(ox, px)), 2.0) +
  79.             floatpower(floatabs(floatsub(oy, py)), 2.0) +
  80.             floatpower(floatabs(floatsub(oz, pz)), 2.0)
  81.         );
  82.         if (currentobject == -1)
  83.         {
  84.             currentobject = i;
  85.             distance = odist;
  86.         }
  87.         else if (odist < distance)
  88.         {
  89.             currentobject = i;
  90.             distance = odist;
  91.         }
  92.     }
  93.     return currentobject;
  94. }
  95.  
  96. stock GetNearest_Player(playerid)
  97. {
  98.     new currentplayer = -1;
  99.     GetPlayerPos(playerid, px, py, pz);
  100.     for(new i = 0; i < MAX_PLAYERS; i++)
  101.     {
  102.         if(i == playerid) continue;
  103.         GetPlayerPos(i, ox, oy, oz);
  104.         new Float:odist = floatsqroot(
  105.             floatpower(floatabs(floatsub(ox, px)), 2.0) +
  106.             floatpower(floatabs(floatsub(oy, py)), 2.0) +
  107.             floatpower(floatabs(floatsub(oz, pz)), 2.0)
  108.         );
  109.         if (currentplayer == -1)
  110.         {
  111.             currentplayer = i;
  112.             distance = odist;
  113.         }
  114.         else if (odist < distance)
  115.         {
  116.             currentplayer = i;
  117.             distance = odist;
  118.         }
  119.     }
  120.     return currentplayer;
  121. }
  122.  
  123. stock GetNearest_Vehicle(playerid)
  124. {
  125.     new currentvehicle = -1;
  126.     GetPlayerPos(playerid, px, py, pz);
  127.     for(new i = 0; i < MAX_VEHICLES; i++)
  128.     {
  129.         GetVehiclePos(i, ox, oy, oz);
  130.         new Float:odist = floatsqroot(
  131.             floatpower(floatabs(floatsub(ox, px)), 2.0) +
  132.             floatpower(floatabs(floatsub(oy, py)), 2.0) +
  133.             floatpower(floatabs(floatsub(oz, pz)), 2.0)
  134.         );
  135.         if (currentvehicle == -1)
  136.         {
  137.             currentvehicle = i;
  138.             distance = odist;
  139.         }
  140.         else if (odist < distance)
  141.         {
  142.             currentvehicle = i;
  143.             distance = odist;
  144.         }
  145.     }
  146.     return currentvehicle;
  147. }
  148.  
  149. stock GetNearest_DynObject(playerid)
  150. {
  151.     new currentdynobject = -1;
  152.     GetPlayerPos(playerid, px, py, pz);
  153.     for(new i = 0; i < CountDynamicObjects(); i++)
  154.     {
  155.         if(!IsValidDynamicObject(i)) continue;
  156.         GetDynamicObjectPos(i, ox, oy, oz);
  157.         new Float:odist = floatsqroot(
  158.             floatpower(floatabs(floatsub(ox, px)), 2.0) +
  159.             floatpower(floatabs(floatsub(oy, py)), 2.0) +
  160.             floatpower(floatabs(floatsub(oz, pz)), 2.0)
  161.         );
  162.         if (currentdynobject == -1)
  163.         {
  164.             currentdynobject = i;
  165.             distance = odist;
  166.         }
  167.         else if (odist < distance)
  168.         {
  169.             currentdynobject = i;
  170.             distance = odist;
  171.         }
  172.     }
  173.     return currentdynobject;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment