MMORPG em Java - ManiaOnline versão 0.08.00

Fala galera! Eu faço parte da equipe de desenvolvimento do ManiaOnline, no caso, sou o outro programador da equipe.
Acho que já comentei sobre o desenvolvimento desse jogo aqui no fórum, mas nós ainda não estávamos divulgando muito.
Vou ajudar nas respostas sobre o jogo :slight_smile:

ViniGodoy, usando UDP não é arriscado perdermos muitos pacotes deixando o cliente perdido? Sei que é mais rápido, mas num dia de lag ele deve piorar ainda mais o problema do lag com a perda de pacotes, não?

pedroroxd, tem algumas besteirinhas no jogo que estão atrapalhando mesmo, nós vamos tentar corrigi-las logo. Esse bug do personagem andar sozinho eu também percebi, o ouvinte do teclado não percebe o ‘released’ e o personagem não para de andar, basta apertar e soltar a seta do teclado novamente que ele para. Vou colocar este erro na lista de correções. O temporizador para dar um ‘clean’ no game ainda não está implementado, mas nada que não seja resolvido com um re-start manual no servidor hehehe.

Acho que o Leo deu uma exagerada no tempo de desenvolvimento… Mas deve ser quase isso hehehe, uns 4 anos acho. Na época nós estávamos fazendo faculdade sim, e trabalhando também, então o tempo era quase zero, depois que nos formamos (2009) o desenvolvimento está bem mais rápido, o ano de 2010 rendeu bastante. Como o Leo disse, teve épocas que nós tiramos umas férias do desenvolvimento também, principalmente no final do meu curso pra fazer o TCC (meu coordenador não aceitou apresentar o jogo porque disse que qualquer um faz um joguinho desses. Eu devia ter batido nele?) Outro motivo para a demora é que quando começamos o desenvolvimento tínhamos pouca experiência, principalmente eu que nem sabia Java hehehe (Sou programador COBOL), por algumas vezes tivemos que refazer alguns códigos, e com certeza ainda tem coisa que pode ser melhorada.

tioola, se não me engano (nem eu sei direito hehehe), tem umas aranhas abaixo da cidade (pro sul), e uns ratos a direita da cidade, são um pouco mais difíceis de achar. O Sapo e o Lobo estão meio fortes, cuidado com eles. Nós estamos trabalhando em um mapa novo e melhorando as imagens a algum tempo, na versão 0.09.00 deve ficar pronto, inclusive com uns monstros novos que eu achei que ficaram bem legais.

Marky, nós pretendemos fazer as ‘nested bags’ sim, a mochila com 16 itens apenas fica muito limitada, e alguns itens eu prefiro não permitir o empilhamento (como é feito nas flechas e moedas), não deve demorar muito e nós colocaremos esta melhoria em desenvolvimento. Que pena que você perdeu seu código, eu gostaria de ter conhecido o seu rpg.

Ola, estou comecando a desenvolver programas em Java e gostaria de participar da atualizacoes do Jogo, se puder programar alguma coisa para o jogo por favor me comuniquem!

Agradeco!

Bem… ele estava bem parecido com esse ai, mas eu ainda não tinha implementado o esquema de Layers para desenhar uma arvore em cima do chao.

Engraçado, mas o Bruno Daniel Marinho(D. Loiro aqui do GUJ) também implementou algo parecido e ficou parado no mesmo lugar que eu estava.

Você precisa ter um protocolo organizado para isso, com numeração de mensagens, transmissão de updates.

Veja bem, um inimigo envia uma informação de posição, dizendo que está em (10,10). Em seguida, ele anda e envia a posição (10, 12). O primeiro pacote se perde. O segundo chega. Você realmente precisa retransmiti-lo? O que o TCP faz é segurar o segundo pacote até que o primeiro chegue, pois ele garante a chegada e a ordenação. E isso aumenta drasticamente o lag, uma vez que você espera por informações descenessárias.

O protocolo de MMOs é tipicamente escrito em UDP. Claro, alguns serviços como CHAT e trocas de arquivos, que podem depender de ordem e confiabilidade, usam TCP. Mas atualizações de estado do jogo, se implementadas na forma de um protocolo de stream, não precisam usar TCP. Como elas são frequentes e seriais, o UDP torna-se um excelente candidato para elas. O UDP também tem uma vantagem extra: ele é capaz de perfurar firewalls (procure sobre Hole Punching).

No mais, parabéns, por mais que tenha bugs, problemas e coisas para corrigir é muito raro alguém apresentar algo funcional, quem dirá um jogo online via internet. Sucesso para vocês. E, se quiserem escrever alguma coisa sobre a experiência lá no Ponto V, entre em contato.

[quote=ViniGodoy]
É impossível resolver o lag. Na internet, o tempo de ping será de pelo menos 200ms, o que é muito. Num dia ruim, você poderá ter lags de até 1ms.
O que você pode fazer para atenuar é:

  1. Fazer ações no cliente, mesmo sem receber a confirmação do servidor;
  2. Tratar clientes de modo que o lag de um não afete outro (isso envolve incluir timeouts para recebimentos de mensagem no game loop, por exemplo);
  3. Usar UDP (esse sim, atenua “de verdade” o problema de lag, mas não é um protocolo muito confiável);
  4. Manter o jogo otimizado (use para isso o VisualVM).

Muito legal o editor. Também acho o MySQL uma boa opção de BD. O servidor também foi feito em Java?[/quote]

Vendo jogos de primeira pessoa que geralmente no Brasil conseguimos um latency de, no máximo, 50ms (tem servidores que dá pra jogar com 15ms por exemplo, tipo CS e TF2), não é possível ter tais latencies em servidores de mmo?! Ou é no máximo 200ms mesmo?

200ms eu só consigo se estiver em um servidor gringo (tipo wow)

[quote=Leozin]Vendo jogos de primeira pessoa que geralmente no Brasil conseguimos um latency de, no máximo, 50ms (tem servidores que dá pra jogar com 15ms por exemplo, tipo CS e TF2), não é possível ter tais latencies em servidores de mmo?! Ou é no máximo 200ms mesmo?
200ms eu só consigo se estiver em um servidor gringo (tipo wow)[/quote]

O problema de MMO é justamente o primeiro “M”. Quando você tem a coisa massiva você precisa de muita banda do lado do servidor, um tempo de atendimento de pacotes muito otimizado e precisa também levar em conta que um número de usuários jogando juntos irá colocar todos os tipos de conexão no servidor ao mesmo tempo.

Então, você terá que nivelar para o sujeito que usa uma rede de baixa velocidade num sábado à tarde, vindo de uma cidade no interior do país.

Em servidores FPS, o ambiente costuma a ser muito mais controlado.

Se não existisse essa dependência dele, bateria sim.

Criar jogos não é uma atividade trivial, se ele soubesse que o trabalho para se fazer tal jogo (mesmo que em estado primário, mas funcional) é algo absurdo, envolvendo programação mais complexa, com socks, leitura de sprites, acesso a matrizes de N dimensões e outras N coisas, com certeza ele iria mudar de ideia.

Yes. O servidor é java tb.

[quote=kestering]Ola, estou comecando a desenvolver programas em Java e gostaria de participar da atualizacoes do Jogo, se puder programar alguma coisa para o jogo por favor me comuniquem!

Agradeco![/quote]

Dou a ideia de vc começar fazendo um jogo da velha, depois um tetris e ir evoluindo ao poucos.

[quote=ViniGodoy]
Veja bem, um inimigo envia uma informação de posição, dizendo que está em (10,10). Em seguida, ele anda e envia a posição (10, 12).

No mais, parabéns, por mais que tenha bugs, problemas e coisas para corrigir é muito raro alguém apresentar algo funcional, quem dirá um jogo online via internet. Sucesso para vocês. E, se quiserem escrever alguma coisa sobre a experiência lá no Ponto V, entre em contato. [/quote]

Mas com isso o personagem não seria “teletransportado” da posição (10,10) para a (10,12)? Tenho que ver isso direitinho.

Quanto a escrever alguma coisa para o pontov vou ver com o Daniel sobre o que poderíamos falar.

[quote=Grinvon]

Se não existisse essa dependência dele, bateria sim.

Criar jogos não é uma atividade trivial, se ele soubesse que o trabalho para se fazer tal jogo (mesmo que em estado primário, mas funcional) é algo absurdo, envolvendo programação mais complexa, com socks, leitura de sprites, acesso a matrizes de N dimensões e outras N coisas, com certeza ele iria mudar de ideia.[/quote]

Concordo em gênero, número e grau.

E, do jeito que você implementou, ele não se teletransporta também? Com o TCP, na situação que descrevi, vc receberá 2 pacotes seguidos, o (10,10) e o (10,12). A atualização fica tão rápida que ele também parece ter se teletransportado.

Não existe magia, o canal de comunicação é o mesmo. Ou você irá perder um pacote e receber outro, ou você irá esperar:

  1. Alguns milisegundos para descobrir que o pacote não chega mesmo;
  2. Todo tempo de retransmissão do pacote;

Para só então os dois pacotes chegarem juntos (o que estava atrasado + o que já chegou e só estava esperando o antigo).

Para disfarçar o “salto”, a maior parte dos jogos fazem o personagem mover-se rapidamente no client. É por isso que em tempos de lag, as vezes vemos gente parada e, em seguida, andando bem rápido.

Foi isso que fizemos no cliente. Vamos supor que o cliente recebeu 2 mensagens de uma vez. O cliente vai pegar esses 2 passos, vai guardar em uma lista, vai aumentar um pouco a velocidade do personagem e vai fazer a animação dele andado. Sem teletransportar. Quanto mais mensagens estiverem na fila para serem processadas pelo cliente, maior será a variável de aumento da velocidade do personagem.

[size=18]NOVIDADES[/size]

A versão 0.08.01 está 23% pronta.

Segue a lista de correções da versão 0.08.01

  1. Permitir fechar o painel de Status. (50% pronto)

  2. Criar o ‘Guia do Iniciante’. (50% pronto)

  3. Corrigir erro que faz o personagem andar sem parar. (100% pronto)

  4. Quando o personagem morrer, não fechar o jogo.

  5. Corrigir erro de monstros atacando a distância.

  6. Corrigir camada do painel Equipamentos que está ficando por cima do menu inicial.

  7. Colocar abertura do painel Status no popup do mouse.

  8. Corrigir troco da venda que vem todo picado.

  9. Corrigir erro de repetição dos textos do bate-papo.

  10. Deixar os monstros mais fracos.

  11. Parar de atacar um alvo quando clicar nele novamente.

  12. Corrigir venda de itens empilhados.

  13. O servidor algumas vezes não salva dados do personagem

  14. Espalhar os monstros pelo mapa

  15. Usando a espada, a habilidade que sobe é a mão limpa.

  16. Não salva habilidades quando morre (100% pronto)

Então não haveria problema. O que o UDP faria é deixar a mensagem 1 morrer. E, no fundo, você nem precisa dela, pois a 2 tem uma informação mais atual. Você faz o seu cliente caminhar até o local da mensagem 2 e pronto. :slight_smile:

O TCP irá aumentar o lag, quando ele faz o sistema parar e retransmitir uma informação desatualizada. É por isso que o UDP geralmente é usado na parte do jogo que faz esse tipo de atualização de estado, pois como essas atualizações são muito periódicas, não há problema em perder uma informação ou outra no caminho.

Você está certo.
No caso do MMORPG UDP é melhor.
Vou ver se faço isso na próxima versão.

Mas ai como resolvo o problema do login? Se perder uma mensagem dá erro.

[list]Quando faço o login o cliente me manda um objeto do tipo Login com o login e a senha do cara (MD5).[/list]
[list]O servidor recebe e valida a senha no banco.[/list]
[list]Se a senha estiver OK ele manda a lista de personagens pro cliente.[/list]
[list]O cliente escolhe o personagem e manda o nome desse personagem para o servidor.[/list]
[list]O servidor pega todas as informações do personagem e manda para o cliente.[/list]
[list]Inicia o jogo.[/list]

[size=18]NOVIDADES[/size]

A versão 0.08.01 está 78% pronta.

  1. Permitir fechar o painel de Status. (50% pronto)

  2. Criar o ‘Guia do Iniciante’. (100% pronto)

  3. Tirar o controle de velocidade da versão de produção (100% pronto)

  4. Erro na imagem do escudo de madeira (100% pronto)

  5. Corrigir erro que faz o personagem andar sem parar. (100% pronto)

  6. Quando o personagem morrer, não fechar o jogo. (100% pronto)

  7. Corrigir erro de monstros atacando a distância. (100% pronto)

  8. Corrigir camada do painel Equipamentos que está ficando por cima do menu inicial. (100% pronto)

  9. Colocar abertura do painel Status no popup do mouse. (100% pronto)

  10. Corrigir troco da venda que vem todo picado. (100% pronto)

  11. Corrigir erro de repetição dos textos do bate-papo. (100% pronto)

  12. Deixar os monstros mais fracos. (100% pronto)

  13. Parar de atacar um alvo quando clicar nele novamente. (100% pronto)

  14. Corrigir venda de itens empilhados.

  15. O servidor algumas vezes não salva dados do personagem

  16. Espalhar os monstros pelo mapa

  17. Usando a espada, a habilidade que sobe é a mão limpa.

  18. Não salva habilidades quando morre (100% pronto)

O login vc faz por TCP. Geralmente o UDP só é usado para atualização das informações do mundo mesmo. Para chat, login e trocas de arquivos, usa-se o TCP.

Nossa senhora! que resposta rápida! hehehe

Acho que vou ter que fazer isso mesmo. Vlw!

seria legal porta-lo para isometrico, da uma ilusao quase 3d, sei fazer mapa isometrico em javascript mais em java comecei agora, alguem sabe onde encontrar tutorial sobre mmorpg com java desde parte do servidor como cliente?

estou querendo desenvolver um.

Também acho que isométrico fica muito bom, muito bonito. Eu mesmo, adorava jogar Nigestalker, belo jogo do Genesis. Mas isométrico é um tanto mais difícil de se programar. A vantagem do plano de cima é que você já tem muita coisa pronta, e dar-se para reaproveitar mais ainda.

Acho que ninguém fez isso ainda. Mas se vc achar alguma coisa, me manda que eu quero tb! hehehe

[size=18]NOVIDADES[/size]

A versão 0.08.01 está 100% pronta.

  1. Permitir fechar o painel de Status. (100% pronto)

  2. Criar o ‘Guia do Iniciante’. (100% pronto)

  3. Tirar o controle de velocidade da versão de produção (100% pronto)

  4. Erro na imagem do escudo de madeira (100% pronto)

  5. Corrigir erro que faz o personagem andar sem parar. (100% pronto)

  6. Quando o personagem morrer, não fechar o jogo. (100% pronto)

  7. Corrigir erro de monstros atacando a distância. (100% pronto)

  8. Corrigir camada do painel Equipamentos que está ficando por cima do menu inicial. (100% pronto)

  9. Colocar abertura do painel Status no popup do mouse. (100% pronto)

  10. Corrigir troco da venda que vem todo picado. (100% pronto)

  11. Corrigir erro de repetição dos textos do bate-papo. (100% pronto)

  12. Deixar os monstros mais fracos. (100% pronto)

  13. Parar de atacar um alvo quando clicar nele novamente. (100% pronto)

  14. Corrigir venda de itens empilhados. (100% pronto)

  15. O servidor algumas vezes não salva dados do personagem (100% pronto)

  16. Espalhar os monstros pelo mapa (100% pronto)

  17. Usando a espada, a habilidade que sobe é a mão limpa. (100% pronto)

  18. Não salva habilidades quando morre (100% pronto)

Gostei da velocidade que o projeto está andando.

Só não sei por que, mas ficar vendo o jogo inteiro em portugues não me agrada.

[quote=Marky.Vasconcelos]Gostei da velocidade que o projeto está andando.

Só não sei por que, mas ficar vendo o jogo inteiro em portugues não me agrada.[/quote]

Não entendi. Você não gosta de jogos em português?

[size=18]NOVIDADES[/size]

Pessoal é com orgulho que informo o inicio do desenvolvimento da versão 0.09.00 do ManiaOnline.

Essa versão tem como objetivo principal criar o novo mapa 1000x1000.

Segue a lista de demandas da versão 0.09.00

  1. Atualizar WIKI (Monstros, equipamentos, lugares, etc).

  2. Memória MO

  3. Fazer com que o Ctrl+1,2,3,4,5 tb feche a mochila e os outros.

  4. Construir um mapa novo 1000x1000.

  5. Fazer uma cidade principal

  6. Fazer um cemitério

  7. Adicionar novos monstros

  8. Juntar dinheiro do troco

  9. Criar certificado novo com maniabr.com.br

  10. [ERRO] Conexão cai e cliente continua

  11. [ERRO] Não permitir 2 personagens com mesmo nome

  12. [Erro] [ManiaEditor] conta-gotas

  13. [ERRO] Usando a espada, a habilidade que sobe é a mão limpa.

  14. Adicionar o escudo na lista de itens do vendedor Pedro.

  15. Criar itens raros como prêmios das missões

  16. Mostrar ataque e defesa das roupas.

  17. [ERRO] Fazer os monstros andarem direito

  18. [Erro] Arrastar menu para fora da janela e perder o foco

  19. Criar um favicon para o site.

  20. Arrumar textos “Fulano matou UM ARANHA”

  21. [ERRO] Mostrar o menu do personagem quando clica no personagem

  22. Criar itens de comida

  23. Criar missões para monstros novos

  24. [Erro] Monstros travando

  25. [Erro] Dano do monstro positivo

  26. Mudar o nome do jogo

  27. Desvincular imagens do editor

  28. Aumentar e diminuir o zoom no editor de mapas

  29. Substituir azulejos no editor

  30. [Erro] Quando tenta entrar de novo sem fechar o jogo o cliente trava.

  31. [ERRO] Erro no vendedor

É, acho que não gosto de jogos em portugues, fiquei tão acostumado a jogar até hoje jogos em ingles que acho estranho ver tudo em portugues.

Voces tem algum editor de mapas? Se não, acho que isso poderia ser a proxima tarefa de voces.