Massive multiplayer online - parte 3

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

100% Massive multiplayer online - parte 3

Mensagem por Pit Bull em Sex 29 Mar 2013, 20:55

Massive multiplayer online
parte 3


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.

Neste tutorial, você irá aprender como criar um sistema de login e cadastro, usando arquivos INI.

Vamos usar os arquivos cliente.gmk e servidor.gmk para dar continuidade ao tutorial.

O banco de dados terá os seguintes itens:
  1. Senha da conta
  2. Nivel do personagem
  3. experiencia do personagem
  4. nome do personagem
  5. classe do personagem
  6. ban (caso a conta foi banida ou não)

Criei alguns scripts para deixar o tutorial menor, para baixar clique aqui.
Insira esses scripts no Servidor.
Cliente
Precisamos criar uma Room para a tela de login, renomeie ela como ro_login.
Crie o objeto obj_login e adicione-o na Room.
Lembre-se que está Room precisa ser iniciada primeiro.
obj_login:
Precisamos criar 2 variáveis para armazenar nosso login e senha.
Código:
login=""
senha=""
Toda vez que clicarmos nas duas barras para preenche-las precisamos saber qual estamos preenchendo.
Código:
foco=1  //1=login 2=senha
obj_login = Create Event:

Código:
login=""
senha=""
foco=1  //1=login 2=senha
Vamos desenhar as barras de login e senha na tela juntamente com o botão entrar.
Código:
//primeira barra
draw_set_color(c_white)
draw_rectangle(250,240,250+100,240+25,false)//fundo branco
draw_set_color(c_black)
draw_rectangle(250,240,250+100,240+25,true)//borda preta

//segunda barra
draw_set_color(c_white)
draw_rectangle(250,280,250+100,280+25,false)//fundo branco
draw_set_color(c_black)
draw_rectangle(250,280,250+100,280+25,true)//borda preta

//botao de login
draw_set_color(c_white)
draw_rectangle(275,320,275+50,320+25,false)//fundo branco
draw_set_color(c_black)
draw_rectangle(275,320,275+50,320+25,true)//borda preta
draw_text(280,324,"entrar")
Acredito que todos saibam usar as funções draw.
Agora vamos adicionar na tela o login e senha, mas primeiro devemos proteger a senha do jogador para que ninguém veja sua senha.
Código:
senha_escondida="" //zerar a variavel toda vez que for contar denovo
for(i=1;i<=string_length(senha);i+=1)//para cada caractere que tiver na senha, acrescentar um asterisco na variavel senha_escondida
{
    senha_escondida+="*"
}
E finalmente desenhamos na tela.
Código:
//desenhar o login e senha na tela
draw_text(255,244,login)
draw_text(255,284,senha_escondida)
obj_login Draw Event:

Código:
//primeira barra
draw_set_color(c_white)
draw_rectangle(250,240,250+100,240+25,false)//fundo branco
draw_set_color(c_black)
draw_rectangle(250,240,250+100,240+25,true)//borda preta

//segunda barra
draw_set_color(c_white)
draw_rectangle(250,280,250+100,280+25,false)//fundo branco
draw_set_color(c_black)
draw_rectangle(250,280,250+100,280+25,true)//borda preta

//botao de login
draw_set_color(c_white)
draw_rectangle(275,320,275+50,320+25,false)//fundo branco
draw_set_color(c_black)
draw_rectangle(275,320,275+50,320+25,true)//borda preta
draw_text(280,324,"entrar")

senha_escondida="" //zerar a variavel toda vez que for contar denovo
for(i=1;i<=string_length(senha);i+=1)//para cada caractere que tiver na senha, acrescentar um asterisco na variavel senha_escondida
{
    senha_escondida+="*"
}

//desenhar o login e senha na tela
draw_text(255,244,login)
draw_text(255,284,senha_escondida)
Agora precisamos colocar um limite de caracteres no login e senha, senão o texto ultrapassa a barra.
Código:
limite_de_caracteres=5
limite=""
switch(foco)
{//quando qualquer tecla for apertada
    case 1:
    limite=string_copy(keyboard_string,1,limite_de_caracteres)
    login=limite  //colocar no login apenas os caracteres ate o limite.
    keyboard_string=login //atualizar o keyboard_string
    break;
    case 2:
    limite=string_copy(keyboard_string,1,limite_de_caracteres)
    senha=limite  //colocar na senha apenas os caracteres ate o limite.
    keyboard_string=senha //atualizar o keyboard_string
}
Todos os codigos desse tutorial estão comentados.
obj_login Keyboard Event for ANY KEY key:

Código:
limite_de_caracteres=5
limite=""
switch(foco)
{//quando qualquer tecla for apertada
    case 1:
    limite=string_copy(keyboard_string,1,limite_de_caracteres)
    login=limite  //colocar no login apenas os caracteres ate o limite.
    keyboard_string=login //atualizar o keyboard_string
    break;
    case 2:
    limite=string_copy(keyboard_string,1,limite_de_caracteres)
    senha=limite  //colocar na senha apenas os caracteres ate o limite.
    keyboard_string=senha //atualizar o keyboard_string
}
Precisamos mudar o foco para que possamos escrever o login e senha sem problemas. Alem disso enviar o login e senha digitado para o servidor.
obj_login Step Event:

Código:
if keyboard_check_released(vk_tab)//usando tab para mudar o foco
{
    if foco=1 //caso esteja no login, va para a senha, caso contrario va para o login
    {
        keyboard_string=senha//colocar o que tinha na senha no keyboard_string
        foco=2// mudar para a senha
    } else
    {
        keyboard_string=login//colocar o que tinha no login no keyboard_string
        foco=1// mudar para o login
    }
}
if mouse_check_button_pressed(mb_left)//usando mouse para mudar o foco
{
    if mouse_x > 250 and mouse_x < 250+100 and mouse_y > 240 and mouse_y < 240+25//verificar se o mouse esta dentro do login
    {
        keyboard_string=login//colocar o que tinha no login no keyboard_string
        foco=1// mudar para o login
    }
    if mouse_x > 250 and mouse_x < 250+100 and mouse_y > 280 and mouse_y < 280+25//verificar se o mouse esta dentro da senha
    {
        keyboard_string=senha//colocar o que tinha na senha no keyboard_string
        foco=2// mudar para a senha
    }
   
}

if keyboard_check_pressed(vk_enter)//caso aperte enter para entrar no jogo
{
    instance_create(0,0,obj_conexao)
    if instance_exists(obj_conexao)//caso tenha conectado enviar login e senha
    {
        clearbuffer()
        writebyte(2)//identificação da mensagem(verificação de login e senha)
        writestring(login)
        writestring(senha)
        sendmessage(obj_conexao.server)
    }
}
if mouse_check_button_pressed(mb_left)//caso use o mouse para entrar no jogo
{
    if mouse_x > 275 and mouse_x < 275+50 and mouse_y > 320 and mouse_y < 320+25//verificar se o mouse esta dentro do botão
    {
        instance_create(0,0,obj_conexao)
        if instance_exists(obj_conexao)//caso tenha conectado enviar login e senha
        {
            clearbuffer()
            writebyte(2)//identificação da mensagem(verificação de login e senha)
            writestring(login)
            writestring(senha)
            sendmessage(obj_conexao.server)
        }
    }
}

obj_conexao:
Em vez de fecharmos o jogo, simplesmente destruímos o objeto obj_conexao para que possa tentar entrar novamente.
Código:
if (server<0)
    {
        show_message("servidor desligado")
        instance_destroy()
    }
Não precisamos mais informar nosso nome, pois o servidor fará isso.
O final da modificação ficará assim:
obj_conexao Create Event:

Código:
dllinit(0,1,1);
ip_do_servidor='127.0.0.1'
porta_de_conexao=5050
nome=""
server = tcpconnect(ip_do_servidor,porta_de_conexao,1);
if (server<0)
    {
        show_message("servidor desligado")
        instance_destroy()
    }



Agora precisamos fazer com que o servidor verifique a conta e retorne uma resposta para o usuário.
Servidor
Como estamos usando mais de 1 atributo(variável) para cada jogador, precisamos atualizar nossa lista de jogadores.
obj_server Create Event:
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,1]=0  //identificação
    jogador[i,2]="" //nick do personagem
    jogador[i,3]=1  //nivel
    jogador[i,4]=0  //experiencia
    jogador[i,5]="" //classe(raça)
}
Com isso precisamos atualizar todos os códigos que estejam usando jogador[i] em vez de jogador[i,1](certo).
obj_server 1º action do Step Event:

Código:
identificacao=tcpaccept(porta,1)

if (identificacao>0) //caso alguem se conecte
{
    vaga=verificar_vaga()
    if (vaga>0)
    {
        jogador[vaga,1]=identificacao  //armazenar a identificação
    }else
    {
        closesocket(identificacao)//desconectar o cliente
    }
}
Script verificar_vaga():

Código:
for(i=1;i<=quantidade_maxima_de_jogadores;i+=1)
{
    if jogador[i,1]=0 //se tiver vaga
    {
        return i;//retornar o numero da vaga
    }
}
    return -1;//se todas estiverem cheias, vai retornar -1
obj_server 2º action Step Event:

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,1]); //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,1])//enviar para todos
                }
            break;//fim
     
        } 
    }
}
obj_server 3º action Step Event:

Código:
for(i=1;i<=quantidade_maxima_de_jogadores;i+=1)//verificar todos os jogadores
{
    if (tcpconnected(jogador[i,1])=0)//caso esse jogador não esteja online
    {
        jogador[i,1]=0 //retiramos ele da lista mudando sua identificação para 0.
    }
}
Depois de atualizarmos tudo, o servidor já esta pronto para receber o login e senha do jogador.
obj_server:
Vamos adicionar mais 1 identificação de mensagem, para receber o login e senha.
Código:
case 2://verificar conta do usuario
                login=readstring()//ler login
                senha=readstring()//ler senha
                resposta=verificar_conta(login,senha)
                clearbuffer()
                writebyte(2)//identificação da mensagem
                writebyte(resposta)//vai retornar uma resposta para o jogador
                sendmessage(jogador[w,1])//enviar para o mesmo jogador que envio a mensagem.
                switch(resposta)//precisamos atualizar o servidor
                {
                    case 3: //caso a senha esteja correta
                        //adicionar as informações do jogador na lista
                        jogador[w,2]=pegar_info(login,"nome")
                        jogador[w,3]=pegar_info(login,"nivel")
                        jogador[w,4]=pegar_info(login,"xp")
                        jogador[w,5]=pegar_info(login,"raça")
                        break;
                    default://caso seja qualquer outra resposta
                        closesocket(jogador[w,1])//desconectar o jogador
                        jogador[w,1]=0 //retira-lo da lista de jogadores
                        break;
                }
            break;
adicionamos os códigos (2º action do Step Event)
obj_server 2º action Step Event:

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,1]); //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,1])//enviar para todos
                }
            break;//fim
            case 2://verificar conta do usuario
                login=readstring()//ler login
                senha=readstring()//ler senha
                resposta=verificar_conta(login,senha)
                clearbuffer()
                writebyte(2)//identificação da mensagem
                writebyte(resposta)//vai retornar uma resposta para o jogador
                sendmessage(jogador[w,1])//enviar para o mesmo jogador que envio a mensagem.
                switch(resposta)//precisamos atualizar o servidor
                {
                    case 3: //caso a senha esteja correta
                        //adicionar as informações do jogador na lista
                        jogador[w,2]=pegar_info(login,"nome")
                        jogador[w,3]=pegar_info(login,"nivel")
                        jogador[w,4]=pegar_info(login,"xp")
                        jogador[w,5]=pegar_info(login,"classe")
                        break;
                    default://caso seja qualquer outra resposta
                        closesocket(jogador[w,1])//desconectar o jogador
                        jogador[w,1]=0 //retira-lo da lista de jogadores
                        break;
                }
            break;
        } 
    }
}
Agora o cliente tem uma resposta, precisamos fazer com que ele receba a resposta.

Cliente
Vamos renomear a Room que executa o chat como ro_mundo, e nela que o jogo irá acontecer.

Lemos a resposta.
Código:
 case 2://receber resposta do servidor sobre a conta
        resposta=readbyte()
        switch(resposta)
        {
            case 0:// a conta não existe
            show_message("a conta nao existe")
            closesocket(server)//desconectar com o servidor
            instance_destroy()
            break;
            case 1://a conta esta banida
            show_message("sua conta esta banida")
            closesocket(server)//desconectar com o servidor
            instance_destroy()
            break;
            case 2://a senha esta errada
            show_message("senha incorreta.")
            closesocket(server)//desconectar com o servidor
            instance_destroy()
            case 3://a conta existe, não esta banida e a senha esta correta
            show_message("bem vindo")
            room_goto(ro_mundo)//começar o jogo
            break;
        }
        break;
E atribuimos ao objeto obj_conexao.
obj_conexao Step Event:
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
            if instance_exists(obj_chat)//caso o obj_chat exista podemos então adicionar a mensagem
            {
                texto=readstring()
                add_chat(texto)
            }
        break;
        case 2://receber resposta do servidor sobre a conta
        resposta=readbyte()
        switch(resposta)
        {
            case 0:// a conta não existe
            show_message("a conta nao existe")
            closesocket(server)//desconectar com o servidor
            instance_destroy()
            break;
            case 1://a conta esta banida
            show_message("sua conta esta banida")
            closesocket(server)//desconectar com o servidor
            instance_destroy()
            break;
            case 2://a senha esta errada
            show_message("senha incorreta.")
            closesocket(server)//desconectar com o servidor
            instance_destroy()
            break;
            case 3://a conta existe, não esta banida e a senha esta correta
            show_message("bem vindo")
            room_goto(ro_mundo)//começar o jogo
            break;
        }
        break;
    }
}

Pronto! agora ele irá verificar se a conta existe e autorizar o jogador a continuar com o jogo.
Agora precisamos criar um modo cadastro. Quando o jogador receber a informação que a conta não existe o jogo poderá dar uma opção de cria-la.

Código:
case 0:// a conta não existe
            escolha=show_question("A conta não existe, deseja cria-la?")
            if escolha=1//caso a pessoa queria criar a conta
            {
                closesocket(server)//desconectar com o servidor
                a=instance_create(0,0,obj_conexao)//criamos uma nova conexao com o servidor
                if instance_exists(a)//caso conecte
                {
                    nome=get_string("Digite o nome do personagem","")
                    classe=0
                    while(classe=0)//enguanto o jogador nao escolher a classe nao parar de perguntar
                    {
                        classe=show_message_ext("Escolha uma classe para seu personagem","mago","guerreiro","")
                    }
                    clearbuffer()//enviamos uma mensangem para criar uma conta
                    writebyte(3)//identificação criar conta
                    writestring(obj_login.login)
                    writestring(obj_login.senha)
                    writestring(nome)
                    switch(classe)
                    {
                        case 1:
                        writestring("mago")
                        break;
                        case 2:
                        writestring("guerreiro")
                        break;
                    }
                    sendmessage(a.server)//enviamos para a nova conexao com o servidor
                }
            }
            instance_destroy()//destruir esse objeto de qualquer jeito, pois foi criado um novo que dara a resposta.
            break;
Atualize o Step Event do obj_conexao com o código acima, modifique apenas o case 0.
Servidor
Quando o jogador sair, precisamos limpar sua vaga na lista.
Código:
for(i=1;i<=quantidade_maxima_de_jogadores;i+=1)//verificar todos os jogadores
{
    if (tcpconnected(jogador[i,1])=0)//caso esse jogador não esteja online
    {
        jogador[i,1]=0 //retiramos ele da lista mudando sua identificação para 0.
        jogador[i,2]="" //nick do personagem
        jogador[i,3]=1  //nivel
        jogador[i,4]=0  //experiencia
        jogador[i,5]="" //classe(raça)
    }
}
Modifique o 3º action step event do obj_server.

Vamos testar tudo que fizemos? Vamos desenhar na tela do servidor todas as conexões atuais.
Código:
for(i=1;i<=quantidade_maxima_de_jogadores;i+=1)
{
    texto=""
    texto+="id:"+string(jogador[i,1])  //identificação
    texto+=" | nick:"+jogador[i,2] //nick do personagem
    texto+=" | nivel:"+string(jogador[i,3])  //nivel
    texto+=" | xp:"+string(jogador[i,4])  //experiencia
    texto+=" | classe:"+jogador[i,5] //classe(raça)
    draw_text(5,25*i,texto)
}
Coloque esse codigo no Draw Event.
O chat precisa enviar o nick do jogador.
Código:
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(jogador[w,2]+texto)//enviando nick e 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,1])//enviar para todos
                }
            break;//fim
E por fim delete o obj_conexao que esta na ro_mundo no projeto do cliente.
Toda vez que você for adicionar um atributo ao jogador, lembre-se de atualizar a lista de jogadores, pegar_info(), mudar_info() e criar_conta()

Como esse tutorial ficou gigante, caso esteja dando erro me envie o log pelos comentarios.

No próximo tutorial, Vamos começar com a movimentação dos jogadores.

Links dos gmk:
CLIENTE.GMK
SERVIDOR.GMK

Obrigado por ler.
-Bull, Pit

Edit: Um jogo exemplo do poder do game maker.
http://myriad.truevalhalla.com/

Pit Bull

Número de Mensagens : 630
Idade : 21
Data de inscrição : 31/08/2010
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://leninja.com.br

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Crovux em Sex 29 Mar 2013, 21:50

Hmm que bom que saiu o 3 Happy Agora vai vim o 4 que tanto espero k tomara que resolva minhas duvidas... Você usa bastante variavel[i] isso me deixa meio perdidos nos códigos... Fica mais facil de identificar se usar uma variável pra cada coisa...

Crovux

Número de Mensagens : 169
Idade : 20
Data de inscrição : 07/01/2012
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Pit Bull em Sex 29 Mar 2013, 22:27

Se eu tenho 5 variaveis pra cada jogador e quero ter 100 jogadores vou ter q criar 500 variaveis? Muito mas facil usando arrays

Pit Bull

Número de Mensagens : 630
Idade : 21
Data de inscrição : 31/08/2010
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://leninja.com.br

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por capcomx9 em Ter 09 Abr 2013, 09:49

gostei do tutorial Very Happy tirei print pra mostra que aki ta pegando
print tirado usando ubuntu(linux) estarei esperando part 4 Smile





capcomx9

Número de Mensagens : 47
Idade : 16
Data de inscrição : 27/05/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://capcomx9devs.com.br

Voltar ao Topo Ir em baixo

100% imagens e texto aleátorios

Mensagem por vegeto122 em Ter 09 Abr 2013, 10:12

como fazer imagens e textos aleátorios ex:

entrei uma vez aparece Cool
entro de novo aparece Happy

vegeto122

Número de Mensagens : 9
Data de inscrição : 10/03/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por capcomx9 em Ter 09 Abr 2013, 10:14

vegeto122 escreveu:como fazer imagens e textos aleátorios ex:

