Jump to content
Mário.

Metin2 - Geral

Recommended Posts

Please login or register to see this image.

(Desculpa pela demora)

 

Já há algumas semanas tinha sido abordado por um membro chamado @IronPower, ele gostaria de saber detalhadamente o conceito da programação por volta do Metin2 e como acredito que existem pessoas curiosas para entrar no background, decidi criar o tópico que irá retratar tudo desde o começo.

 

Índice

1. O que são serverfiles?

1.1 Quais as melhores serverfiles?

2. O que é a source?

2.1 Qual(is) a melhor(es) source(s) disponível?

3. Qual a diferença entre versões?

3. Conclusão

 


O que são serverfiles?

Como o nome próprio indica, são ficheiros que fazem a totalidade de um servidor (server em inglês).

As primeiras serverfiles saíram em 2006 num fórum chamado mcncc.com por um rapaz chamado Rain que supostamente fez parte da equipa metin2.kr (Coreia do Sul).

A partir daí, foram e ainda são feitas milhões de cópias modificadas a gosto de cada um:

Hidden Content

    Give reaction or reply to this topic to see the hidden content.
 

Cada pasta tem o seu propósito e o seu objetivo pode variar consoante a pessoa que o utiliza, mas em termos gerais é isto:

  • canal_1 -> Pasta que contém tudo o que é necessário para deixar o canal 1 ligado;
  • share -> Pasta que contém ficheiros que fazem a ligação para o cliente, mapas e missões (quests em inglês);
  • auth -> Pasta que contém o que é necessário para entrares no jogo;
  • canal_99 -> Pasta que contém tudo o que é necessário para os mapas secundários estarem ativos;
  • db -> Pasta que contém tudo o que é necessário para a ligação do servidor a base de dados.

 

canal_1/canal_99

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

(Ignorem os 5MB e 19MB de syserr e syslog, foi tirado num cenário real)

 

Na primeira imagem a contar à esquerda, conseguimos ver 4 pastas. Elas fazem ligação para a base de dados (cores em inglês) existem por uma razão particular: Eficiência e desempenho. 

De forma a não deixar tudo concentrado num só sitio de forma existir N erros (caída, crash, X quantidade de ram a ser usada, volume acentuado de erros e avisos - syserr e syslog -, etc.), é repartido em pastas de forma a deixar o jogo em si mais leve e com melhores resultados.

"Dá-me um exemplo disso!"

Por exemplo, um dos meus cores é dedicado especialmente as cidades, ou seja, se por algum motivo esse core caísse e eu estivesse no Mapa do Deserto, não seria desconectado nem levaria com nenhum tipo de latência* enquanto que as pessoas que estavam dentro das cidades teriam sofrido com isso.

* Varia muito do problema que possas ter.

"Como é que isso é possível?"

Tal como tinha dito, elas fazem ligação para a base de dados através do CONFIG:

Please login or register to see this code.
  • PORT -> Ligação entre o servidor e o cliente;
  • P2P_PORT -> Segunda ligação necessária para eventos p2p;
  • DB_PORT -> Ligação entre o servidor e a base de dados.

A core das cidades e do primeiro_nucleo podem e devem de ter as portas diferentes desde que a porta da base de dados seja igual.

 

share

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

A pasta share não tem muito que dizer, têm 3 pastas:

  • package -> todos os ficheiros encriptados que fazem a comunicação para o cliente (.dat);
  • data -> Ficheiros** que fazem a comunicação para o cliente;
  • locale -> mapas, missões e ficheiros necessários para o servidor ser iniciado.

** Não são todos, também é forma de diferenciar dois ficheiros com o mesmo nome para um objetivo, tal como exemplo as dungeons que são postas na pasta devido ao regen.txt (e para melhor organização).

 

auth

O auth tem a mesma estrutura que o canal_1 no entanto diferencia-se pelo facto de ser usado apenas para a ligação ao entrarem no servidor (login em inglês).

 

db

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

A pasta db faz a ligação para a base de dados através do ficheiro conf.txt:

Please login or register to see this code.
  • SQL_ACCOUNT -> Ligação para a tabela account onde guarda-se as contas do servidor;
  • SQL_PLAYER -> Ligação para a tabela player onde toda a informação referentes ao jogador individual e/ou coletivo estão;
  • SQL_COMMON -> Ligação para a tabela common que é conhecido especialmente para meter um jogador a GM no entanto só é de importância a tabela locale e locale_bug para o servidor;
  • SQL_HOTBACKUP -> Ligação para a tabela homepage que é usada para websites. Naturalmente é pouca usada mas há quem utilize.

 

"O que é e qual a importância do item_proto/mob_proto?"

O item_proto e o mob_proto é necessário para o cliente saber a qual o ID de um item/monstro/NPC corresponde ao do servidor, para alterarem o nível permitido para ser usado, o dano que um monstro dá, o yang ao venderem um item, meterem um monstro agressivo ou não, entre outros tipos de edições.

Antes de finais de 2013, tudo isto era feito estritamente num cliente que fazia a ligação entre a base de dados e o servidor (navicat como exemplo) através de querys.

Agora terão a possibilidade de escolherem entre isso e editar em pleno texto, tal como podem ver na segunda imagem acima a contar de baixo, que utilizo a última opção.


Quais as melhores serverfiles?

Isto é algo debatido até ao dia de hoje, várias pessoas dizem que X é o melhor e outras dizem que o Y mas na realidade depende bastante do tipo de servidor que queiras ter.

És fã de newschool? Então X vai ser o melhor

És fã de oldschool? Y é a opção ideal

 

Por isso é algo que só varia de acordo com os teus gostos, tira 1 semana e vai navegando pelos fóruns que tens disponível até encontrares um que siga o teu padrão.

Se não encontrares, começa por ti mesmo do fim. Vais ver que não há nada mais satisfatório que acabares e veres o teu trabalho a ser elogiado e jogado por outros.


O que é a source?

Please login or register to see this quote.

Isto foi dito por mim em 2016, no entanto gostaria apenas de acrescentar mais umas coisas:

  • Existe a source do game/db (ficheiro game/db) e a do binário (metin2client.exe);
  • É necessário terem o gcc instalado na vossa máquina (pkg install gmake | pkg install gcc | pkg install gcc49***) para compilarem a source do/a game/db;
  • É necessário uma IDLE (Visual Studio 2015 como exemplo) para compilarem a source do binário.

A source foi leaked finais de 2013 a inícios de 2014 por um rapaz chamado nico_w? (alguém que me corriga se estiver mal) que pertencia a equipa do metin2.sg - que neste momento é considerado um privado -. Desde lá foram feitas milhões de modificações, desde criações de novos sistemas a correções de vários erros internos.


Qual(is) a melhor(es) source(s) disponível?

Tal como referido nas serverfiles, também vai muito ao que tu queres no entanto eu recomendo sempre a começarem nas oficiais e irem modificando a partir de lá porque nunca se sabe que tipo de backdoor ou timebomb a source (e as files também) possam ter.


Qual a diferença entre versões?

Em termos oficiais, as versões (do game) que mais são conhecidas e comuns são:

  • 2089M -> É a versão pelo qual se deu o leak que o Rain fez;
  • r34k ou 34083 -> Versão pré-masterizada e melhorada do 2089M;
  • 40250 -> Versão "final" pelo qual se deu o leak da source****.

 

Existem muitas mais versões que foram feitas (404, 2019, 27969, etc.) mas não tiveram tanto nome como as que citei.

"Porquê que existem versões?"

As versões (para o game e o binário) existem de forma a dar a conhecer o trabalho que foi feito comparando com o do passado.

Um exemplo disso é o sistema de cintos, na versão 2089M não há esse sistema enquanto que no r34k está implementado.


Conclusão

O objetivo deste tópico é ajudar no enriquecimento do conhecimento do metin2, não de ajudar a decidir que serverfiles ou que source utilizar.

Levem as coisas com calma, demorem o tempo que precisarem a chegar aos vossos objetivos, de nada compensa quererem abrir um servidor sem conhecimento das coisas.

Se realmente querem seguir isto, aprendam sobre c++, python e lua. Posso dar-vos o meu exemplo, em 2016 sabia rigorosamente nada de c++ e agora consigo entender tudo o que está na source.

 

Que tenha ajudado alguém com isto, abraços!

  • Like 6
  • Upvote 3

Share this post


Link to post
Share on other sites

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.

Our website is made possible by displaying online advertisements to our visitors.
Please consider supporting us by disabling your ad blocker.
You will be able to see content when you disable your adblocker and enable javascript.