Advertisement
ipsBruno

(Pawn) GetPlayerGeoIP

Dec 1st, 2012
1,059
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.80 KB | None | 0 0
  1. /* ----------------------------------------------------------------------------
  2.  
  3.  
  4.         Definições do código. Caso o game mode está fechando sozinho, veja se a memória
  5.         dinâmica é suficiente para suprir toda carga do servidor em #pragma dynamic
  6.  
  7.         MAX_DATA_NAME reserva o tamanho médio para cada dado recebido, provedora, cidade, estado ....
  8.  
  9. --------------------------------------------------------------------------------*/
  10.  
  11.  
  12.  
  13. #if !defined HTTP_ERROR_BAD_HOST
  14.  
  15.         #include a_http
  16.      
  17.  
  18. #endif
  19.  
  20. #pragma dynamic 30000
  21.  
  22. #if !defined MAX_DATA_NAME
  23.        #define MAX_DATA_NAME 64
  24. #endif
  25.  
  26.  
  27.  
  28.  
  29. /*-----------------------------------------------------------------------------------
  30.  
  31.  
  32.         Função "GetPlayerGeoIP"
  33.         Com ela é pego as informações do jogadores que serão recebidas em OnPlayerGeoIP
  34.  
  35.         Atualmente recebe:
  36.             - IP pego
  37.             - Provedora do IP
  38.             - Estado, Cidade e Pais
  39.  
  40.         Nem sempre é preciso, algumas vezes pode acertas, outras vezes pode pegar uma cidade vizinha !!
  41.  
  42.  
  43. -----------------------------------------------------------------------------------*/
  44.  
  45. #define GeoIP::  BSGET_
  46.  
  47. #define BSGET_fp%0(%1) forward %0(%1); public %0(%1)
  48.  
  49. GeoIP::fp GetPlayerGeoIP(playerid) {
  50.  
  51.     static
  52.         geoip[256]
  53.     ;
  54.  
  55.     GetPlayerIp(playerid, geoip, 25);
  56.  
  57.     format(geoip, 256, "www.infosniper.net/index.php?ip_address=%s&map_source=1&overview_map=1&lang=1&map_type=1&zoom_level=7", geoip);
  58.  
  59.     return HTTP(playerid, HTTP_GET, geoip, "\0", "Geo_IpResponse");
  60. }
  61.  
  62.  
  63.  
  64.  
  65. /*-----------------------------------------------------------------------------------
  66.  
  67.         Parte que receberá a página HTML e fazerá o processamento do código para filtrar as informações
  68.  
  69. -------------------------------------------------------------------------------------*/
  70.  
  71. GeoIP::fp Geo_IpResponse(index, response_code, data[])
  72. {
  73.     if(response_code == 200)
  74.     {
  75.  
  76.         new ip                  [MAX_DATA_NAME];
  77.         new cidade              [MAX_DATA_NAME];
  78.         new estado              [MAX_DATA_NAME];
  79.         new pais                [MAX_DATA_NAME];
  80.         new provedora           [MAX_DATA_NAME];
  81.  
  82.         recursiveStrfind(ip,                    data,   "<td class=\"content-td2\">",   001, "<");
  83.         recursiveStrfind(cidade,                data,   "<td class=\"content-td2\">",   002, "<");
  84.         recursiveStrfind(provedora,             data,   "<td class=\"content-td2\">",   005, "<");
  85.         recursiveStrfind(estado,                data,   "<td class=\"content-td2\">",   006, "<");
  86.         recursiveStrfind(pais,                  data,   "<td class=\"content-td2\">",   010, "<");
  87.  
  88.         if( funcidx("OnPlayerGeoIP") != -1 ) {
  89.             CallLocalFunction("OnPlayerGeoIP", "isssss", index, ip, cidade, estado, pais, provedora);
  90.         }
  91.     }
  92.  
  93.     return true;
  94. }
  95.  
  96.  
  97. /*-----------------------------------------------------------------------------------
  98.  
  99.         Função recursiva usada para dar strfind recursivamente, facilitando o trabalho
  100.         do processamento de todo código HTML recebido da página !!
  101.  
  102. -------------------------------------------------------------------------------------*/
  103.  
  104. recursiveStrfind(dest[], data[], string[], total, after[], current = -1, pos = -1, len = sizeof (dest))
  105. {
  106.     current ++;
  107.  
  108.     if(current != total) {
  109.         return recursiveStrfind(dest, data, string, total, after, current, strfind(data, string, false, pos+1), len) ;
  110.     }
  111.  
  112.     static procurar;
  113.  
  114.     procurar = strfind(data, string, false, pos) + strlen(string);
  115.  
  116.     strmid(dest, data, procurar, procurar + len, len);
  117.  
  118.     if(strlen(after)) {
  119.  
  120.         procurar = strfind(dest, after);
  121.  
  122.         if( procurar != -1 ) {
  123.             dest[procurar] = EOS;
  124.         }
  125.     }
  126.     return true;
  127. }
  128.  
  129.  
  130. forward OnPlayerGeoIP(playerid, ip[], cidade[], estado[], pais[], provedora[]) ;
  131.  
  132.  
  133. // ============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement