Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!

rLibrary

By: Larceny on Jun 18th, 2011  |  syntax: PAWN  |  size: 10.27 KB  |  views: 815  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /*                                     
  2.                                         ********************************
  3.                                                 rLibrary - Radar Library
  4.                                         ********************************
  5. Descrição:
  6.         Permite implantar radares de velocidade pela cidade.
  7.         Quando um jogador passar pelo radar acima da velocidade, será pego pelo radar.
  8. Versão:
  9.         2.3
  10. Developer:
  11.         Synchr0.
  12. ChangeLOG:
  13.         09/02/2012:
  14.                 LSR_OnPlayerConnect() "Removido".
  15.         18/06/2011:
  16.                 Correções minimas.
  17.         30/12/2010:
  18.                 Novas funções de attach.
  19.         28/12/2010:
  20.                 Novas funções.
  21.         23/12/2010:
  22.                 Flash alternativo.
  23.                 Novo parâmetro na callback OnPlayerEnterRadar.
  24.         20/11/2010:
  25.                 Alterações no Timer.
  26.         19/09/2010:
  27.                 CallBack OnPlayerEnterRadar agora retorna velocidade em que o jogador passou no radar.
  28.         18/09/2010:
  29.                 Primeira versão
  30. Natives:
  31.         native CreateRadar(Float:x, Float:y, Float:z, speedmax, radiacao, pickup, ativado, virtualword = -1);
  32.         native DestroyRadar(lrid);
  33.         native RadarExiste(lrid);
  34.         native SetRadarPos(lrid, Float:x, Float:y, Float:z);
  35.         native SetRadarVirtualWorld(lrid, virtualworld);
  36.         native SetRadarAtivado(lrid, toggle);
  37.         native SetRadarVelocidadeMax(lrid, velocidade);
  38.         native SetRadarRadiacao(lrid, Float:radiacao);
  39.         native SetRadarPickup(lrid, pickupid);
  40.         native ObterRadarPos(lrid, &Float:x, &Float:y, &Float:z);
  41.         native ObterRadarVirtualWorld(lrid);
  42.         native LoadStaticRadarsFromFile(const filename[]);
  43.         native GetPlayerSpeed(playerid, bool:velo);
  44.         native GetVehicleSpeed(vehicleid);
  45.         native AttachRadarToPlayer(playerid, velocidade);
  46.         native DettachRadarToPlayer(playerid);
  47.         native IsPlayerRadarAttached(playerid);
  48. */
  49. #include "a_samp"
  50.  
  51. #define MAX_Radar                               100
  52. #define LSR_TIME_CHECK                  1500
  53. #define ObterVelocidadeJogador  GetPlayerSpeed
  54. #define ObterVelocidadeVeiculo  GetVehicleSpeed
  55.  
  56. enum lrdef
  57. {
  58.         LSR_VW,
  59.         LSR_OID,
  60.         Float:LSR_X,
  61.         Float:LSR_Y,
  62.         Float:LSR_Z,
  63.         LSR_speedmax,
  64.         LSR_radiacao,
  65.         LSR_pickup,
  66.         LSR_ativado
  67. };
  68. static  LSR_Timer, LSR_Total, LSR_Radar[MAX_Radar][lrdef];
  69.  
  70. #define LSR_CheckTimerAd() if(!LSR_Timer) LSR_Timer = SetTimer("CheckRadar", LSR_TIME_CHECK, 1)
  71. #define LSR_CheckTimerRe() if(!LSR_Total){KillTimer(LSR_Timer); LSR_Timer = 0;}
  72.  
  73. forward CheckRadar();
  74. forward HideRadar(playerid);
  75. forward OnPlayerEnterRadar(playerid, speed, radarid);
  76. forward UseFlashRadar();
  77. forward MoverPickup(lrid,Float:x,Float:y,Float:z);
  78.  
  79. new Text:Flash;
  80. new bool:UseFlash;
  81.  
  82. stock CreateRadar(Float:x, Float:y, Float:z, speedmax, radiacao, pickup, ativado, virtualword = -1)
  83. {
  84.         new bid = LSR_ProcurarIDLivre();
  85.         if(bid == -1)
  86.         {
  87.             printf("[rLibrary:] Limite de radares exedido! (Max:%d) Adicione um valor no MAX_RADAR ou apague algum...", MAX_Radar);
  88.             return 0;
  89.         }
  90.         LSR_Radar[bid][LSR_OID] = CreatePickup(pickup,1,x,y,z+2,-1);
  91.         LSR_Radar[bid][LSR_X] = x;
  92.         LSR_Radar[bid][LSR_Y] = y;
  93.         LSR_Radar[bid][LSR_Z] = z;
  94.         LSR_Radar[bid][LSR_speedmax] = speedmax;
  95.         LSR_Radar[bid][LSR_VW] = virtualword;
  96.         LSR_Radar[bid][LSR_radiacao] = radiacao;
  97.         LSR_Radar[bid][LSR_pickup] = pickup;
  98.         LSR_Radar[bid][LSR_ativado] = ativado;
  99.         LSR_CheckTimerAd();
  100.         LSR_Total++;
  101.         return bid;
  102. }
  103.  
  104. stock DestroyRadar(lrid)
  105. {
  106.         if(!LSR_Radar[lrid][LSR_OID]) return 0;
  107.         LSR_Total--;
  108.         DestroyPickup(LSR_Radar[lrid][LSR_pickup]);
  109.     LSR_Radar[lrid][LSR_OID] = 0;
  110.     LSR_CheckTimerRe()
  111.     return 1;
  112. }
  113.  
  114. stock RadarExiste(lrid) return (!LSR_Radar[lrid][LSR_OID]) ? 0 : 1;
  115.  
  116. stock SetRadarPos(lrid, Float:x, Float:y, Float:z)
  117. {
  118.         if(!LSR_Radar[lrid][LSR_OID]) return 0;
  119.         LSR_Radar[lrid][LSR_X] = x;
  120.         LSR_Radar[lrid][LSR_Y] = y;
  121.         LSR_Radar[lrid][LSR_Z] = z;
  122.         return MoverPickup(LSR_Radar[lrid][LSR_OID], x, y, z);
  123. }
  124.  
  125. stock SetRadarAtivado(lrid, toggle)
  126. {
  127.         if(!LSR_Radar[lrid][LSR_OID]) return 0;
  128.         if(toggle == 1 || toggle == true){LSR_Radar[lrid][LSR_ativado] = 1;}
  129.         if(toggle == 0 || toggle == false){LSR_Radar[lrid][LSR_ativado] = 0;}
  130.         return MoverPickup(LSR_Radar[lrid][LSR_OID], x, y, z);
  131. }
  132.  
  133. stock SetRadarVelocidadeMax(lrid, velocidade)
  134. {
  135.         if(!LSR_Radar[lrid][LSR_OID]) return 0;
  136.         return LSR_Radar[lrid][LSR_speedmax] = velocidade;
  137. }
  138.  
  139. stock SetRadarRadiacao(lrid, Float:radiacao)
  140. {
  141.         if(!LSR_Radar[lrid][LSR_OID]) return 0;
  142.         return LSR_Radar[lrid][LSR_radiacao] = radiacao;
  143. }
  144.  
  145.  
  146. stock SetRadarPickup(lrid, pickupid)
  147. {
  148.         if(!LSR_Radar[lrid][LSR_OID]) return 0;
  149.         LSR_Radar[lrid][LSR_pickup] = pickupid;
  150.         return MoverPickup(lrid, LSR_Radar[lrid][LSR_X], LSR_Radar[lrid][LSR_Y], LSR_Radar[lrid][LSR_Z]+2);
  151. }
  152.  
  153. public MoverPickup(lrid,Float:x,Float:y,Float:z)
  154. {
  155.         if(LSR_Radar[lrid][LSR_OID])
  156.         {
  157.             DestroyPickup(LSR_Radar[lrid][LSR_OID]);
  158.                 LSR_Radar[lrid][LSR_X] = x;
  159.                 LSR_Radar[lrid][LSR_Y] = y;
  160.                 LSR_Radar[lrid][LSR_Z] = z;
  161.                 CreatePickup(LSR_Radar[lrid][LSR_pickup], 1, x, y, z, -1);
  162.                 return 1;
  163.         }
  164.         return 0;
  165. }
  166.  
  167. stock SetRadarVirtualWorld(lrid, virtualworld)
  168. {
  169.         if(!LSR_Radar[lrid][LSR_OID]) return 0;
  170.         LSR_Radar[lrid][LSR_VW] = virtualworld;
  171.         DestroyPickup(LSR_Radar[lrid][LSR_OID]);
  172.         new x = LSR_Radar[lrid][LSR_X];
  173.         new y = LSR_Radar[lrid][LSR_Y];
  174.         new z = LSR_Radar[lrid][LSR_Z];
  175.         CreatePickup(LSR_Radar[lrid][LSR_pickup], 1, x, y, z, virtualworld);
  176.         return 1;
  177. }
  178.  
  179. stock ObterRadarPos(lrid, &Float:x, &Float:y, &Float:z)
  180. {
  181.         if(!LSR_Radar[lrid][LSR_OID])
  182.         {
  183.             x = 0.0;
  184.             y = 0.0;
  185.             z = 0.0;
  186.         }
  187.         x = LSR_Radar[lrid][LSR_X];
  188.         y = LSR_Radar[lrid][LSR_Y];
  189.         z = LSR_Radar[lrid][LSR_Z];
  190. }
  191.  
  192. stock ObterRadarVirtualWorld(lrid)
  193. {
  194.         if(!LSR_Radar[lrid][LSR_OID]) return 0;
  195.         return LSR_Radar[lrid][LSR_VW];
  196. }
  197.  
  198. public CheckRadar()
  199. {
  200.         for(new i = 0; i < MAX_PLAYERS; i++)
  201.         {
  202.                 if(GetPVarInt(i, "RadarAttached") == 1){RadarForPlayer(i, GetPVarInt(i, "RadarAttachedSpeed"), 999);}
  203.                 for(new b = 1; b <= LSR_Total; b++)
  204.                 {
  205.                         if(LSR_Radar[b][LSR_OID])
  206.                         {
  207.                                 if(LSR_Radar[b][LSR_ativado] == 1)
  208.                                 {
  209.                                         if(LSR_Radar[b][LSR_VW] == -1 || GetPlayerVirtualWorld(i) == LSR_Radar[b][LSR_VW])
  210.                                         {
  211.                                                 if(IsPlayerInRangeOfPoint(i, LSR_Radar[b][LSR_radiacao], LSR_Radar[b][LSR_X], LSR_Radar[b][LSR_Y], LSR_Radar[b][LSR_Z]))
  212.                                                 {
  213.                                                         if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
  214.                                                         {
  215.                                                                 RadarForPlayer(i, LSR_Radar[b][LSR_speedmax], LSR_Radar[b][LSR_OID]);
  216.                                                         }      
  217.                                                 }
  218.                                         }
  219.                                 }
  220.                         }
  221.                 }
  222.         }
  223. }
  224.  
  225. stock LSR_ProcurarIDLivre()
  226. {
  227.         for(new b = 1; b < MAX_Radar; b++) if(!LSR_Radar[b][LSR_OID]) return b;
  228.         return -1;
  229. }
  230.  
  231. stock GetPlayerSpeed(playerid, bool:velo)
  232. {
  233.     new Float:Vx,Float:Vy,Float:Vz,Float:rtn;
  234.     if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),Vx,Vy,Vz); else GetPlayerVelocity(playerid,Vx,Vy,Vz);
  235.     rtn = floatsqroot(floatabs(floatpower(Vx + Vy + Vz,2)));
  236.     return velo?floatround(rtn * 100 * 1.61):floatround(rtn * 100);
  237. }
  238.  
  239. stock GetVehicleSpeed(vehicleid)
  240. {
  241.     new Float:X, Float:Y, Float:Z;
  242.     GetVehicleVelocity(vehicleid, X, Y, Z);
  243.     return floatround(floatsqroot(X * X + Y * Y + Z * Z) * 180);
  244. }
  245.  
  246. stock token_by_delim(const string[], return_str[], delim, start_index)
  247. {
  248.         new x=0;
  249.         while(string[start_index] != EOS && string[start_index] != delim) {
  250.             return_str[x] = string[start_index];
  251.             x++;
  252.             start_index++;
  253.         }
  254.         return_str[x] = EOS;
  255.         if(string[start_index] == EOS) start_index = (-1);
  256.         return start_index;
  257. }
  258.  
  259. stock LoadStaticRadarsFromFile(const filename[])
  260. {
  261.         new File:file_ptr;
  262.         new line[256];
  263.         new var_from_line[64];
  264.         new Float:SpawnX;
  265.         new Float:SpawnY;
  266.         new Float:SpawnZ;
  267.         new SpeedMax;
  268.     new Radiation, Pickup;
  269.     new Ativado, VirtualWorld;
  270.         new index;
  271.         new radars_loaded;
  272.  
  273.         file_ptr = fopen(filename,filemode:io_read);
  274.         if(!file_ptr) return 0;
  275.  
  276.         radars_loaded = 0;
  277.  
  278.         while(fread(file_ptr,line,256) > 0)
  279.         {
  280.             index = 0;
  281.  
  282.             // Read X, Y, Z, Rotation
  283.                 index = token_by_delim(line,var_from_line,',',index);
  284.                 if(index == (-1)) continue;
  285.                 SpawnX = floatstr(var_from_line);
  286.  
  287.                 index = token_by_delim(line,var_from_line,',',index+1);
  288.                 if(index == (-1)) continue;
  289.                 SpawnY = floatstr(var_from_line);
  290.  
  291.                 index = token_by_delim(line,var_from_line,',',index+1);
  292.                 if(index == (-1)) continue;
  293.                 SpawnZ = floatstr(var_from_line);
  294.  
  295.                 // Read Speed Max
  296.                 index = token_by_delim(line,var_from_line,',',index+1);
  297.                 if(index == (-1)) continue;
  298.                 SpeedMax = strval(var_from_line);
  299.  
  300.                 // Read Radiation, Pickup
  301.                 index = token_by_delim(line,var_from_line,',',index+1);
  302.                 if(index == (-1)) continue;
  303.                 Radiation = strval(var_from_line);
  304.                
  305.                 index = token_by_delim(line,var_from_line,',',index+1);
  306.                 if(index == (-1)) continue;
  307.                 Pickup = strval(var_from_line);
  308.                
  309.                 //Read Ativado, VirtualWorld
  310.                 index = token_by_delim(line,var_from_line,',',index+1);
  311.                 if(index == (-1)) continue;
  312.                 Ativado = strval(var_from_line);
  313.  
  314.                 index = token_by_delim(line,var_from_line,';',index+1);
  315.                 VirtualWorld = strval(var_from_line);
  316.  
  317.                 CreateRadar(SpawnX, SpawnY, SpawnZ, SpeedMax, Radiation, Pickup, Ativado, VirtualWorld);
  318.                 radars_loaded++;
  319.         }
  320.  
  321.         fclose(file_ptr);
  322.         printf("[rLibrary:] %d Radares carregados do arquivo: %s",radars_loaded,filename);
  323.         return radars_loaded;
  324. }
  325.  
  326. stock AttachRadarToPlayer(playerid, velocidade)
  327. {
  328.         SetPVarInt(playerid, "RadarAttached", true);
  329.         SetPVarInt(playerid, "RadarAttachedSpeed", velocidade);
  330.         return 1;
  331. }
  332.  
  333. stock DettachRadarToPlayer(playerid)
  334. {
  335.         DeletePVar(playerid, "RadarAttached");
  336.         DeletePVar(playerid, "RadarAttachedSpeed");
  337.         return 1;
  338. }
  339.  
  340. stock IsPlayerRadarAttached(playerid)
  341. {
  342.         if(SetPVarInt(playerid, "RadarAttached") == true) return true;
  343.         return false;
  344. }
  345.  
  346. stock RadarForPlayer(playerid, speedlimit, radarid)
  347. {
  348.         new currentspeed = GetPlayerSpeed(playerid, true);
  349.         if(currentspeed >= speedlimit)
  350.         {
  351.                 if(UseFlash == true){TextDrawShowForPlayer(playerid, Flash); SetTimerEx("HideRadar", 1000, 0, "d", playerid);}
  352.                 PlayerPlaySound(playerid,1132,0.0,0.0,0.0);
  353.                 OnPlayerEnterRadar(playerid, currentspeed, radarid);
  354.         }
  355.     return 1;
  356. }
  357.  
  358. public HideRadar(playerid)
  359. {
  360.         TextDrawHideForPlayer(playerid, Flash);
  361.         return 1;
  362. }
  363.  
  364. public UseFlashRadar()
  365. {
  366.         UseFlash = true;
  367.         Flash = TextDrawCreate(635.000000, 432.000000, "__");
  368.         TextDrawBackgroundColor(Flash, 255);
  369.         TextDrawFont(Flash, 1);
  370.         TextDrawLetterSize(Flash, 0.500000, -45.900001);
  371.         TextDrawColor(Flash, -256);
  372.         TextDrawSetOutline(Flash, 0);
  373.         TextDrawSetProportional(Flash, 1);
  374.         TextDrawSetShadow(Flash, 1);
  375.         TextDrawUseBox(Flash, 1);
  376.         TextDrawBoxColor(Flash, -86);
  377.         TextDrawTextSize(Flash, 6.000000, 35.000000);
  378.         return 1;
  379. }