GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por 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

Ir para baixo

Devo continuar com os tutoriais?

Massive multiplayer online - parte 2 Vote_lcap100%Massive multiplayer online - parte 2 Vote_rcap 100% 
[ 6 ]
Massive multiplayer online - parte 2 Vote_lcap0%Massive multiplayer online - parte 2 Vote_rcap 0% 
[ 0 ]
 
Total de votos : 6
 
 
Votação encerrada

Massive multiplayer online - parte 2 Empty Massive multiplayer online - parte 2

Mensagem por Pit Bull Dom 24 Mar 2013, 22:19

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.
Massive multiplayer online - parte 2 Tuto39dll
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","")
Apenas precisamos do nome de cada jogador para diferencia-los no chat.
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);
Conectamos a dll ao cliente, isso fará todos os comandos dentro do game maker funcionarem.
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)
Essas ultimas linhas verificam se conectou ou não ao servidor, caso não tenha conectado ele vai mostrar uma mensagem na tela dizendo servidor desligado e fechará automaticamente o jogo.
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]=""
}
Caso não conheça o for, não continue o tutorial enquanto não souber usar o for, pois e de extrema importância seu uso.
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]=""
}
Precisamos que o cliente mostre o chat na tela.
Código:
for(i=1;i<=10;i+=1)
{
    draw_text(0,0+(25*(i-1)),chat[i])
}
A expressão 0+(25*(i-1)) foi usada para desenhar na tela cada linha do chat.
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
}
Essa parte foi explicada na parte 1 do tutorial MMO.
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
}
A partir de agora, o servidor está "ouvindo" todas as conexões na porta 5050, precisamos fazer ele aceitar essas conexões.
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
    }
}
Coloque tudo isso no Step Event
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.
A partir de agora, o servidor vai aceitar todas as conexões até um certo limite, que está na variável quantidade_maxima_de_jogadores.

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=""
}
Coloque esse código acima no Step Event.
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
        }
    }
    }
Todas as linhas foram comentadas.
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;
    }
}
Tudo comentado.
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
Ele irá passar tudo que estiver na linha de baixo para a linha de cima, e a ultima linha(chat[10]) irá receber o novo 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.
    }
}
Crie outro Action para o evento Step e adicione o código acima.
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)
Pit Bull
Pit Bull

Data de inscrição : 31/08/2010
Reputação : 16
Número de Mensagens : 646
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Unity
  • C#
  • Outros


https://discord.gg/ZPM2d6q

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por Crovux Seg 25 Mar 2013, 13:30

legal....gostei.. mas não precisava usar variáveis tao grandes!
Crovux
Crovux

Data de inscrição : 07/01/2012
Reputação : 6
Número de Mensagens : 169
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por Pit Bull Seg 25 Mar 2013, 14:30

Foi proposital para quem ninguém se perdesse dentro dos códigos.
Pit Bull
Pit Bull

Data de inscrição : 31/08/2010
Reputação : 16
Número de Mensagens : 646
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Unity
  • C#
  • Outros


https://discord.gg/ZPM2d6q

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por !!Game Play!! Seg 25 Mar 2013, 18:25

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 ?
!!Game Play!!
!!Game Play!!

Data de inscrição : 24/12/2011
Reputação : 4
Número de Mensagens : 159
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.blackcubestudio.tkk/

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por Pit Bull Ter 26 Mar 2013, 13:12

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++;
Pit Bull
Pit Bull

Data de inscrição : 31/08/2010
Reputação : 16
Número de Mensagens : 646
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Unity
  • C#
  • Outros


https://discord.gg/ZPM2d6q

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por !!Game Play!! Qui 28 Mar 2013, 10:23

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
!!Game Play!!
!!Game Play!!

Data de inscrição : 24/12/2011
Reputação : 4
Número de Mensagens : 159
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.blackcubestudio.tkk/

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por Pit Bull Qui 28 Mar 2013, 13:04

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).
Pit Bull
Pit Bull

Data de inscrição : 31/08/2010
Reputação : 16
Número de Mensagens : 646
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Unity
  • C#
  • Outros


https://discord.gg/ZPM2d6q

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por Crovux Sex 29 Mar 2013, 11:44

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
Crovux

Data de inscrição : 07/01/2012
Reputação : 6
Número de Mensagens : 169
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por Rodrigo Santiago Sex 29 Mar 2013, 15:08

Ótimo tutorial, mais, continue aprimorando cada vez mais.

Votação pra continuar....CLARO....no que você tava pensando vai ser 100% de sim lol!
Rodrigo Santiago
Rodrigo Santiago

Games Ranking : Nota B

Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Reputação : 73
Número de Mensagens : 1281
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 3 Prata x 1 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por andrewsnycollas Ter 23 Abr 2013, 14:43

Como eu faço pra importar as paradas da 38dll pro meu projeto do GMStudio O_O'
avatar
andrewsnycollas

Data de inscrição : 27/07/2012
Reputação : 0
Número de Mensagens : 25
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://andrewsnycollas.blogspot.com.br/

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por brepasil Ter 16 Jul 2013, 17:31

Muito bom, parabens pela inciativa, sucesso ai. tdo mundo impolgadasso com isso
brepasil
brepasil

Data de inscrição : 13/07/2013
Reputação : 0
Número de Mensagens : 3
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por Crovux Ter 16 Jul 2013, 17:46

andrewsnycollas escreveu:Como eu faço pra importar as paradas da 38dll pro meu projeto do GMStudio O_O'
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...
Crovux
Crovux

Data de inscrição : 07/01/2012
Reputação : 6
Número de Mensagens : 169
Prêmios : Massive multiplayer online - parte 2 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Massive multiplayer online - parte 2 Empty Re: Massive multiplayer online - parte 2

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos