Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) 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
» (RESOLVIDO) 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
Servidor enviar dados ao cliente GM:S Online
5 participantes
Página 1 de 1
Servidor enviar dados ao cliente GM:S Online
To tendo dificuldades (realmente nao sei como fazer) para com que o servidor envie dados para os clientes.
Consigo enviar os dados dos clientes para o sevidor mas nao consigo enviar os dados do servidor para os clientes.
To usando o online interno do GM:S
Me basiei neste tutorial: https://gmbr.forumeiros.com/t27638-tutorial-de-multiplayer-networking-nativo-gms
OBS: Não consegui fazer nem com que o servidor ativasse o evento network do cliente.
Please ja faz 12 horas que estou empacado em tentar resolver isso para proseguir com miha intenções e nada de conseguir :'(
Consigo enviar os dados dos clientes para o sevidor mas nao consigo enviar os dados do servidor para os clientes.
To usando o online interno do GM:S
Me basiei neste tutorial: https://gmbr.forumeiros.com/t27638-tutorial-de-multiplayer-networking-nativo-gms
OBS: Não consegui fazer nem com que o servidor ativasse o evento network do cliente.
Please ja faz 12 horas que estou empacado em tentar resolver isso para proseguir com miha intenções e nada de conseguir :'(
GabrielXavier- Games Ranking :
Notas recebidas : A
Data de inscrição : 25/02/2012
Reputação : 45
Número de Mensagens : 403
Prêmios :
x 0 x 1 x 0
x 0 x 1 x 1
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Re: Servidor enviar dados ao cliente GM:S Online
- Código:
Mensagem="Teste";
ServerBuff = buffer_create( 256, buffer_grow, 1)
buffer_seek(ServerBuff,buffer_seek_start,0);
buffer_write(ServerBuff,buffer_string,Mensagem);
network_send_packet(AS_ID,ServerBuff,buffer_tell(ServerBuff));
Se você reparou, no tutorial o Fred pega o AS_ID assim:
- Código:
AS_ID=ds_map_find_value(async_load,"id");
Obs: Ainda estou aprendendo sobre o assunto. Talvez possa ser feito de um modo melhor.
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: Servidor enviar dados ao cliente GM:S Online
Funciona assim, quando você recebe o evento Networking você tem três tipo de eventos que podem acontecer:
1) Conexao
2) Dados
3) Desconexão
Para se comunicar com o "cliente" você deve armazenar o sockete dele, porém este soquete vem de forma diferente dependendo do evento em questão.
Nos Eventos de Conexão e Desconexão eles estão na chave "socket" no mapa "async_load". Já no evento de "dados" o soquete esta na chave "id" do mapa "async_load". Está é a grande confusão. Então, BASICAMENTE para responder os eventos você precisa de algo como descrito abaixo:
SERVIDOR BASICO
Evento CREATE
Flws!
1) Conexao
2) Dados
3) Desconexão
Para se comunicar com o "cliente" você deve armazenar o sockete dele, porém este soquete vem de forma diferente dependendo do evento em questão.
Nos Eventos de Conexão e Desconexão eles estão na chave "socket" no mapa "async_load". Já no evento de "dados" o soquete esta na chave "id" do mapa "async_load". Está é a grande confusão. Então, BASICAMENTE para responder os eventos você precisa de algo como descrito abaixo:
SERVIDOR BASICO
Evento CREATE
- Código:
server_sock = network_create_server(network_socket_tcp, 6666, 10); // Armazena o soquete do Servidor.
if (server_sock < 0)
{
show_message("Erro conectando!");
game_end();
exit;
}
// Conexao ok vamos criar o buffer
buffer = buffer_create(256, buffer_grow, 1);
- Código:
type = ds_map_find_value(async_load, "type"); // Tipo de evento
if (type == network_type_connect)
{
sock_cliente = ds_map_find_value(async_load, "socket"); // Aqui o soquete vem nesta chave
// Envia um OI pro cliente
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_string, "Oi Cliente!");
network_send_packet(sock, buffer, buffer_tell(buffer));
}
if (type == network_type_data)
{
sock = ds_map_find_value(async_load, "id"); // Agora o danado vem no ID...
if (sock == sock_cliente) // nem precisava pois temos somente um cliente neste teste, mas so pra constar
{
buf = ds_map_find_value(async_load, "buffer"); // Pega o buffer de dados que o CLIENTE enviou
msg = buffer_read(buf, buffer_string); // le a mensagem do cliente
show_message(msg); // mostra a mensagem na tela
}
}
if (type == network_type_disconnect)
{
show_message("Cliente disconectou!");
}
- Código:
// Aqui precisamos liberar os recursos alocados em CREATE
buffer_delete(buffer); // libera o buffer
network_destroy(server_sock); // libera o soquete do server
Flws!
Re: Servidor enviar dados ao cliente GM:S Online
Valeew cara suas explicações sanaram minhas duvidas.!
Vlw tbm PedroX!
Vlw tbm PedroX!
GabrielXavier- Games Ranking :
Notas recebidas : A
Data de inscrição : 25/02/2012
Reputação : 45
Número de Mensagens : 403
Prêmios :
x 0 x 1 x 0
x 0 x 1 x 1
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Re: Servidor enviar dados ao cliente GM:S Online
Vinians, vc foi exatamente no ponto. Perfeito. Essa diferença é sutil mas gera bastante dúvidas mesmo. Vou até complementar meu tuto com essa observação.
Pra ficar claro:
A comunicação do server com os clients é um pouco diferente pois vc tem que especificar qual client (através do socket).
Existem 2 formas de vc identificar quem é o socket de destino:
1) Quando um client se conecta ao server, é disparado no server o evento ASYNCRONOUS NETWORKING.
Sempre que isso ocorre, o mapa async_load é carregado com informações.
A informação que vc precisa (ID do SOCKET) estará na variável SOCKET desse mapa.
Toda vez que esse evento de conexão ocorrer, vc vai salvar o ID desse client num vetor ou lista... assim vc tem o "endereço" (ou caixa postal, segundo minha fábula) desse client.
2) Sempre que um cliente (já conectado) manda alguma mensagem para o server, o mapa async_load novamente é carregado com informações.
A informação que vc precisa (ID do SOCKET) estará na variável ID desse mapa. Então vc sabe quem mandou a mensagem.
Ah sim... é claro, existe também uma terceira forma. Que vc pode falar com todo mundo via um comando de broadcast (coisa que não abordei no tuto):
Mas penso eu que o broadcast só funciona para UDP.
Pra ficar claro:
A comunicação do server com os clients é um pouco diferente pois vc tem que especificar qual client (através do socket).
Existem 2 formas de vc identificar quem é o socket de destino:
1) Quando um client se conecta ao server, é disparado no server o evento ASYNCRONOUS NETWORKING.
Sempre que isso ocorre, o mapa async_load é carregado com informações.
A informação que vc precisa (ID do SOCKET) estará na variável SOCKET desse mapa.
Toda vez que esse evento de conexão ocorrer, vc vai salvar o ID desse client num vetor ou lista... assim vc tem o "endereço" (ou caixa postal, segundo minha fábula) desse client.
2) Sempre que um cliente (já conectado) manda alguma mensagem para o server, o mapa async_load novamente é carregado com informações.
A informação que vc precisa (ID do SOCKET) estará na variável ID desse mapa. Então vc sabe quem mandou a mensagem.
Ah sim... é claro, existe também uma terceira forma. Que vc pode falar com todo mundo via um comando de broadcast (coisa que não abordei no tuto):
- Código:
buffer_seek(broadcast_buffer, buffer_seek_start, 0);
buffer_write(broadcast_buffer, buffer_string, global.ServerName);
network_send_broadcast(server, 6511, broadcast_buffer, buffer_tell(broadcast_buffer));
Mas penso eu que o broadcast só funciona para UDP.
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: Servidor enviar dados ao cliente GM:S Online
Este serviço de broadcast funcionaria bem pra eu informar aos clientes que há um servidor ou vários ativos, atribuindo um nome para cada servidor e dando opção ao cliente de conectar-se no servidor selecionado. confere essa informação ?
ekuhnen- Data de inscrição : 05/10/2012
Reputação : 3
Número de Mensagens : 47
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Servidor enviar dados ao cliente GM:S Online
Confere sim. Inclusive na engine de networking da própria Yoyogames (demos) ela faz uso dessa feature pra notificar os servidores disponíveis.
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: Servidor enviar dados ao cliente GM:S Online
Você tem o engine do exemplo da yoyo? to procurando aqui e não encontro, quero olhar essa questão com calma pois a minha ideia é que um mobile execute o server e libere para outras conexões através do hotspot.
ekuhnen- Data de inscrição : 05/10/2012
Reputação : 3
Número de Mensagens : 47
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Servidor enviar dados ao cliente GM:S Online
No final dessa página, tem um link para o NetworkDemo.GMZ
http://help.yoyogames.com/entries/25891363-Networking-Overview
http://help.yoyogames.com/entries/25891363-Networking-Overview
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
Tópicos semelhantes
» Conceito de autenticação de cliente no servidor?
» [PEDIDO] servidor e cliente simples
» Online sem servidor
» Enviar arquivos servidor
» como eu envio e recebe dados do servidor usando .txt ???
» [PEDIDO] servidor e cliente simples
» Online sem servidor
» Enviar arquivos servidor
» como eu envio e recebe dados do servidor usando .txt ???
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos