Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //==============================================================================
- //
- //
- // Escutador de música in-game
- // Escute músicas pelo nome! Sem links, tudo em tempo real
- // Por Bruno da Silva @ brunodasilva.com — [iPs]TeaM
- //
- //
- //==============================================================================
- //
- // Requer plugin "sampwinsock.dll" de "langricr"
- // http://forum.sa-mp.com/showthread.php?t=261993
- //
- // Aqui abaixo vão as declarações e includes usuais
- // Devido meu host ser ruim, possível o sistema pode ficar fora do ár de madrugada
- //
- // Tenha um bom uso da ferramenta!
- //
- native socket_create( id );
- native socket_destroy( id );
- native socket_connect( id, ip[], port);
- native socket_disconnect( id );
- native socket_send( id, data[] );
- native socket_listen( id, port );
- native socket_stoplisten( id );
- native socket_id_available( id );
- native socket_isactive( id );
- native socket_islistening( id );
- native socket_getbuffersize( id );
- native socket_setbuffersize( id, size );
- native socket_cleanstring( source[], dest[] );
- forward onSocketConnect( id, ip[], port );
- forward onSocketDisconnect( id );
- forward onSocketReceive( id, data[] );
- forward ProcessarNomeMusica(playerid, resposta, data[]);
- #include <a_samp>
- #include <a_http>
- //==============================================================================
- public OnFilterScriptInit() {
- print("Sistema de escutar músicas in-game iniciado. Por Bruno da Silva");
- return true;
- }
- public OnPlayerDisconnect(playerid, reason) {
- socket_destroy( playerid );
- return true;
- }
- public OnPlayerConnect(playerid) {
- socket_create( playerid );
- SendClientMessage(playerid, -1, "Esse servidor usa filterscript do Bruno da Silva para escutar músicas. {FF0000}Digite /m nomedamusica" );
- return true;
- }
- // =============================================================================
- //
- // Parte: OnPlayerCommandText
- //
- // Comando que o jogador usará para escutar a música
- // Dentro do jogo, digite "/m [nome da musica]"
- //
- // =============================================================================
- public OnPlayerCommandText(playerid, cmdtext[]) {
- if(cmdtext[1] == 'm' && cmdtext[2] == ' ') {
- if(strlen(cmdtext) > 40)
- return SendClientMessage(playerid, -1, "[Erro] Use \"/m [nome da musica]\" para ouvi-la");
- new string [256];
- format(string, 256, "brunosilva.net16.net/baixar.php?query=%s", urlencode(cmdtext[3]));
- HTTP( playerid, HTTP_GET, string, "\0", "ProcessarNomeMusica");
- SendClientMessage(playerid, -1, "[Info] O nome da música está sendo localizado em nossos bancos de dados");
- return true;
- }
- return true;
- }
- // =============================================================================
- //
- // Função: ProcessarNomeMusica
- //
- // Função usada para processar a ligação da música requisitada
- // Meu site faz a requisição da música em um search do youtube
- //
- // =============================================================================
- public ProcessarNomeMusica(playerid, resposta, data[]) {
- if(resposta != 200)
- return SendClientMessage(playerid, -1, "[Info] O nome da música não foi encontrado");
- static find;
- find = strfind(data, "#v=");
- if(find == -1)
- return SendClientMessage(playerid, -1, "[Info] O nome da música não foi encontrado");
- format(data, 256, "%s", data[ find + 3]);
- data[strfind(data, "\">")] = EOS;
- format(data, 256, "url=http://www.youtube.com/watch?v=%s", data) ;
- EnviarRequisicao( playerid , data );
- return true;
- }
- // =============================================================================
- //
- // Função: EnviarRequisicao
- //
- // Essa parte do código manipula uma requisição post para o site de youtube2mp3
- // Tive um trabalho danado para estudar esses métodos, é basicamente como
- // um navegador lida com um site qualquer quando há requisição post
- // Então preserve bem meus créditos: Bruno da Silva
- //
- // =============================================================================
- stock EnviarRequisicao( playerid , query[] ) {
- socket_setbuffersize(playerid, 1024);
- socket_connect(playerid, "38.99.180.200", 80);
- new header[1024];
- strcat(header, "POST /process.php HTTP/1.1\r\n" );
- strcat(header, "Host: wwww.dibblr.com\r\n" );
- strcat(header, "Accept: */*\r\n");
- strcat(header, "Accept-Language: pt-br\r\n");
- strcat(header,"Content-type: application/x-www-form-urlencoded\r\n" );
- new size[56];
- format(size, 56, "Content-length: %d \r\n", strlen(query));
- strcat(header, size);
- strcat(header, "Connection: close\r\n\r\n" );
- strcat(header, query);
- socket_send(playerid, header);
- SendClientMessage(playerid, -1, "[Info] Foi encontrado dados referente a sua música. Processando ela!" );
- return true;
- }
- // =============================================================================
- //
- // Parte: onSocketReceive
- //
- // Nessa parte recebo os dados obtidos pelo site e filtro o código-fonte
- // Com esse filtro feito, é retirado a parte que mostra o link do nosso .mp3
- //
- //
- // =============================================================================
- public onSocketReceive( id, data[] ) {
- static find;
- find = strfind(data, "href=\"");
- if ( find != -1) {
- format(data, 512, "%s", data[find + 6]);
- data[strfind(data, "\">")] = EOS;
- PlayAudioStreamForPlayer(id, data);
- SendClientMessage( id, -1, "[Info] Parece que ocorreu tudo bem, tentando executar a música" );
- }
- else {
- SendClientMessage( id, -1, "[Erro] Ocorreu um erro na busca da música. Não foi possível pegar os dados" );
- }
- if(socket_isactive(id))
- socket_disconnect(id);
- return true;
- }
- public onSocketDisconnect( id ) {
- SendClientMessage( id, -1, "[Info] A busca para música foi finalizada" );
- return true;
- }
- // =============================================================================
- //
- // Função: urlencode
- //
- // Função usada para codificação das requisições feitas
- // Criado por DracoBlue
- //
- // =============================================================================
- stock urlencode(string[]) {
- new ret[0xff];
- ret[0] = 0;
- new i = 0;
- new p = 0;
- new s = 0;
- while (string[i] != 0) {
- if (
- (string[i] >= 'A' && string[i] <='Z')
- || (string[i] >= 'a' && string[i] <='z')
- || (string[i] >= '0' && string[i] <='9')
- || (string[i] == '-')
- || (string[i] == '_')
- || (string[i] == '.')
- ) {
- ret[p] = string[i];
- } else {
- //
- ret[p] = '%';
- p++;
- s = (string[i] % 16); //
- ret[p+1] = (s>9) ? (55+s) : (48+s); // 64 - 9 = 55
- s = floatround((string[i] - s)/16);
- ret[p] = (s>9) ? (55+s) : (48+s); // 64 - 9 = 55
- p++;
- }
- p++;
- i++;
- }
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement