.:: Menu Rápido ::.

Linux | C/C++ | Downloads | SDL | [×]

sexta-feira, 20 de fevereiro de 2009

Construindo um MMORPG - Parte 2

É com grande satisfação que escrevo a continuação deste tutorial. Demorou pra sair, mas saiu !
E só relembrando, iremos montar nosso MMORPG 2D utilizando o servidor eAthena e o cliente TMW.
Construindo um MMORPG - Parte 1 foi "um tanto" superficial, mas agora o bicho vai pegar.
Diria que instalar o servidor eAthena e configurá-lo a gosto é o bicho da goiaba. Mas o basicão tá garantido.

» Post Completo... .:: Pré-requisitos ::.
Uma pergunta: Você já tem o cliente TMW instalado? Pois dessa vez realmente precisaremos dele. É mais pro final... nos testes do nosso servidor, mas já deve tê-lo instalado. Procure pela versão 0.0.26 ou superior. Pois à partir desta versão o cliente TMW passou a guardar atualizações de servidores diferentes em locais separados.
Outro pré-requisito é Linux. Pois, além da compilação do servidor eAthena, iremos apelar para a linha de comando. E também porque você pode ter dificuldades em rodar o servidor eAthena no Windows.
Também iremos utilizar o programa Git... então vá fazendo a lista:
» Sistema operacional Linux. Ubuntu é um boa opção.
» Cliente TMW versão 0.0.26 ou superior.
» Programa Git. (procure também nos repositórios do Ubuntu)
Git é um software gratuito para controle de versão distribuído. Git foi inicialmente criado por Linus Torvalds para o desenvolvimento do kernel Linux (kernel). (wikipédia)

.:: O servidor eAthena ::.
O English Athena é um software Internacional para criação de servidores privados de Ragnarok Online. É baseado no jAthena (Japanese Athena). É um software de código aberto licenciado como Gnu/GPL. Foi escrito em C, surgiu em 2004, pode rodar no win32 ou Linux, embora seja recomendado seu uso no Linux, por proporcionar maior estabilidade e segurança. (wikipédia)
Além da versão em TXT, que é a versão que irei explorar, existe também a versão em SQL. Inicialmente o servidor eAthena servia apenas ao jogo Ragnarok, mas ultimamente ele tem servido a outros jogos também, um deles é o jogos TMW.
Se você reparar bem, o TMW possui as mesmas características do jogo Ragnarok, mas ele não é uma cópia deste, pois possui vida própria. Característica que nosso jogo também possa ter... quem sabe !

.:: Configurando um TMWServer ::.
A melhor maneira de compreender o funcionamento do servidor eAthena é configurando um. Para poupar tempo, e também por ser mais fácil, iremos rodar uma cópia do servidor The Mana World. Além do meu passo-a-passo, você também poderá acompanhar por este tutorial. Recomendo ao leitor criar um novo diretório, pois no final teremos muitos outros diretórios e arquivos.

» Primeiro passo: Baixe o servidor eAthena do repositório Git para compilação. E logo em seguida o compile com make:

git clone git://gitorious.org/tmw-eathena/mainline.git eathena
cd eathena
make

Caso você esteja tendo problemas com a clonagem, tente um outro link nesta lista de repositórios Git.
Este inda não são os dados do servidor TMW, mas apenas os arquivos de um novo servidor eAthena e seu código fonte.
Após a compilação você deverá ter 3 novos binários: char-server, login-server e map-server.

» Segundo passo: Baixe os dados do TMWServer do repositório Git para o diretório eathena-data/:

cd ..
git clone git://gitorious.org/tmw-eathena-data/mainline.git eathena-data
cd eathena-data


» Terceiro passo: Compile o arquivo eathena-monitor.c que se encontra com os dados do TMWServer (diretório eathena-data/) e copie os binários do diretório eathena/ para eathena-data/.

gcc -o eathena-monitor eathena-monitor.c
cp -iv ../eathena/*-server .


» Quarto passo: Crie um diretório link simbólico chamado tmwserver/ dentro de seu $HOME que aponte para o diretório onde se encontram os dados do TMWServer (nosso diretório eathena-data/).

cd $HOME
ln -s /caminho_completo_ate_o_diretorio/eathena-data/ tmwserver

Este passo é opcional caso você mova os dados do TMWServer para o seu $HOME nomeado como tmwserver.

» Configuração: Após seguir todos os passos precisamos fazer algumas configurações em eAthena-data/ para que a "instalação" esteja completa.
Primeiro crie um diretório onde serão armazenados os arquivos de log. mkdir log resolve o problema (dentro do diretório eathena-data/).
Em eathena-data/conf você encontrará vários arquivos com a extensão .example. Remova esta extensão do nome de todos os arquivos. Agora é só configurá-los.

» conf/char_local.conf:

// Server name, no more than 19 characters
server_name: MMORPG REVOLUTION

// Login Server IP
login_ip:127.0.0.1

// Character Server IP
char_ip:127.0.0.1


» conf/map_local.conf:

// Character Server IP
char_ip:127.0.0.1

// Map Server IP
map_ip:127.0.0.1


» conf/login_local.conf:

update_host: http://updates.themanaworld.org/

Aqui não faremos mudanças por enquanto. Explico que os dados de update serão conferidos diretamente no servidor do TMW, mesmo com nosso servidor rodando no localhost (127.0.0.1).

» save/account.txt:

0 s1 p1 2009-02-19 23:15:42.856 S 699 0 a@a.com - 0 127.0.0.1 - 0

Este usuário deve ser adicionado a esta lista. Você pode fazer isso copiando as informações acima ou substituindo account.txt por account.txt.example.
Você poderia copiar a linha acima e colar no arquivo save/account.txt. Mas não dá pra copiar do blog. O problema é que os tab's se perdem ao serem exibidos no blog !
Mas se você copiar esta mesma linha do arquivo account.txt.example e colar em account.txt, garanto que funciona.

.:: Servidor eAthena em ação ::.
Para auxiliar nas tarefas de execução do servidor e também em seu monitoramento, temos o script eathena.sh e programa eathena-monitor. O programa eathena-monitor lança todos os servidores e os reinicia quando falham. O script eathena.sh é utilizado para iniciar/finalizar o programa eathena-monitor.
Para iniciar/reiniciar/finalizar o servidor execute o script eathena.sh com os parâmetro start/restart/stop:

./eathena.sh start
./eathena.sh restart
./eathena.sh stop

Um exemplo de execução do servidor eAthena (sem falhas):

diogorbg@pc:~/tmwserver$ ./eathena.sh start
Starting eathena monitor...
Starting:
* interval: 5 s
* workdir: /home/diogorbg/tmwserver
* login_server: /home/diogorbg/tmwserver/login-server
* map_server: /home/diogorbg/tmwserver/map-server
* char_server: /home/diogorbg/tmwserver/char-server

Agora conecte-se com o seu cliente TMW e crie sua primeira conta para testar se tudo está funcionando bem.
Esta é a primeira tela do jogo. Você tem a opção de se registar ou logar. Use o ip 127.0.0.1 quando pretender se conectar ao servidor local que configuramos e server.themanaworld.org quando pretender se conectar ao servidor oficial.

MMORPG REVOLUTION é o nome do nosso servidor... como configuramos em conf/char_local.conf.

Como nós ainda não temos nosso próprio endereço de updates deixamos por padrão o repositório oficial.
Se você reparar, em versões anteriores à 0.0.26, esta tela era a primeira... o que não nos permitia escolher o servidor de update no próprio jogo.

Escolha do Char (personagem). No servidor oficial me procure por "Heroi br".

E aí está. A cópia do The Mana World rodando em nossa máquina.
Fique atento nos comentários... é uma dica de quest do jogo TMW.

.:: Tornando-se um GM ::.
Dê permissões de GM para sua conta editando o arquivo conf/gm_account.txt:

// <account ID> <level>
2000000 99

2000000 é o id da sua conta. Para ter certeza de seu id verifique no arquivo account.txt.
99 é o seu nível de permissão. 99 é o maior nível e lhe permite fazer de tudo.
Veja o exemplo acima. Estou em uma caverna cheia de cobras perigosíssimas, do tipo que atacam se exitar, e ainda por cima, meu personagem se encontra apenas no nível 6 e muito mal equipado por sinal. Uma mordida bastaria, mas porque eu ainda não morri ? É porque eu estou invisível. Se você for GM, ficar invisível é fácil... é só digitar o comando @hide.
Para ter mais detalhes sobre comandos especiais de GM's leia a documentação que veio junto com o código do eAthena (arquivo eathena/doc/readme.html).

.:: Solucionando problemas ::.
Primeiro verifique se você seguiu todos os passos corretamente. Se os IP's e portas estão corretos.
» Rode o servidor e verifique se o usuário "s1" do servidor se encontra no arquivo save/account.txt. Crie um usuário pelo cliente TMW e verifique se ele também se encontra neste arquivo.
Não se esqueça que você deve ter um diretório do tipo link simbólico em seu $HOME nomeado como tmwserver que aponte para o diretório onde se encontram os dados do TMWServer (diretório eathena-data). O meu $HOME é o diretório /home/diogorbg.

.:: Mundo Tux ::.
Por falta de um tema mais apropriado... resolvi criar meu MMORPG com o nome de Mundo Tux.
Um mundo onde todos os NPC's são pinguins. Tudo não passa de um exemplo de teste, mas até que ficou legal.
Retirando os pinguis, tudo é do projeto TMW ou de algum tópico em discussão no fórum oficial. Eu só tive que juntar tudo. Montei um mapa, configurei o servidor, criei alguns scripts NPC's e criei pacotes de atualização.
O tutorial está ficando extenso... mas ainda cabe instruções de como configurar o Mundo Tux.

» Primeiro passo: Baixe os dois arquivos necessários para executar o mundo tux: eathena-tux.tar.gz e updates.tar.gz. Para ficar mais organizado, extraia os arquivos no mesmo diretório que trabalhamos o eathena e o eathena-data.

» Segundo passo: Como o servidor já foi previamente configurado para rodar no localhost, você só precisa se preocupar em criar diretórios do tipo link simbólico:

cd $HOME
ln -s /caminho_completo_ate_o_diretorio/eathena-tux tmwserver
ln -s /caminho_completo_ate_o_diretorio/updates /home/updates

Para criar um link simbólico em /home é preciso de privilégios de root. Ao invés disso, você pode mudar o endereço de update no arquivo conf/login_local.conf:

update_host: file:///home/updates


Execute o servidor normalmente (./eathena.sh start) e em seguida conecte-se pelo cliente TMW usando o IP local (127.0.0.1).
Para logar com o char Hercules lvl 98 use o login:diogorbg e a senha:asdf.
Você verá que a tela de updates é bem rápida... pois o jogo vai copiar arquivos locais para o diretório $HOME/.tmw/updates/home/updates.
Repare que são vários arquivos compactados e que todos estão descritos no arquivo resources2.txt. Para adicionar um arquivo a esta lista use o programa adler32, cujo código fonte foi enviado em updates.tar.gz (para mais detalhes How to release an update). Exemplo:

adler32 new-update.zip >> resources2.txt


.:: Link's ::.
» Servidor eAthena (wikipédia)
» The Mana World (site oficial)
» Git (wikipédia)
» Configurando o servidor eAthena

--
O melhor eu deixei pro próximo tutorial.
Nele vamos criar script's de NPC's, mapas e modificação de algumas configurações.

16 comentários:

Anônimo disse...

Simplesmente brutal, adorava conseguir fazer um mmorpg

Diogo_RBG disse...

Aguarde pela parte 3. Deverá sair dia 20/03. (As coisas estão corridas !)
Até agora só se viu falar de teoria e instalação do servidor, mas pretendo abordar scripts, mapas, personagens, monstros, armas, itens, efeitos de partícula... tudo que que for possível.

Como é tudo também é novidade pra mim, levará um tempinho pra regar todo este conteúdo. O certo é que ainda terei muito material.

Meus sinceros agradecimentos ao meus leitores... T++

Lucas Mello disse...

Legal diogo. Parabens.

Vc disse que ainda é novidade pra vc, então vc está aprendendo de algum lugar... Não quero estragar as surpresas dos seus proximos tutoriais, mas posso perguntar de onde está tirando esse material??

Abraço!

Diogo_RBG disse...

Não seria estragar a surpresa não !
Eu retiro estas informações do Projeto The Mana World.
* No site, no fórum, no wiki (sessão 'For developers').

Nem todas as informações estão interligadas de forma a seguir uma linha de aprendizagem, e por isso é fica meio complicado.

Seria bom ter uma outra fonte, ou alguma documentação de um projeto brasileiro, mas não encontrei ainda.

Lucas Mello disse...

Eu estava pesquisando sobre o eAthena, e encontrei o Cronus, que é baseado no eAthena, como se fosse a tradução do eA para o portugues. ele também é de código livre.

Não sei muito de C ou C++, gosto mais de Python, mas acharia interessante modificar o cronus para que fosse possivel criar encima dele MMO's que não seguissem a linha do ragnarok. O que vc acha? seria algo muito complexo?

Diogo_RBG disse...

A pergunta é: O que o Cronus tem de diferente do eAthena ? É open source mas todos os exemplos explicam como criar um servidor de Ragnarok!
Não dá pra resolver a sua dúvida sobre o Cronus. Tbm é minha dúvida !

Mas se você quer algo totalmente diferenciado do Ragnarok... o projeto The Mana World está com planos de desenvolver o próprio servidor... esse compensa modificar.

Server development
Setting up a TMW server

Lucas Mello disse...

sim, o cronus é apenas a tradução do eA.

Vi algo sobre um novo server na parte onde poem o que já foi feito e o que ainda está por fazer.

Espero que isso realmente aconteça, quem sabe eu não participo e te encontro nesse projeto um dia desses?? rsrs

Diogo_RBG disse...

Então tá aí. Cronus, mais uma ferramenta a ser estudada.

Anônimo disse...

muito legal, mas estou com umas duvida... vc tem msn?

Diogo_RBG disse...

Tenho sim... mas é melhor a gente conversar pelo Google Talk. Quase não apareço no MSN !
Meu talk é diogorbg. O MSN tbm é diogorbg !

Lucas Mello disse...

olá diogo,

como vão as coisas?

será que temos um novo post esse mes ainda??

sei que a faculdade aperta, xD

Diogo_RBG disse...

Blz Lucas,

Em breve estarei postando a parte 3 da sequência. Já estou a alguns dias escrevendo... 12 imagens até agora !
Pode até sair meio apertado... 29, 30 ou 31. Mas este mês sai !

Unknown disse...

Voce poderia ensinar a compilar o servidor SQL em vez de TXT, pois fica mais facil pra mim criar um site usando PHP + MySQL?

ACTIONS disse...

Diogo_RBG, cara estou interessado em criar um Server de TMW, só que eu não entendi algumas coisas. Me add no msn pra voçê me ajudar plx. hodiashbs@hotmail.com

Anônimo disse...

n da pra criar com windows?

Diogo_RBG disse...

Olá Daniel,

Até tem como, mas eu não me aventurei a montar um servidor no Windows.
O que eu posso te garantir é que o servidor não foi feito pro windows, mas nada que uma DLL do cygWin não resolva.