Recursos do personagem entre encontros
Disponível a partir da engine version 21. O recurso continua genérico: seu nome não define dano, derrota, regeneração ou tempo de vida.
A definição de run informa playerDefinitionId. Seus componentes stats e resources materializam RunState.PlayerEntity. RunState.ResourceState é outra autoridade: a carteira da run. Mesmo que ambas contenham um recurso com o mesmo ID, seus valores não se misturam.
Participantes de encontro podem declarar identityBinding: RunPlayer; a engine resolve instanceId para run.PlayerEntityId antes de materializar o ator, inclusive quando o jogador possui ID personalizado. Literal mantém a identidade declarada. IDs/aliases duplicados ou colisões após o binding são rejeitados; overrides de recursos usam o mesmo remapeamento. O vínculo é explícito e não inferido do controller.
O modo pode referenciar actorResourceLifecyclePolicyId. A definição fica no catálogo actor-resource-lifecycle-policies e é exposta pelos endpoints genéricos de conteúdo. A política resolvida acompanha o snapshot da run e sua revisão.
{
"world_one_actor_resources": {
"actorResourceLifecyclePolicyId": "world_one_actor_resources",
"rules": [
{
"resourceId": "health",
"entry": "PreserveCurrent",
"victory": "PreserveCurrent",
"defeat": "PreserveCurrent",
"draw": "PreserveCurrent",
"abandoned": "PreserveCurrent",
"retry": "EncounterOnly",
"missingResource": "Error"
},
{
"resourceId": "energy",
"entry": "ResetToMaximum",
"victory": "EncounterOnly",
"defeat": "EncounterOnly",
"draw": "EncounterOnly",
"abandoned": "EncounterOnly",
"retry": "EncounterOnly",
"missingResource": "Error"
}
]
}
}
Semântica
PreserveCurrent: copia o valor atual da origem para o destino.ResetToMaximum: restaura o máximo persistente, não o máximo alterado por buffs de combate.ResetToConfiguredValue: usaconfiguredValue, finito, limitado pela definição do recurso e seus bounds persistentes.EncounterOnly: não importa nem exporta esse recurso naquela fronteira; a fábrica inicializa o encontro e seu resultado não modifica a base persistente.- Recursos não listados não são transportados. Sem política, os encontros continuam independentes.
- Todas as ações de entrada, resultado e retry são obrigatórias. Recursos ausentes geram erro salvo
missingResource: Ignore. Não existe fallback implícito para vida/energia. - Apenas
Currenté transportado.Minimum,Maximume definição seguem a base persistente. Overflow/valores negativos obedecem à definição do recurso; não há promoção de buff temporário.
Dentro do encontro, o ator é a autoridade. A resolução promove o resultado e fecha o encontro na mesma transação, antes dos efeitos de saída. Falhar no último efeito de saída preserva o encontro ainda não resolvido e a base anterior. Comandos duplicados retornam o receipt, sem segunda promoção.
Recuperação fora do combate
Cada conjunto de efeitos de atividade escolhe um proprietário. A escolha é independente de SELF/TARGET, que continua sendo interpretado pelo processador universal:
- Nós do mapa:
entryEffectOwnereexitEffectOwner. - Opções de preparação:
effectOwner. - Diálogo:
entryEffectOwnerno nó,effectOwnerna escolha. - Valores aceitos:
RunWallet(carteira) ouPlayerEntity(personagem persistente).
PlayerEntity exige um componente de recursos persistentes e nenhum encontro ativo. Não existe endpoint normal de sobrescrita desses valores. O conjunto tem um proprietário único; para pagar carteira e recuperar personagem use costs da opção e effectOwner: PlayerEntity. O custo e todos os efeitos entram no mesmo candidato e commit.
{
"optionId": "recover",
"costs": [{ "resourceId": "gold", "amount": 20 }],
"effectOwner": "PlayerEntity",
"effects": [{
"effectId": "recover.health",
"type": "HEAL",
"target": "SELF",
"targetResource": "health",
"parameters": [{
"parameter": "Amount",
"flatValue": 20,
"unitId": "points",
"channel": "recovery",
"pipelineId": "recovery"
}]
}]
}
A pipeline recovery deve existir e estar habilitada no modo. Cura, modificadores e bounds continuam usando os mesmos cálculos/processador de recursos; não há fórmula paralela em Godot ou no handler de preparação. O mesmo ID pode aparecer nas duas carteiras sem ambiguidade de proprietário.
As consequências de derrota declaradas no próprio recurso também são avaliadas no commit fora do encontro e tornam a run Failed, sem depender do nome do recurso. Durante um encontro, o baseline persistente não é reavaliado como cópia da vida do ator.
Saves e conteúdo
Novos estados incluem o componente de recursos do personagem. Saves com versão anterior são preservados em disco, mas não executados por um runtime de semântica diferente. A engine reporta a versão indisponível; não migra nem apaga saves automaticamente.
Hotreload preserva os valores e os limites de runtime, atualiza as definições e valida schema/proprietário. Trocar IDs de componente ou recursos é incompatível. A carta e a carteira não ganham cópias alternativas desses valores.