Olá a todos, estou buscando trazer tutoriais de coisas mais complexas, para que desenvolvedores que estão começando a pouco tempo, possa crescer ainda mais seu conhecimento.
Vim trazer algo que poucos tem conhecimento e também tiveram curiosidade de saber, sobre mapas e sobre fixação de mapas.
Quando eu construi o New History em 2018, eu customizei ele ao máximo e com isso eu aprendi bastante a trabalhar com mapas e me foi despertado muita curiosidade sobre.
Hoje trabalhando com as novas versões, eu tive que adicionar na minha build mais de 25 mapas e vim ensinar vocês como adicionar novos mapas no servidor da forma correta (gs.conf).
Lembrando, que todo o sistema de exportação e downgrade não precisa ser ensinado, pois há uma ferramenta perfeita para esse trabalho do Steve Langley (Skype: narrowengineer), o AngelicaMapEditor.
Só deixando um adendo, a ferramenta não gera npcgen.data, path.sev e arquivos de configuração dos mapas (Sem esses, os mapas não ligam), então recomendo antes de tudo, clonar um existente (Limpo) e adicionar os novos arquivos exportados.
Agora vamos para o que interessa!
Vou usar como exemplo o mapa:a101 (is101).
Você precisará abrir o arquivo instance.txt (element/configs.pck/instance.txt)
e gs.conf (PWServer/gamed/gs.conf)
Estando com os dois abertos, você irá pesquisar no instance.txt:
"a101"
Estará mais ou menos assim:
//////////////////////////////////////////////////////////////
"北陆-蜃渊雪国遗址"
{
91
"a101" // path
"loading/a101" // loading background
2,2 // row, column
0
"r0_0-c1_1-l0.cfg"
{}
0
}
//////////////////////////////////////////////////////////////
Somente disso que precisaremos.
Informações que iremos precisar para o servidor:
91 = ID do mapa (tag)
“a101” = nome do mapa
2,2 = Row / Colum
Sempre bom lembrar que esses valores podem alterar dependendo de qual mapa você irá utilizar, então não se apegue a isso.
Agora vamos para o gs.conf
Ensinamento básico, se você reparar: São 2 tipos de mapas: world_servers e instance_servers.
O que você precisa definir primeiro é isso, se será um mapa aberto (world_servers), ou se será uma dungeon ( quando desmonta o grupo todo mundo é expulso e ela reseta) instance_servers.
Bem, escolhendo isso, você irá definir como vamos solicitar esse mapa depois do último mapa definido em world_servers ou instance_servers, ficando assim:
world_servers = gs01;/*imagine vários mapas definidos*/;is101;
Então você percebeu que vamos chamar nosso mapa de is101, mas você pode colocar qualquer nome (nessa etapa e nas demais definições), exemplos: zd411, ab587, z57…
Como você é inteligente e já percebeu, eu defini meu mapa como um mapa aberto, ou seja, um world_server.
Agora você vai terminar de configurar seu mapa, no final do arquivo gs.conf.
Estarei explicando logo após o código.
;-----------------------------------------------------------------------------------------------------
[World_is101] ;-------- Se o seu mapa é um world_servers World_Nome, caso contrário Instance_Nome -----
index = 126
tag = 91
base_path = a101/
limit = allow-root;
grid = {80,80,25,-1000.0,-1000.0}
base_region = {-1024.0,-1024.0} , {1024,1024.0}
local_region = {-1024.0,-1024.0} , {1024,1024.0}
cid = 0,2,13
[Terrain_is101] ;-------- Mude o Nome -----
szMapPath = map
nAreaWidth = 512
nAreaHeight = 512
nNumAreas = 4 ;----- Normalmente é uma soma de Cols + Rows (Salvo exceções)
nNumCols = 2 ;----- Numero de Columns no instance.txt
nNumRows = 2 ;----- Numero de Rows no instance.txt
vGridSize = 2.0f
vHeightMin = 0.0f
vHeightMax = 800.0f
[MsgReceiverTCP_is101] ;-------- Mude o Nome -----
type = tcp
listen_addr = INSTANCE101:12009 ;-------- Caso seja localhost, declare, mas lembre sempre de alterar a porta por exemplo 12010,12011.. -----
so_sndbuf = 16384
so_rcvbuf = 16384
tcp_nodelay = 1
listen_backlog = 10
[MsgReceiverUNIX_is101] ;-------- Mude o Nome -----
type = unix
listen_addr = /tmp/gssock_is101 ;-------- Mude o Nome -----
so_sndbuf = 16384
so_rcvbuf = 16384
listen_backlog = 10
;-----------------------------------------------------------------------------------------------------
Bem, essa é a configuração do mapa a101.
Tudo dependerá do tamanho do row e da column que pegamos na instance.txt
Primeiro de tudo,
você terá que adicionar um Index, lembrando, esse valor não pode ser igual outro mapa existente (dará conflito e os dois serão desligados), então use um valor depois do último mapa configurado, lembre-se também, que esse valor não pode passar de 128 (na 1.5.5), caso contrário, os monstros e npcs afundam no mapa. ( Usei 126).
você terá que adicionar o id (Tag) para o ID do mapa no instance.txt, se o ID tiver errado (diferente do client), você toma disconnect ao tentar acessar o mapa. ( Usei 91).
base_path é o caminho onde está o seu mapa, nesse caso, você altera apenas o nome ( Usei a101/ ).
limit são variáveis de liberações do mapa, segue os exemplos em um fórum externo: [Conteúdo Oculto]
Grid ( Como definir o valor ):
O valor de Grid dependerá do seu Row / Column.
Exemplos:
Se o mapa for 2 / 2: 80,80,25,-1000,-1000
Se o mapa for 3 / 3 120,120,25,-1500,-1500
Se o mapa for 4 / 4: 160,160,25,-2000.-2000
Os exemplos acima são bem explicativos, caso não entendeu, basicamente:
Você vai multiplicar o valor de grid x 25, ele dará o resultado total, ou seja:
80 x 25 = 2000. 2000 / 2 = 1000, então nesse caso: -1000, -1000.
120 x 25 = 3000. 3000 / 2 = 1500, então nesse caso: -1500, -1500.
Assim por diante.
base_region e local_region, você consegue esse valor através do AngelicaMapEditor.
Os demais valores importantes de serem configurados eu deixei comentário no exemplo acima.
Em caso de dúvidas fique à vontade em perguntar.