📈 Stats Definidos

Hytale utiliza archivos JSON para definir el comportamiento base de cada estadística. Estos se encuentran en Assets/Server/Entity/Stats/.

Stat Uso Común Características
❤️ Health Vida de la entidad Llega a 0 provoca la muerte.
💧 Oxygen Respiración bajo el agua Se consume al estar "Suffocating".
⚡ Stamina Energía para acciones físicas Consumida por Sprinting o Gliding. Soporta "Overdrawn" (valores negativos).
🔮 Mana Energía mágica Normalmente regeneración constante fuera de combate.
🛡️ Immunity I-frames de daño Impide daño mientras el valor es > 0.

⚙️ Configuración (JSON)

Estructura principal de un archivo de stat (ejemplo: Oxygen.json):

{
  "InitialValue": 100,
  "Min": 0,
  "Max": 100,
  "Shared": false, // ¿Es visible para otros jugadores?
  "Regenerating": [
    {
      "Interval": 0.5,
      "Amount": -3,
      "RegenType": "Additive",
      "Conditions": [
        { "Id": "Alive" },
        { "Id": "Suffocating" }
      ]
    }
  ]
}

Atributos Clave

  • InitialValue: Valor con el que aparece la entidad.
  • Min / Max: Límites físicos del stat.
  • Shared: Si es true, el servidor envía actualizaciones de este stat a todos los clientes cercanos. Si es false, solo el dueño lo ve.

🔄 Regeneración y Consumo

La lógica de cambio automático se basa en reglas dentro del array Regenerating.

💡
RegenType
- Additive: Suma o resta una cantidad fija cada intervalo.
- Percentage: Calcula la cantidad basándose en el (Max - Min).

Condiciones Comunes

Las reglas solo se activan si todas sus Conditions se cumplen:

  • Alive: La entidad no debe estar muerta.
  • Suffocating: Activo cuando la cabeza está en materiales sin oxígeno (agua).
  • Sprinting / Gliding: Acciones de movimiento del jugador.
  • Player: Permite filtrar por GameMode (ej: Creative).
  • Stat: Compara este u otro stat (ej: "No regenerar si Stamina < 0").

✨ Efectos y Umbrales

Se pueden disparar acciones cuando un stat alcanza su valor mínimo o máximo.

"MinValueEffects": {
  "TriggerAtZero": true,
  "Interactions": {
    "Interactions": [
      "Stamina_Bar_Flash",
      {
        "Type": "ChangeStat",
        "Behaviour": "Set",
        "StatModifiers": { "StaminaRegenDelay": -0.5 }
      }
    ]
  }
}

Esto permite mecánicas complejas como el "Stamina Broken", donde al agotarse la estamina se aplican debufos inmediatos o efectos visuales en el HUD.

📁 Arquitectura Técnica (Java)

Clase Responsabilidad
EntityStatMap Contenedor de todos los stats de una entidad. Gestiona el registro de cambios (dirty tracking) para el networking.
EntityStatValue Representa una única instancia de stat con su valor actual y modificadores activos.
EntityStatsSystems.Regenerate Ticking system que evalúa las condiciones de regeneración cada frame.
EntityStatsSystems.Changes Detecta cuando un valor cruza los límites y dispara los ValueEffects correspondientes.