Pular para o conteúdo

Heranca e Templates

Visao Geral

O sistema de configuracao do Hytale usa um modelo de heranca por templates. Em vez de definir todos os campos para cada entidade, voce cria templates base com propriedades compartilhadas e depois os estende com overrides especificos. Esse padrao aparece em roles de NPCs, itens, configs de gameplay e tipos de dano.

Como a Heranca Funciona

flowchart TD;
A["Base Template<br>Template_Beasts_Passive"] --> B[Chicken Role];
A --> C[Rabbit Role];
A --> D[Sheep Role];
B -->|"Reference + Modify"| E["Chicken<br>HP: 15, Speed: 1.2<br>Drops: Feathers"];
C -->|"Reference + Modify"| F["Rabbit<br>HP: 10, Speed: 2.0<br>Drops: Rabbit Hide"];
D -->|"Reference + Modify"| G["Sheep<br>HP: 20, Speed: 1.0<br>Drops: Wool"];
H[Shared from Template] --> I[AI: Passive Wander];
H --> J[Flee when attacked];
H --> K[Sensing range: 10];
H --> L[Sound reactions];
style A fill:rebeccapurple,color:white;
style E fill:darkgreen,color:white;
style F fill:darkgreen,color:white;
style G fill:darkgreen,color:white;
style H fill:steelblue,color:white;

Ordem de Resolucao

flowchart LR;
A["Role File<br>Chicken.json"] -->|"1. Read Reference"| B["Template File<br>Template_Beasts_Passive"];
B -->|"2. Load Base"| C["Full Template<br>All fields defined"];
C -->|"3. Apply Modify"| D["Override<br>Appearance, Stats,<br>Drops, Speed"];
D -->|"4. Result"| E["Final NPC Definition<br>Template + Overrides"];
style A fill:darkgoldenrod,color:white;
style E fill:darkgreen,color:white;

Mecanismos de Heranca

Reference + Modify (NPC Roles)

O padrao mais comum para NPCs. O campo Reference aponta para um template, e Modify sobrescreve campos especificos:

{
"Reference": "Template_Beasts_Passive_Critter",
"Modify": {
"Appearance": "Chicken",
"MaxHealth": 10,
"MaxSpeed": 3.0,
"DropList": "Drop_Chicken",
"NameTranslationKey": "server.npc.chicken.name"
}
}

O NPC resultante herda todas as propriedades de Template_Beasts_Passive_Critter (comportamento de IA, alcance de visao, audicao, padroes de bando, etc.) e sobrescreve apenas os cinco campos listados em Modify.

Parent (Itens, Configs)

Itens e configs de gameplay usam um campo Parent para heranca de nivel unico:

{
"Parent": "Template_Food",
"TranslationProperties": {
"Name": "server.items.food_bread.name",
"Description": "server.items.food_bread.description"
},
"Quality": "Uncommon",
"Recipe": {
"Input": [{ "ItemId": "Ingredient_Dough", "Quantity": 1 }],
"Output": [{ "ItemId": "Food_Bread", "Quantity": 1 }],
"BenchRequirement": { "Type": "Processing", "Id": "Cookingbench" },
"TimeSeconds": 8
}
}

Inherits (Tipos de Dano)

Tipos de dano usam Inherits para hierarquias de classificacao:

{
"Inherits": "Physical"
}

Isso cria uma cadeia: Bludgeoning herda de Physical, que herda do tipo base Damage.

Variant Type

Alguns arquivos de NPC usam "Type": "Variant" para definir multiplas variacoes da mesma entidade base:

{
"Type": "Variant",
"Reference": "Template_Livestock_Cow",
"Modify": {
"Appearance": "Cow_Brown"
}
}

Parameters e Compute

Templates podem definir parametros com valores padrao, que entidades concretas podem sobrescrever:

{
"Parameters": {
"BaseHealth": {
"Value": 100,
"Description": "Base health for this NPC tier"
},
"SpeedMultiplier": {
"Value": 1.0,
"Description": "Movement speed modifier"
}
},
"MaxHealth": { "Compute": "BaseHealth" },
"MaxSpeed": { "Compute": "4.0 * SpeedMultiplier" }
}

Uma entidade filha sobrescreve parametros para alterar valores computados sem redefinir as formulas.

Hierarquia de Templates

Os templates sao tipicamente organizados em diretorios _Core/Templates/:

Server/NPC/Roles/
├── _Core/
│ └── Templates/
│ ├── Template_Beasts_Passive_Critter.json
│ ├── Template_Beasts_Hostile.json
│ ├── Template_Livestock_Cow.json
│ └── Template_Intelligent_Villager.json
├── Critter/
│ ├── Chicken.json (References Template_Beasts_Passive_Critter)
│ └── Rabbit.json (References Template_Beasts_Passive_Critter)
└── Beast/
├── Bear_Grizzly.json (References Template_Beasts_Hostile)
└── Wolf.json (References Template_Beasts_Hostile)

Boas Praticas

  • Sempre referencie um template ao criar novas entidades — nao defina todos os campos do zero
  • Sobrescreva apenas o que e diferente — mantenha os blocos Modify pequenos
  • Use Parameters para ajustes — facilita o balanceamento sem mexer nas formulas
  • Verifique o template primeiro — leia o arquivo do template para entender quais padroes voce herda

Paginas Relacionadas