Raças personalizadas
As raças personalizadas são raças jogáveis que você adiciona ao DragonMineZ apenas com arquivos de configuração. Não é preciso código Java nem um jar de addon: uma pasta com alguns arquivos JSON define a aparência da raça, suas classes, sua habilidade racial e suas transformações, e a raça passa a aparecer na criação de personagem.
Como o DragonMineZ encontra as raças
O DragonMineZ carrega primeiro suas raças embutidas (human, saiyan, namekian, frostdemon, bioandroid, majin, glind) e depois examina as subpastas de config/dragonminez/races/. Qualquer outro nome de pasta ali é tratado como a chave de uma raça personalizada (use minúsculas). Cada pasta de raça contém:
config/dragonminez/races/<race_key>/
character.json # appearance, model, racial skill, form skill prices
stats.json # per-class base stats and scaling
forms/*.json # the race's transformation groups
Se você criar uma pasta vazia, o DragonMineZ gera um character.json e um stats.json com valores neutros na próxima vez que a configuração for carregada. Ele não gera nenhuma forma para uma raça personalizada: você mesmo as adiciona (veja o passo 3).
Um bom ponto de partida é copiar a pasta de uma raça existente (por exemplo, races/saiyan/), renomeá-la e ajustar os valores dentro dela.
Código-fonte: src/main/java/com/dragonminez/common/config/ConfigManager.java (loadAllRaces, createOrLoadRace).
"configVersion" (atualmente "2.2.0"). Um arquivo personalizado com uma versão anterior ou sem versão ganha um backup em config/dragonminez/oldBackup/ e é salvo de novo com a versão atual; seus valores são mantidos. Um arquivo com sintaxe JSON quebrada nunca é sobrescrito: ele é relatado e ignorado até você corrigi-lo. Veja Como usar JSON e Recarregar e atualizar mudanças.
Passo 1: configure o personagem
character.json define a aparência, o modelo, a habilidade racial e os preços das habilidades de forma da raça:
{
"configVersion": "2.2.0",
"hasGender": false,
"useVanillaSkin": false,
"customModel": "saibaman",
"isLayered": true,
"headBones": ["ears1"],
"racialSkill": "namekian",
"hasSaiyanTail": false,
"auraType": "kakarot",
"auraType3D": "userPreference",
"defaultModelScaling": [0.9375, 0.9375, 0.9375],
"defaultBodyType": 0,
"slimBodyTypes": [],
"defaultHairType": 0,
"defaultEyesType": 0,
"defaultNoseType": 0,
"defaultMouthType": 0,
"defaultTattooType": 0,
"defaultBodyColor": "#3E8E2E",
"defaultBodyColor2": "#2A5C20",
"defaultBodyColor3": "#9BD36A",
"defaultHairColor": "#222629",
"defaultEye1Color": "#B40000",
"defaultEye2Color": "#B40000",
"defaultAuraColor": "#7FFF00",
"formSkillsCosts": {
"superforms": { "buyFromMaster": false, "prices": [20000, 45000, 80000] },
"godforms": { "buyFromMaster": false, "prices": [] },
"legendaryforms": { "buyFromMaster": false, "prices": [] }
}
}
| Campo | Tipo | O que faz |
|---|---|---|
hasGender |
Booleano | true dá à raça a escolha entre masculino/feminino. Modelos e texturas personalizados passam a usar os sufixos _male / _female (veja Modelos e recursos próprios).
|
useVanillaSkin |
Booleano | Com true, o tipo corporal 0 mostra a própria skin de Minecraft do jogador; as texturas de corpo da raça começam no tipo corporal 1.
|
customModel |
Texto | Chave do modelo. Vazia significa que a raça tem a aparência de um Humano. Uma chave embutida (por exemplo, namekian, majin ou frostdemon) reutiliza esse modelo e suas texturas; qualquer outra chave carrega seu próprio modelo. As chaves embutidas estão listadas em Modelos e recursos próprios.
|
isLayered |
Booleano | true: o corpo é desenhado com três camadas de textura tingíveis (cores de corpo 1, 2 e 3) e a raça usa suas próprias texturas de rosto. false: uma única textura de corpo simples e rostos emprestados do Humano.
|
headBones |
Lista de textos | Nomes de ossos que o jogador pode escolher na personalização do personagem (um por vez, mais uma opção "nenhum"), por exemplo orelhas, chifres ou antenas. Junte ossos com + para mostrar vários ao mesmo tempo ("ears1+horns2"). A entrada especial "hair" ativa o editor de cabelo para a raça. Os ossos são procurados primeiro em geo/entity/raceparts.geo.json e depois no modelo da raça.
|
racialSkill |
Texto | Qual habilidade racial a raça usa: human, saiyan, namekian, frostdemon, bioandroid, majin ou glind. Uma raça personalizada usa o mesmo ajuste da raça de onde a pega emprestada (general-server.json → racialSkills.<skill>). Veja Habilidades raciais.
|
hasSaiyanTail |
Booleano | Dá à raça uma cauda Saiyajin. |
auraType |
Texto | Conjunto de sprites da aura 2D: kakarot ou god.
|
auraType3D |
Texto | Estilo da aura 3D da forma base: smooth, sparking, god ou userPreference (segue a configuração de cada jogador).
|
aura3DStyle |
Objeto | Ajuste fino do formato da aura 3D base. As chaves estão listadas em Formas personalizadas. |
defaultModelScaling |
[x, y, z] |
Tamanho base do modelo. |
defaultBodyType |
Inteiro | Tipo corporal selecionado por padrão na criação de personagem. |
slimBodyTypes |
Lista de inteiros | Tipos corporais (além do 0) que usam braços finos. O tipo corporal 0 sempre segue o modelo de skin do jogador.
|
defaultHairType, defaultEyesType, defaultNoseType, defaultMouthType, defaultTattooType |
Inteiro | Índices de personalização padrão. |
defaultBodyColor, defaultBodyColor2, defaultBodyColor3, defaultHairColor, defaultEye1Color, defaultEye2Color, defaultAuraColor |
Texto hexadecimal | Cores padrão na criação de personagem. |
formSkillsCosts |
Objeto | Uma entrada para cada habilidade de forma que a raça pode evoluir (veja abaixo). |
Origem do esquema: src/main/java/com/dragonminez/common/config/RaceCharacterConfig.java.
humansaiyan body shading textures were renamed from bodytype_*_layer2.png to bodytype_*_layer1_shadow.png (in textures/entity/races/humansaiyan/). A resource pack that replaced the old files must rename them.
Preços das habilidades de forma
Cada chave de formSkillsCosts é uma habilidade de forma: superforms, legendaryforms, godforms ou androidforms. O valor é um array simples de preços ou um objeto com estes campos:
| Campo | Tipo | O que faz |
|---|---|---|
prices |
Lista de números | Preço em TP de cada nível, em ordem. O número de entradas é o nível máximo da habilidade, então uma lista vazia significa que a raça não pode evoluir essa habilidade. |
buyFromMaster |
Booleano | true: o primeiro nível precisa ser comprado de um mestre antes que a habilidade possa ser evoluída pelo menu de Habilidades.
|
Uma forma é desbloqueada quando esta habilidade atinge o unlockOnSkillLevel da forma (veja o passo 3).
Upgrade androide para raças personalizadas
O upgrade androide do Dr. Gero é oferecido a qualquer raça cujo formSkillsCosts tenha pelo menos um preço em androidforms (por padrão, apenas os Humanos). O upgrade coloca o jogador na forma androidbase do grupo androidforms, então a raça também precisa de um grupo de formas androidforms na pasta forms/. O jeito mais fácil é copiar races/human/forms/androidforms.json para a pasta forms/ da sua raça. Veja Android para o upgrade em si.
Passo 2: configure as classes
stats.json contém um objeto classes com um bloco por classe. O DragonMineZ gera as oito classes padrão: warrior, spiritualist, martialartist, berserker, paladin, tank, cleric e unversed (veja Classes). Você pode adicionar sua própria classe duplicando um bloco com uma chave nova; ela aparece na criação de personagem dessa raça. Um jogador cuja classe não está no arquivo da raça usa os valores de warrior.
Dentro de cada bloco de classe:
| Campo | Tipo | O que faz |
|---|---|---|
baseStats |
Objeto | Estatísticas iniciais: STR, SKP, RES, VIT, PWR, ENE.
|
statScaling |
Objeto | STR_scaling, SKP_scaling, STM_scaling, DEF_scaling, VIT_scaling, PWR_scaling, ENE_scaling. Os opcionais VIT_scaling_max e DEF_scaling_max fazem o escalonamento crescer do valor normal até esse máximo conforme a estatística sobe (até o ponto de inflexão da curva definido no general-server.json); omita-os para um escalonamento fixo.
|
baseHp5, hp5VitScaling |
Número | Vida regenerada a cada 5 segundos, mais uma parte da VIT. |
baseEp5, ep5EneScaling |
Número | Ki regenerado a cada 5 segundos, mais uma parte da ENE. |
baseSp5, sp5StmScaling, sp5ResScaling |
Número | Estâmina regenerada a cada 5 segundos, mais uma parte da VIT (sp5StmScaling, apesar do nome) e uma parte da RES (sp5ResScaling, 0 quando ausente).
|
tpCostMultiplier, tpGainMultiplier |
Número | Multiplicadores da classe inteira sobre os custos e os ganhos de TP. |
passive |
Objeto | enabled mais um mapa values com o ajuste da passiva da classe (as chaves dependem da classe).
|
Origem do esquema: src/main/java/com/dragonminez/common/config/RaceStatsConfig.java. Veja Estatísticas e atributos para saber o que cada estatística faz.
Passo 3: adicione grupos de formas
Cada arquivo em races/<race_key>/forms/ define um grupo de formas. As formas de raça usam exatamente o mesmo esquema das formas acumuláveis, então a referência completa dos campos está em Formas personalizadas. Os campos mais importantes para um grupo de raça são:
groupName: a chave do grupo (em minúsculas). Os grupos são identificados por este valor, não pelo nome do arquivo.formType: a habilidade de forma que desbloqueia o grupo:superforms,legendaryforms,godformsouandroidforms. A raça precisa de preços para essa habilidade emformSkillsCosts.forms: as formas do grupo, em ordem de transformação. OunlockOnSkillLevelde cada forma é o nível de habilidade que a desbloqueia.customModel: uma chave de modelo para a forma (procurada do mesmo jeito que ocustomModelda raça).
Arquivos cujo nome começa com old_ são ignorados. Veja Transformações para saber como as formas funcionam no jogo.
Passo 4: adicione chaves de tradução
Os nomes de raças e formas são traduzidos com estas chaves:
race.dragonminez.<race_key>: o nome da raça.race.dragonminez.<race_key>.desc: uma descrição curta mostrada na criação de personagem.race.dragonminez.<race_key>.group.<group_key>: o nome de um grupo de formas.race.dragonminez.<race_key>.form.<group_key>.<form_key>: o nome de uma forma.
O arquivo de idioma padrão é src/main/resources/assets/dragonminez/lang/en_us.json. Fique à vontade para editar seu en_us.json ou criar um novo arquivo de idioma para sua raça personalizada. Você não precisa adicionar chaves de tradução para mais nada: o DragonMineZ combina automaticamente as traduções já feitas no Crowdin com as suas.
Passo 5: recarregue e valide
- Salve seus arquivos JSON.
- Execute
/dmzreload config(veja Recarregar e atualizar mudanças). - Abra a criação de personagem e confira se sua raça aparece.
- Verifique as formas, as cores e o escalonamento no jogo.