Duvida implementação MMORPG

Ola pessoal essa é uma duvida ao pessoal que ja desenvolveu games.

A Duvida é a seguinte.

tenho implementado o cliente do jogo que basicamente consiste em:
movimentar o personagem
desenhar o mapa
reconhecer o terreno se pode passar ou não.

implementei uma comunicao entre o cliente e um servidor com sucesso usando Strings
por exemplo mando uma string para o servidor e ele responde para todos os ouvintes uma string apos processar.

Atualmente no cliente local ele redesenha a tela quando se movimenta o personagem como se fosse
1-digitou tecla de movimento
2-calcula qual sera o movimento futuro e valida se ele é correto(por exemplo valida de nao é uma parede)
3-caso seja true ele anda e repinta o mapa caso false ele exibe uma mensagem para o usuario dizendo que nao se pode passar pela parede

Então a questão seria qual a logica certa para implementar o “movimento do mundo”

o cliente passar x e y o server validar e devolver um array com o novo desenho do mundo

ou

o cliente validar e atualizar a posição no sevidor

estou um pouco confuso sobre esta decisão logica pode impactar o desempenho

obrigado quem puder responder.

A ultima vez que começei a fazer um MMORPG eu tinha isso pronto mas perdi o código.

Voce ta usando TCP ou UDP?

No caso do mapa eu tinha um loader que carregava as imagems com nomes tipo 0,1,2,3 dai mandava um DatagramPacket (Que envia via UDP) com bytes que montavam o mapa no ladod o cliente.

Já era até possivel andar varias pessoas no mapa e falar.
Mas depois achei que ficou muito parecido com tibia e parei de fazer.

Ah mais o que tem a ver po tibia é um bom jogo.

Mais voltando ao caso estou usando soquetes…

Estou fazendo algums testes aqui.

Se você tem dúvidas tão básicas, você tem certeza que quer implementar um RPG massivo? Por que não começa com algo mais simples, como multiplayer para 3 ou 4 jogadores, em rede, e deixa a parte massiva, via internet, para o futuro?

Vou te falar, você está tentando construir um foguete, quando mal sabe andar de bicicleta. Pode ser menos frustrante começar por um projeto mais simples.

Só comentando o seu problema específico. Nenhuma das soluções que você apontou é correta. Como um MMO roda via internet, você deverá usar uma técnica conhecida como dead-reckoning, ou o lag será imediatamente perceptível. Isso funciona da seguinte maneira. Quando o player apertar para andar, o char dele começará a andar imediatamente, e só então enviar essa informação para o servidor. O mesmo vale para o uso de skills.

O servidor receberá essa informação com atraso, e tentará formar uma versão “válida” do mundo com a informação que está recebendo. O problema é que o jogador envia para você o comando em T. O servidor já recebeu essa ação, e vai processa-la em T+1, portanto, o mundo válido dele já terá atraso. O segundo jogador, vai descobrir que o primeiro realizou a ação em T+2, após receber essa informação do servidor.

Como se não bastasse, considere que jogadores diferentes podem ter atrasos diferentes. Isto é, um pode estar rodando numa linha discada, enquanto outro num ADSL praticamente ao lado do seu server. E um jogador não deve impactar no outro, pelo menos não em grande escala.

Algumas coisas podem atenuar esse problema. Entre elas, não ter ações instantâneas no seu MMO. Por isso, faça com que as skills tenham efeitos e torne os danos imprevisíveis. Isso permite que a navegação trafegue entre os jogadores enquanto a animação dos poderes ainda está rodando. E também permite que algumas ações sejam suprimidas (por exemplo, dois tiros de um arqueiro poderiam virar 1 tiro só, com muito dano).

Por isso eu digo. Geralmente é interessante começar com um jogo em rede normal, fora da internet. Nela, o atraso é muito pequeno, e você pode pensar num servidor que use “pulsos” e num programa que seja tão síncrono como você originalmente imaginou.

Você também pode procurar por algum framework próprio para aplicações desse tipo, como o projeto DarkStar:
http://projectdarkstar.com/

[quote=Diabo Loiro]Ah mais o que tem a ver po tibia é um bom jogo.

Mais voltando ao caso estou usando soquetes…

Estou fazendo algums testes aqui.
[/quote]

Pra tibia mano??

Faz pra algo melhor! :stuck_out_tongue: :slight_smile: :smiley: :wink:

