GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08

» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43

» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21


[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO

3 participantes

Ir para baixo

[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO

Mensagem por machosupremo Qui 05 Dez 2013, 14:24

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.
machosupremo
machosupremo

Data de inscrição : 10/10/2012
Reputação : 2
Número de Mensagens : 99
Prêmios : [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.dinoup.com

Ir para o topo Ir para baixo

[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO

Mensagem por PedroX Qui 05 Dez 2013, 18:32

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.

_________________


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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO

Mensagem por luan.alc Sex 06 Dez 2013, 04:26

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 !
luan.alc
luan.alc

Games Ranking : Nota B

Notas recebidas : B
Data de inscrição : 13/03/2012
Reputação : 3
Número de Mensagens : 294
Prêmios : [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO

Mensagem por machosupremo Ter 17 Dez 2013, 21:07

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.

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.
machosupremo
machosupremo

Data de inscrição : 10/10/2012
Reputação : 2
Número de Mensagens : 99
Prêmios : [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.dinoup.com

Ir para o topo Ir para baixo

[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO

Mensagem por PedroX Ter 17 Dez 2013, 22:42

*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.
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.

Como programar para que tenha essa divisão de recurso para todas as partidas mais os jogadores dentro delas.
Pra mim não ficou claro.

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]
Para evitar lags, baseie-se no FPS.

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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO

Mensagem por machosupremo Qua 18 Dez 2013, 16:11

PedroX escreveu:
*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.
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.

PedroX escreveu:
Como programar para que tenha essa divisão de recurso para todas as partidas mais os jogadores dentro delas.
Pra mim não ficou claro.

Pedro, você provavelmente já compreende como seria o fluxograma, mas estou postando para outros.
Imagem Fluxograma:

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.
machosupremo
machosupremo

Data de inscrição : 10/10/2012
Reputação : 2
Número de Mensagens : 99
Prêmios : [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.dinoup.com

Ir para o topo Ir para baixo

[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO

Mensagem por PedroX Qua 18 Dez 2013, 17:29

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.

_________________


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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

[Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO Empty Re: [Estrutura SERVIDOR] Como deve ser um SERVIDOR MMO

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos