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.