opa então viny ja esta rodando em rede local,era exatamente essa minha duvida ai ter mais jogadores digamos 20 pela internet ,fiz um temporizador de 1 segundo para padronizar a atualizaçao da tela no cliente, e so faltava saber como eu ia movimentar 2 jogadores ao mesmo tempo, estava pensando em sincronizar o metodo do movimento… pois por exemplo se 2 jogadores se movem para o mesmo square um deles tem chegar primeiro e o outro falha vou pesquisar e estudar essa tecnica que voce falou se tiver algums links obrigado.

Quando ao project dark star penso em estudar ele mais tarde junto com as outras jmonkey etc…

por emquanto estou usando java puro mesmo,para tudo quero fazer assim por emquanto.

Sobre tibia acho um jogo excelente tirando os graficos e o cara é podre de rico.

Vcs são avançados demais, eu ainda to pensando como fazer akele jogo da cobrinha em java q tinha nos celulares nokias hhehe

[quote=Diabo Loiro]opa então viny ja esta rodando em rede local,era exatamente essa minha duvida ai ter mais jogadores digamos 20 pela internet ,fiz um temporizador de 1 segundo para padronizar a atualizaçao da tela no cliente, e so faltava saber como eu ia movimentar 2 jogadores ao mesmo tempo, estava pensando em sincronizar o metodo do movimento… pois por exemplo se 2 jogadores se movem para o mesmo square um deles tem chegar primeiro e o outro falha vou pesquisar e estudar essa tecnica que voce falou se tiver algums links obrigado.

Quando ao project dark star penso em estudar ele mais tarde junto com as outras jmonkey etc…

por emquanto estou usando java puro mesmo,para tudo quero fazer assim por emquanto.

Sobre tibia acho um jogo excelente tirando os graficos e o cara é podre de rico.[/quote]

Eu sei… nao vo desmerecer pq joguei 4 anos da minha vida isso! uheauehaea
Era viciado em tibia… agora ja nao jogo mais nada… poco tempo pra viver socialmente… imagina se jogasse ainda… euhaa
mais como eu disse… tibia eh um rpg legal… mais seu grafico nao atrai em nada o jogo!!

Nada contra… soh falei pq nao me atrai mais esse jogo e acho palha pra dedeu hj em dia! PRA dedeu e’ fogo UHeauea :smiley: :smiley:

So para voces verem como ta ficando.

Eu joguei tibia por um ano… foi legal e tal dai descobri como esses jogos vicião entao parei e nunca mais joguei nenhum game,perdi praticamente 1 ano sem estudar by tibia.

ta usando qual ide pra programar?! :smiley:

@PROJETO
ERRO AO CARREGAR IMAGEM

ja vou arrumar.

Ok acertado.

Faça uma movimentação suave entre tiles. Assim você pode fazer um jogador “empurrar” o outro para fora do tile. Em aplicações via rede, é importantíssimo que coisas atômicas não sejam feitas. Por exemplo, um tiro de sniper matar automaticamente alguém, ou bonecos “saltarem” entre squares.

Tarefas assim tem comportamento muito previsível para o jogador, e são extremamente difíceis de disfarçar quando se tem lag.

hum o que voce quis dizer com suave? poderia dar um pseudo exemplo.

eu falei de sincronizar por que por exemplo

metodo movimenta(x,y){
linha1
linha 2
linha 3
}

se um usuario esta no meio do movimento digamos na linha 2 e entao outro jogador começa executar tambem a "funçao movimenta"e a linha 1 que verificava se estava vazio o square. entao o jogador 2 poderia pensar que estava livre o quadrado sendo que na verdade nao estava.

Obs so pode ter um jogador por square.

Obrigado.

fico legal o negocio…

Como que tu quer fazer agora?

Tu vai evoluir esse jogo em que sentido?!

Ou nao?!

Sim estou implementando cliente e servidor e fazendo um NPC so que vou estudar a tecnica que o viny falou pois não quero o lag

aham… mais a tua ideia e’ manter o padrao tibia?!

Como tibia?

Na realidade estou implementando o RPG em si o sistema de batalha pode ser um card game proprio que eu ja tenhos as regras,ou tipo tibia,ragnarok que lembra mais zelda,ou estilo final fantasy que é a mais provavel para o inicio por ser mais estatico.

o caso agora é implementar o dead-reckoning que o viny godoy falou estou pesquisando.

a ta… legal cara
tomara que de certo!

se alguem tiver algum exemplo de implemetaça java de dead reckoning eu tava precizando o material sobre o assunto esta escasso.