DocumentaçãoCustoms▾

Customs

Com o Main.dll, um item custom era adicionado dos dois lados: o servidor o definia no seu Item.txt, e o cliente precisava de um item.bmd regenerado mais as tabelas do Encoder empacotadas no ClientInfo.bmd. Se não coincidissem, o item aparecia errado ou o servidor o recusava.

Agora o servidor é a única fonte. Ao entrar na conta, o servidor envia ao cliente um catálogo com todas as definições: itens, monstros, efeitos, pets e tooltips. O cliente só precisa dos modelos (.bmd e suas texturas) na sua pasta Data. Não há item.bmd para regenerar nem código para mexer.

Cliente e servidor têm que ser da mesma versão (0.97.20 ou posterior). Este sistema não funciona com o cliente com DLL.

Onde ficam os arquivos

O quê Onde
Definições Servidor: MuServer/Data/ do repositório, ou /opt/mu/Data dentro do volume do Docker
Modelos e texturas Cliente: bin/Client/Data/ antes de compilar ou distribuir

Um volume persistente do Docker não é atualizado ao baixar uma imagem nova: o que você adicionar lá é mantido entre versões.

Depois de adicionar ou alterar um custom, reinicie o servidor e entre de novo na conta para receber o catálogo novo. Os JSON são validados ao iniciar: um arquivo com erros é descartado inteiro e o motivo fica no log do GameServer.

Índices: a faixa clássica e a estendida

Cada seção de itens (espadas, machados, maças, lanças, arcos, cajados, escudos, elmos, armaduras, calças, luvas, botas, asas, helpers, poções e joias) tem no 0.97k 32 índices, de 0 a 31.

Além disso, cada seção aceita os índices 32 a 511: são os itens adicionados, que entram sem sobrescrever nenhum item original. Um item adicionado tem que dizer qual item original ele imita (coluna Comportamento): isso decide a lógica que o jogo tem escrita por tipo de item, como se gasta flechas, se é uma asa ou uma joia, ou quais opções excellent pode ter. Todo o resto (nome, stats, tamanho, modelo, brilho, efeitos) sai da própria linha.

Exemplo 1: um item com as tabelas do Encoder

Se você já tem customs feitos para o DLL, as tabelas do Encoder continuam sendo usadas sem converter nada. Elas ficam em Data/Custom/Encoder/ do servidor: CustomItem.txt, CustomGlow.txt, CustomBow.txt, CustomMonster.txt, ItemPosition.txt e MapFog.txt.

A Knight Blade no índice 0,20:

// Data/Custom/Encoder/CustomItem.txt
00,020		22		"Sword21"		// Knight Blade

// Data/Custom/Encoder/CustomGlow.txt
00,020		191	165	127		// Knight Blade

Modelo no cliente: bin/Client/Data/Item/Custom/20/ (sword21.bmd e suas texturas).

Exemplo 2: um item na faixa estendida

O mesmo modelo como item adicionado, em 0,32. Tudo vai numa linha de Data/Item/Item.txt: depois das colunas de sempre se adicionam o comportamento, a pasta e o nome do modelo, e a cor do brilho em RGB.

32	0	22	1	4	1	1	0	"Crimson Knight Blade"	...	00,020	"Item\Custom\20\"	"Sword21"	255	40	40

Ele se comporta como a Knight Blade (00,020), usa o modelo Sword21 e brilha em vermelho. Copie uma linha completa da seção e ajuste os stats: o ... do exemplo representa as colunas de sempre, não se escreve assim.

Para testar com uma conta GM: /make 0 32.

Exemplo 3: um set completo

O set Great Dragon no índice 21 das seções 7 a 11 (elmo, armadura, calça, luvas e botas):

// Data/Custom/Encoder/CustomItem.txt
07,021		0		"HelmMale22"		// Great Dragon Helm
08,021		0		"ArmorMale22"		// Great Dragon Armor
09,021		0		"PantMale22"		// Great Dragon Pant
10,021		0		"GloveMale22"		// Great Dragon Glove
11,021		0		"BootMale22"		// Great Dragon Boot

Modelos no cliente: bin/Client/Data/Player/Custom/21/. As mesmas peças também podem ser definidas sem o Encoder, com as colunas de modelo no Item.txt ("Player\Custom\21\" "HelmMale22").

O equipamento custom também aparece nos outros jogadores e na seleção de personagens.

Exemplo 4: efeitos, pose e tooltip

Data/Custom/Items/<seção>_<índice>.json adiciona a um item, custom ou original, efeitos desenhados sobre os ossos do modelo, sua pose no inventário e linhas próprias no tooltip.

Asas com brilhos e partículas:

{
  "item": "12,032",
  "effects": [
    { "on": "equipped", "type": "sprite", "texture": "Effect/Flare.jpg",
      "bones": [5, 6, 7, 8, 18, 19], "color": [0.5, 0.0, 0.0], "scale": 0.6,
      "pulse": { "speed": 0.002, "scale": 0.2, "color": 0.4 } },
    { "on": "equipped", "type": "particle", "particle": 1230,
      "bones": [13, 31], "chance": 2, "color": [0.8, 0.8, 0.3], "scale": 0.5 }
  ]
}

O tooltip aceita até 6 linhas, como texto ("Zen picker") ou com cor ({ "text": "Zen picker", "color": "gold" }). Cores: white, blue, red, gold, green, darkred, purple, darkblue e darkgold.

O servidor traz dois exemplos reais: 03_000.json corrige a posição da Light Spear no seu espaço do inventário, e 13_400.json define a pose e o tooltip do Pet Rudolph.

Exemplo 5: um pet custom

O Pet Rudolph (13,400) dá voltas ao redor do jogador e recolhe o zen próximo. Ele vem incluído como exemplo e usa quatro arquivos:

Onde Arquivo O que define
Cliente bin/Client/Data/Item/Custom/Rudolph/ O modelo xmas_deer.bmd e suas texturas
Servidor Data/Item/Item.txt A linha do item: Slot 8 (helper) e comportamento *
Servidor Data/Custom/Items/13_400.json A pose no inventário e o tooltip
Servidor Data/Custom/Pets/13_400.json Como se move e o que faz
{
  "item": "13,400",
  "blendMesh": 0,
  "movement": { "type": "orbit", "radius": 50, "period": 4000, "height": 20 },
  "abilities": [ { "type": "pickup", "what": "zen", "range": 3, "interval": 1000, "delay": 1500 } ]
}

O cliente desenha o movimento; as habilidades, como recolher o zen, são executadas pelo servidor. Para testar: /make 13 400.

Exemplo 6: um monstro custom

Com a tabela do Encoder, Data/Custom/Encoder/CustomMonster.txt (índice, tipo 0 = NPC e 1 = monstro, dourado, escala, pasta e modelo):

152		1		1		2.0		"Monster\\Karane\\"		"Karane"		// Karane

Ou diretamente em Data/Monster/Monster.txt, com as mesmas colunas no fim da linha:

152	0	"Karane"	...	0	0	1	1	2.0	"Monster\Karane\"	"Karane"

Modelo no cliente: bin/Client/Data/Monster/Karane/.

Asas custom

As estatísticas das asas custom (constantes de defesa e dano) são definidas em Data/Item/CustomWing.txt do servidor. Como o resto do catálogo, quem manda é o servidor: o cliente não tem uma cópia própria.

Referência de colunas do Item.txt

Colunas opcionais no fim de cada linha (* = sem valor):

Coluna Exemplo O que faz
Comportamento 00,020 Item original que ele imita na lógica
Pasta e modelo "Item\Custom\20\" "Sword21" Modelo no inventário, no chão e no personagem
Brilho 255 40 40 Cor do brilho por nível
Pasta e modelo equipado "Item\Custom\FenrirMount\" "fenril_black" Só se o item aparece diferente equipado, como uma montaria
Gate 22 Para pergaminhos: leva sempre a esse gate

Pelo painel web

O painel admin tem editores para os itens (Item.txt) e os monstros (Monster.txt), e para as zonas custom (CustomSafeZone, CustomPkFree, CustomNpcMove). Veja Painel Admin.

Os arquivos .txt do servidor devem ser salvos em ANSI / Windows-1252 sem BOM: UTF-8 quebra os acentos no cliente.