Entrar
Últimos assuntos
» player não consegue andarpor 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
» (Resolvido) 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
» (RESOLVIDO) 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
[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO
3 participantes
Página 1 de 1
[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO
Ola, estou abrindo esse tópico para que possamos aglomerar os conhecimentos pertinentes sobre como deveria ser a estrutura de um SERVIDOR MMO[RPG].
Também quem saber quais e como acessar o código-fonte de jogos Open Souce, fiquem a vontade para compartilhar o conhecimento.
SOBRE MIM
Encontrei dois jogos Open Source "The Mana World" e "Ryzom", porem até agora não consegui realmente acessar os códigos fontes para analisar como foi implementada o sistema e a própria comunicação. Caso eu fosse criar um jogo Online de poucas conexões simultâneas já me considero absolutamente capaz, porem já consigo identificar que minhas técnicas (código, estruturas, comunicação etc) não são otimizadas.
Por exemplo, pretendo criar um servidor em C++ (por exemplo) e o cliente em GM-Studio, porem, em exemplos simples verifiquei que a pessoa faz uma configuração de multthreads (um para cada jogador), porem isso seria a mesma abordagem em um servidor que deveria receber 100+ jogadores (eu mesmo seguiria o raciocínio).
Outro ponto seria como guardar as informações? penso eu que em um MMORPG, pode-se salvar em banco de dados a cada "pause" do jogador, por exemplo, a própria desconexão do servidor, ou como em alguns jogos quando ele troca de mapa e faz aquele "load".
CONCLUO
Espero que alguém seja capaz de compartilhar algum matéria sobre as estruturas adotadas em jogos MMO que se assemelham aos comerciais.
Também quem saber quais e como acessar o código-fonte de jogos Open Souce, fiquem a vontade para compartilhar o conhecimento.
SOBRE MIM
Encontrei dois jogos Open Source "The Mana World" e "Ryzom", porem até agora não consegui realmente acessar os códigos fontes para analisar como foi implementada o sistema e a própria comunicação. Caso eu fosse criar um jogo Online de poucas conexões simultâneas já me considero absolutamente capaz, porem já consigo identificar que minhas técnicas (código, estruturas, comunicação etc) não são otimizadas.
Por exemplo, pretendo criar um servidor em C++ (por exemplo) e o cliente em GM-Studio, porem, em exemplos simples verifiquei que a pessoa faz uma configuração de multthreads (um para cada jogador), porem isso seria a mesma abordagem em um servidor que deveria receber 100+ jogadores (eu mesmo seguiria o raciocínio).
Outro ponto seria como guardar as informações? penso eu que em um MMORPG, pode-se salvar em banco de dados a cada "pause" do jogador, por exemplo, a própria desconexão do servidor, ou como em alguns jogos quando ele troca de mapa e faz aquele "load".
CONCLUO
Espero que alguém seja capaz de compartilhar algum matéria sobre as estruturas adotadas em jogos MMO que se assemelham aos comerciais.
Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO
Pelo que sei sobre o assunto, seria bom dividir o processamento entre servidores.
Funcionaria assim:
Servidor 1 -> interage com quem tem menor ping em relação a ele
Servidor 2 -> interage com quem tem menor ping em relação a ele
Servidor 3 -> interage com quem tem menor ping em relação a ele
Todos os servidores se comunicariam com um banco de dados que todos podem acessar.
Cada servidor se encarrega das conexões e do processamento de seus jogadores.
Um modo de salvar é quando o player parar. Por exemplo, ele está em (10, 10) e vai pra (100, 200). Quando ele chegar lá, o servidor salva a posição dele no BD.
Funcionaria assim:
Servidor 1 -> interage com quem tem menor ping em relação a ele
Servidor 2 -> interage com quem tem menor ping em relação a ele
Servidor 3 -> interage com quem tem menor ping em relação a ele
Todos os servidores se comunicariam com um banco de dados que todos podem acessar.
Cada servidor se encarrega das conexões e do processamento de seus jogadores.
Um modo de salvar é quando o player parar. Por exemplo, ele está em (10, 10) e vai pra (100, 200). Quando ele chegar lá, o servidor salva a posição dele no BD.
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO
Assunto bastante interessante, estou com um projeto para um jogo online ! Maas, não tão complexo como MMO RPGS, e estes debates e dicas que terão aqui poderão facilitar a vida de muita gente !
Meu projeto será tipo jogo de browser, acho .. acho não tenho certeza, que pelo fato da simplicidade do jogo será bem mais fácil trabalhar com o online ! mas como não tenho experiencia vou penar bastante !
Meu projeto será tipo jogo de browser, acho .. acho não tenho certeza, que pelo fato da simplicidade do jogo será bem mais fácil trabalhar com o online ! mas como não tenho experiencia vou penar bastante !
luan.alc- Games Ranking :
Notas recebidas : B
Data de inscrição : 13/03/2012
Reputação : 3
Número de Mensagens : 294
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 1
x 0 x 0 x 0
Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO
Desde já agradecendo a participação do Pedrox, do Luan.alc e outros futuros.
O que busco realmente é como acessar o código fonto dos MMO(RPG's) que possuem seu código aberto. Tanto os códigos dos servidores como dos clientes são do meu interesse.
Sobre seu ponto de vista Pedrox, acredito (porem posso estar redondamente engando) que não é viável, caso o motivo seja pela conexão do usuário com o servidor. Pois para isso deveria haver uma comunicação a mais, dos servidores com o banco de dados remoto (ja que este é compartilhado). Agora se for por motivo de sobrecarregamento do servidor, penso ser dificil com as maquinas de existem hoje em dia, apesar que depende muito da estrutura otimizada do servidor.
Mas ainda não é nem isso a minha duvida. Estarei postando ao final deste post.
Luan se for um Browser Game acredito que não precisara se preocupar tanto quanto eu, pois os jogadores não precisarão de dados em tempo real, isto é, sera atualizado a cada requisição par ao servidor (entrar no site, atualizar a pagina, fazer uma ação etc). Se o jogador ficar com a página parada por 1h sem fazer absolutamente nada, este não estará "pesando o servidor" (ainda sim tera uma conexão aberta pendente, mas não estará requisitando nenhum tipo de dado).
O QUE PROCURO
Retomei meu projeto do PokeDota este fim de semana (estou mexendo nele quando tenho um tempo sobrando na casa da namorada). Pegando meu projeto como exemplo. Como não fiz um servidor a parte (estou usando o próprio GM), então para facilitar a programação:
*Existe um servidor principal, do qual fornece os dados dos jogadores e colocam todos em um mesmo ambiente para escolher um jogo aberto (semelhante o Gunbound, quando esta fora de alguma sala);
*Alguem cria uma sala no jogo, que é exibida para todos online;
*Quando o dono da sala (que no caso esta armazenada no server principal) clica em iniciar a partida, este líder da sala vira um servidor, e os jogadores se desconectam (ou não, ñ me lembro agora) do servidor principal e se conecta à ele;
*Quando o jogo termina,todos retomam a conexão com o servidor principal, e o dono da partida automaticamente envia todos os dados relevantes da partida.
Entenderam?! Diferente do Dota 2, que "hosteia" todas as partidas, e qualquer um pode cair e retomar o jogo sem problemas. Mas como fazer isso? Como programar para que tenha essa divisão de recurso para todas as partidas mais os jogadores dentro delas.
Outra questão é sobre a movimentação dos personagens e/ou NPC's. Estou apenas enviando um codigo para identificar a ação de movimento por exemplo, e junto com as coordenadas final. Mas e se o computador de alguem dar lag?! provavelmente quem esta se movimentando vai chegar mais atrasado no PC dele que no resto dos participantes. [Solução: Enviar as coordenadas atuais (então se estiver diferente o objeto da um pulo pra correta, e as coordenadas finais]
Mas e na questão dos creeps?! Devo também ficar enviando um código de movimento de cada um?! Quem conhece o jogo sabe que pode armazenar aprox. 60+ creeps/minions/tropas facilmente.
QUEM TIVER FAZENDO ALGUM PROJETO SOBRE COMUNICAÇÃO SERVIDOR/CLIENTE PODE ME PEDIR AJUDA QUE SE ESTIVER AO MEU ALCANCE VOU AJUDAR.
O que busco realmente é como acessar o código fonto dos MMO(RPG's) que possuem seu código aberto. Tanto os códigos dos servidores como dos clientes são do meu interesse.
PedroX escreveu:Pelo que sei sobre o assunto, seria bom dividir o processamento entre servidores. [...].
Sobre seu ponto de vista Pedrox, acredito (porem posso estar redondamente engando) que não é viável, caso o motivo seja pela conexão do usuário com o servidor. Pois para isso deveria haver uma comunicação a mais, dos servidores com o banco de dados remoto (ja que este é compartilhado). Agora se for por motivo de sobrecarregamento do servidor, penso ser dificil com as maquinas de existem hoje em dia, apesar que depende muito da estrutura otimizada do servidor.
Mas ainda não é nem isso a minha duvida. Estarei postando ao final deste post.
luan.alc escreveu:Assunto bastante interessante, estou com um projeto para um jogo online ! [...]
Luan se for um Browser Game acredito que não precisara se preocupar tanto quanto eu, pois os jogadores não precisarão de dados em tempo real, isto é, sera atualizado a cada requisição par ao servidor (entrar no site, atualizar a pagina, fazer uma ação etc). Se o jogador ficar com a página parada por 1h sem fazer absolutamente nada, este não estará "pesando o servidor" (ainda sim tera uma conexão aberta pendente, mas não estará requisitando nenhum tipo de dado).
O QUE PROCURO
Retomei meu projeto do PokeDota este fim de semana (estou mexendo nele quando tenho um tempo sobrando na casa da namorada). Pegando meu projeto como exemplo. Como não fiz um servidor a parte (estou usando o próprio GM), então para facilitar a programação:
*Existe um servidor principal, do qual fornece os dados dos jogadores e colocam todos em um mesmo ambiente para escolher um jogo aberto (semelhante o Gunbound, quando esta fora de alguma sala);
*Alguem cria uma sala no jogo, que é exibida para todos online;
*Quando o dono da sala (que no caso esta armazenada no server principal) clica em iniciar a partida, este líder da sala vira um servidor, e os jogadores se desconectam (ou não, ñ me lembro agora) do servidor principal e se conecta à ele;
*Quando o jogo termina,todos retomam a conexão com o servidor principal, e o dono da partida automaticamente envia todos os dados relevantes da partida.
Entenderam?! Diferente do Dota 2, que "hosteia" todas as partidas, e qualquer um pode cair e retomar o jogo sem problemas. Mas como fazer isso? Como programar para que tenha essa divisão de recurso para todas as partidas mais os jogadores dentro delas.
Outra questão é sobre a movimentação dos personagens e/ou NPC's. Estou apenas enviando um codigo para identificar a ação de movimento por exemplo, e junto com as coordenadas final. Mas e se o computador de alguem dar lag?! provavelmente quem esta se movimentando vai chegar mais atrasado no PC dele que no resto dos participantes. [Solução: Enviar as coordenadas atuais (então se estiver diferente o objeto da um pulo pra correta, e as coordenadas finais]
Mas e na questão dos creeps?! Devo também ficar enviando um código de movimento de cada um?! Quem conhece o jogo sabe que pode armazenar aprox. 60+ creeps/minions/tropas facilmente.
QUEM TIVER FAZENDO ALGUM PROJETO SOBRE COMUNICAÇÃO SERVIDOR/CLIENTE PODE ME PEDIR AJUDA QUE SE ESTIVER AO MEU ALCANCE VOU AJUDAR.
Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO
Basicamente a minha ideia era essa. Só que em vez do jogador escolher o servidor que ele quer, o próprio jogo escolhe aquele que tem menor ping em relação ao jogador.*Existe um servidor principal, do qual fornece os dados dos jogadores e colocam todos em um mesmo ambiente para escolher um jogo aberto (semelhante o Gunbound, quando esta fora de alguma sala);
*Alguem cria uma sala no jogo, que é exibida para todos online;
*Quando o dono da sala (que no caso esta armazenada no server principal) clica em iniciar a partida, este líder da sala vira um servidor, e os jogadores se desconectam (ou não, ñ me lembro agora) do servidor principal e se conecta à ele;
*Quando o jogo termina,todos retomam a conexão com o servidor principal, e o dono da partida automaticamente envia todos os dados relevantes da partida.
Pra mim não ficou claro.Como programar para que tenha essa divisão de recurso para todas as partidas mais os jogadores dentro delas.
Para evitar lags, baseie-se no FPS.Outra questão é sobre a movimentação dos personagens e/ou NPC's. Estou apenas enviando um codigo para identificar a ação de movimento por exemplo, e junto com as coordenadas final. Mas e se o computador de alguem dar lag?! provavelmente quem esta se movimentando vai chegar mais atrasado no PC dele que no resto dos participantes. [Solução: Enviar as coordenadas atuais (então se estiver diferente o objeto da um pulo pra correta, e as coordenadas finais]
Exemplo:
- Código:
speed = 5 * room_speed / fps;
Se a room_speed é 30 mas o FPS está em 15, a velocidade passa a ser 10.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO
PedroX escreveu:Basicamente a minha ideia era essa. Só que em vez do jogador escolher o servidor que ele quer, o próprio jogo escolhe aquele que tem menor ping em relação ao jogador.*Existe um servidor principal, do qual fornece os dados dos jogadores e colocam todos em um mesmo ambiente para escolher um jogo aberto (semelhante o Gunbound, quando esta fora de alguma sala);
*Alguem cria uma sala no jogo, que é exibida para todos online;
*Quando o dono da sala (que no caso esta armazenada no server principal) clica em iniciar a partida, este líder da sala vira um servidor, e os jogadores se desconectam (ou não, ñ me lembro agora) do servidor principal e se conecta à ele;
*Quando o jogo termina,todos retomam a conexão com o servidor principal, e o dono da partida automaticamente envia todos os dados relevantes da partida.PedroX escreveu:Pra mim não ficou claro.Como programar para que tenha essa divisão de recurso para todas as partidas mais os jogadores dentro delas.
Pedro, você provavelmente já compreende como seria o fluxograma, mas estou postando para outros.
- Imagem Fluxograma:
Cada carinha feliz representa um jogador, exceto aqueles conectados às partidas que significa 10 jogadores (por isso do vezes 10).
O quadrado verde é o objeto (no sistema do server) da Partida. E a caixa Preta é o próprio servidor.
Estudando sobre fazer um servidor em C++ para trabalhar com GM, o cara criava um objeto com sua thread independente (definia uma nova) para cada conexão nova. Penso não ser necessário quando os jogadores estiverem esperando por um jogo.
Porem ai, o próprio objeto é responsável por receber sua própria "conexão" (recebe os dados relevantes a si mesmo). Mas quando eu for criar uma partida essa partida, então agora vai ser criada com um thread individual, e ela vai receber todos as informações dos objetos dos jogadores participantes (talvez armazenar as informações no objeto partida e deletar os jogadores?! não sei ao certo).
Quando houver alguma ação dos jogadores na partida, somente o objeto partida vai receber/processar/retornar para os mesmos.
Gostaria de saber se esta certo o meu pensamento e/ou se ha uma forma de otimização.
- Código:
speed = 5 * room_speed / fps;
//Se a room_speed é 30 mas o FPS está em 15, a velocidade passa a ser 10.
Cara valeu heim, eu realmente nem havia dado atenção à questão de utilizar o próprio FPS para resolver. Brigadão =]Macho SupreMO escreveu:VOLTO A PERGUNTAR SE ALGUÉM SABE/DESCOBRIU COMO ACESSAR O CÓDIGO FONTE DE JOGOS OPEN SOURCE
Sei do "Ryzom" e o " The Mana World". Penso que talvez tenham acesso ao do "Tibia" (este previsto para ser open source, mas nunca aconteceu).
Tentei procurar nos sites dos jogos, mas realmente não achei o local.
Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO
Quando participei num projeto como programador da parte online, eu tive que usar algo parecido. Era um projeto de futebol, mas tinha a opção de conectar no servidor que você quisesse numa lista.
Programei assim:
- Ao rodar um servidor (criar uma partida), este enviava seu IP para uma página PHP, que o escrevia num arquivo de texto. O contrário também (fechar o servidor e apagar da lista).
- Quando o jogador entrava, o jogo baixava o arquivo de texto que tinha todos os IPs possíveis de escolher.
Isso elimina (ou diminui) a necessidade de um servidor central dedicado. Só que o servidor precisa ser baixado por quem irá hostear.
Mas se você quer um único servidor, então você pode usar um objeto para cada partida mesmo. Num ds_map você pode guardar o id do jogador (key) e o id da instância do objeto partida (value).
Ao receber uma mensagem, pega o id, e procura no mapa o id. Então é só repassar tudo para essa instância.
Programei assim:
- Ao rodar um servidor (criar uma partida), este enviava seu IP para uma página PHP, que o escrevia num arquivo de texto. O contrário também (fechar o servidor e apagar da lista).
- Quando o jogador entrava, o jogo baixava o arquivo de texto que tinha todos os IPs possíveis de escolher.
Isso elimina (ou diminui) a necessidade de um servidor central dedicado. Só que o servidor precisa ser baixado por quem irá hostear.
Mas se você quer um único servidor, então você pode usar um objeto para cada partida mesmo. Num ds_map você pode guardar o id do jogador (key) e o id da instância do objeto partida (value).
Ao receber uma mensagem, pega o id, e procura no mapa o id. Então é só repassar tudo para essa instância.
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Tópicos semelhantes
» Como deve ser o arquivo para Android
» Terminar uma musica, começar outra.
» O que uma demo deve ter?
» Como criar um Server (servidor)
» como eu envio e recebe dados do servidor usando .txt ???
» Terminar uma musica, começar outra.
» O que uma demo deve ter?
» Como criar um Server (servidor)
» como eu envio e recebe dados do servidor usando .txt ???
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos