public void OnValidate() { if (abilities == null) { return; } baseStats.RoundAndClamp(); float totalChance = 0f; int nonNullCount = 0; for (int i = 0; i < abilities.Length; i++) { var slot = abilities[i]; if (slot.ability == null) { slot.name = "{empty}"; } else { slot.name = slot.ability.name; nonNullCount++; } slot.chanceToUse = Mathf.Clamp01(slot.chanceToUse); abilities[i] = slot; totalChance += slot.chanceToUse; } if (!Mathf.Approximately(totalChance, 1f)) { if (totalChance == 0f) { if (nonNullCount == 0) { Debug.LogError($"Monster species {name} has no valid abilities set."); } else { for (int i = 0; i < abilities.Length; i++) { var slot = abilities[i]; slot.chanceToUse = slot.ability == null ? 0f : 1f / nonNullCount; abilities[i] = slot; } } } else { for (int i = 0; i < abilities.Length; i++) { var slot = abilities[i]; slot.chanceToUse = slot.chanceToUse / totalChance; abilities[i] = slot; } } } }