- Título: Tratando strings recebidas do servidor - http_get
- Versão do GM: Game Maker Studio
- Dificuldade: Mediano
- Link para download da Engine: Indisponivél
- Requer Extensões: Não.
- Requer DLLs: Não.
- Tags: Ler online; Tratando strings; Dados no servidor;
Aprendi este metodo usando o tutorial do Fredcobain mas não sabia como tratar as strings recebidas então bolei um pequeno script que "divide" o texto recebido em partes como Nome, Senha, Nivel ou qualquer coisa que você quiser.
Não vou ensinar a usar a função Http_get pois o tutorial do Fred ja está otimo então segue o link:
lendo e carregando arquivos online
Optei por baixar as informações de uma pagina PHP e não de um arquivo INI como no tutorial do Fred.
A função http_get("http://Tutorial.php"); retorna toda a impressão que esta sendo feita na pagina php cujo link foi passado, por exemplo, uma pagina php com este codigo:
Código: Selecionar todos
<?php
echo "Olá Gabriel Xavier";
?>
Então, mulecada já sabemos oque será retornado sempre que utilizarmos a função http_get, strings e mais strings.
Mas eis a questão, como vou saber oque é nome de usuario? Oque é senha??
Bem isso não é tão complexo como parece!
Pensando em uma pagina php com o seguinte codigo:
Tutorial.php
Código: Selecionar todos
<?php
$nome="Gabriel";
$senha="12345";
$nivel="50";
$xp="130";
echo "$nome,$senha,$nivel,$xp";
?>
Mas e agora Gabriel? Como separar estes dados?
Acalme-se! É bem simples.
Para desembaraçar esses dados usaremos o seguinte script que fiz:
Código: Selecionar todos
//----- Script de tratamento de strings-----//
/*
argument0 - id da lista que armazenara as strings tratadas
argument1 - string a ser tratada
*/
ds_list_clear(argument0); // limpa a lista para receber novos dados
t_x_t=argument1; // salva a string passada na variavel
n_m_r=1+string_count(",",t_x_t); // Retorna o numero de parametros passados
for(_i_=1;_i_<=n_m_r;_i_+=1){ // Se i for menor ou igual ao numero de parametros na string
if (_i_=n_m_r) // se for a ultima string então o unico texto que resta na variavel t_x_t é o ultimo parametro
{
ds_list_add(argument0,t_x_t); // Então salvamos a string na ds_list
break; // e encerrams o laço FOR
}
p_o_s=string_pos(",",t_x_t); // Identifica a posicao da proxima virgula
ds_list_add(argument0,string_copy(t_x_t,1,p_o_s-1)); // Adiciona o pedaço da string na lista
t_x_t=string_delete(t_x_t,1,p_o_s); // Deleta a parte da string que ja guardamos na lista
}
return n_m_r; //Retorna o numero de parametros na string passada, para saber o tamanho da lista por exemplo
Bom a ideia desse pequeno script é a seguinte,
Ele pega a string que foi retornada pela http_get digamos que essa string é a seguinte:
Código: Selecionar todos
texto="Gabriel,12345,50,130";
A função string_count(substring,string) retorna quantas ocorrencias de substring foi ocorrida em string, em outras palavas ela retona quantas vezes o caractere em questão foi encontrado na string, então essa função em nosso codigo conta quantas virgulas foram encontradas na string texto="Gabriel,12345,50,130";
Reparando que na string texto há 4 parametros (Nome=Gabriel,Senha=12345,Nivel=50,Xp=130) mas so existem 3 virgulas "," então por isso existe um "+1" em nosso script n_m_r=1+string_count(",",t_x_t); pois precisamos saber o numero de parametros que serão recebidos em nossa string baixada do pagina php.
Obs: As virgulas são quem nos indicaram onde termina um parametro.
Já expliquei bem a função acima e ela creio eu que seja a parte mais importante do nosso script pois ela possibilita que inumeros parametros sejam passados e salvos de forma "automatica" em nosso script.
Após identificar o numero de parametros que foram passados na string o proximo passo é identificar onde termina o nosso primeiro parametro que predefinidamente termina na primeira virgula texto="Gabriel,12345,50,130"; quem é responsavél por encontrar esta virgula é a função p_o_s=string_pos(",",t_x_t); que retorna em p_o_s a posição que está nossa primeira virgula que no caso é a posição 8.
Então ja sabemos que o nosso nome de usuario começa na posição 1 da string e vai ate a posição 7 pois a posição 8 ja é a virgula que separa nossos argumentos
Agora que ja sabemos onde termina nosso primeiro parametro precisamos separa-lo do restante do texto e salva-lo em algum lugar e quem fará isso é a função string_copy(string,começo,fim) esta função ira retornar a string que esta na posição começo ate a string que esta na posição fim em (em nosso script string_copy(t_x_t,1,p_o_s-1)).
Pronto \o/ finalmete conseguimos separar nosso nome de usuario do restante da string, agora precisamos salva-lo, mas salva-lo onde?
Em uma ds_lis, lembra que passamos o id de uma ds_list la no argument0 do nosso script? Bom é nela que vamos guardar o nosso nome de usuario na posição 0 dessa ds_list!
ds_list_add(argument0,string_copy(t_x_t,1,p_o_s-1));
Como iremos pegar o restante dos nossos dados nessa string?
A ideia é a mais simples de todas (óóóóhhhh como?) usando a função string_delete(string,começo,fim); esta função ira deletar a string entre os indices começo e fim e retorna o resto, então é bem simples a função deleta de nossa string esta parte em negrito "Gabriel,12345,50,130".
Observaram que existe um laço for em nosso script? Não? Volta la e olha!
Este laço sabe quantos parametros temos em nossa string pois ele esta usando como referencia os dados retornados pela função string_count(substring,string) explicada acima então este laço for irá roda exatamente o numero de parametros da string em voltas, agora ficou facil, cada volta do nosso for será salvo um parametro em nossa ds_list e esse mesmo parametro mais a primeira virgula serão deletados da nossa string.
Após a primeira volta nossa string fica assim "12345,50,130", após a segunda volta fica assim "50,130" e após a terceira fica assim "130", mas e agora Gabriel?
Não temos mais uma virgula para pegar como referencia para sabermos onde termina nosso proximo parametro ://
Cara na boa repara bem!
So nos restou um parametro!
Não temos outro então oque resta em nossa string é simplemente o nosso ultimo parametro!
Sim mas e como nosso laço for ira saber que ja é hora de parar? A varias formas de fazer isso decidi usar um if para verificar qual será nossa ultima volta, caso seja nossa ultima volta do laço for entramos no if salvamos nosso ultimo parametro na nossa ds_list e damos um break para finalizar o laço for.
Por ultimo retornamos o numero de parametros que foram salvos para sabermos quantos indices tem em nossa ds_list.
Agora vou mostrar como usar esse script, é importante lembrar de colocar os dados sempre na mesma ordem quando impressos em sua pagina php e quando salvos em sua ds_list.
Create
Código: Selecionar todos
list=ds_list_create(); // Cria a lista que guardara as strings baixadas do servidor
http_get("Link de sua pagina php"); // Acessa o link
aux=noone; // Variavél que checara se podemos imprimir algo na tela
Asynchronous>HTTP
Código: Selecionar todos
texto=ds_map_find_value(async_load,"result"); // Salva o texto recebido na variavel
nmr=scr_tratando_string(list,texto); // Chama a fução para tratar as strings, retorna o numero de dados obtidos
//scr_tratando_string(id_da_lista,string);
aux=ds_map_find_value(async_load,"http_status"); // caso retorne 200 a sincronia foi bem sucedida
Draw
Código: Selecionar todos
if (aux=200){//se for = 200 podemos imprimir
draw_text(10,15*1,"Nome:"+string(ds_list_find_value(list,0)));
draw_text(10,15*2,"Senha:"+string(ds_list_find_value(list,1)));
draw_text(10,15*3,"Nivel:"+string(ds_list_find_value(list,2)));
draw_text(10,15*4,"XP:"+string(ds_list_find_value(list,3)));
}
scr_tratando_string
Código: Selecionar todos
//----- Script de tratamento de strings-----//
/*
argument0 - id da lista que armazenara as strings tratadas
argument1 - string a ser tratada
*/
t_x_t=argument1; // salva a string passada na variavel
n_m_r=1+string_count(",",t_x_t); // Retorna o numero de parametros passados
for(_i_=1;_i_<=n_m_r;_i_+=1){ // Se i for menor ou igual ao numero de parametros na string
if (_i_=n_m_r) // se for a ultima string então o unico texto que resta na variavel t_x_t é o ultimo parametro
{
ds_list_add(argument0,t_x_t); // Então salvamos a string na ds_list
break; // e encerrams o laço FOR
}
p_o_s=string_pos(",",t_x_t); // Identifica a posicao da proxima virgula
ds_list_add(argument0,string_copy(t_x_t,1,p_o_s-1)); // Adiciona o pedaço da string na lista
t_x_t=string_delete(t_x_t,1,p_o_s); // Deleta a parte da string que ja guardamos na lista
}
return n_m_r; // retorna o numero de parametros na string passada, para saber o tamanho da lista por exemplo
Pronto agora está apto a carregar dados de seus jogos em um banco de dados na nuvem!!!
ABRAÇOS!