Conteúdo custom em servidor Lineage 2: como adicionar itens customizados sem quebrar o client

A maior parte do conteúdo custom em servidores de Lineage 2 quebra sempre no mesmo ponto: o servidor conhece o item novo, mas o client não. Uma arma ou peça de armadura custom são dois trabalhos, não um. Você define o item no servidor e depois ensina o client de cada jogador como ele deve aparecer. Se pular a segunda parte, os jogadores veem um nome em branco ou um ícone faltando. Este guia percorre as duas partes para um servidor Interlude no estilo L2J, além de mostrar como vender o item e distribuir o patch.
Do que um item custom é feito de verdade
Interlude (C6) foi lançado em NA/EU em 12 de abril de 2007 e continua sendo a chronicle mais customizada pelos servidores privados. A estrutura clássica do L2J dessa época espalha um item custom por vários arquivos. Um guia conhecido do MaxCheaters resume assim: "um arquivo sql para o banco de dados, um arquivo xml para o servidor e o arquivo dat final para o client."
| Camada | Arquivo | O que contém |
|---|---|---|
| Servidor | XML do item no datapack | Atributos e comportamento do item |
| Banco de dados (builds L2J antigas) | Linha na tabela weapon, armor ou etcitem | Definição do item nas builds que ainda usam tabelas SQL |
| Client | system/itemname-e.dat | ID, nome e descrição do item |
| Client | weapongrp.dat, armorgrp.dat ou etcitemgrp.dat | Mesh, textura, ícone, sons de equipar e de drop |
As builds mais novas abandonaram as tabelas SQL, e os nomes das pastas mudam de um pack para outro. Trate qualquer caminho que aparecer num tópico de fórum de 15 anos atrás como uma pista e confira onde a sua build (Mobius, aCis ou outro fork) guarda o XML dos itens antes de copiar qualquer coisa.

Passo a passo: adicionando uma arma custom
Escolha um único item e faça ele funcionar de ponta a ponta antes de montar um set inteiro. A ordem abaixo segue o tutorial do MaxCheaters.
- Escolha um ID livre. O guia usa 99999. Seja qual for o escolhido, procure antes no seu datapack e nos arquivos do client. Reaproveitar um ID existente é uma das formas clássicas de quebrar tudo.
- Faça backup dos .dat do client. Copie o
itemname-e.date o arquivo grp correspondente para um lugar seguro. Em algum momento você vai quebrar um deles. - Adicione a definição no servidor. Escreva o XML do item com os seus atributos. Numa build L2J antiga, insira também a linha SQL com o mesmo ID.
- Adicione a entrada de nome. Descriptografe o
itemname-e.dat, inclua uma linha com o ID, o nome e a descrição, e deixe uma linha em branco depois da última entrada. - Adicione a entrada visual. No
weapongrp.dat, adicione o mesmo ID e aponte para um mesh, uma textura e um ícone. Reaproveitar assets originais é o caminho mais fácil para o primeiro item. - Criptografe de novo e teste. Salve os dois arquivos, reinicie o servidor, entre com um personagem GM e rode
//create_item 99999.
O ID precisa ser idêntico em todos esses lugares: XML do servidor, linha SQL (se a sua build tiver), itemname-e.dat e arquivo grp. Um erro de digitação e o item existe no servidor, mas aparece errado ou nem aparece no client.
Editando arquivos .dat sem corromper o client
Os arquivos .dat do client são criptografados, então você precisa de uma ferramenta para descriptografar, editar e criptografar de novo. Os guias da era Interlude usam o L2FileEdit ou o l2encdec e salvam os arquivos na versão 413. Opções open source como o open-l2encdec e o L2crypt do acmi também lidam com a família de headers 41x.
Use a versão de criptografia do client que você realmente distribui. Num tópico, um usuário de Gracia Final teve erros depois de seguir os passos de Interlude. A 413 é a escolha comum para Interlude, mas confirme com o seu próprio client antes de liberar um patch.
A maioria dos patches quebrados vem de erros pequenos:
- Colunas e espaçamento. Esses arquivos são baseados em colunas. Um espaço a menos ou a mais desloca todos os valores seguintes e o client lê lixo.
- Falta da linha em branco final. Os guias alertam sobre isso por um motivo. Adicione sempre.
- Versão da ferramenta. Admins de Interlude no l2jbrasil e no RaGEZONE relatam que a build mais nova do FileEdit transformava armas duais em espadas simples ou não conseguia compilar o
weapongrp.dat. Muitos continuam na build antiga por isso. São relatos da comunidade, então teste as duais especificamente se for adicioná-las.
Mantenha uma cópia limpa e intocada da pasta system do client ao lado da sua cópia de trabalho. Quando algo aparecer errado, comparar com o original é mais rápido do que ficar chutando.

Levando os itens custom aos jogadores com multisell
Um item que os jogadores não conseguem obter é só um objeto de teste. Nos datapacks L2J, o jeito usual de distribuir itens é uma loja multisell, normalmente aberta por um NPC de GM shop. Cada multisell é um arquivo XML com o nome do seu ID numérico, então a loja 9000 fica em 9000.xml.
Toda entrada tem duas partes. Ingredients são o que o jogador paga, seja adena, outro item ou uma pilha de materiais. Products são o que ele recebe. Isso faz do multisell uma escolha natural para caminhos de upgrade: trocar uma arma original mais materiais pela sua versão custom.
Duas flags importam para equipamento custom:
applyTaxesvem como false por padrão. Ative e os preços em adena passam a ser taxados, com a receita indo para o castelo dono do território. Vale considerar se o seu servidor tem sieges ativos.maintainEnchantmentvem como false por padrão. Quando ativada, o nível de enchant passa para o produto, mas só no modo que usa apenas o inventário (exc_multisell). Se os jogadores fazem upgrade de uma arma +10 e o resultado sai +0, confira primeiro essa flag e o modo da loja.
Defina o preço dos itens custom com base na economia real do seu servidor, não no vácuo. Uma loja que vende equipamento top por adena no segundo dia torna todo o resto da progressão inútil.
Distribuindo o patch do client para os jogadores
Os .dat editados ficam na pasta system do client, então todo jogador precisa dos seus arquivos com patch para ver os itens custom corretamente. Não tem como escapar disso. Planeje desde o início:
- Distribua a pasta system ou um arquivo de patch claro, com instruções de instalação escritas para quem nunca mexeu num arquivo .dat.
- Versione seus patches. Quando você adicionar itens depois, os jogadores precisam saber que o patch deles está desatualizado antes de reclamarem de "armas invisíveis" no Discord.
- Distribua apenas arquivos que você mesmo gerou a partir de uma base limpa e publique os checksums. Os jogadores têm toda razão em desconfiar de pastas system aleatórias da internet.
- Mantenha as mudanças no client pequenas. Cada item custom aumenta o patch, e cada atualização de patch é uma chance de jogadores desistirem.
Seja honesto consigo mesmo sobre o escopo também. Itens custom dão identidade a um servidor, mas não substituem rates estáveis e uma economia que funciona. Muitos servidores com listas enormes de itens custom morreram porque o básico não estava lá. E tudo isso se apoia na propriedade intelectual da NCsoft, um risco legal que todo dono de servidor privado carrega.
Divulgue o servidor quando o conteúdo estiver no ar
Com os itens custom testados, o patch empacotado e as lojas precificadas, o próximo problema são os jogadores. Adicione seu servidor ao L2Calendar gratuitamente para que quem procura pela sua chronicle consiga encontrá-lo. Mencione o conteúdo custom e o patch na descrição, para que os jogadores saibam de antemão o que precisam baixar. Se quiser mais visibilidade no lançamento, o destaque VIP coloca seu anúncio mais acima na página.