entrei uma vez aparece Cool
entro de novo aparece Happy
espere a part 4 que ele deve encinar

capcomx9

Número de Mensagens : 47
Idade : 16
Data de inscrição : 27/05/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://capcomx9devs.com.br

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por vegeto122 em Ter 09 Abr 2013, 10:17

vegeto122 escreveu:como fazer imagens e textos aleátorios ex:

entrei uma vez aparece Cool
entro de novo aparece Happy

ops lugar errado

vegeto122

Número de Mensagens : 9
Data de inscrição : 10/03/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Gonzo em Sex 12 Abr 2013, 19:35

opa fui ver agora, cara muito legal em vou tomar um banho e tentar fazer alguma coisa aqui funcionar, dahora cara!!!!!!!!!! já ta funcionando ? té+

Gonzo

Número de Mensagens : 927
Data de inscrição : 29/05/2012
Reputação : 33
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Lord Minus em Sab 27 Abr 2013, 12:31

Tutoriais ótimos, estou ansioso esperando a continuação, eu fiz tudo no passo a passo, mas deu um bug, baixei o client e rodou perfeitamente... vou procurar onde errei... investigador Parabéns pela série...

Lord Minus

Ranking : Nota D
Número de Mensagens : 269
Idade : 19
Data de inscrição : 23/09/2010
Notas recebidas : E-E-C-D-C
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://facebook.com/lordminus

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por DevMinuzzo em Ter 14 Out 2014, 20:46

Cadê a continuação do tutorial? Não vai mais ter a parte 4?

DevMinuzzo

Número de Mensagens : 7
Data de inscrição : 03/10/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Lupptyr em Dom 08 Mar 2015, 17:58

Part 4? PLZZZ?
Na espera do milagre hehe

Lupptyr

Número de Mensagens : 28
Idade : 21
Data de inscrição : 06/03/2015
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Pit Bull em Ter 17 Mar 2015, 12:16

Olha só, ainda tem gente que gosta de fazer jogos online...

Amigo vou preparar a parte 4 nesse final de semana para você.

Pit Bull

Número de Mensagens : 630
Idade : 21
Data de inscrição : 31/08/2010
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://leninja.com.br

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Lupptyr em Ter 17 Mar 2015, 17:16

Valeu BRO O/ tamo junto, se puder tentar usar o Networking, acredito que o 39dll esteja meio obsoleto, não sei. xD

Lupptyr

Número de Mensagens : 28
Idade : 21
Data de inscrição : 06/03/2015
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Pit Bull em Qua 18 Mar 2015, 20:47

Se eu fizer o Networking vou ter que mudar o projeto todo, o que é inviável porque tenho que seguir o tutorial, mas pra transformar os codigos da 39dll em nativo do gms não é dificil, há varios tutoriais que você pode achar na net.

Pit Bull

Número de Mensagens : 630
Idade : 21
Data de inscrição : 31/08/2010
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://leninja.com.br

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por lordkill em Qua 18 Mar 2015, 21:34

Estou aguardando a parte 4 amigo, está ótimo, aprendendo bastante.

lordkill

Número de Mensagens : 2
Data de inscrição : 06/03/2015
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Lupptyr em Dom 29 Mar 2015, 11:44

Testei esse tutorial porem da erro nos 2 objetos principais obj_conexao / obj_server

Erro no obj_server;


Agora é quando ''loga'' a acc/ obj_conexao


Lupptyr

Número de Mensagens : 28
Idade : 21
Data de inscrição : 06/03/2015
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Lupptyr em Ter 26 Maio 2015, 00:31

Pit Bull, ainda pensa em lançar um 4* Tutorial?

Edit: Desculpe double post x.x

Lupptyr

Número de Mensagens : 28
Idade : 21
Data de inscrição : 06/03/2015
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

100% Re: Massive multiplayer online - parte 3

Mensagem por Conteúdo patrocinado Hoje à(s) 12:36


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum