Portal SAMP
[Include] Mustream (Estudo) - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Includes (https://portalsamp.com/forumdisplay.php?fid=27)
+---- Tópico: [Include] Mustream (Estudo) (/showthread.php?tid=3334)



Mustream (Estudo) - Dr Editor - 13/02/2023

Another one:
Antes de mais nada, apesar de já existir outros scripts com a mesma proposta, desenvolvi este apenas com recursos nativose com objetivo de estudo.
Não é um script com a mesma eficiência em termos de velocidade e funcionalidade dadas as limitações, porém entrega algo próximo.

Sobre:
Criei esta include apenas para passar o tempo e, por conta das limitações do SA:MP, não foi possível tirar 100% de proveito dos recursos dela.
A proposta foi usar inteiramente Pawn para criar um script capaz de fazer stream de músicas sem necessidade de conhecimento em outras línguas (como PHP e Json).

Problemas:
Foi usado uma API grátis e, conforme mencionado por outro colega da Board, existem várias músicas que não tocam ou só ficam disponíveis após algum momento (não sei como a API trabalha).
Me refiro especificamente desta resposta, onde debuguei o site: https://portalsamp.com/showthread.php?tid=1156&pid=12879#pid12879
Para garantir a eficiência deste tipo de sistema é necessário o uso de PHP para "enxugar" a quantidade de informações desnecessárias retornadas pelas APIs, mas o intuito foi brincar com a linguagem.

Compatibilidade e limitação:
Testei tanto com SAMP quanto com OpenMP e ambos apresentaram quase os mesmos resultados, com exceção do Open que na parte da limitação onde deveria apresentar o mesmo retorno de erro quando o servidor baixa muitos dados em uma única requisição acaba apenas imprimindo um erro no console.
Como o mod não permite o download de muitos dados (ou se possui onde configurar, não sei onde é), acaba que apenas consultas específicas dão retorno com sucesso.

Funções:
Código:
stock MusicSearchByKey(playerid, const search[]) // Realiza a busca das músicas através de palavras-chave
stock PlayMusic(playerid, index) // Após realizar a busca, selecione o index da música para iniciar o stream
stock GetPlayerMusicID(playerid, index) // Retorna o ID da música
stock GetPlayerMusicArtist(playerid, index) // Retorna o nome do artista
stock GetPlayerMusicName(playerid, index) // Retorna o nome da música
stock GetPlayerMusicDuration(playerid, index) // Retorna a duração da música
stock GetPlayerMusicPoolSize(playerid) // Retorna o último index válido da busca

Públicas:
Código:
forward OnPlayerRequestMusicList(playerid, key_words[], bool:error); // Chamado após realizar a busca das palavras-chave
forward OnPlayerPlayMusic(playerid, index); // Chamado quando o jogador inicia o stream da música

Screenshots:
[Imagem: maZOaPd.png]
[Imagem: kRs3U71.png]

Finalidade:
A include não apresenta bugs até então. O que temos é a limitação do mod mesmo.
Por conta disso vou disponibilizar para estudos para quem quer entender como manipular algumas informações inteiramente com Pawn.
Dá pra brincar bastante com esta linguagem e foi divertido criar esse script. Espero realmente que possa ajudar.

Download:
Anexo (Gamemode e Include)


RE: Mustream (Estudo) - tylerthecreator - 14/02/2023

Não sei se utilizei de forma incorreta, mas aqui apresentou o erro: "[MUSIC PLAYER] Houve um erro ao listar as músicas. Tente especificar melhor as palavras-chave."

Tentei diversas palavras e nomes, não sai disso.


RE: Mustream (Estudo) - Dr Editor - 15/02/2023

(14/02/2023 23:44)tylerthecreator Escreveu: Não sei se utilizei de forma incorreta, mas aqui apresentou o erro: "[MUSIC PLAYER] Houve um erro ao listar as músicas. Tente especificar melhor as palavras-chave."

Tentei diversas palavras e nomes, não sai disso.

Sim, é esta a limitação do SAMP/OpenMP infelizmente.
Quando a API retorna muitos dados acaba estrapolando o limite da memória e este retorno acaba sendo nulo.
Este sistema fiz somente pra passar o tempo mesmo, mas se utilizar PHP você consegue retornar apenas o dados necessários, logo esse erro não acontece. Mas como já há outras versões com PHP e esse sistema foi apenas para mostrar uma forma de trabalhar exclusivamente com Pawn optei por não trazer mais uma versão em PHP.

Outro detalhe é que isso acontece com mais frequência no cliente. No servidor, em forma de debug, acontece apenas quando são retornados mais de 15 resultados.
No cliente creio que precisa ser algo bem específico para não ultrapassar uns 5 resultados.