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
» 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
Massive multiplayer online - parte 2
+2
Crovux
Pit Bull
6 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Devo continuar com os tutoriais?
Massive multiplayer online - parte 2
Massive multiplayer online
parte 2
Caso não tenha lido a parte 1 este é o LINK.
Nível: iniciante.
Descrição:Este tutorial irá abortar todos os conceitos sobre MMO, desde mensagens simultâneas, banco de dados até o projeto final: jogo MMORPG.
Todos os comandos da 39dll estão neste LINK.
Nesta segunda parte, vou criar um chat e dar como inicio ao projeto final que é um jogo de rpg.
Primeiro precisamos criar 2 projetos no game maker: o cliente e o servidor.
Cliente
Inclua todos os comandos da 39dll dentro do projeto do cliente.Vamos organizar nosso projeto da seguinte forma:
O primeiro objeto vai se chamar obj_conexao, ele ficará responsável por todas as mensagens que o cliente vai receber, crie outro chamado obj_chat, que será nosso chat na tela.
obj_conexao:
Quando o jogador iniciar o jogo, ele será questionado sobre seu nome.
- Código:
nome=get_string("digite seu nome","")
Vamos nos conectar ao servidor.
- Código:
dllinit(0,1,1);
ip_do_servidor='127.0.0.1'
porta_de_conexao=5050
server = tcpconnect(ip_do_servidor,porta_de_conexao,1);
Criamos 2 variáveis que armazenarão os dados do servidor, como ip e porta, respectivamente.
Criamos outra variável que armazenará a identificação do servidor, que será util para enviar e receber mensagens dele.
No final seu codigo dentro do Create Event será:
- Código:
nome=get_string("digite seu nome","")
dllinit(0,1,1);
ip_do_servidor='127.0.0.1'
porta_de_conexao=5050
server = tcpconnect(ip_do_servidor,porta_de_conexao,1);
if (server<0)
{
show_message("servidor desligado")
game_end()
}
//se chegou nessa linha e porque conectou ao server
instance_create(0,0,obj_chat)
O código tcpconnect geralmente retorna 0 ou -1 caso não tenha conectado.
Caso tenha conectado, o chat será criado.
obj_chat:
Você precisa criar uma lista para armazenar toda a conversa no chat, vamos usar arrays.
- Código:
for(i=1;i<=10;i+=1)
{
chat[i]=""
}
Foram criados 10 linhas para o chat, começando de chat[1] à chat[10].
No final seu codigo dentro do Create Event será:
- Código:
for(i=1;i<=10;i+=1)
{
chat[i]=""
}
- Código:
for(i=1;i<=10;i+=1)
{
draw_text(0,0+(25*(i-1)),chat[i])
}
Vou demostrar passo a passo como funciona com o i valendo 1:
>>>>draw_text(0,0+(25*(1-1)),chat[1])
>>>draw_text(0,0+(25*(0)),chat[1])
>>draw_text(0,0+(25*0),chat[1])
>draw_text(0,0+0,chat[1])
draw_text(0,0,chat[1])
Agora para i valendo 2:
>>>>draw_text(0,0+(25*(2-1)),chat[2])
>>>draw_text(0,0+(25*(1)),chat[2])
>>draw_text(0,0+(25*1),chat[2])
>draw_text(0,0+25,chat[2])
draw_text(0,25,chat[2])
Cada linha terá um espaço de 25 pixels em baixo da anterior.
No final seu codigo dentro do Draw Event será:
- Código:
for(i=1;i<=10;i+=1)
{
draw_text(0,0+(25*(i-1)),chat[i])
draw_text(0,450,nome+">>"+keyboard_string)//tudo que você escrever vai aparecer aqui
}
Servidor
Inclua todos os comandos da 39dll dentro do projeto do servidor.Crie um objeto chamado obj_server, ele enviará e receberá todas as mensagens para os clientes.
Vamos ligar a dll no servidor, mandar o servidor escutar todas as conexões na porta 5050 que foi usada no cliente.
- Código:
dllinit(0,1,1);
porta_de_conexao=5050
quantidade_maxima_de_jogadores=100
porta=tcplisten(porta_de_conexao,quantidade_maxima_de_jogadores,1)
A variável porta será usada para aceitar a conexão do jogador.
Precisamos criar nossa lista de jogadores.
- Código:
for(i=1;i<=quantidade_maxima_de_jogadores;i+=1)
{
jogador[i]=0 //identificação
}
No final seu codigo dentro do Create Event será:
- Código:
dllinit(0,1,1);
porta_de_conexao=5050
quantidade_maxima_de_jogadores=100
porta=tcplisten(porta_de_conexao,quantidade_maxima_de_jogadores,1)
for(i=1;i<=quantidade_maxima_de_jogadores;i+=1)
{
jogador[i]=0 //identificação
}
Como todos sabem, o Step Event e acionado 30 vezes por segundo, nele vai ser colocado o codigo para aceitar, pois atualiza constantemente.
- Código:
identificacao=tcpaccept(porta,1)
if (identificacao>0) //caso alguem se conecte
{
vaga=verificar_vaga()
if (vaga>0)
{
jogador[vaga]=identificacao //armazenar a identificação
}else
{
closesocket(identificacao)//desconectar o cliente
}
}
Como você deve ter reparado, existe um verificar_vaga(), um script que vai verificar se existe vaga e vai retornar o numero da vaga.
Crie o script verificar_vaga() e coloque:
- Código:
for(i=1;i<=quantidade_maxima_de_jogadores;i+=1)
{
if jogador[i]=0 //se tiver vaga
{
return i;
}
}
return -1;//caso contrario retorna -1, ou seja, não ha vagas.
Cliente
Voltando ao objeto obj_chat precisamos enviar o que digitamos.- Código:
if (keyboard_check_pressed(vk_enter))
{
texto_digitado=keyboard_string
clearbuffer()
writebyte(1)
writestring(obj_conexao.nome+" : "+texto_digitado)//enviar nome e texto digitado
sendmessage(obj_conexao.server)
keyboard_string=""
}
Ele está enviando uma mensagem com a identificação=1, o conteúdo e o texto_digitado e o destinatário e o server.
Precisamos voltar ao projeto do servidor para que ele receba a mensagem e repasse para todos que estão online.
Servidor
- Código:
for(w=1;w<=quantidade_maxima_de_jogadores;w+=1)//receber mensagem de todos online
{
size = 1; //size armazenará o conteudo da mensagem
while (size)//enguanto essa mensagem for diferente
{
size = receivemessage(jogador[w]); //Receber a mensagem de cada player, por isso usamos a identificação de cada um.
if (!size) //Se não recebermos nada, sair desse loop e passar para o próximo player
{break;}
msgID = readbyte(); //Lemos o primeiro byte da mensagem, ou seja a identificação da mensagem.
switch (msgID)
{
case 1://caso seja o chat
texto=readstring()//armazenamos o texto na variavel texto
//repassamos a mensagem para todos
clearbuffer()//sempre limpar para nao mandar "lixo"
writebyte(1)//identificação da mensagem
writestring(texto)
for(ww=1;ww<=quantidade_maxima_de_jogadores;ww+=1)//lembre-se, um loop dentro do outro, você deve mudar a variavel que estiver sendo usada
{
sendmessage(jogador[ww])
}
break;//fim
}
}
}
Crie outro action para adicionar este codigo acima no Step Event.
Agora fazer o cliente receber o texto do servidor.
Cliente
Dentro do obj_conexao, crie um Step Event e adicione este codigo:- Código:
size = 1;
while (size)
{
size = receivemessage(server); //Receber a mensagem do servidor
if (!size) //Se não recebermos nada, paramos por aqui
{break;}
msgID = readbyte(); //Lemos o primeiro byte da mensagem, ou seja a identificação da mensagem.
switch (msgID)
{
case 1://caso seja 1, ou seja, o chat, ele irá adicionar ao seu chat
texto=readstring()
add_chat(texto)
break;
}
}
Novamente outro script que precisamos criar, o add_chat().
O código dele será:
- Código:
texto=argument0
for(i=1;i<=9;i+=1)
{
obj_chat.chat[i]=obj_chat.chat[i+1]
}
obj_chat.chat[10]=texto
Por fim, caso o jogador desconecte, temos que tira-lo da lista.
Servidor
- Código:
for(i=1;i<=quantidade_maxima_de_jogadores;i+=1)//verificar todos os jogadores
{
if (tcpconnected(jogador[i])=0)//caso esse jogador não esteja online
{
jogador[i]=0 //retiramos ele da lista mudando sua identificação para 0.
}
}
Você acaba de criar um chat online para 100 pessoas!
Se você acompanhou todo o tutorial, não encontrará nenhum erro e todo mundo vai poder usar seu chat, não esqueça de enviar também a 39dll junto com o cliente, sem ela o cliente não irá funcionar.
No próximo tutorial, iremos aprender a criar um sistema de login e cadastro simples, usando arquivos INI.
Para ver qual porta usar e só acessar os links LINK1
LINK2
Vou deixar o link do cliente e servidor, caso você tenha esquecido alguma parte, por favor confira.
CLIENTE.GMK
SERVIDOR.GMK
PARTE 3
Obrigado por ler.
- Bull,Pit
Última edição por Pit Bull em Sex 29 Mar 2013, 20:56, editado 1 vez(es)
Re: Massive multiplayer online - parte 2
legal....gostei.. mas não precisava usar variáveis tao grandes!
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: Massive multiplayer online - parte 2
Foi proposital para quem ninguém se perdesse dentro dos códigos.
Re: Massive multiplayer online - parte 2
haha , tutorial foda de mais este aqui também , parabéns man , continue assim ! quando sai part III ? e sabe me dizer quantas partes deste tutoriais vão ser ?
Re: Massive multiplayer online - parte 2
Parte 1: Introdução e conceitos;
Parte 2: Chat;
Parte 3: Sistema de login e cadastro;
Parte 4:Movimentação de personagens;
Parte 5: Shopping, se não for muito grande vou adicionar sistema de trocas entre jogadores;
Parte 6(ainda em discussão): Banco de dados MySQL e servidor em c++;
Parte 2: Chat;
Parte 3: Sistema de login e cadastro;
Parte 4:Movimentação de personagens;
Parte 5: Shopping, se não for muito grande vou adicionar sistema de trocas entre jogadores;
Parte 6(ainda em discussão): Banco de dados MySQL e servidor em c++;
Re: Massive multiplayer online - parte 2
para com os tutoriais não man , tipo acho que o macho supremo ta ensinando o basico , vc deveria apenas fazer um tutorial sobre a
Parte 3: Sistema de login e cadastro;
Parte 5: Shopping, se não for muito grande vou adicionar sistema de trocas entre jogadores;
Parte 6(ainda em discussão): Banco de dados MySQL e servidor em c++;
me ajudaria bastante , acho que tambem ajudaria muito o pessoal do forum , principalmente a parte 6
emfim , tomara que não pare com o tutorial man , falow
Parte 3: Sistema de login e cadastro;
Parte 5: Shopping, se não for muito grande vou adicionar sistema de trocas entre jogadores;
Parte 6(ainda em discussão): Banco de dados MySQL e servidor em c++;
me ajudaria bastante , acho que tambem ajudaria muito o pessoal do forum , principalmente a parte 6
emfim , tomara que não pare com o tutorial man , falow
Re: Massive multiplayer online - parte 2
Uma pequena correção:
Parte 1: Introdução e conceitos;
Parte 2: Chat;
Parte 3: Sistema de login e cadastro;
Parte 4:Movimentação de personagens;
parte 5: Mobs(monstros e npcs);
Parte 6: Shopping, se não for muito grande vou adicionar sistema de trocas entre jogadores;
Parte 7:(ainda em discussão): Banco de dados MySQL e servidor em c++;
Vou fazer tudo para que a serie fique completa, estou quase terminando a parte 3(que ficou gigante).
Parte 1: Introdução e conceitos;
Parte 2: Chat;
Parte 3: Sistema de login e cadastro;
Parte 4:Movimentação de personagens;
parte 5: Mobs(monstros e npcs);
Parte 6: Shopping, se não for muito grande vou adicionar sistema de trocas entre jogadores;
Parte 7:(ainda em discussão): Banco de dados MySQL e servidor em c++;
Vou fazer tudo para que a serie fique completa, estou quase terminando a parte 3(que ficou gigante).
Re: Massive multiplayer online - parte 2
To esperando a parte 4... E nisto que tenho mais dificuldade na ora de criar um jogo( me complico porque faço personagens editáveis e tals... E não entendo certo como funciona esta parte de o pc identificar qual personagem se movimeto)...
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: Massive multiplayer online - parte 2
Ótimo tutorial, mais, continue aprimorando cada vez mais.
Votação pra continuar....CLARO....no que você tava pensando vai ser 100% de sim
Votação pra continuar....CLARO....no que você tava pensando vai ser 100% de sim
Rodrigo Santiago- Games Ranking :
Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Reputação : 73
Número de Mensagens : 1281
Prêmios :
x 0 x 0 x 0
x 3 x 1 x 3
x 0 x 0 x 0
Re: Massive multiplayer online - parte 2
Como eu faço pra importar as paradas da 38dll pro meu projeto do GMStudio O_O'
Re: Massive multiplayer online - parte 2
Muito bom, parabens pela inciativa, sucesso ai. tdo mundo impolgadasso com isso
brepasil- Data de inscrição : 13/07/2013
Reputação : 0
Número de Mensagens : 3
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Massive multiplayer online - parte 2
Depois de determinada verção(não quero especifica) o game Maker Studio tem suas proprias funções de multiplayer.. e que rodam em todas as plataformas que o Game Maker Studio tem suporte... Dai não tem necessidade.. Tem tudo aqui no fórum e só vê! E alem do mais a essencia dos comandos do hms é a mesma do 39dll...andrewsnycollas escreveu:Como eu faço pra importar as paradas da 38dll pro meu projeto do GMStudio O_O'
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
Tópicos semelhantes
» Massive multiplayer online - parte 1
» Massive multiplayer online - parte 3
» Criando um jogo Multiplayer Online
» [PROJETO]TCG Multiplayer Online
» Criar Html5 multiplayer online?
» Massive multiplayer online - parte 3
» Criando um jogo Multiplayer Online
» [PROJETO]TCG Multiplayer Online
» Criar Html5 multiplayer online?
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos