Advertisement
iPLEOMAX

OPLAV Version 2 - iPLEOMAX

Jan 14th, 2012
650
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.78 KB | None | 0 0
  1. /*
  2.     * @name: OnPlayerLookAtVehicle Version 2
  3.     * @author: iPLEOMAX (c) 2012
  4.     * Do not not release any other version of this script without
  5.     * my permission. Thank you for downloading it.
  6.    
  7.     * Details:
  8.     * This Include allows to detect the vehicleidif a player looks at it.
  9.     * To use it, add #include <vla> to your Filterscript/Gamemode.
  10.    
  11.     * Credits:
  12.     * Jernjel & cracK: Trignometry Help.
  13.     * Y_Less: YSI Server Includes.
  14.    
  15.     * For any Help/Bug report/Suggestion, visit the release topic.
  16. */
  17.  
  18. #if defined vla
  19.     #endinput
  20. #endif
  21.  
  22. #define vla
  23.  
  24. #include        <a_samp>
  25. #include        <YSI\y_hooks>
  26. //#include      <foreach>
  27.  
  28. #define         MAX_STORED_VEHICLES     60
  29. #define         VLA_UPDATE_RATE         200
  30. #define         MAX_VLA_DISTANCE        300
  31.  
  32. new
  33.     VLA_Timer,
  34.     Float:PositionX, Float:PositionY, Float:PositionZ,
  35.     Float:VehicleX, Float:VehicleY, Float:VehicleZ,
  36.     Float:vCamX, Float:vCamY, Float:vCamZ,
  37.     Float:VecX, Float:VecY, Float:VecZ,
  38.     Float:TempX, Float:TempY, Float:TempZ,
  39.     Float:TargetDistance, Float:vTemp,
  40.     Float:vRadius,
  41.    
  42.     Float:vDistance[MAX_PLAYERS],
  43.     Vehicle_Current[MAX_PLAYERS],
  44.     Vehicle_Temp[MAX_PLAYERS],
  45.    
  46.     bool:VehicleOnSight[MAX_PLAYERS],
  47.     bool:LookAtEnabled[MAX_PLAYERS],
  48.    
  49.     //IteratorArray:StreamedVehicles[MAX_PLAYERS]<MAX_STORED_VEHICLES>,
  50.     PlayerStreamedVehicles[MAX_PLAYERS][MAX_STORED_VEHICLES]
  51. ;
  52.  
  53. forward OnPlayerLookAtVehicle(playerid, vehicleid, Float:distance);
  54.  
  55. #if defined FILTERSCRIPT
  56.  
  57. Hook:vla_OnFilterScriptInit()
  58. {
  59.     printf(" * OnPlayerLookAtVehicle V2.0 (c) iPLEOMAX 2012");
  60.     //Iter_Init(StreamedVehicles);
  61.     VLA_Timer = SetTimer("VLA_Tick", VLA_UPDATE_RATE, true);
  62.     return true;
  63. }
  64.  
  65. Hook:vla_OnFilterScriptExit()
  66. {
  67.     KillTimer(VLA_Timer);
  68.     return true;
  69. }
  70.  
  71. #else
  72.  
  73. Hook:vla_OnGameModeInit()
  74. {
  75.     printf(" * OnPlayerLookAtVehicle V2.0 (c) iPLEOMAX 2012");
  76.     //Iter_Init(StreamedVehicles);
  77.     VLA_Timer = SetTimer("VLA_Tick", VLA_UPDATE_RATE, true);
  78.     return true;
  79. }
  80.  
  81. Hook:vla_OnGameModeExit()
  82. {
  83.     KillTimer(VLA_Timer);
  84.     return true;
  85. }
  86.  
  87. #endif
  88.  
  89. Hook:vla_OnPlayerDisconnect(playerid, reason)
  90. {
  91.     vDistance[playerid] = 0;
  92.     Vehicle_Current[playerid] = 0;
  93.     Vehicle_Temp[playerid] = 0;
  94.     VehicleOnSight[playerid] = false;
  95.     LookAtEnabled[playerid] = false;
  96.     //Iter_Clear(StreamedVehicles[playerid]);
  97.     for(new xid = 0; xid < MAX_STORED_VEHICLES; xid++)
  98.     {
  99.         PlayerStreamedVehicles[playerid][xid] = 0;
  100.     }
  101.     return true;
  102. }
  103.  
  104. forward VLA_Tick();
  105. public VLA_Tick()
  106. {
  107.     for(new i=0; i<MAX_PLAYERS; i++)
  108.     //foreach(Player, i) <-- Doesn't work sometimes.
  109.     {
  110.         if(!IsPlayerConnected(i)) continue;
  111.         if(!LookAtEnabled[i]) continue;
  112.        
  113.         VehicleOnSight[i] = false;
  114.         vDistance[i] = MAX_VLA_DISTANCE;
  115.        
  116.         //foreach(StreamedVehicles[i], v)
  117.         for (new vidx = 0; vidx < MAX_STORED_VEHICLES; vidx++)
  118.         {
  119.             //if(!PlayerStreamedVehicles[i][vidx]) continue;
  120.             //if(Vehicle_Current[i] == PlayerStreamedVehicles[i][vidx]) continue;
  121.             if(!GetVehicleModel(PlayerStreamedVehicles[i][vidx])) continue;
  122.             if(GetPlayerVehicleID(i) == PlayerStreamedVehicles[i][vidx]) continue;
  123.            
  124.             GetVehiclePos(PlayerStreamedVehicles[i][vidx], VehicleX,  VehicleY,  VehicleZ);
  125.             GetPlayerPos(i, PositionX, PositionY, PositionZ);
  126.  
  127.             vRadius = 2.0;
  128.             TargetDistance =
  129.             floatsqroot
  130.             (
  131.                 floatpower((PositionX - VehicleX), 2)+
  132.                 floatpower((PositionY - VehicleY), 2)+
  133.                 floatpower((PositionZ - VehicleZ), 2)
  134.             );
  135.            
  136.             if (TargetDistance > MAX_VLA_DISTANCE) continue;
  137.             if (TargetDistance > vDistance[i]) continue;
  138.             vDistance[i] = TargetDistance;
  139.             if (TargetDistance < 5) vRadius = 3.5;
  140.            
  141.             if(CheckLookAt(i, vRadius))
  142.             {
  143.                 //printf("Looking at: %i", PlayerStreamedVehicles[i][vidx]);
  144.                 VehicleOnSight[i] = true;
  145.                 Vehicle_Temp[i] = PlayerStreamedVehicles[i][vidx];
  146.             }
  147.         }
  148.        
  149.         switch(VehicleOnSight[i])
  150.         {
  151.             case true: {
  152.                 if(Vehicle_Temp[i] != Vehicle_Current[i])
  153.                 {
  154.                     CallLocalFunction("OnPlayerLookAtVehicle", "iif", i, Vehicle_Temp[i], vDistance[i]);
  155.                     Vehicle_Current[i] = Vehicle_Temp[i];
  156.                 }
  157.             }
  158.             case false: {
  159.                 if(Vehicle_Current[i]) CallLocalFunction("OnPlayerLookAtVehicle", "iif", i, 0, 0);
  160.                 Vehicle_Current[i] = 0;
  161.             }
  162.         }
  163.     }
  164.     return true;
  165. }
  166.  
  167. stock CheckLookAt(playerid, Float:radius)
  168. {
  169.     GetPlayerCameraPos(playerid, vCamX, vCamY, vCamZ);
  170.     GetPlayerCameraFrontVector(playerid, VecX, VecY, VecZ);
  171.  
  172.     TargetDistance = floatsqroot
  173.     (
  174.         floatpower((vCamX - VehicleX), 2) +
  175.         floatpower((vCamY - VehicleY), 2) +
  176.         floatpower((vCamZ - VehicleZ), 2)
  177.     );
  178.    
  179.     TempX = VecX * TargetDistance + vCamX;
  180.     TempY = VecY * TargetDistance + vCamY;
  181.     TempZ = VecZ * TargetDistance + vCamZ;
  182.  
  183.     vTemp = floatsqroot
  184.     (
  185.         floatpower((TempX - VehicleX), 2) +
  186.         floatpower((TempY - VehicleY), 2) +
  187.         floatpower((TempZ - VehicleZ), 2)
  188.     );
  189.  
  190.     if(radius >= vTemp) return true;
  191.     return false;
  192. }
  193.  
  194. Hook:vla_OnVehicleStreamIn(vehicleid, forplayerid)
  195. {
  196.     AddToSVList(forplayerid, vehicleid);
  197.     //Iter_Add(StreamedVehicles[forplayerid], vehicleid);
  198.     //printf("OnVehicleStreamIn: vehicleid: %i, forplayerid: %i", vehicleid, forplayerid);
  199.     return true;
  200. }
  201.  
  202. Hook:vla_OnVehicleStreamOut(vehicleid, forplayerid)
  203. {
  204.     RemoveFromSVList(forplayerid, vehicleid);
  205.     //Iter_Remove(StreamedVehicles[forplayerid], vehicleid);
  206.     //printf("vla_OnVehicleStreamOut: vehicleid: %i, forplayerid: %i", vehicleid, forplayerid);
  207.     return true;
  208. }
  209.  
  210. /*
  211. public OnPlayerLookAtVehicle(playerid, vehicleid, Float:distance)
  212. {
  213.     new message[128];
  214.     format(message, sizeof message,
  215.     "LookAt: %i, Distance: %f", vehicleid, distance);
  216.     SendClientMessage(playerid, -1, message);
  217.     return true;
  218. }
  219. */
  220.  
  221. stock EnableVehicleLookAt(forplayerid)
  222. {
  223.     //Iter_Clear(StreamedVehicles[forplayerid]);
  224.     for(new vid=0; vid<MAX_VEHICLES; vid++)
  225.     {
  226.         if(!IsVehicleStreamedIn(vid, forplayerid)) continue;
  227.         AddToSVList(forplayerid, vid);
  228.         //Iter_Add(StreamedVehicles[forplayerid], vid);
  229.     }
  230.     LookAtEnabled[forplayerid] = true;
  231. }
  232.  
  233. stock DisableVehicleLookAt(forplayerid)
  234. {
  235.     for(new xid = 0; xid < MAX_STORED_VEHICLES; xid++)
  236.     {
  237.         PlayerStreamedVehicles[forplayerid][xid] = 0;
  238.     }
  239.     //Iter_Clear(StreamedVehicles[forplayerid]);
  240.     LookAtEnabled[forplayerid] = false;
  241. }
  242.  
  243. stock AddToSVList(playerid, vehicleid)
  244. {
  245.     for(new xid = 0; xid < MAX_STORED_VEHICLES; xid++)
  246.     {
  247.         if(PlayerStreamedVehicles[playerid][xid] == 0)
  248.         {
  249.             PlayerStreamedVehicles[playerid][xid] = vehicleid;
  250.             break;
  251.         }
  252.     }
  253. }
  254.  
  255. stock RemoveFromSVList(playerid, vehicleid)
  256. {
  257.     for(new xid = 0; xid < MAX_STORED_VEHICLES; xid++)
  258.     {
  259.         if(PlayerStreamedVehicles[playerid][xid] == vehicleid)
  260.         PlayerStreamedVehicles[playerid][xid] = 0;
  261.     }
  262. }
  263.  
  264. /*
  265. native EnableVehicleLookAt(forplayerid);
  266. native DisableVehicleLookAt(forplayerid);
  267. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement