Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Ontem à(s) 13:33
» É possível fazer istó no game maker
por William Lima Ontem à(s) 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[Tutorial] - Lendo (e carregando) arquivos online
+9
irlansn
moisesBR
CRP-Max
Magritte
Crovux
Gonzo
Gonçalves
PedroX
fredcobain
13 participantes
Página 1 de 2
Página 1 de 2 • 1, 2
[Tutorial] - Lendo (e carregando) arquivos online
- Título: Lendo Arquivos Online
- GM Version: :GMS:
- Link para download da Engine: ARQUIVOSONLINE
- Requer Extensões: Não
- Requer DLLs: Não. GML Puro e aplicado =)
- Tags: Ler online; arquivos online; ler webserver;
Lendo arquivos Online
Bom, tudo começou quando eu estava querendo fazer uma aplicação para Android que buscasse os dados em um servidor web.
Obviamente não poderia fazer uso de DLL's, pois não era pra rodar no Windows.
Depois de muito quebrar a cabeça e tentar entender (até pq vcs verão que é um tanto quanto estranho a forma do GMS alocar esses dados), consegui exorcizar e espero tornar a vida de vcs mais fácil.
Para que vcs entendam mesmo, temos que ir por partes.... então vamos lá:
Parte 1 - Eventos Assíncronos
A única forma eficiente de buscar algo online é através de eventos assíncronos (asynchronous events). São chamados assim porque nós nunca sabemos quando a função assíncrona vai completar o seu trabalho.
Para todas as funções normais (síncronas), a chamada de linha do algoritmo dura 1 step.
No caso das funções assíncronas, estas são disparadas e só Jesus sabe quando (em qual step) que vão retornar alguma coisa.
MAAASSSSS, quando retornam (aleluia), é disparado um evento assíncrono no GMS (Asynchronous Event). Essa é a hora de checar o que foi retornado.
Parte 2 - Função http_get(url)
A função http_get() é uma função assíncrona (ohhh!). Isso significa que é aquele tipo de função que vc chama e esquece. Em algum step do jogo ela vai voltar (qdo ela conseguir carregar o conteúdo da url que vc passou como parâmetro).
Por isso, vc não vai conseguir trabalhar com o conteúdo da URL na próxima chamada (step). Pode esperar a vida toda que não vai dar certo.... a única forma de dar certo é sendo sinalizado por um Evento Assíncrono relacionado a essa bendita função http_get(). E esse evento está dentro de ASYNCHRONOUS, mais precisamente o evento HTTP.
Bom, com isso nós já temos o "QUANDO".
Agora falta o "ONDE".
Pasmem, a função http_get() não vai te retornar bulhufas.... (na verdade vai, mas não é o que vc quer... vcs vão entender mais a frente). O conteúdo da URL é salvo numa váriavel global nativa chamada async_load.
É desse corno que vamos falar agora.
Parte 3 - variável async_load
Esse cara é uma variável global nativa do GMS. É uma variável do tipo DS_MAP. (Se não sabem como funciona um DS_MAP, vão estudar essa estrutura de dados no manual do GMS, mas pra simplificar posso dizer que o DS_MAP é um mapa que contém várias chaves dentro de cada posição (quase como se fosse um arquivo.ini salvo na memória).
A estrutura da varíavel async_load quando fazemos uma chamada pelo http_get() será composta pelas chaves abaixo:
*ID : A posição (ID) do conteúdo da chamada http (que vc fez através do http_get()). Toda vez que vc chama essa função (http_get), um novo conjunto de chaves é criado dentro do mapa async_load. Começando na posição (ID) 0. Assim, se vc faz 3 chamadas http_get() no seu código, vc gera 3 eventos assíncronos do tipo HTTP, alimentando o mapa async_load em 3 posições (0, 1 e 2) - uma para cada chamada. Vejam vcs que quando chamamos o http_get(url), na verdade ela retorna essa chave, ou seja, o valor da chave "ID" da variável async_load onde a url em questão será descarregada.
Pra eu entender isso tive que perder uma tarde inteira.... como sou burro...
*URL : O endereço que vc passou na função http_get - Tipo http://www.game.com/teste.ini
*result : Aqui está o conteúdo (que é salvo numa string) do arquivo que vc apontou na url (ou seja, aqui está o conteúdo do arquivo online teste.ini) - my precious!
*http_status : É o código http que é retornado na chamada http_get. Ex: 200 para OK. 404 para não encontrado. 204 para sem conteúdo, etc... O negócio aqui é torcer pra dar o valor 200, senão, é pq o webserver não aceita acessar diretamente esse arquivo, ou vc passou o endereço errado, ou está fora do ar, ou vc é uma anta, etc.
◦status : Quando dá algum erro, um valor menor que 0 é retornado nessa chave.
Pronto, agora temos a faca e o queijo na mão!!!! Vamos ver na prática como funciona essa joça.
Parte 4 - A p**** do código =)
Não precisamos mais que uma room e um objeto (dentro da room de preferência ¬¬).
No CREATE_EVENT:
- Código:
pega_arquivo = http_get("http://www.dorway.com/test.txt");
O que acontece no código acima é que a variável "pega_arquivo" vai disparar um evento http_get(). O conteúdo dessa url vai ser salvo no mapa async_load. o ID do async_load vai ser o mesmo salvo na variável pega_arquivo.
Isto posto, precisamos de um evento ASYNCHRONOUS / HTTP para pegarmos o resultado dessa chamada (que é salvo na variável async_load - nada mais nada menos que um mísero ds_map).
No evento HTTP (Asynchronous)
- Código:
show_message(string(ds_map_find_value(async_load,"id")));
a função http_get(), o valor vai ser 0. Se for a segunda vez, vai ser 1. E assim sucessivamente.
- Código:
show_message(ds_map_find_value(async_load,"url"));
- Código:
show_message(string(ds_map_find_value(async_load,"http_status")));
- Código:
show_message(ds_map_find_value(async_load,"result")));
Assim vc pode trabalhar dentro dessa chave. Pode por exemplo salvar localmente. Etc...
Bom, agora vcs (assim como eu) estão doutrinados nessa missão.
Espero que esse tutorial tenha sido de grande valia, e que vcs não tenham que bater tanto a cabeça quanto eu pra carregar conteúdo online.
No início do post tem o link de um GMZ para vcs importarem e verem a engine funcionando no GMS. A engine basicamente faz o download do arquivo que está hospedado no webserver e mostra na tela a primeira linha desse arquivo.
Boas criações à todos.
Titio Fred.
Última edição por fredcobain em Dom 12 maio 2013, 16:40, editado 1 vez(es)
fredcobain- Games Ranking :
Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios :
x 0 x 3 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
Muito bom o tutorial. Quando der, continue a postar tutoriais. Vlw.
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: [Tutorial] - Lendo (e carregando) arquivos online
Também achei muito bom o tutorial, muito fácil de entender.
E a função parece ser muito mais rápida que a da HTTP DLL para GM8. Continue a contribuir sempre que possível!
E a função parece ser muito mais rápida que a da HTTP DLL para GM8. Continue a contribuir sempre que possível!
Gonçalves- Games Ranking :
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios :
x 0 x 4 x 0
x 2 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
baixei a engine e só apareceram alguma janelas com as mensagens não era pra ele ler algum arquivo online e baixar o arquivo ?
eu demoro pra intender mais quando intendo o baguio fica loko
Gonzo- Data de inscrição : 29/05/2012
Reputação : 33
Número de Mensagens : 929
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
Ah e, será que tem uma forma de baixar a informação do .txt e passar direto para uma string? Seria mais rápido e evitaria possíveis falhas... Quanto as falhas acho que seria bem raro acontecer assim do jeito que está mas seria mais fácil não ter de criar um .txt com as informações pra depois passar pro jogo.
Gonçalves- Games Ranking :
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios :
x 0 x 4 x 0
x 2 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
Mina do Rock escreveu:baixei a engine e só apareceram alguma janelas com as mensagens não era pra ele ler algum arquivo online e baixar o arquivo ?eu demoro pra intender mais quando intendo o baguio fica loko
Então, o que a engine faz é copiar o conteúdo de um arquivo online para um arquivo local.
Dá uma olhadinha nos comentários do código.
Gonçalves escreveu:Ah e, será que tem uma forma de baixar a informação do .txt e passar direto para uma string? Seria mais rápido e evitaria possíveis falhas... Quanto as falhas acho que seria bem raro acontecer assim do jeito que está mas seria mais fácil não ter de criar um .txt com as informações pra depois passar pro jogo.
Dá sim.
Na verdade a chave "result" do async_load é uma variável do tipo string.
Depois que vc chama o http_get(url) passando o endereço do seu arquivo txt na web, vc pode criar uma variável qualquer no evento HTTP para salvar o conteúdo:
Ex:
- Código:
conteudo = ds_map_find_value(async_load,"result");
Ou seja, no exemplo acima o texto contido no arquivo txt online (que vc passou na função http_get) será salvo na variável (do tipo string) conteúdo.
Entendeu ?
Postagens unidas por Gonçalves! Evite double-post.
fredcobain- Games Ranking :
Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios :
x 0 x 3 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
#fred
Sim, obrigado pela resposta. A teoria consegui sacar, mas não tenho como testar agora, mas tarde vejo se funciona.
Até mais!
Sim, obrigado pela resposta. A teoria consegui sacar, mas não tenho como testar agora, mas tarde vejo se funciona.
Até mais!
Gonçalves- Games Ranking :
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios :
x 0 x 4 x 0
x 2 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
legal.. Isso pode ser útil pra muitas coisas!
Crovux- Data de inscrição : 07/01/2012
Reputação : 6
Número de Mensagens : 169
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
Eu sou um novato no Game Maker, e não entendi direito uma coisa:
Para o que isso serve?
Desculpe a minha nubisse!
Para o que isso serve?
Magritte- Data de inscrição : 22/04/2013
Reputação : 17
Número de Mensagens : 163
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Unity
- Godot
Re: [Tutorial] - Lendo (e carregando) arquivos online
#marcigre
Serve pra baixar arquivos de internet, permitindo baixar bases de dados atualizadas para softwares, buscar atualizações para jogos, ou até mesmo gerenciar downloads. Vai da imaginação do programador! o/
Serve pra baixar arquivos de internet, permitindo baixar bases de dados atualizadas para softwares, buscar atualizações para jogos, ou até mesmo gerenciar downloads. Vai da imaginação do programador! o/
Gonçalves- Games Ranking :
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios :
x 0 x 4 x 0
x 2 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
Não tinha visto esta mensagens antes, conteúdo muito bom, bem explicado e divertido de ler, parabéns.
Agora só falta uma forma de gera estes arquivos online, dai seria perfeito.
Agora só falta uma forma de gera estes arquivos online, dai seria perfeito.
CRP-Max- Games Ranking :
Notas recebidas : C
Data de inscrição : 28/10/2008
Reputação : 29
Número de Mensagens : 822
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
CRP-Max escreveu:Não tinha visto esta mensagens antes, conteúdo muito bom, bem explicado e divertido de ler, parabéns.
Agora só falta uma forma de gera estes arquivos online, dai seria perfeito.
Amigo, obrigado pelos elogios ao post.
Penso que não tem como fazer o upload nativamente pelo GMS.
Mas acho que com PHP junto dá pra fazer.
Veja o script no fórum do GMC.
Link - Upload File
fredcobain- Games Ranking :
Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios :
x 0 x 3 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
fredcobain da pra vc fazer uma engine que le um numero online, exemplo 435345345323 e se bater como o do exe ir pra room 2 ? e se nao bater aparecer uma janelinha mostrando senha invalida, vc poderia fazer isso pra nos ?
vlw
vlw
Gonzo- Data de inscrição : 29/05/2012
Reputação : 33
Número de Mensagens : 929
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
Gonzo escreveu:fredcobain da pra vc fazer uma engine que le um numero online, exemplo 435345345323 e se bater como o do exe ir pra room 2 ? e se nao bater aparecer uma janelinha mostrando senha invalida, vc poderia fazer isso pra nos ?
vlw
Fala Gonzo, desculpe, mas não entendi o que vc quis dizer com "bater com o do exe" ?
Qual seria esse número do "exe" ? Como ele é gerado ?
fredcobain- Games Ranking :
Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios :
x 0 x 3 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
cara seria tipo um serial mesmo, e o do exe seria gerado manualmente pra bater com o do online, pode fazer?
Gonzo- Data de inscrição : 29/05/2012
Reputação : 33
Número de Mensagens : 929
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
A idéia seria a seguinte:
Eu criaria um arquivo serial.txt e colocaria e hospedaria em algum servidor web.
Usando a minha engine, é só vc trocar a url no create event:
pega_arquivo = http_get("http://www.seuservidor.com/serial.txt");
No final, o conteúdo desse arquivo (ou seja, o serial) vai ser carregado na variável "result" do mapa async_load. Vc acessa via:
ds_map_find_value(async_load,"result")
Então vc pega esse valor e compara com o serial do seu EXE.
Entendeu?
Eu criaria um arquivo serial.txt e colocaria e hospedaria em algum servidor web.
Usando a minha engine, é só vc trocar a url no create event:
pega_arquivo = http_get("http://www.seuservidor.com/serial.txt");
No final, o conteúdo desse arquivo (ou seja, o serial) vai ser carregado na variável "result" do mapa async_load. Vc acessa via:
ds_map_find_value(async_load,"result")
Então vc pega esse valor e compara com o serial do seu EXE.
Entendeu?
fredcobain- Games Ranking :
Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios :
x 0 x 3 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
a cara na verdade eu preciso que o o gms salve o serial do link em um arquivo ini, só isso se possivel. vlw:)
https://dl.dropboxusercontent.com/u/4532144/teste_serial.txt
https://dl.dropboxusercontent.com/u/4532144/teste_serial.txt
Gonzo- Data de inscrição : 29/05/2012
Reputação : 33
Número de Mensagens : 929
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
Gonzo escreveu: escreveu:fredcobain da pra vc fazer uma engine que le um numero online, exemplo 435345345323 e se bater como o do exe ir pra room 2 ? e se nao bater aparecer uma janelinha mostrando senha invalida, vc poderia fazer isso pra nos ?
vlw
dê uma olhada eu consegui fazer isso usando o seu serial e o netread!:
https://www.dropbox.com/s/iq10zg52rgblpl1/letextoexterno%28moisesbr%29.rar
Re: [Tutorial] - Lendo (e carregando) arquivos online
moisesBR escreveu:Gonzo escreveu: escreveu:fredcobain da pra vc fazer uma engine que le um numero online, exemplo 435345345323 e se bater como o do exe ir pra room 2 ? e se nao bater aparecer uma janelinha mostrando senha invalida, vc poderia fazer isso pra nos ?
vlw
dê uma olhada eu consegui fazer isso usando o seu serial e o netread!:
https://www.dropbox.com/s/iq10zg52rgblpl1/letextoexterno%28moisesbr%29.rar
Moisés, o problema de usar DLL é que vc fica restrito ao windows... não consegue exportar para as outras plataformas...
Mais tarde eu vou fazer o exemplo usando os comandos nativos do gms.
=)
------------------------------------------------------------------------------------------------
Pronto.
Gonzo, ta aqui o que vc queria. Enjoy.
Checar Serial Online - Gonzo
fredcobain- Games Ranking :
Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios :
x 0 x 3 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] - Lendo (e carregando) arquivos online
blz agora funfo ki legal.. vlw moises e fredcobain duas engines que eu tinha curiosidade de saber vlw .
off : gente pq nao tem + e - de reputacao no meu perfil pra eu agradece a galera q me da uma força ?
vlw
off : gente pq nao tem + e - de reputacao no meu perfil pra eu agradece a galera q me da uma força ?
vlw
Gonzo- Data de inscrição : 29/05/2012
Reputação : 33
Número de Mensagens : 929
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Página 1 de 2 • 1, 2
Tópicos semelhantes
» Descompactando e Carregando arquivos
» [GMS]Carregando arquivos externos?
» GM:S carregando imagens online
» Jogo online carregando junto com a pagina
» [Tutorial] Salvando e Carregando
» [GMS]Carregando arquivos externos?
» GM:S carregando imagens online
» Jogo online carregando junto com a pagina
» [Tutorial] Salvando e Carregando
Página 1 de 2
Permissões neste sub-fórum
Não podes responder a tópicos