I like the utility change based on percent health, but I think these values (20, 30, 40) are too high. The only possibilities for utility return here are 0, 20, 30, 40, 50, and 70 and the increases are quite large. 

Your checks are as follows:
nEnemyCreeps + nEnemyHeroes < abilMoonFinale:GetLevel() + 1 => +30
nEnemyCreeps == 0 => +40
nEnemyCreeps < nEnemyHeroes => +20

All of those checks are good checks, but might I recommend trying out something like the following configuration
```	local nUtilityValue = 25
	local nUtilityPerLevel = 15

	nUtilityValue = nUtilityValue + skills.abilMoonFinale:GetLevel() * nUtilityPerLevel 

	local nDropPerHero = 5 + nEnemyHeroes
	nUtilityValue = nUtilityValue - (nEnemyHeroes - 1) * nDropPerHero 

	local nDropPerCreep = 5
	if nEnemyCreeps >= nEnemyHeroes then
		nDropPerCreep = 8
	end

	nUtilityValue = nUtilityValue - nEnemyCreeps * nDropPerCreep 
	return nUtilityValue * core.unitSelf:GetHealthPercent()
```

This function, for the following input values, returns the following output utility:
Level 1 Ultimate, 1 Enemy Hero, No Creeps: 40 Utility
Level 1 Ultimate, 2 Enemy Heroes, 1 Creep: 28 Utility
Level 1 Ultimate, 1 Enemy Hero, 2 Creeps: 24 Utility
Level 2 Ultimate, 1 Enemy Hero, No Creeps: 55 Utility
Level 2 Ultimate, 2 Enemy Heroes, 2 Creeps: 32 Utility
Level 2 Ultimate, 3 Enemy Heroes, No Creeps: 39 Utility
Level 3 Ultimate, 1 Enemy Hero, No Creeps: 70 Utility
Level 3 Ultimate, 2 Enemy Hero, 2 Creeps: 47 Utility
Level 3 Ultimate, 4 Enemy Heroes, 2 Creeps: 33 Utility

This system provides a max utility for perfect situations, and detracts based on number of enemy heroes and/or creeps, rather than assuming a horrid situation and adding bonus utility for scenarios. I think these numbers would probably be much more representative of good MQ ults.

I leave it to you as to whether you want to use my provided utility determination, or simply lower some of your values (by a small amount), but I would like some kind of change.