Duvida implementação MMORPG

41 respostas
Diabo_Loiro

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.

41 Respostas

Marky.Vasconcelos

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.

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.

ViniGodoy

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/

JonathanSSantos

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.

Pra tibia mano??

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

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.

renamed

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

JonathanSSantos

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.

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:

Diabo_Loiro

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.

JonathanSSantos

ta usando qual ide pra programar?! :smiley:

@PROJETO
ERRO AO CARREGAR IMAGEM

Diabo_Loiro

ja vou arrumar.

Diabo_Loiro

Ok acertado.

ViniGodoy

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.

Diabo_Loiro

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.

JonathanSSantos

fico legal o negocio…

Como que tu quer fazer agora?

Tu vai evoluir esse jogo em que sentido?!

Ou nao?!

Diabo_Loiro

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

JonathanSSantos

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

Diabo_Loiro

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.

JonathanSSantos

a ta… legal cara
tomara que de certo!

Diabo_Loiro

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

Marky.Vasconcelos

hhauhau… seu RPG parece bastante o meu quando comecei.

Fiz até um MapBuilder pra ele… devo ter o código fonte por aqui depois podemos conversar sobre isso.

E também não posso reclamar de tibia joguei durante 3 anos… até que hakiei (por engenharia social nada avançado) um cara mas eu não sabia que o cara tinha uns 35 anos e era amigo de infancia do meu padastro e o filho dele me viu jogando na lan house perto de casa e perguntou “como voce conseguiu tudo isso”.

Fudeu tudo… depois disso parei… mas hoje em dia é uma merda a ultima coisa que vi foi uma grave escrita “Here lies the RPG of this game.”

Diabo_Loiro

tem ums map_builder free na web mais po se tu tiver hum que voce fez.

me add no msn [email removido]

dai agente ve quem sabe agente nao monta um svn e desenvolve junto.

Estou implementando a rede agora,ta meio complicado mais ta saindo.

pintofree

E ai como esta o projeto atualmente?? me interresei

Diabo_Loiro

parado ate scbcd

mais penultima versão foi http://www.youtube.com/watch?v=sUvtfBzj9fo

a ultima foi implementado isometria

luistiagos

Acredito que o melhor seria passar as cordenadas pro server e deixar que o proprio server processe as cordenadas dos objetos no mapa e deixar para o cliente o trabalho apenas de renderizar o mapa e os objetos… ja que apenas esta tarefa de renderização ja é bem pesada… principalmente se for em 3D… e assim vc gera um melhor controle… validando e posicionando as coisas no server…

por favor isto não é um sistema crud… tire esta de mandar mensagens pro usuario dizendo que não pode passar pela parede isto é ridiculo…

apenas subtraia a posição do eixo… tipo a parede se encontra em xy(10,20), em xy(10,21) tem uma parede, arvore, muro ou qualquer coisa que não se possa passar no mapa… então quando o usuario tentar ir para xy(10,21) valide se isto é um caminho valido… neste caso subtraia a posição y em y-1… assim ficaria xy(10,20) denovo…

para um trabalho de faculdade ou algo do genero até seria… mas como um mmorpg de mercado ele é horrivel os graficos são péssimos, os barcos mais parecem palitos de sorvetes com chicletes preso… mesmo usando 8 bits daria pra fazer graficos e efeitos bem melhores…
até os jogos de atari tinham graficos melhores que tibia… e a penalidade por morte é muito grande… vc chega a perder lvl e seus melhores equipes quando morre… alem de pra upar de um lvl para o outro demorar seculos…
se for se inspirar em um mmorpg 2d se inspire em ragnarok… cujo é extremamente simples os tiles e mapas… mas tem uma excelente qualidade grafica para um jogo 2D… e tem uma boa jogabilidade…

pintofree

Hehe tibia é bom sim veio, jogo faz uns 6 anos, o jogo ta cada ano melhor, os barcos nao parecem mais palitos, os graficos no geral estão melhores, mais é algo que nao me incomoda, a penalidade por morte foi revisada, esta melhor, mais eu ate gostava dos 10% aumentava o desafio. Upar level demora se vc nao saber como upar. :lol:

Ragnarock pra mim é coisa de viadinho, muito colorido e poluido.

ViniGodoy

E como você vai fazer para disfarçar o lag no seu cliente, digamos, se o ping for de 0,5 segundos? Ou seu jogo MMO só vai funcionar numa gigantesca rede local?

O cliente precisa mover-se assim que o jogador pressiona o botão. O servidor sempre receberá uma mensagem do que já aconteceu, no passado. O grande desafio do MMO é justamente lidar com esses atrasos e gerar uma versão consistente para ambos os jogadores.

ViniGodoy

Acho o tíbia um bom exemplo, você só desprezou o fato dele ter feito um enorme sucesso e ter uma comunidade gigantesca de jogadores. Ok, os gráficos são ruins, mas a implementação do MMO em si é perfeita. E a dificuldade de um jogo desses não está no gráfico, e sim, na rede.

O Rag é um bom exemplo também.

Felagund

Diabo Loiro:
parado ate scbcd

mais penultima versão foi http://www.youtube.com/watch?v=sUvtfBzj9fo

a ultima foi implementado isometria

Caramba cara, ta ficando show de bola, meus parabéns.

Diabo_Loiro

ja esta um pouco mais avançado com a isometria implementada porem parado… tera um cliente 3d no futuro mais antes 2d e em mobile.

não viso o lucro e sim por prazer estou estudando muito atualmente… quanto eu voltar ao game… me preucupo com detalhes…

agora sobre o tibia… cara nao tem jogo que vicia mais que esse pela dificuldade… ragnarok pessoal joga 3 meses e para… mais eu me inspiro em todos e vou retirar o que eu achar de melhor de cara e mesclar.

Marky.Vasconcelos

True… tibia vicia pela dificuldade e pelo RPG(Pelo menos antigamente quando eu jogava) e ragnarok enjoa mais rapido.

O meu jogo tambem era meio Tibia-based e eu queria colocar os melhores elementos da maioria dos RPGs que eu conhecia.

Aquele sistema de skills do runescape eu achava muito legal.

Naruffy

Marky.Vasconcelos:
True… tibia vicia pela dificuldade e pelo RPG(Pelo menos antigamente quando eu jogava) e ragnarok enjoa mais rapido.

O meu jogo tambem era meio Tibia-based e eu queria colocar os melhores elementos da maioria dos RPGs que eu conhecia.

Aquele sistema de skills do runescape eu achava muito legal.

Entrando meio de intruso na discução, :lol:

Concordo com vc, esse sistema de skill do Runescape me fez ficar viciado nesse jogo por um bom tempooo a alguns anos atrás. os jogos online de hoje em dia carecem dessas coisas em minha opinião.

[]s

Marky.Vasconcelos

Naruffy:

Entrando meio de intruso na discução, :lol:

Concordo com vc, esse sistema de skill do Runescape me fez ficar viciado nesse jogo por um bom tempooo a alguns anos atrás. os jogos online de hoje em dia carecem dessas coisas em minha opinião.

[]s

Hoje em dia o sentido dos MMOs são apenas ficar mais forte que os outros a medida que os graficos melhoram.

Ta na hora de criarem algo legal como antigamente.

Felagund

Marky.Vasconcelos:

Hoje em dia o sentido dos MMOs são apenas ficar mais forte que os outros a medida que os graficos melhoram.

Ta na hora de criarem algo legal como antigamente.

Nem adianta criar algo legal, normalemente quando se da mais enfase em historia, normalmente os graficos ficam piores. E eu já escutei muita gente dizer que escolhe jogo pelo grafico, não interessa se é 5 minutos jogados a cada 1 hr de video de alguma coisa…

Saudades de RPG de mesa…

Marky.Vasconcelos

Falando em jogos e evolução, só to vendo quanto tempo vai demorar pra essa nova tecnologia de imagens em 3D chegar aos jogos, pode ser até interessante e acredito que nem seja tão dificil de trazer isso para os games.

ViniGodoy

Felagund:
Nem adianta criar algo legal, normalemente quando se da mais enfase em historia, normalmente os graficos ficam piores. E eu já escutei muita gente dizer que escolhe jogo pelo grafico, não interessa se é 5 minutos jogados a cada 1 hr de video de alguma coisa…

Saudades de RPG de mesa…

Já jogou Dragon Age? Os gráficos são excelentes e a história não fica nem um pouco atrás. Dá para citar outros excelentes, como The Witcher. Mas realmente, não são MMOs.

O problema que teriam que dar um jeito das ações dos jogadores efetivamente alterarem o mundo onde os jogadores atuam. Já ouvi promessas assim, mas ainda estou para ver alguma funcionar de verdade.

Quando conseguirem isso, aí sim, poderemos ter histórias com ações e consequências num MMO. E eu espero estar lá para ver. :slight_smile:

Felagund

ViniGodoy:

Já jogou Dragon Age? Os gráficos são excelentes e a história não fica nem um pouco atrás. Dá para citar outros excelentes, como The Witcher. Mas realmente, não são MMOs.

O problema que teriam que dar um jeito das ações dos jogadores efetivamente alterarem o mundo onde os jogadores atuam. Já ouvi promessas assim, mas ainda estou para ver alguma funcionar de verdade.

Quando conseguirem isso, aí sim, poderemos ter histórias com ações e consequências num MMO. E eu espero estar lá para ver. :)

Não quis dizer que não existem historias e graficos bons num mesmo game hehhee, e não conhecia esses cara ai não, vou dar uma olhada com mais calma :D.

Sempre sonhei em um MMO onde os players fizem tudo, as lojas e talz, fossem baseadas nos players, e as aveturas maiores ficassem registradas no jogo, estilo os livros do tibia, mas a historia do game é escrita dia apos dia…

Bom, sonho meu hehehe, espero pelo menos ver jogos com maior liberdade de movimentação e iteração entre os players :smiley:

claudiom

ouvi falar que o Star Wars Galaxies era “quase” assim… imensos planetas e os players criavam suas próprias casas e cidades…
mas houve mudanças no jogo que acabaram com esse elemento…

tem o Eve onde a economia do jogo é totalmente dominada pelos players… mas você controla apenas naves…

acho que o grande desafio é conseguir dar esse poder ao jogador de alterar o meio ambiente e ainda assim permitir aos jogadores casuais ser “guiado”…sem muita imersão no jogo

Marky.Vasconcelos

Falando em economia, uma ótima sacada que criaram foi no jogo Runescape com o Grand Exchange, é literalmente uma bolsa de valores dentro do jogo.

Achei excelente.

luistiagos

E como você vai fazer para disfarçar o lag no seu cliente, digamos, se o ping for de 0,5 segundos? Ou seu jogo MMO só vai funcionar numa gigantesca rede local?

O cliente precisa mover-se assim que o jogador pressiona o botão. O servidor sempre receberá uma mensagem do que já aconteceu, no passado. O grande desafio do MMO é justamente lidar com esses atrasos e gerar uma versão consistente para ambos os jogadores.

é verdade não pensei nisto de disfarçar os lags… isto deve ser o maior problema… lag é uma desgraça…

Jose111

Acho que se você for criar um rpg tem muita coisa a se pensar antes de escrever a primeira linha de código…

Arisco a dizer que a parte do desenvolvimento do jogo é mais fácil do que a parte da concepção do mesmo já que você tem muita coisa para definir, calcular, balancear …

B

Uma dica:

Bote no papel que objetos fazem parte da sincronização do jogo com os outrs nodos da rede, e separe-os dos objetos que não fazem. Com esses primeiros também mapeie os objetos que fazem contato com esses objetos que mantém o estado do jogo.

O motivo principal é saber quem faz parte da mesma thread que controla o estado do jogo, já que eles ocupam o tempo de processamento que deveria estar destinado à sincronização.

E se puder, leia os papers da área: http://warriors.eecs.umich.edu/games/papers/netgames02-tss.pdf

Criado 20 de dezembro de 2009
Ultima resposta 30 de jul. de 2010
Respostas 41
Participantes 12