Advertisement
ipsBruno

(Pawn) Escutar qualquer música no jogo

Dec 16th, 2012
667
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.79 KB | None | 0 0
  1. //==============================================================================
  2. //
  3. //
  4. // Escutador de música in-game
  5. // Escute músicas pelo nome! Sem links, tudo em tempo real
  6. // Por Bruno da Silva @ brunodasilva.com — [iPs]TeaM
  7. //
  8. //
  9. //==============================================================================
  10.  
  11. //
  12. // Requer plugin "sampwinsock.dll" de "langricr"
  13. // http://forum.sa-mp.com/showthread.php?t=261993
  14. //
  15. // Aqui abaixo vão as declarações e includes usuais
  16. // Devido meu host ser ruim, possível o sistema pode ficar fora do ár de madrugada
  17. //
  18. // Tenha um bom uso da ferramenta!
  19. //
  20.  
  21. native socket_create( id );
  22. native socket_destroy( id );
  23. native socket_connect( id, ip[], port);
  24. native socket_disconnect( id );
  25. native socket_send( id, data[] );
  26. native socket_listen( id, port );
  27. native socket_stoplisten( id );
  28. native socket_id_available( id );
  29. native socket_isactive( id );
  30. native socket_islistening( id );
  31. native socket_getbuffersize( id );
  32. native socket_setbuffersize( id, size );
  33. native socket_cleanstring( source[], dest[] );
  34.  
  35. forward onSocketConnect( id, ip[], port );
  36. forward onSocketDisconnect( id );
  37. forward onSocketReceive( id, data[] );
  38.  
  39.  
  40. forward ProcessarNomeMusica(playerid, resposta, data[]);
  41.  
  42. #include <a_samp>
  43. #include <a_http>
  44.  
  45.  
  46. //==============================================================================
  47.  
  48.  
  49. public OnFilterScriptInit() {
  50.     print("Sistema de escutar músicas in-game iniciado. Por Bruno da Silva");
  51.     return true;
  52. }
  53.  
  54. public OnPlayerDisconnect(playerid, reason) {
  55.  
  56.     socket_destroy( playerid );
  57.     return true;
  58. }
  59.  
  60.  
  61. public OnPlayerConnect(playerid) {
  62.  
  63.     socket_create( playerid );
  64.  
  65.     SendClientMessage(playerid, -1, "Esse servidor usa filterscript do Bruno da Silva para escutar músicas. {FF0000}Digite /m nomedamusica" );
  66.  
  67.     return true;
  68. }
  69.  
  70.  
  71. // =============================================================================
  72. //
  73. // Parte: OnPlayerCommandText
  74. //
  75. // Comando que o jogador usará para escutar a música
  76. // Dentro do jogo, digite "/m [nome da musica]"
  77. //
  78. // =============================================================================
  79.  
  80. public OnPlayerCommandText(playerid, cmdtext[]) {
  81.  
  82.     if(cmdtext[1] == 'm' && cmdtext[2] == ' ') {
  83.  
  84.         if(strlen(cmdtext) > 40)
  85.         return SendClientMessage(playerid, -1, "[Erro] Use \"/m [nome da musica]\" para ouvi-la");
  86.  
  87.  
  88.         new string [256];
  89.         format(string, 256, "brunosilva.net16.net/baixar.php?query=%s", urlencode(cmdtext[3]));
  90.  
  91.         HTTP( playerid, HTTP_GET, string, "\0", "ProcessarNomeMusica");
  92.         SendClientMessage(playerid,  -1, "[Info] O nome da música está sendo localizado em nossos bancos de dados");
  93.  
  94.         return true;
  95.  
  96.     }
  97.     return true;
  98. }
  99.  
  100.  
  101. // =============================================================================
  102. //
  103. // Função: ProcessarNomeMusica
  104. //
  105. // Função usada para processar a ligação da música requisitada
  106. // Meu site faz a requisição da música em um search do youtube
  107. //
  108. // =============================================================================
  109.  
  110.  
  111.  
  112. public ProcessarNomeMusica(playerid, resposta, data[]) {
  113.  
  114.     if(resposta != 200)
  115.     return SendClientMessage(playerid,  -1, "[Info] O nome da música não foi encontrado");
  116.  
  117.     static find;
  118.     find = strfind(data, "#v=");
  119.  
  120.     if(find == -1)
  121.     return SendClientMessage(playerid,  -1, "[Info] O nome da música não foi encontrado");
  122.  
  123.     format(data, 256, "%s", data[ find + 3]);
  124.  
  125.     data[strfind(data, "\">")] = EOS;
  126.  
  127.     format(data, 256, "url=http://www.youtube.com/watch?v=%s", data) ;
  128.  
  129.     EnviarRequisicao( playerid , data );
  130.  
  131.     return true;
  132. }
  133.  
  134.  
  135.  
  136. // =============================================================================
  137. //
  138. // Função: EnviarRequisicao
  139. //
  140. // Essa parte do código manipula uma requisição post para o site de youtube2mp3
  141. // Tive um trabalho danado para estudar esses métodos, é basicamente como
  142. // um navegador lida com um site qualquer quando há requisição post
  143. // Então preserve bem meus créditos: Bruno da Silva
  144. //
  145. // =============================================================================
  146.  
  147. stock EnviarRequisicao( playerid , query[] ) {
  148.  
  149.  
  150.     socket_setbuffersize(playerid, 1024);
  151.     socket_connect(playerid, "38.99.180.200", 80);
  152.  
  153.     new header[1024];
  154.     strcat(header, "POST /process.php HTTP/1.1\r\n" );
  155.     strcat(header, "Host: wwww.dibblr.com\r\n" );
  156.  
  157.     strcat(header, "Accept: */*\r\n");
  158.     strcat(header, "Accept-Language: pt-br\r\n");
  159.  
  160.     strcat(header,"Content-type: application/x-www-form-urlencoded\r\n" );
  161.  
  162.     new size[56];
  163.     format(size, 56, "Content-length: %d \r\n", strlen(query));
  164.     strcat(header, size);
  165.  
  166.     strcat(header, "Connection: close\r\n\r\n" );
  167.     strcat(header, query);
  168.  
  169.     socket_send(playerid, header);
  170.  
  171.  
  172.     SendClientMessage(playerid, -1, "[Info] Foi encontrado dados referente a sua música. Processando ela!" );
  173.  
  174.     return true;
  175. }
  176.  
  177.  
  178.  
  179.  
  180.  
  181. // =============================================================================
  182. //
  183. // Parte: onSocketReceive
  184. //
  185. // Nessa parte recebo os dados obtidos pelo site e filtro o código-fonte
  186. // Com esse filtro feito, é retirado a parte que mostra o link do nosso .mp3
  187. //
  188. //
  189. // =============================================================================
  190.  
  191.  
  192. public onSocketReceive( id, data[] ) {
  193.  
  194.     static find;
  195.     find = strfind(data, "href=\"");
  196.  
  197.     if ( find != -1) {
  198.  
  199.         format(data, 512, "%s", data[find + 6]);
  200.         data[strfind(data, "\">")] = EOS;
  201.  
  202.         PlayAudioStreamForPlayer(id, data);
  203.         SendClientMessage( id, -1, "[Info] Parece que ocorreu tudo bem, tentando executar a música" );
  204.  
  205.     }
  206.     else  {
  207.         SendClientMessage( id, -1, "[Erro] Ocorreu um erro na busca da música. Não foi possível pegar os dados" );
  208.     }
  209.  
  210.     if(socket_isactive(id))
  211.     socket_disconnect(id);
  212.  
  213.     return true;
  214. }
  215.  
  216. public onSocketDisconnect( id ) {
  217.     SendClientMessage( id, -1, "[Info] A busca para música foi finalizada" );
  218.     return true;
  219. }
  220.  
  221.  
  222.  
  223. // =============================================================================
  224. //
  225. // Função: urlencode
  226. //
  227. // Função usada para codificação das requisições feitas
  228. // Criado por DracoBlue
  229. //
  230. // =============================================================================
  231.  
  232.  
  233.  
  234.     stock urlencode(string[]) {
  235.         new ret[0xff];
  236.         ret[0] = 0;
  237.         new i = 0;
  238.         new p = 0;
  239.         new s = 0;
  240.         while (string[i] != 0) {
  241.             if  (
  242.             (string[i] >= 'A' && string[i] <='Z')
  243.             || (string[i] >= 'a' && string[i] <='z')
  244.             || (string[i] >= '0' && string[i] <='9')
  245.             || (string[i] == '-')
  246.             || (string[i] == '_')
  247.             || (string[i] == '.')
  248.             ) {
  249.                 ret[p] = string[i];
  250.             } else {
  251.                 //
  252.                 ret[p] = '%';
  253.                 p++;
  254.                 s = (string[i] % 16); //
  255.                 ret[p+1] = (s>9) ? (55+s) : (48+s); // 64 - 9 = 55
  256.                 s = floatround((string[i] - s)/16);
  257.                 ret[p] = (s>9) ? (55+s) : (48+s); // 64 - 9 = 55
  258.                 p++;
  259.             }
  260.             p++;
  261.             i++;
  262.         }
  263.         return ret;
  264.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement