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
Tutorial - Como fazer um jogo multiplayer online - Parte II
+21
Mart10carado
MatheusReis
Gabreel
Furious God
irlansn
Mannoroth
Natch
itarodrigo
.:Allison:.
williamsp
Tedi Ripper
Markituh
allanjau
carotmaker
kevin sousa
Super Games
itallo
vinians
PedroX
F. Nizzio
Janx
25 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 2 de 3
Página 2 de 3 • 1, 2, 3
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
krak, essas citacoes, n da pra indende nada, lol
Ai Markituh, eu n consigo intende como vc tem1168 mensagens, e se registrou em 2009, eu nunca tinha visto vc no forum
Ai Markituh, eu n consigo intende como vc tem1168 mensagens, e se registrou em 2009, eu nunca tinha visto vc no forum
Tedi Ripper- Games Ranking :
Data de inscrição : 21/11/2010
Reputação : 25
Número de Mensagens : 777
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
vc deveria ser mais especifico com seu tutorial
como saber onde colocar alguns codigos se vc nao especifica onde colocalos
exemplo
A estrutura de uma mensagem:
Antes de seguirmos para o próximo item, é preciso saber como é a estrutura das mensagens trocadas entre Client e Servidor. Na verdade é muito simples, mas sempre varia de mensagem para mensagem. A estrutura básica é assim:
Primeiros dois bytes = Tamanho da mensagem em bytes.
Terceiro byte = ID da mensagem. Serve para identificar qual o tipo de mensagem é essa, para que possamos manipulá-la corretamente.
Restantes = “Mensagem”.
Vamos ver um exemplo em que eu envio uma String “Testando” que tem ID de mensagem 5:
view source
print?
1 clearbuffer(); //Limpa o buffer interno, aqui é como uma Carta que vamos enviar, primeiro precisamos de um papel em branco, não é?
2 writebyte(5); //ID
3 writestring(“Testando”); //Mensagem
4 sendmessage(SOCKET); //Envia a mensagem para o Socket
Ué, mas cade os dois primeiros bytes de tamanho?
Esses são adicionados automaticamente pela DLL. Você não precisa se preocupar com eles.
isso vai onde coloca isso em q lugar ou ele fica flutuando nos scriptis
como saber onde colocar alguns codigos se vc nao especifica onde colocalos
exemplo
A estrutura de uma mensagem:
Antes de seguirmos para o próximo item, é preciso saber como é a estrutura das mensagens trocadas entre Client e Servidor. Na verdade é muito simples, mas sempre varia de mensagem para mensagem. A estrutura básica é assim:
Primeiros dois bytes = Tamanho da mensagem em bytes.
Terceiro byte = ID da mensagem. Serve para identificar qual o tipo de mensagem é essa, para que possamos manipulá-la corretamente.
Restantes = “Mensagem”.
Vamos ver um exemplo em que eu envio uma String “Testando” que tem ID de mensagem 5:
view source
print?
1 clearbuffer(); //Limpa o buffer interno, aqui é como uma Carta que vamos enviar, primeiro precisamos de um papel em branco, não é?
2 writebyte(5); //ID
3 writestring(“Testando”); //Mensagem
4 sendmessage(SOCKET); //Envia a mensagem para o Socket
Ué, mas cade os dois primeiros bytes de tamanho?
Esses são adicionados automaticamente pela DLL. Você não precisa se preocupar com eles.
isso vai onde coloca isso em q lugar ou ele fica flutuando nos scriptis
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
Isso nao coloca em lugar algum. Esse é so pra voce entender como faz.
Nao é necessario por em lugar nenhum.
FLW
Nao é necessario por em lugar nenhum.
FLW
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 - Como fazer um jogo multiplayer online - Parte II
Nesse Tutorial se eu não mim engano, você usou HTML certo ? Como funciona esse tipo de mixagem ?
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
HTML? O tutorial não fala nada a respeito de HTML. Ele usa sockets para fazer a conexão, usando a 39dll. E um sistema de bytes para enviar dados entre os computadores.
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
F. Nizzio escreveu:Eu não entendi o que ele falou.
Tem que explicar melhor, nem sempre as pessoas entendem todas essas coisas dificeis. Explicar melhor é a chave pra fazer coisas decentes.
Minha nota ao tutorial é acima da média: 5.5, porque pode ter gente que entende melhor.
Tenha um bom dia.
Nizzio
A melhor forma de entender alguma coisa é perguntando a quem sabe, e para isso existe o fórum, para perguntar.
Comece estudando cada parte separadamente, e só passe para o próximo código quando entender o anterior, e sempre que tiver dúvida pergunte.
Acredito que isso é a melhor dica para quem está aprendendo.
Quando entrei aqui eu nao sabia nada de GML, e hoje já consigo fazer meus proprios codigos, porem, quando tenho duvida corro pra cá, pois sei que tem muita gente competente aqui para ajudar.
Se achou dificil de entender esse tutorial, comece tentando entender outros mais fáceis.
Abraço.
itarodrigo- Data de inscrição : 28/08/2010
Reputação : 52
Número de Mensagens : 599
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
optimo tutorial
funcionou perfeitamente, só que quando adicono um 3º jogador, a lista de jogadores não actualiza nesse 3º jogador
mas estas de Parabens, assim já posso fazer um joguinho online
funcionou perfeitamente, só que quando adicono um 3º jogador, a lista de jogadores não actualiza nesse 3º jogador
mas estas de Parabens, assim já posso fazer um joguinho online
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
Natch escreveu:optimo tutorial
funcionou perfeitamente, só que quando adicono um 3º jogador, a lista de jogadores não actualiza nesse 3º jogador
mas estas de Parabens, assim já posso fazer um joguinho online
Realmente, havia um pequeno errinho no código. Mas já esta consertado.
Obrigado por ter percebido o bug!
ATENÇÃO!
Se você seguiu o tutorial antes do dia 02/02/2011 você deve corrigir um pequeno pedaço do código:
STEP - SEGUNDO SCRIPT - OBJETO obj_Host
01 //Receber mensagens do Client
02 var size, msgID;
03
04 for (iPL = 1; iPL < global.MaxPlayers; iPL += 1) //Precisamos receber a mensagem de cada jogador
05 { //Usamos "iPL" pois depois serão feitos outros loops e usar a variavel "i" pode gerar conflitos
06 size = 1;
07 while (size)
08 {
Adicione logo depois do loop FOR a linha:
size = 1;
E remova a linha "size = 1;" anterior. Ela não é necessária.
Porque o bug ocorreu:
Depois de não receber mais mensagens no primeiro player, a variável size recebia valor 0 e então era passado para o próximo jogador. Como a variável não era resetada o jogador era pulado e assim sucessivamente. Sendo lida apenas a mensagem do primeiro jogador.
Como eu disse... um pequeno errinho pode gerar grandes problemas...
Janx- Data de inscrição : 24/05/2008
Reputação : 14
Número de Mensagens : 2417
Prêmios :
x 0 x 0 x 0
x 0 x 2 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
tenho uma duvida quanto a jogos assim.
que tipo de programa se usa para criar o servidor e deixar o programa server rodando nele?
que tipo de programa se usa para criar o servidor e deixar o programa server rodando nele?
itarodrigo- Data de inscrição : 28/08/2010
Reputação : 52
Número de Mensagens : 599
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
itarodrigo escreveu:tenho uma duvida quanto a jogos assim.
que tipo de programa se usa para criar o servidor e deixar o programa server rodando nele?
"que tipo de programa se usa para criar o servidor e deixar o programa server rodando nele?"
Não intendi o que você quis dizer...
Você quer dizer, um jogo online tipo um "mmo"? Como funcionar o servidor "global" do jogo?
O servidor não necessariamente precisa participar do jogo como estamos fazendo nesse tutorial. Ele pode ser apenas a ligação entre um jogador e outro. O que ele faria seria receber, repassar e guardar informações dos jogadores.
Esse servidor pode ser feito no Game Maker mesmo. Embora eu não acho que seja uma boa ideia pra um jogo grande, já que seriam inúmeras mensagens para serem manipuladas. Como sabemos o GM não é muito rápido se comparado a uma linguagem "pura". Não é que o GM não possa fazer, o problema é a quantidade de mensagens que ele vai conseguir manipular o mais rápido possível, atrasar as mensagens significa LAG e não queremos isso no jogo, certo?
Janx- Data de inscrição : 24/05/2008
Reputação : 14
Número de Mensagens : 2417
Prêmios :
x 0 x 0 x 0
x 0 x 2 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
entao, caso eu hospede um jogo servidor, em meu pc, por exemplo, outros usuarios conseguiriam acessar, mesmo sem estar em minha rede?
itarodrigo- Data de inscrição : 28/08/2010
Reputação : 52
Número de Mensagens : 599
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
Cara se voce colocar um jogo servidor no seu PC, ele estiver rodando e conectado, da sim.
Exemplo:
Voce poe o servidor rodando ai e deixa conectado. Voce pode ir aonde quiser que o jogo repassara as mensagens para os clientes. Desde que sua conexao nao caia, pq se cair tera que voltar e so depois enviara as mensagens, dando problemas etc.
FLW
Exemplo:
Voce poe o servidor rodando ai e deixa conectado. Voce pode ir aonde quiser que o jogo repassara as mensagens para os clientes. Desde que sua conexao nao caia, pq se cair tera que voltar e so depois enviara as mensagens, dando problemas etc.
FLW
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 - Como fazer um jogo multiplayer online - Parte II
itarodrigo escreveu:entao, caso eu hospede um jogo servidor, em meu pc, por exemplo, outros usuarios conseguiriam acessar, mesmo sem estar em minha rede?
mesmo sem estar em minha rede, você quer dizer, sem estarem em LAN? Sim.
Mas claro que eles vão estar conectados a você.
Todo jogo online se conecta em um servidor. Se você tem algum firewall, dependendo das suas configurações, quando algum programa ou JOGO tenta acessar a internet (conectar no servidor?) você pode ver até mesmo o IP dele.
Você quer hospedar um servidor no seu computador? Sem problemas, mas saiba que você vai precisar de uma internet muito boa. Igualmente na taxa de upload e download dela! Tomar algumas medidas de segurança para evitar a invasão também é fundamental. Você tem que ter muita coisa em mente, não vá simplesmente abrindo o seu computador para a internet! Pode ser perigoso!
Lembrando que o que eu falo não é 100% correto, podem existir muitas variantes ai no meio. Mas pela minha experiencia, pesquisas, testes e conhecimento sobre o assunto, o que eu te digo é o que eu acredito ser o conceito certo! Você pode pesquisar por conta própria também, provavelmente você deve achar o que eu encontrei.
Enfim, estamos fugindo do assunto do tópico. Se quiser continuar a conversa, mande MPs ou abre um tópico para discutirmos isso, ok? Se quiser, pode criar na seção:
IA, Física, Banco de dados, 3D e Online
Janx- Data de inscrição : 24/05/2008
Reputação : 14
Número de Mensagens : 2417
Prêmios :
x 0 x 0 x 0
x 0 x 2 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
Eu acho q fiz tudo direito, mas na hora de testar, na tela de espera nao aprece os dados (nem na tela do servidor, nem dna do cliente).
Eu reli tudo e nao sei o que tá faltando, criei o executavel com a DLL numa pasta e copia desse executavel junto com copia da DLL noutra pasta...
... abri os dois: em um eu fui no servidor e digitei um nome pra uma sala; nem outro eu fui no icone do cliente, 127.0.0.1 e dei ok. Nas duas so aparece a mensagem 'tela de espera' direto.
Ajudae Janx.
Eu reli tudo e nao sei o que tá faltando, criei o executavel com a DLL numa pasta e copia desse executavel junto com copia da DLL noutra pasta...
... abri os dois: em um eu fui no servidor e digitei um nome pra uma sala; nem outro eu fui no icone do cliente, 127.0.0.1 e dei ok. Nas duas so aparece a mensagem 'tela de espera' direto.
Ajudae Janx.
Mannoroth- Games Ranking :
Notas recebidas : D+D
Data de inscrição : 05/10/2010
Reputação : 12
Número de Mensagens : 841
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
Aqui no meu não tem a aba Constants.
Super Games- Games Ranking :
Notas recebidas : C
Data de inscrição : 10/06/2010
Reputação : 36
Número de Mensagens : 2800
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Game Maker Studio 2.0
- Java
- Godot
- Javascript
- C ou C++
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
Mannoroth escreveu:Eu acho q fiz tudo direito, mas na hora de testar, na tela de espera nao aprece os dados (nem na tela do servidor, nem dna do cliente).
Eu reli tudo e nao sei o que tá faltando, criei o executavel com a DLL numa pasta e copia desse executavel junto com copia da DLL noutra pasta...
... abri os dois: em um eu fui no servidor e digitei um nome pra uma sala; nem outro eu fui no icone do cliente, 127.0.0.1 e dei ok. Nas duas so aparece a mensagem 'tela de espera' direto.
Ajudae Janx.
Nas duas so aparece a mensagem 'tela de espera' direto
Você quer dizer como um "show_message", ou é a unica coisa que aparece escrita na tela?
- Código:
01 if room = rm_WaitingRoom
02 {
03 draw_text(200,16,"Tela de Espera");
04 }
05
06 if instance_exists(obj_Client)
07 {
08 for (i=0; i < global.MaxPlayers; i += 1)
09 {
10 draw_text(5,32+i*16, string(i)+" "+obj_Client.players[i,PL_NICK]);
11 }
12 }
13 else if instance_exists(obj_Host)
14 {
15 for (i=0; i < global.MaxPlayers; i += 1)
16 {
17 draw_text(5,32+i*16, string(i)+" Sock: "+string(obj_Host.players[i,PL_SOCK])+" Nick: "+obj_Host.players[i,PL_NICK]);
18 }
19 }
Você percebeu que nas linhas 06 e 13 é checado se o objeto X existe? Se você usou outro nome para os objetos você deve trocar nessas linhas, senão o jogo não vai desenhar nada. Se não deu erro nenhum, provavelmente o problema está nesse DRAW, as informações só não estão sendo mostradas.
@Super Games
No GM 8 vá na aba RESOURCES -> DEFINE CONSTANTS
Ou pressione ctrl + shift + N
Janx- Data de inscrição : 24/05/2008
Reputação : 14
Número de Mensagens : 2417
Prêmios :
x 0 x 0 x 0
x 0 x 2 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
Aqui tambem não tem...
Super Games- Games Ranking :
Notas recebidas : C
Data de inscrição : 10/06/2010
Reputação : 36
Número de Mensagens : 2800
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Game Maker Studio 2.0
- Java
- Godot
- Javascript
- C ou C++
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
Janx escreveu:Você quer dizer como um "show_message", ou é a unica coisa que aparece escrita na tela?
É isso aqui q aparece tanto no cliente quanto no server:
Eu não mudei os nomes dos objetos, são obj_Host e obj_Client mesmo. Eu revisei tudo mais uma vez e nao entendi o q falta. Q tal se eu te mandar o meu .gmk como ficou e vc ver se tem algo errado (meu interesse é aprender mesmo, mas realmente nao identifiquei o q tá faltando).Janx escreveu:Você percebeu que nas linhas 06 e 13 é checado se o objeto X existe? Se você usou outro nome para os objetos você deve trocar nessas linhas, senão o jogo não vai desenhar nada.
Sobre alocar os objetos nas rooms: na room_WaitingRoom não botei objeto nenhum incialmente, e na room rm_menu botei o obj_btmhost e obj_btmclient e tambem o GAME, só esses três ae, já q o obj_Client e obj_Host serão criados posteriormente atraves de eventos.
Mannoroth- Games Ranking :
Notas recebidas : D+D
Data de inscrição : 05/10/2010
Reputação : 12
Número de Mensagens : 841
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
Aparentemente é algum erro no DRAW, mas se quiser mandar o projeto para eu dar uma olhada pode mandar.
obj_Client e obj_Host são criados por eventos mesmo.
De uma olhada na variável global.MaxPlayers, talvez você tenha atribuído valor 0 a ela. Coloque 10.
obj_Client e obj_Host são criados por eventos mesmo.
De uma olhada na variável global.MaxPlayers, talvez você tenha atribuído valor 0 a ela. Coloque 10.
Janx- Data de inscrição : 24/05/2008
Reputação : 14
Número de Mensagens : 2417
Prêmios :
x 0 x 0 x 0
x 0 x 2 x 0
x 0 x 0 x 0
Re: Tutorial - Como fazer um jogo multiplayer online - Parte II
[quote="Janx"]
Agora crie um outro objeto “Controlador” de sua preferência, eu gosto de chamá-lo de GAME (Deixe ele como Persistent). Nesse novo objeto, adicione um evento Create e coloque o seguinte código:
global.Nick = get_string("Digite seu Nick: ",""); //Pegar o nick do jogador
global.Server = 0; //Guarda o Socket do Servidor.
global.MyID = -1; //ID online do jogador
global.MaxPlayers = 0;
dllinit("39dll.dll",1); //Inicializar funções de Sockets da DLL.
Iniciando o Servidor:
Vamos para o objeto obj_Host. No evento Create adicione o seguinte:
//Criar servidor
global.Server = tcplisten(5068,5,1); //Inicializa o Servidor, fica em espera por conexões na porta 5068.
//Você pode mudar os argumentos dessa função como preferir.
//tcplisten(PORTA,CONEXÕES SIMUNTANEAS, MODO);
//PORTA -> Porta para conectar
//CONEXÕES SIMUNTANEAS -> Antes do jogador entrar mesmo no jogo, sua conexão deve ser aceita, enquanto isso ele ficara na "espera".
//Isso é para quantos você quer deixar na espera. Não é preciso um valor muito alto.
//MODO -> deixe o valor em 1, senão seu servidor ficará travado até alguem conectar
if (!global.Server) //Caso não tenha inicializado corretamente passar uma mensagem de erro.
{instance_destroy();
show_message("Erro ao criar o servidor");
exit;}
global.MaxPlayers = 10; //Limite de jogadores
//Criar lista de Jogadores.
for (i = 0; i < global.MaxPlayers; i += 1)
{
players[i,PL_SOCK] = -3; //Socket do player [Só usado no Host]
players[i,PL_NICK] = ""; //Nick do player
}
//Adicionar informações do servidor na lista [Servidor sempre é o 0]
players[0,PL_SOCK] = global.Server;
players[0,PL_NICK] = global.Nick;
global.MyID = 0;
room_goto(rm_WaitingRoom); //Depois de inicializar tudo corretamente ir para a tela de espera.
//Esse objeto é "Persistent", pois isso não será destruido na troca de rooms.
clearbuffer();
writebyte(MSG_PLDATA);
writebyte(iPL); //Os outros jogadores só recebem dados do servidor, então precisam saber o ID de qual player são esses dados
writestring(nick);
for (i=1; i < global.MaxPlayers; i+=1) //Como são varios jogadores, precisamos enviar para todos eles
{ //Usando um loop for isso fica bem facil! Repare que começamos do 1, porque o 0 é sempre o servidor.
if (i != iPL) //Não precisamos repassar a mensagem para quem a enviou
{sendmessage(players[i,PL_SOCK]);}
}
//O Hoster possui os dados de todos os jogadores então ele mesmo pode repassar os nicks dos demais players
for (i = 0; i < global.MaxPlayers; i += 1)
{
if (i != iPL) //Não enviar o nick do proprio jogador para ele mesmo
{
clearbuffer();
writebyte(MSG_PLDATA);
writebyte(i);
writestring(players[i,PL_NICK]);
sendmessage(players[iPL,PL_SOCK]);
}
}
break;
}
}
}
No seu tutorial existem duas variaveis global.MaxPlayers sendo criadas, uma no obj_Host e outra no objeto GAME, em uma o valor é 0, na outra o valor é 10.
De qualquer jeito eu acabei de alterar as duas pra 10 e mesmo assim o problema continua, vou te mandar o .gmk por MP.
Agora crie um outro objeto “Controlador” de sua preferência, eu gosto de chamá-lo de GAME (Deixe ele como Persistent). Nesse novo objeto, adicione um evento Create e coloque o seguinte código:
global.Server = 0; //Guarda o Socket do Servidor.
global.MyID = -1; //ID online do jogador
global.MaxPlayers = 0;
dllinit("39dll.dll",1); //Inicializar funções de Sockets da DLL.
Iniciando o Servidor:
Vamos para o objeto obj_Host. No evento Create adicione o seguinte:
//Criar servidor
global.Server = tcplisten(5068,5,1); //Inicializa o Servidor, fica em espera por conexões na porta 5068.
//Você pode mudar os argumentos dessa função como preferir.
//tcplisten(PORTA,CONEXÕES SIMUNTANEAS, MODO);
//PORTA -> Porta para conectar
//CONEXÕES SIMUNTANEAS -> Antes do jogador entrar mesmo no jogo, sua conexão deve ser aceita, enquanto isso ele ficara na "espera".
//Isso é para quantos você quer deixar na espera. Não é preciso um valor muito alto.
//MODO -> deixe o valor em 1, senão seu servidor ficará travado até alguem conectar
if (!global.Server) //Caso não tenha inicializado corretamente passar uma mensagem de erro.
{instance_destroy();
show_message("Erro ao criar o servidor");
exit;}
global.MaxPlayers = 10; //Limite de jogadores
//Criar lista de Jogadores.
for (i = 0; i < global.MaxPlayers; i += 1)
{
players[i,PL_SOCK] = -3; //Socket do player [Só usado no Host]
players[i,PL_NICK] = ""; //Nick do player
}
//Adicionar informações do servidor na lista [Servidor sempre é o 0]
players[0,PL_SOCK] = global.Server;
players[0,PL_NICK] = global.Nick;
global.MyID = 0;
room_goto(rm_WaitingRoom); //Depois de inicializar tudo corretamente ir para a tela de espera.
//Esse objeto é "Persistent", pois isso não será destruido na troca de rooms.
clearbuffer();
writebyte(MSG_PLDATA);
writebyte(iPL); //Os outros jogadores só recebem dados do servidor, então precisam saber o ID de qual player são esses dados
writestring(nick);
for (i=1; i < global.MaxPlayers; i+=1) //Como são varios jogadores, precisamos enviar para todos eles
{ //Usando um loop for isso fica bem facil! Repare que começamos do 1, porque o 0 é sempre o servidor.
if (i != iPL) //Não precisamos repassar a mensagem para quem a enviou
{sendmessage(players[i,PL_SOCK]);}
}
//O Hoster possui os dados de todos os jogadores então ele mesmo pode repassar os nicks dos demais players
for (i = 0; i < global.MaxPlayers; i += 1)
{
if (i != iPL) //Não enviar o nick do proprio jogador para ele mesmo
{
clearbuffer();
writebyte(MSG_PLDATA);
writebyte(i);
writestring(players[i,PL_NICK]);
sendmessage(players[iPL,PL_SOCK]);
}
}
break;
}
}
}
No seu tutorial existem duas variaveis global.MaxPlayers sendo criadas, uma no obj_Host e outra no objeto GAME, em uma o valor é 0, na outra o valor é 10.
De qualquer jeito eu acabei de alterar as duas pra 10 e mesmo assim o problema continua, vou te mandar o .gmk por MP.
Mannoroth- Games Ranking :
Notas recebidas : D+D
Data de inscrição : 05/10/2010
Reputação : 12
Número de Mensagens : 841
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Página 2 de 3 • 1, 2, 3
Tópicos semelhantes
» Tutorial - Como fazer um jogo multiplayer online - Parte I
» Convert - Um jogo Multiplayer Online
» Criando um jogo Multiplayer Online
» Sistema de cadastro pra jogo multiplayer online?
» Jogo online multiplayer, sistema com salas?
» Convert - Um jogo Multiplayer Online
» Criando um jogo Multiplayer Online
» Sistema de cadastro pra jogo multiplayer online?
» Jogo online multiplayer, sistema com salas?
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 2 de 3
Permissões neste sub-fórum
Não podes responder a tópicos