Advertisement
Guest User

Get Nearest [LIB]

a guest
Feb 27th, 2012
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.     new ret;
  49.     switch(type)
  50.     {
  51.         case OBJECT:
  52.         {
  53.             ret = GetNearest_Object(playerid);
  54.         }
  55.         case PLAYER:
  56.         {
  57.             ret = GetNearest_Player(playerid);
  58.         }
  59.         case VEHICLE:
  60.         {
  61.             ret = GetNearest_Vehicle(playerid);
  62.         }
  63.         case DYNAMIC_OBJECT:
  64.         {
  65.             ret = GetNearest_DynObject(playerid);
  66.         }
  67.     }
  68.     return ret;
  69. }
  70.  
  71. stock GetNearest_Object(playerid)
  72. {
  73.     new currentobject = -1;
  74.     GetPlayerPos(playerid, px, py, pz);
  75.     for(new i = 0; i < MAX_OBJECTS; i++)
  76.     {
  77.         if(!IsValidObject(i)) continue;
  78.         GetDynamicObjectPos(i, ox, oy, oz);
  79.         new Float:odist = floatsqroot(
  80.             floatpower(floatabs(floatsub(ox, px)), 2.0) +
  81.             floatpower(floatabs(floatsub(oy, py)), 2.0) +
  82.             floatpower(floatabs(floatsub(oz, pz)), 2.0)
  83.         );
  84.         if (currentobject == -1)
  85.         {
  86.             currentobject = i;
  87.             distance = odist;
  88.         }
  89.         else if (odist < distance)
  90.         {
  91.             currentobject = i;
  92.             distance = odist;
  93.         }
  94.     }
  95.     return currentobject;
  96. }
  97.  
  98. stock GetNearest_Player(playerid)
  99. {
  100.     new currentplayer = -1;
  101.     GetPlayerPos(playerid, px, py, pz);
  102.     for(new i = 0; i < MAX_PLAYERS; i++)
  103.     {
  104.         if(i == playerid) continue;
  105.         GetPlayerPos(i, ox, oy, oz);
  106.         new Float:odist = floatsqroot(
  107.             floatpower(floatabs(floatsub(ox, px)), 2.0) +
  108.             floatpower(floatabs(floatsub(oy, py)), 2.0) +
  109.             floatpower(floatabs(floatsub(oz, pz)), 2.0)
  110.         );
  111.         if (currentplayer == -1)
  112.         {
  113.             currentplayer = i;
  114.             distance = odist;
  115.         }
  116.         else if (odist < distance)
  117.         {
  118.             currentplayer = i;
  119.             distance = odist;
  120.         }
  121.     }
  122.     return currentplayer;
  123. }
  124.  
  125. stock GetNearest_Vehicle(playerid)
  126. {
  127.     new currentvehicle = -1;
  128.     GetPlayerPos(playerid, px, py, pz);
  129.     for(new i = 0; i < MAX_VEHICLES; i++)
  130.     {
  131.         GetVehiclePos(i, ox, oy, oz);
  132.         new Float:odist = floatsqroot(
  133.             floatpower(floatabs(floatsub(ox, px)), 2.0) +
  134.             floatpower(floatabs(floatsub(oy, py)), 2.0) +
  135.             floatpower(floatabs(floatsub(oz, pz)), 2.0)
  136.         );
  137.         if (currentvehicle == -1)
  138.         {
  139.             currentvehicle = i;
  140.             distance = odist;
  141.         }
  142.         else if (odist < distance)
  143.         {
  144.             currentvehicle = i;
  145.             distance = odist;
  146.         }
  147.     }
  148.     return currentvehicle;
  149. }
  150.  
  151. stock GetNearest_DynObject(playerid)
  152. {
  153.     new currentdynobject = -1;
  154.     GetPlayerPos(playerid, px, py, pz);
  155.     for(new i = 0; i < CountDynamicObjects(); i++)
  156.     {
  157.         if(!IsValidDynamicObject(i)) continue;
  158.         GetDynamicObjectPos(i, ox, oy, oz);
  159.         new Float:odist = floatsqroot(
  160.             floatpower(floatabs(floatsub(ox, px)), 2.0) +
  161.             floatpower(floatabs(floatsub(oy, py)), 2.0) +
  162.             floatpower(floatabs(floatsub(oz, pz)), 2.0)
  163.         );
  164.         if (currentdynobject == -1)
  165.         {
  166.             currentdynobject = i;
  167.             distance = odist;
  168.         }
  169.         else if (odist < distance)
  170.         {
  171.             currentdynobject = i;
  172.             distance = odist;
  173.         }
  174.     }
  175.     return currentdynobject;
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement