Advertisement
Larceny

Radar Test

Jun 18th, 2011
500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 9.02 KB | None | 0 0
  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.2
  10. Developer:
  11.     Luke "Larceny" G.
  12. Thanks to:
  13.     Protioso
  14.     Y_Less
  15. */
  16.  
  17. #include "rLibrary"//Inclua a include.
  18.  
  19. stock sscanf(string[], format[], {Float,_}:...)//by Y_Less
  20. {
  21.     #if defined isnull
  22.         if (isnull(string))
  23.     #else
  24.         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  25.     #endif
  26.         {
  27.             return format[0];
  28.         }
  29.     #pragma tabsize 4
  30.     new
  31.         formatPos = 0,
  32.         stringPos = 0,
  33.         paramPos = 2,
  34.         paramCount = numargs(),
  35.         delim = ' ';
  36.     while (string[stringPos] && string[stringPos] <= ' ')
  37.     {
  38.         stringPos++;
  39.     }
  40.     while (paramPos < paramCount && string[stringPos])
  41.     {
  42.         switch (format[formatPos++])
  43.         {
  44.             case '\0':
  45.             {
  46.                 return 0;
  47.             }
  48.             case 'i', 'd':
  49.             {
  50.                 new
  51.                     neg = 1,
  52.                     num = 0,
  53.                     ch = string[stringPos];
  54.                 if (ch == '-')
  55.                 {
  56.                     neg = -1;
  57.                     ch = string[++stringPos];
  58.                 }
  59.                 do
  60.                 {
  61.                     stringPos++;
  62.                     if ('0' <= ch <= '9')
  63.                     {
  64.                         num = (num * 10) + (ch - '0');
  65.                     }
  66.                     else
  67.                     {
  68.                         return -1;
  69.                     }
  70.                 }
  71.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  72.                 setarg(paramPos, 0, num * neg);
  73.             }
  74.             case 'h', 'x':
  75.             {
  76.                 new
  77.                     num = 0,
  78.                     ch = string[stringPos];
  79.                 do
  80.                 {
  81.                     stringPos++;
  82.                     switch (ch)
  83.                     {
  84.                         case 'x', 'X':
  85.                         {
  86.                             num = 0;
  87.                             continue;
  88.                         }
  89.                         case '0' .. '9':
  90.                         {
  91.                             num = (num << 4) | (ch - '0');
  92.                         }
  93.                         case 'a' .. 'f':
  94.                         {
  95.                             num = (num << 4) | (ch - ('a' - 10));
  96.                         }
  97.                         case 'A' .. 'F':
  98.                         {
  99.                             num = (num << 4) | (ch - ('A' - 10));
  100.                         }
  101.                         default:
  102.                         {
  103.                             return -1;
  104.                         }
  105.                     }
  106.                 }
  107.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  108.                 setarg(paramPos, 0, num);
  109.             }
  110.             case 'c':
  111.             {
  112.                 setarg(paramPos, 0, string[stringPos++]);
  113.             }
  114.             case 'f':
  115.             {
  116.  
  117.                 new changestr[16], changepos = 0, strpos = stringPos;    
  118.                 while(changepos < 16 && string[strpos] && string[strpos] != delim)
  119.                 {
  120.                     changestr[changepos++] = string[strpos++];
  121.                     }
  122.                 changestr[changepos] = '\0';
  123.                 setarg(paramPos,0,_:floatstr(changestr));
  124.             }
  125.             case 'p':
  126.             {
  127.                 delim = format[formatPos++];
  128.                 continue;
  129.             }
  130.             case '\'':
  131.             {
  132.                 new
  133.                     end = formatPos - 1,
  134.                     ch;
  135.                 while ((ch = format[++end]) && ch != '\'') {}
  136.                 if (!ch)
  137.                 {
  138.                     return -1;
  139.                 }
  140.                 format[end] = '\0';
  141.                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  142.                 {
  143.                     if (format[end + 1])
  144.                     {
  145.                         return -1;
  146.                     }
  147.                     return 0;
  148.                 }
  149.                 format[end] = '\'';
  150.                 stringPos = ch + (end - formatPos);
  151.                 formatPos = end + 1;
  152.             }
  153.             case 'u':
  154.             {
  155.                 new
  156.                     end = stringPos - 1,
  157.                     id = 0,
  158.                     bool:num = true,
  159.                     ch;
  160.                 while ((ch = string[++end]) && ch != delim)
  161.                 {
  162.                     if (num)
  163.                     {
  164.                         if ('0' <= ch <= '9')
  165.                         {
  166.                             id = (id * 10) + (ch - '0');
  167.                         }
  168.                         else
  169.                         {
  170.                             num = false;
  171.                         }
  172.                     }
  173.                 }
  174.                 if (num && IsPlayerConnected(id))
  175.                 {
  176.                     setarg(paramPos, 0, id);
  177.                 }
  178.                 else
  179.                 {
  180.                     #if !defined foreach
  181.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  182.                         #define __SSCANF_FOREACH__
  183.                     #endif
  184.                     string[end] = '\0';
  185.                     num = false;
  186.                     new
  187.                         name[MAX_PLAYER_NAME];
  188.                     id = end - stringPos;
  189.                     foreach (Player, playerid)
  190.                     {
  191.                         GetPlayerName(playerid, name, sizeof (name));
  192.                         if (!strcmp(name, string[stringPos], true, id))
  193.                         {
  194.                             setarg(paramPos, 0, playerid);
  195.                             num = true;
  196.                             break;
  197.                         }
  198.                     }
  199.                     if (!num)
  200.                     {
  201.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  202.                     }
  203.                     string[end] = ch;
  204.                     #if defined __SSCANF_FOREACH__
  205.                         #undef foreach
  206.                         #undef __SSCANF_FOREACH__
  207.                     #endif
  208.                 }
  209.                 stringPos = end;
  210.             }
  211.             case 's', 'z':
  212.             {
  213.                 new
  214.                     i = 0,
  215.                     ch;
  216.                 if (format[formatPos])
  217.                 {
  218.                     while ((ch = string[stringPos++]) && ch != delim)
  219.                     {
  220.                         setarg(paramPos, i++, ch);
  221.                     }
  222.                     if (!i)
  223.                     {
  224.                         return -1;
  225.                     }
  226.                 }
  227.                 else
  228.                 {
  229.                     while ((ch = string[stringPos++]))
  230.                     {
  231.                         setarg(paramPos, i++, ch);
  232.                     }
  233.                 }
  234.                 stringPos--;
  235.                 setarg(paramPos, i, '\0');
  236.             }
  237.             default:
  238.             {
  239.                 continue;
  240.             }
  241.         }
  242.         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  243.         {
  244.             stringPos++;
  245.         }
  246.         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  247.         {
  248.             stringPos++;
  249.         }
  250.         paramPos++;
  251.     }
  252.     do
  253.     {
  254.         if ((delim = format[formatPos++]) > ' ')
  255.         {
  256.             if (delim == '\'')
  257.             {
  258.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  259.             }
  260.             else if (delim != 'z')
  261.             {
  262.                 return delim;
  263.             }
  264.         }
  265.     }
  266.     while (delim > ' ');
  267.     return 0;
  268. }
  269.  
  270. new radartest;
  271. new total_radares_from_files=0;
  272.  
  273. public OnPlayerConnect(playerid)
  274. {  
  275.     LSR_PlayerConnect(playerid);
  276.     return 1;
  277. }
  278.  
  279. public OnFilterScriptInit()
  280. {
  281.     UseFlashRadar();//Ativa a função de FLASH dos radares.
  282.     CreateRadar(1257.644287, -1332.972900, 12.756792, 20, 50, 0, 1);//Radar com erro. (O primeiro radar nunca funcionará)
  283.     radartest = CreateRadar(1194.994995, -1279.451416, 13.152740, 20, 50, 1318, 1);//Radar próximo ao hospital geral.
  284.     CreateRadar(1057.763549, -1366.322143, 13.189699, 20, 50, 1318, 1);//Radar localizado atrás do hospital geral.
  285.     total_radares_from_files += LoadStaticRadarsFromFile("radares/red_county.txt");//Carregara os radares no arquivo red_county.txt na pasta radares.
  286.     total_radares_from_files += LoadStaticRadarsFromFile("radares/radares_salvos.txt");//Carregara os radares no arquivo radares_salvos.txt na pasta radares.
  287.     print("[rL:] Criador de radar carregado com sucesso.");//Envia uma mensagem no console que o FS foi carregado com sucesso.
  288.     printf("[rL:] Total de radares em arquivos: %d",total_radares_from_files);//Envia uma mensagem no console de quantos radares foram carregados em todos os arquivos.
  289.     return 1;
  290. }
  291. public OnPlayerEnterRadar(playerid, speed, radarid)
  292. {
  293.     new string[128];
  294.     if(radarid == radartest){format(string, sizeof(string), "[rL:] Você passou no meu radar a %d km/h e perdeu $500.", speed);}//Caso for o radartest(Radar próximo ao hospital geral).
  295.     else {format(string, sizeof(string), "[rL:] Você passou em qualquer radar a %d km/h e perdeu $500.", speed);}//Caso for qualquer radar menos o radartest.
  296.     SendClientMessage(playerid, 0xA9C4E4FF, string);//Enviará uma das mensagens acima de acordo do radar.
  297.     GivePlayerMoney(playerid, -500);//Retira $500 do jogador como multa.
  298.     return 1;
  299. }
  300.  
  301. public OnPlayerCommandText(playerid, cmdtext[])
  302. {
  303.     if(!strcmp(cmdtext, "/salvarradar", true))
  304.     {
  305.         new
  306.             speed,
  307.             str[128],
  308.             radiation;//Variavel.
  309.         if(sscanf(cmdtext, "iis", speed, radiation, str)) SendClientMessage(playerid, 0x33AA33AA, "[Sugestão:] /alistfaction [id]");//Mensagem de erro.
  310.         new Float:X, Float:Y, Float:Z, strf[128], strl[128];//Variaveis, etc..
  311.         GetPlayerPos(playerid, X, Y, Z);//Obtem a posição atual do jogador.
  312.         format(strf, sizeof(strf), "CreateRadar(%f, %f, %f, %d, %d, 1318, 1);//%s\r\n", X, Y, Z, speed, radiation, str);//string
  313.         new File:FileToWrite=fopen("codigos_salvos.txt", io_append);
  314.         fwrite(FileToWrite, strf);
  315.         fclose(FileToWrite);//Salvará o código pronto para adicionar o radar ao seu script.
  316.         format(strl, sizeof(strl), "%f, %f, %f, %d, %d, 1318, 1, -1 ;\r\n", X, Y, Z, speed, radiation);//string
  317.         new File:FileToWriteTwo=fopen("radares_salvos.txt", io_append);
  318.         fwrite(FileToWriteTwo, strl);
  319.         fclose(FileToWriteTwo);//Salvará o radar criado e será sempre carregado quando o filterscript iniciar.
  320.         CreateRadar(X, Y, Z, speed, radiation, 1318, 1);//Cria o radar.
  321.         SendClientMessage(playerid, 0x33AA33AA, "[rL:] Radar Salvo!");//Envia mensagem ao jogador que criou o radar.
  322.         return 1;
  323.     }
  324.     if(!strcmp(cmdtext, "/attachradar", true))
  325.     {
  326.         if(IsPlayerRadarAttached(playerid))return SendClientMessage(playerid, 0x33AA33AA, "[rL:] Você já tem um radar anexado a você.");
  327.         SendClientMessage(playerid, 0x33AA33AA, "[rL:] Um radar foi implantado em você, sempre que você ultrapassar 100km/h será multado.");
  328.         AttachRadarToPlayer(playerid, 100);
  329.         return 1;
  330.     }
  331.     if(!strcmp(cmdtext, "/dettachradar", true))
  332.     {
  333.         if(!IsPlayerRadarAttached(playerid))return SendClientMessage(playerid, 0x33AA33AA, "[rL:] Você não tem um radar anexado a você.");
  334.         SendClientMessage(playerid, 0x33AA33AA, "[rL:] O radar foi retirado.");
  335.         DettachRadarToPlayer(playerid);
  336.         return 1;
  337.     }
  338.     if(!strcmp(cmdtext, "/credits", true))
  339.     {
  340.         SendClientMessage(playerid, 0x33AA33AA, "[rL:] Radar Library.");
  341.         SendClientMessage(playerid, 0x33AA33AA, "[rL:] Developer: Luke ''Larceny'' G.");
  342.         SendClientMessage(playerid, 0x33AA33AA, "[rL:] grandlarceny@live.com");
  343.         return 1;
  344.     }
  345.     return 0;
  346. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement