Pular para o conteúdo

Balanceamento de Combate de NPC

Visao Geral

Arquivos do Combat Action Evaluator (CAE) configuram o sistema de IA por utilidade que conduz o combate dos NPCs. Cada arquivo define com que frequencia o avaliador executa, um conjunto de acoes disponiveis nomeadas com condicoes de pontuacao e um ou mais conjuntos de acoes que agrupam quais acoes e ataques basicos estao ativos em um determinado estado de combate. O avaliador pontua todas as acoes disponiveis a cada tick e executa a de maior pontuacao acima de um limite minimo.

Fluxo de IA de Combate

flowchart TD;
A[NPC Enters Combat] --> B[Load Action Sets];
B --> C["Active Action Set<br>e.g. Default Combat"];
C --> D["Evaluator Tick<br>every N frames"];
D --> E[Score All Available Actions];
E --> F["Action: Melee Attack<br>Conditions → Score: 0.7"];
E --> G["Action: Ranged Attack<br>Conditions → Score: 0.3"];
E --> H["Action: Shield Block<br>Conditions → Score: 0.85"];
E --> I["Action: Flee<br>Conditions → Score: 0.2"];
F --> J["Highest Score<br>Above Threshold?"];
G --> J;
H --> J;
I --> J;
J -->|"Shield Block: 0.85"| K[Execute Shield Block];
J -->|"All below threshold"| L["Use Basic Attack<br>from ActionSet"];
K --> M{Action Complete};
L --> M;
M --> D;
style A fill:darkred,color:white;
style K fill:rebeccapurple,color:white;
style L fill:steelblue,color:white;

Transicoes de Conjuntos de Acoes

flowchart LR;
A["Default Set<br>Melee + Block"] -->|"HP < 30%"| B["Enraged Set<br>Aggressive + No Block"];
A -->|"Target far away"| C["Ranged Set<br>Projectile + Retreat"];
C -->|"Target close"| A;
B -->|"Healing received"| A;
style A fill:darkgreen,color:white;
style B fill:darkred,color:white;
style C fill:steelblue,color:white;

Localizacao dos Arquivos

  • Assets/Server/NPC/Balancing/Beast/*.json — CAEs de animais e criaturas
  • Assets/Server/NPC/Balancing/Intelligent/*.json — CAEs de NPCs de faccao
  • Assets/Server/NPC/Balancing/CAE_Test_*.json — CAEs de teste e referencia

Schema

Campos de nivel superior

FieldTypeRequiredDefaultDescricao
Type"CombatActionEvaluator"SimIdentifica este arquivo como um CAE.
TargetMemoryDurationnumberNaoQuantos segundos o NPC lembra de um alvo apos perder a visao dele.
CombatActionEvaluatorobjectSimO bloco de configuracao do avaliador (veja abaixo).

Bloco CombatActionEvaluator

FieldTypeRequiredDefaultDescricao
RunConditionsarrayNaoCondicoes avaliadas antes de executar o avaliador completo. Todas devem passar para o avaliador prosseguir neste tick.
MinRunUtilitynumberNaoPontuacao minima combinada de utilidade das RunConditions necessaria para executar o avaliador.
MinActionUtilitynumberNaoPontuacao minima de utilidade que uma acao deve atingir para ser considerada para execucao.
AvailableActionsobjectSimDefinicoes de acoes nomeadas. As chaves sao IDs de acoes referenciados por ActionSets.
ActionSetsobjectSimConjuntos nomeados de acoes ativas e ataques basicos. O conjunto ativo e controlado pelo sub-estado de combate do NPC.

Entrada do array RunConditions

Cada entrada e um objeto de condicao (veja NPC Decision Making). Comumente usados:

TypeProposito
TimeSinceLastUsedLimita a frequencia com que o avaliador dispara.
RandomiserAdiciona aleatoriedade para evitar comportamento perfeitamente previsivel.

Entrada de AvailableActions

Cada chave em AvailableActions e uma acao nomeada. Campos do objeto de acao:

FieldTypeRequiredDefaultDescricao
TypestringSimTipo de acao. Veja a tabela de tipos de acao abaixo.
DescriptionstringNaoDescricao legivel da acao.
TargetstringNaoCategoria do alvo: "Hostile", "Friendly", "Self".
WeaponSlotnumberNaoIndice do slot de arma usado para esta acao.
SubStatestringNaoSub-estado de combate a ativar quando esta acao executa (mapeia para uma chave de ActionSets).
AbilitystringNaoID da habilidade a executar.
AttackDistanceRange[number, number]NaoDistancia [min, max] em blocos na qual esta acao pode ser usada.
PostExecuteDistanceRange[number, number]NaoFaixa de distancia que o NPC tenta manter apos executar.
ChargeFornumberNaoSegundos para carregar antes de executar.
WeightCoefficientnumberNao1.0Multiplicador aplicado a pontuacao final de utilidade desta acao.
InteractionVarsobjectNaoOverrides de variaveis de interacao aplicados quando esta acao dispara.
ConditionsarrayNaoCondicoes de pontuacao para esta acao especifica (veja NPC Decision Making).

Tipos de Acao

TypeDescricao
SelectBasicAttackTargetSeleciona um alvo para ataques basicos usando as condicoes para pontuar candidatos.
AbilityExecuta uma habilidade nomeada (golpe corpo a corpo, arremesso a distancia, cura, etc.).

Entrada de ActionSets

Cada chave em ActionSets e um nome de sub-estado (ex: "Default", "Ranged", "Attack"). O valor:

FieldTypeRequiredDefaultDescricao
BasicAttacksobjectNaoConfiguracao de ataque basico para este sub-estado (veja abaixo).
Actionsstring[]NaoLista de IDs de acoes de AvailableActions que sao avaliadas neste sub-estado.

Objeto BasicAttacks

FieldTypeRequiredDefaultDescricao
Attacksstring[]SimIDs de habilidades usadas como ataques basicos.
RandomisebooleanNaofalseSe true, seleciona aleatoriamente da lista Attacks a cada ciclo.
MaxRangenumberNaoAlcance maximo em blocos para ataques basicos.
TimeoutnumberNaoSegundos para aguardar o ataque acertar antes de cancelar.
CooldownRange[number, number]NaoCooldown [min, max] em segundos entre ataques basicos.
UseProjectedDistancebooleanNaofalseSe true, usa distancia projetada (prevista) em vez da distancia atual.
InteractionVarsobjectNaoOverrides de variaveis de interacao para todos os ataques basicos neste conjunto.

Exemplos

CAE simples de animal (Rat)

Um rato com um unico ataque de mordida, sem habilidades especiais:

{
"Type": "CombatActionEvaluator",
"TargetMemoryDuration": 10,
"CombatActionEvaluator": {
"RunConditions": [
{
"Type": "TimeSinceLastUsed",
"Curve": { "ResponseCurve": "Linear", "XRange": [0, 10] }
},
{
"Type": "Randomiser",
"MinValue": 0.9,
"MaxValue": 1
}
],
"MinRunUtility": 0.5,
"MinActionUtility": 0.01,
"AvailableActions": {
"SelectTarget": {
"Type": "SelectBasicAttackTarget",
"Description": "Select a target",
"Conditions": [
{
"Type": "TargetDistance",
"Curve": { "ResponseCurve": "SimpleDescendingLogistic", "XRange": [0, 15] }
}
]
}
},
"ActionSets": {
"Default": {
"BasicAttacks": {
"Attacks": ["Rat_Bite"],
"Randomise": false,
"MaxRange": 2,
"Timeout": 0.5,
"CooldownRange": [0.001, 0.001]
},
"Actions": ["SelectTarget"]
}
}
}
}

CAE de NPC inteligente (Goblin Scrapper) — multiplos conjuntos de acoes

Um goblin que alterna entre sub-estados corpo a corpo e a distancia:

{
"Type": "CombatActionEvaluator",
"TargetMemoryDuration": 5,
"CombatActionEvaluator": {
"RunConditions": [
{
"Type": "TimeSinceLastUsed",
"Curve": { "ResponseCurve": "Linear", "XRange": [0, 5] }
},
{ "Type": "Randomiser", "MinValue": 0.9, "MaxValue": 1 }
],
"MinRunUtility": 0.5,
"MinActionUtility": 0.01,
"AvailableActions": {
"Melee": {
"Type": "Ability",
"Description": "Quick melee swing",
"WeaponSlot": 0,
"SubState": "Default",
"Ability": "Goblin_Scrapper_Attack",
"Target": "Hostile",
"AttackDistanceRange": [2.5, 2.5],
"PostExecuteDistanceRange": [2.5, 2.5],
"Conditions": [
{
"Type": "TimeSinceLastUsed",
"Curve": { "ResponseCurve": "Linear", "XRange": [0, 1] }
}
]
},
"Ranged": {
"Type": "Ability",
"Description": "Throw rubble from range",
"WeaponSlot": 0,
"SubState": "Ranged",
"Ability": "Goblin_Scrapper_Rubble_Throw",
"Target": "Hostile",
"AttackDistanceRange": [15, 15],
"PostExecuteDistanceRange": [2.5, 2.5],
"Conditions": [
{
"Type": "TimeSinceLastUsed",
"Curve": { "ResponseCurve": "Linear", "XRange": [0, 2] }
},
{
"Type": "TargetDistance",
"Curve": { "ResponseCurve": "SimpleLogistic", "XRange": [0, 15] }
}
]
}
},
"ActionSets": {
"Default": {
"BasicAttacks": {
"Attacks": ["Goblin_Scrapper_Attack"],
"Randomise": false,
"MaxRange": 2.5,
"Timeout": 0.5,
"CooldownRange": [0.001, 0.001]
},
"Actions": ["SwingDown", "Ranged"]
},
"Ranged": {
"BasicAttacks": {
"Attacks": ["Goblin_Scrapper_Rubble_Throw"],
"Randomise": false,
"MaxRange": 15,
"Timeout": 0.5,
"CooldownRange": [0.8, 2]
},
"Actions": ["Melee"]
}
}
}
}

Paginas Relacionadas

  • NPC Decision Making — Tipos de condicao usados em RunConditions e AvailableActions[*].Conditions
  • NPC Roles — Arquivos de role que referenciam CAEs pelo campo _CombatConfig em Modify
  • NPC Templates — Templates que conectam o avaliador de combate pela arvore Instructions